This repository has been archived on 2024-07-30. You can view files and clone it, but cannot push or open issues or pull requests.
python-aternos/python_aternos/atjsparse.py

30 lines
898 B
Python
Raw Permalink Normal View History

2022-03-17 09:24:58 +03:00
import regex
2022-01-06 18:57:26 +03:00
import base64
2022-02-09 12:07:24 +03:00
import js2py
2022-03-18 17:38:36 +03:00
from typing import Any
2022-02-09 12:07:24 +03:00
2022-03-17 09:24:58 +03:00
# Thanks to http://regex.inginf.units.it/
arrowexp = regex.compile(r'\w[^\}]*+')
2022-02-09 12:07:24 +03:00
def to_ecma5_function(f:str) -> str:
2022-03-17 09:24:58 +03:00
match = arrowexp.search(f)
conv = '(function(){' + match.group(0) + '})()'
return regex.sub(
r'(?:s|\(s\)) => s.split\([\'"]{2}\).reverse\(\).join\([\'"]{2}\)',
'function(s){return s.split(\'\').reverse().join(\'\')}',
conv
)
2022-01-06 18:57:26 +03:00
2022-03-17 09:24:58 +03:00
def atob(s:str) -> str:
2022-01-06 18:57:26 +03:00
return base64.standard_b64decode(str(s)).decode('utf-8')
2022-02-09 12:07:24 +03:00
def exec(f:str) -> Any:
2022-01-06 18:57:26 +03:00
ctx = js2py.EvalJs({'atob': atob})
2022-05-13 16:44:00 +03:00
ctx.execute('window.document = { };')
ctx.execute('window.Map = function(_i){ };')
ctx.execute('window.setTimeout = function(_f,_t){ };')
ctx.execute('window.setInterval = function(_f,_t){ };')
ctx.execute('window.encodeURIComponent = function(_s){ };')
2022-01-06 18:57:26 +03:00
ctx.execute(to_ecma5_function(f))
return ctx