| from oauth2client import client |
| import base64 |
| import datetime |
| import json |
|
|
| import flask |
| from flask import request, Response |
| import requests |
| from pydrive.auth import GoogleAuth |
| from pydrive.drive import GoogleDrive |
| import src.functions.config |
|
|
| downloadBP = flask.Blueprint("download", __name__) |
|
|
|
|
| def save_response_content(response, destination): |
| CHUNK_SIZE = 32768 |
|
|
| with open(destination, "wb") as f: |
| for chunk in response.iter_content(CHUNK_SIZE): |
| if chunk: |
| f.write(chunk) |
|
|
|
|
| @downloadBP.route("/api/v1/download/<name>") |
| async def downloadFunction(name): |
| a = flask.request.args.get("a") |
| config = src.functions.config.readConfig() |
|
|
| gauth = GoogleAuth() |
| content = '{"access_token": "ya29.a0AXooCgtLK5HzYMtRs4R9J7FRZSGR3i5jUkeMeVhGjorlrgq_BupFi8d9upA2skYC5FofxUqo23Nivk_P_Hy8eRn0DWM3deSKoiWMhA3lsy05JVakD0vd2fPRaFOXfRV20jAEGt6ql9yy_0up3Y9z8u9yXZ28IUxRRZAHaCgYKASQSARISFQHGX2MipVyGD4fFFZJWXGvyd-sJnQ0171", "client_id": "895306463817-h14aujg3ohgptue5safg2d81530qs4c3.apps.googleusercontent.com", "client_secret": "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", "refresh_token": "1//0gsu0CorccmScCgYIARAAGBASNwF-L9IrF-TDYDXR_MTQGAGGf4fY4BBBSBUipsz_7c0B6HjmRYZV3uxPVU4CAJjqWoWBm0T4pxA", "token_expiry": "2024-05-25T11:14:56Z", "token_uri": "https://oauth2.googleapis.com/token", "user_agent": null, "revoke_uri": "https://oauth2.googleapis.com/revoke", "id_token": null, "id_token_jwt": null, "token_response": {"access_token": "ya29.a0AXooCgtLK5HzYMtRs4R9J7FRZSGR3i5jUkeMeVhGjorlrgq_BupFi8d9upA2skYC5FofxUqo23Nivk_P_Hy8eRn0DWM3deSKoiWMhA3lsy05JVakD0vd2fPRaFOXfRV20jAEGt6ql9yy_0up3Y9z8u9yXZ28IUxRRZAHaCgYKASQSARISFQHGX2MipVyGD4fFFZJWXGvyd-sJnQ0171", "expires_in": 3599, "refresh_token": "1//0gsu0CorccmScCgYIARAAGBASNwF-L9IrF-TDYDXR_MTQGAGGf4fY4BBBSBUipsz_7c0B6HjmRYZV3uxPVU4CAJjqWoWBm0T4pxA", "scope": "https://www.googleapis.com/auth/drive", "token_type": "Bearer"}, "scopes": ["https://www.googleapis.com/auth/drive"], "token_info_uri": "https://oauth2.googleapis.com/tokeninfo", "invalid": false, "_class": "OAuth2Credentials", "_module": "oauth2client.client"}' |
| gauth.credentials = client.Credentials.new_from_json(content) |
| if gauth.access_token_expired: |
| |
| gauth.Refresh() |
| else: |
| gauth.Authorize() |
| DRIVE = GoogleDrive(gauth) |
|
|
| def download_file(response): |
| print("Started Streamming") |
| for chunk in response.iter_content(4096): |
| yield chunk |
|
|
| def get_confirm_token(response): |
| for key, value in response.cookies.items(): |
| if key.startswith("download_warning"): |
| return value |
|
|
| return None |
|
|
| 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) |
| |
| |
|
|
| file_id = flask.request.args.get("id") |
| file_obj = DRIVE.CreateFile({'id': file_id}) |
| file_obj.Upload() |
| download_url = file_obj.metadata.get('downloadUrl') |
| |
| print(download_url) |
| try: |
| file_obj.http = file_obj.auth.Get_Http_Object() |
| credentials = file_obj.http.request.credentials.__dict__ |
| |
| response = requests.get(download_url, headers={'Authorization': f'{credentials["token_response"]["token_type"]} {credentials["access_token"]}'}, stream=True) |
|
|
| return download_file(response), {"Content-Type": "video/mp4"} |
| |
| |
| |
| except Exception as e: |
| print("error", e) |
|
|