Spaces:
Sleeping
Sleeping
import base64 | |
import datetime | |
import json | |
import urllib | |
import flask | |
import requests | |
import src.functions.config | |
redirectdownloadBP = flask.Blueprint("redirectdownload", __name__) | |
async def redirectdownloadFunction(name): | |
id = flask.request.args.get("id") | |
itag = flask.request.args.get("itag") | |
config = src.functions.config.readConfig() | |
if config.get("kill_switch") == True: | |
return | |
if ( | |
datetime.datetime.strptime( | |
config.get("token_expiry", datetime.datetime.utcnow()), | |
"%Y-%m-%d %H:%M:%S.%f", | |
) | |
<= datetime.datetime.utcnow() | |
): | |
config, drive = src.functions.credentials.refreshCredentials(config) | |
with open("config.json", "w+") as w: | |
json.dump(obj=config, fp=w, sort_keys=True, indent=4) | |
tmp_metadata = src.functions.metadata.jsonExtract( | |
src.functions.metadata.readMetadata(config), "id", id, False | |
) | |
if tmp_metadata: | |
name = tmp_metadata.get("name", name) | |
args = "?" | |
for arg in flask.request.args: | |
args += "%s=%s&" % ( | |
arg, | |
urllib.parse.quote(flask.request.args.get(arg, "").encode("utf-8")), | |
) | |
session = { | |
"access_token": config.get("access_token"), | |
"client_id": config.get("client_id"), | |
"client_secret": config.get("client_secret"), | |
"refresh_token": config.get("refresh_token"), | |
"token_expiry": config.get("token_expiry"), | |
} | |
session["url"] = "https://www.googleapis.com/drive/v3/files/%s?alt=media" % (id) | |
if itag and itag != "" and config.get("transcoded") == True: | |
req = requests.get( | |
"https://drive.google.com/get_video_info?docid=%s" % (id), | |
headers={"Authorization": "Bearer %s" % (config.get("access_token"))}, | |
) | |
parsed = urllib.parse.parse_qs(urllib.parse.unquote(req.text)) | |
if parsed.get("status") == ["ok"]: | |
for stream in parsed["url"]: | |
if ("itag=%s" % (itag)) in stream: | |
url = stream | |
break | |
cookie_string = "; ".join( | |
[str(x) + "=" + str(y) for x, y in req.cookies.items()] | |
) | |
session["cookie"] = cookie_string | |
session["transcoded"] = config.get("transcoded") | |
session["url"] = url | |
sessionB64 = base64.b64encode(json.dumps(session).encode("ascii")).decode("ascii") | |
if config.get("cloudflare") not in ["local", "", None]: | |
return flask.redirect( | |
config.get("cloudflare") | |
+ "/api/v1/download/%s%ssession=%s&" % (name, args, sessionB64), | |
code=302, | |
) | |
elif config.get("cloudflare") == "local": | |
return flask.redirect( | |
"http://localhost:31146/api/v1/download/%s%ssession=%s&" | |
% (name, args, sessionB64), | |
code=302, | |
) | |
else: | |
return flask.redirect( | |
"/api/v1/download/%s%ssession=%s&" | |
% (urllib.parse.quote(name.encode("utf-8")), args, sessionB64), | |
code=302, | |
) | |