#!/usr/bin/env python3 # -*- coding: utf-8 -*- """script_engine RBAC load_path registration (explicit paths only, no wildcards). Roles: any / logined / owner.superuser. Run from the Sage host: cd && ./py3/bin/python /scripts/load_path.py """ import os import sys MOD = 'script_engine' PATHS_ANY = [ '/script_engine/menu.ui', '/script_engine/styles/script_engine.css', '/script_engine/scripts/script_engine.js', ] PATHS_LOGINED = [ '/script_engine', '/script_engine/index.ui', '/script_engine/script_list.ui', '/script_engine/api/script_create.dspy', '/script_engine/api/script_update.dspy', '/script_engine/api/script_delete.dspy', '/script_engine/api/script_get.dspy', '/script_engine/api/script_list.dspy', '/script_engine/api/script_execute.dspy', '/script_engine/api/execute_script.dspy', '/script_engine/api/script_validate.dspy', '/script_engine/api/validate_script.dspy', '/script_engine/api/get_search_script_type.dspy', '/script_engine/api/get_search_status.dspy', ] PATHS_SUPERUSER = [ '/script_engine/api/script_delete.dspy', '/script_engine/api/execute_script.dspy', '/script_engine/api/script_execute.dspy', ] def find_sage_root(): candidates = [ os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..'), os.path.expanduser('~/repos/sage'), os.path.expanduser('~/sage'), ] for c in candidates: if os.path.isdir(os.path.join(c, 'wwwroot')) and os.path.isdir(os.path.join(c, 'py3', 'bin')): return os.path.abspath(c) return None def main(): sage_root = find_sage_root() if not sage_root: print('ERROR: sage root not found, skip load_path registration') return 1 sys.path.insert(0, os.path.join(sage_root, 'py3', 'bin')) try: import set_role_perm # noqa: F401 except Exception as e: print('ERROR: cannot import set_role_perm: %s' % e) return 1 for path in PATHS_ANY: set_role_perm(path, 'any') for path in PATHS_LOGINED: set_role_perm(path, 'logined') for path in PATHS_SUPERUSER: set_role_perm(path, 'owner.superuser') print('script_engine load_path registered: %d paths' % (len(PATHS_ANY) + len(PATHS_LOGINED) + len(PATHS_SUPERUSER))) return 0 if __name__ == '__main__': sys.exit(main())