63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
import json
|
|
import sys
|
|
import os
|
|
import asyncio
|
|
import time
|
|
import random
|
|
try:
|
|
from RestrictedPython import safe_builtins, limited_builtins, utility_builtins
|
|
except ModuleNotFoundError:
|
|
print("RestrictedPython module required, please run pip install RestrictedPython",file=sys.stderr)
|
|
sys.exit(1)
|
|
|
|
custom_builtins = safe_builtins.copy()
|
|
|
|
custom_builtins['__import__'] = __import__
|
|
custom_builtins['asyncio'] = asyncio
|
|
custom_builtins['json'] = json
|
|
custom_builtins['time'] = time
|
|
custom_builtins['random'] = random
|
|
|
|
restricted_globals = {
|
|
'__builtins__': custom_builtins,
|
|
'_utility_builtins': utility_builtins,
|
|
'_limited_builtins': limited_builtins,
|
|
'__name__': '__main__',
|
|
'dict': dict,
|
|
'list': list,
|
|
'print': print,
|
|
'set': set,
|
|
|
|
}
|
|
|
|
class Args:
|
|
def __init__(self, params):
|
|
self.params = params
|
|
|
|
|
|
DefaultCode = """
|
|
class Args:
|
|
def __init__(self, params):
|
|
self.params = params
|
|
class Output(dict):
|
|
pass
|
|
"""
|
|
|
|
|
|
async def run_main(app_code, params):
|
|
try:
|
|
complete_code = DefaultCode + app_code
|
|
locals_dict = {"args": Args(params=params)}
|
|
exec(complete_code, restricted_globals, locals_dict) # ignore_security_alert
|
|
main_func = locals_dict['main']
|
|
ret = await main_func(locals_dict['args'])
|
|
except Exception as e:
|
|
print(f"{type(e).__name__}: {str(e)}", file=sys.stderr)
|
|
sys.exit(1)
|
|
return ret
|
|
|
|
|
|
code = sys.argv[1]
|
|
result = asyncio.run(run_main(code, params=json.loads(sys.argv[2])))
|
|
print(json.dumps(result))
|