diff --git a/api/blueprints/mail/oauth_callback.py b/api/blueprints/mail/oauth_callback.py index 6f70050..4fb93b8 100644 --- a/api/blueprints/mail/oauth_callback.py +++ b/api/blueprints/mail/oauth_callback.py @@ -40,7 +40,7 @@ sys.path.append(".") sys.path.append("..") # For using Quart: -from quart import Blueprint, current_app, request +from quart import Blueprint, current_app, request, render_template # My utils: from utils_v2.string import json @@ -133,6 +133,7 @@ async def mail_callback( """ Use this when authorizing access to someone's GMail account. This can be used to capture the authentication token. + :param mail_client: The mail company/brand that you want the authorization from. :param inbound_headers: auto-extracted by the decorators. :param inbound_data: auto-extracted by the decorators. :param inbound_files: auto-extracted by the decorators. @@ -173,14 +174,20 @@ async def mail_callback( # ┛┗┗ ┛┣┛┗┛┛┗┛┗ # ┛ - # Return a success response: - return ResponseModel( - status_code = StatusCodes.OK if tokens_saved else StatusCodes.FAILED, - http_code = HttpCodes.SUCCESS if tokens_saved else HttpCodes.INTERNAL_SERVER_ERROR, - data = { - "mailClient": mail_client, - "authorized": True - } + # # Return a response: + # return ResponseModel( + # status_code = StatusCodes.OK if tokens_saved else StatusCodes.FAILED, + # http_code = HttpCodes.SUCCESS if tokens_saved else HttpCodes.INTERNAL_SERVER_ERROR, + # data = { + # "mailClient": mail_client, + # "authorized": True + # } + # ) + + # Return a page that shows you the status of your authorization: + return await render_template( + "/mail/oauth/oauth_success.html" if tokens_saved else "/mail/oauth/oauth_failure.html", + mail_client = mail_client.title() ) diff --git a/api/blueprints/test/callback.py b/api/blueprints/test/callback.py index 7828581..8779ecc 100644 --- a/api/blueprints/test/callback.py +++ b/api/blueprints/test/callback.py @@ -40,7 +40,7 @@ sys.path.append(".") sys.path.append("..") # For using Quart: -from quart import Blueprint, current_app, request +from quart import Blueprint, current_app, request, render_template # My utils: from utils_v2.string import json @@ -65,6 +65,9 @@ from shared import constants # For asynchronous activities: import asyncio +# For random choices: +import random + # ***************************************************************************************************************** # ***** **** @@ -127,48 +130,18 @@ async def callback_test( **kwargs ): - """ - This URL does nothing, just captures data on webhooks and logs it for documentation. - :param inbound_headers: auto-extracted by the decorators. - :param inbound_data: auto-extracted by the decorators. - :param inbound_files: auto-extracted by the decorators. - :param kwargs: Any number of extra inputs supplied by the decorators. - :return: A standard response structure. - """ - - # Construct a message: - message = "🪝 *WEBHOOK/CALLBACK ALERT!* 🪝\n\n" - message += f"Method: *{request.method}*\nLog Id.: `{kwargs.get('log_id')}`\n\n" - message += "*Headers:*\n```json\n" - message += json.to_string({k: v for k, v in request.headers.items()}) - message += "\n```\n" - message += "*Query Args:*\n```json\n" - message += json.to_string(request.args.to_dict()) - message += "\n```\n" - message += "*JSON:*\n```json\n" - message += json.to_string(await request.get_json()) - message += "\n```\n" - message += "*Form-Data:*\n```json\n" - message += json.to_string((await request.form).to_dict()) - message += "\n```\n" - message += "*Form-Files:*\n```json\n" - message += json.to_string(inbound_files, default = str) - message += "\n```\n" - - # Send a message on Telegram: - api_response = await current_app.http_client.post( - url = current_app.script_data["alerts"]["url"], - json = { - "message": message, - "type": "info", - "chatId": "1275560043" # ... KPS - } - ) - - # Return a success response: - return ResponseModel( - status_code = StatusCodes.OK, - data = {"accepted": True} + # Return a random page: + return await render_template( + random.choice([ + r"/mail/oauth/oauth_success.html", + r"/mail/oauth/oauth_failure.html" + ]), + mail_client = random.choice([ + "GMail", + "Outlook", + "WhatsApp", + "Telegram" + ]) ) diff --git a/api/main.py b/api/main.py index 3585239..543bcac 100644 --- a/api/main.py +++ b/api/main.py @@ -104,7 +104,7 @@ APP_VERSION = constants.APP_VERSION # The Quart app: -app = Quart(__name__) +app = Quart(__name__, template_folder = r"../views") app = cors(app) app.register_blueprint(mail_oauth_bp, url_prefix = f"/{MODULE_BASE}/mail") app.register_blueprint(mail_callback_bp, url_prefix = f"/{MODULE_BASE}/mail") diff --git a/views/mail/oauth/oauth_failure.html b/views/mail/oauth/oauth_failure.html new file mode 100644 index 0000000..ad2c12c --- /dev/null +++ b/views/mail/oauth/oauth_failure.html @@ -0,0 +1,77 @@ + + + + + + Authorization Failed + + + + +
+
+

Authorization Failed

+

Something went wrong in getting authorization from your {{ mail_client }} account. Please feel free to try the same steps again. You can close this tab at any time.

+
+ + + diff --git a/views/mail/oauth/oauth_success.html b/views/mail/oauth/oauth_success.html new file mode 100644 index 0000000..765082e --- /dev/null +++ b/views/mail/oauth/oauth_success.html @@ -0,0 +1,77 @@ + + + + + + Authorization Successful + + + + +
+
+

Authorization Successful

+

We have received authorization from your {{ mail_client }} account. You can close this tab at any time.

+
+ + +