mirror of
https://github.com/anasty17/mirror-leech-telegram-bot.git
synced 2025-01-05 10:36:52 +08:00
6fe2510dca
- To upload with bot and user session with respect to file size - Handle object expire while sending media group for parts Signed-off-by: anasty17 <e.anastayyar@gmail.com>
105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
from __future__ import print_function
|
|
|
|
import argparse
|
|
import glob
|
|
import googleapiclient.discovery
|
|
import json
|
|
import os
|
|
import pickle
|
|
import progress.bar
|
|
import sys
|
|
import time
|
|
from google.auth.transport.requests import Request
|
|
from google_auth_oauthlib.flow import InstalledAppFlow
|
|
|
|
stt = time.time()
|
|
|
|
parse = argparse.ArgumentParser(
|
|
description="A tool to add service accounts to a shared drive from a folder containing credential files."
|
|
)
|
|
parse.add_argument(
|
|
"--path",
|
|
"-p",
|
|
default="accounts",
|
|
help="Specify an alternative path to the service accounts folder.",
|
|
)
|
|
parse.add_argument(
|
|
"--credentials",
|
|
"-c",
|
|
default="./credentials.json",
|
|
help="Specify the relative path for the credentials file.",
|
|
)
|
|
parse.add_argument(
|
|
"--yes", "-y", default=False, action="store_true", help="Skips the sanity prompt."
|
|
)
|
|
parsereq = parse.add_argument_group("required arguments")
|
|
parsereq.add_argument(
|
|
"--drive-id", "-d", help="The ID of the Shared Drive.", required=True
|
|
)
|
|
|
|
args = parse.parse_args()
|
|
acc_dir = args.path
|
|
did = args.drive_id
|
|
credentials = glob.glob(args.credentials)
|
|
|
|
try:
|
|
open(credentials[0], "r")
|
|
print(">> Found credentials.")
|
|
except IndexError:
|
|
print(">> No credentials found.")
|
|
sys.exit(0)
|
|
|
|
if not args.yes:
|
|
# input('Make sure the following client id is added to the shared drive as Manager:\n' + json.loads((open(
|
|
# credentials[0],'r').read()))['installed']['client_id'])
|
|
input(
|
|
">> Make sure the **Google account** that has generated credentials.json\n is added into your Team Drive "
|
|
"(shared drive) as Manager\n>> (Press any key to continue)"
|
|
)
|
|
|
|
creds = None
|
|
if os.path.exists("token_sa.pickle"):
|
|
with open("token_sa.pickle", "rb") as token:
|
|
creds = pickle.load(token)
|
|
# If there are no (valid) credentials available, let the user log in.
|
|
if not creds or not creds.valid:
|
|
if creds and creds.expired and creds.refresh_token:
|
|
creds.refresh(Request())
|
|
else:
|
|
flow = InstalledAppFlow.from_client_secrets_file(
|
|
credentials[0],
|
|
scopes=[
|
|
"https://www.googleapis.com/auth/admin.directory.group",
|
|
"https://www.googleapis.com/auth/admin.directory.group.member",
|
|
],
|
|
)
|
|
# creds = flow.run_local_server(port=0)
|
|
creds = flow.run_console()
|
|
# Save the credentials for the next run
|
|
with open("token_sa.pickle", "wb") as token:
|
|
pickle.dump(creds, token)
|
|
|
|
drive = googleapiclient.discovery.build("drive", "v3", credentials=creds)
|
|
batch = drive.new_batch_http_request()
|
|
|
|
aa = glob.glob(f"{acc_dir}/*.json")
|
|
pbar = progress.bar.Bar("Readying accounts", max=len(aa))
|
|
for i in aa:
|
|
ce = json.loads(open(i, "r").read())["client_email"]
|
|
batch.add(
|
|
drive.permissions().create(
|
|
fileId=did,
|
|
supportsAllDrives=True,
|
|
body={"role": "organizer", "type": "user", "emailAddress": ce},
|
|
)
|
|
)
|
|
pbar.next()
|
|
pbar.finish()
|
|
print("Adding...")
|
|
batch.execute()
|
|
|
|
print("Complete.")
|
|
hours, rem = divmod((time.time() - stt), 3600)
|
|
minutes, sec = divmod(rem, 60)
|
|
print("Elapsed Time:\n{:0>2}:{:0>2}:{:05.2f}".format(int(hours), int(minutes), sec))
|