DarkCat09
4892430f19
MkDocs: sphinx docstrings rewritten to google, improved config, written the major part of how-to. Readme: centered title + logo, added badges, features list, updated changelog. Improved Files API, added automatical session saving and restoring to Client. Some changes in makefile and gitignore. License Notice now refers to all contributors.
65 lines
1.5 KiB
Python
65 lines
1.5 KiB
Python
"""Parsing and executing JavaScript code"""
|
|
|
|
import base64
|
|
import regex
|
|
import js2py
|
|
|
|
# Thanks to http://regex.inginf.units.it/
|
|
arrowexp = regex.compile(r'\w[^\}]*+')
|
|
|
|
|
|
def to_ecma5_function(f: str) -> str:
|
|
|
|
"""Converts a ECMA6 function
|
|
to ECMA5 format (without arrow expressions)
|
|
|
|
Args:
|
|
f (str): ECMA6 function
|
|
|
|
Returns:
|
|
ECMA5 function
|
|
"""
|
|
|
|
f = regex.sub(r'/\*.+?\*/', '', f)
|
|
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
|
|
)
|
|
|
|
|
|
def atob(s: str) -> str:
|
|
|
|
"""Decodes base64 string
|
|
|
|
Args:
|
|
s (str): Encoded data
|
|
|
|
Returns:
|
|
Decoded string
|
|
"""
|
|
|
|
return base64.standard_b64decode(str(s)).decode('utf-8')
|
|
|
|
|
|
def exec_js(f: str) -> js2py.EvalJs:
|
|
|
|
"""Executes a JavaScript function
|
|
|
|
Args:
|
|
f (str): ECMA6 function
|
|
|
|
Returns:
|
|
JavaScript interpreter context
|
|
"""
|
|
|
|
ctx = js2py.EvalJs({'atob': atob})
|
|
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){ };')
|
|
ctx.execute(to_ecma5_function(f))
|
|
return ctx
|