From 74438a31458af8bddd08d90eacc6d63677bab844 Mon Sep 17 00:00:00 2001 From: Jonas Dellinger Date: Fri, 13 May 2022 19:14:47 +0200 Subject: Work on react frontend loader --- backend/utilities.py | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 backend/utilities.py (limited to 'backend/utilities.py') diff --git a/backend/utilities.py b/backend/utilities.py new file mode 100644 index 00000000..39f9ca55 --- /dev/null +++ b/backend/utilities.py @@ -0,0 +1,106 @@ +from aiohttp import ClientSession +from injector import inject_to_tab +import uuid + +class Utilities: + def __init__(self, context) -> None: + self.context = context + self.util_methods = { + "ping": self.ping, + "http_request": self.http_request, + "confirm_plugin_install": self.confirm_plugin_install, + "execute_in_tab": self.execute_in_tab, + "inject_css_into_tab": self.inject_css_into_tab, + "remove_css_from_tab": self.remove_css_from_tab + } + + async def confirm_plugin_install(self, request_id): + return await self.context.plugin_browser.confirm_plugin_install(request_id) + + async def http_request(self, method="", url="", **kwargs): + async with ClientSession() as web: + async with web.request(method, url, **kwargs) as res: + return { + "status": res.status, + "headers": dict(res.headers), + "body": await res.text() + } + + async def ping(self, **kwargs): + return "pong" + + async def execute_in_tab(self, tab, run_async, code): + try: + result = await inject_to_tab(tab, code, run_async) + if "exceptionDetails" in result["result"]: + return { + "success": False, + "result": result["result"] + } + + return { + "success": True, + "result" : result["result"]["result"].get("value") + } + except Exception as e: + return { + "success": False, + "result": e + } + + async def inject_css_into_tab(self, tab, style): + try: + css_id = str(uuid.uuid4()) + + result = await inject_to_tab(tab, + f""" + (function() {{ + const style = document.createElement('style'); + style.id = "{css_id}"; + document.head.append(style); + style.textContent = `{style}`; + }})() + """, False) + + if "exceptionDetails" in result["result"]: + return { + "success": False, + "result": result["result"] + } + + return { + "success": True, + "result" : css_id + } + except Exception as e: + return { + "success": False, + "result": e + } + + async def remove_css_from_tab(self, tab, css_id): + try: + result = await inject_to_tab(tab, + f""" + (function() {{ + let style = document.getElementById("{css_id}"); + + if (style.nodeName.toLowerCase() == 'style') + style.parentNode.removeChild(style); + }})() + """, False) + + if "exceptionDetails" in result["result"]: + return { + "success": False, + "result": result + } + + return { + "success": True + } + except Exception as e: + return { + "success": False, + "result": e + } -- cgit v1.2.3