summaryrefslogtreecommitdiff
path: root/backend/utilities.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/utilities.py')
-rw-r--r--backend/utilities.py106
1 files changed, 106 insertions, 0 deletions
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
+ }