script_engine/scripts/load_path.py

78 lines
2.3 KiB
Python

#!/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 <sage_root> && ./py3/bin/python <module>/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())