#!/usr/bin/env python3 """ RBAC path registration for pipeline-sdlc module. Run: cd ~/repos/sage && ./py3/bin/python ~/repos/pipeline-sdlc/scripts/load_path.py """ import os import sys import subprocess MOD = "pipeline_sdlc" PATHS_ANY = [ f"/{MOD}/index.ui", f"/{MOD}/styles/sdlc.css", ] PATHS_LOGINED = [ f"/{MOD}", f"/{MOD}/sd_project", f"/{MOD}/sd_project/index.ui", f"/{MOD}/sd_project/get_sd_project_list.dspy", f"/{MOD}/sd_project/add_sd_project_list.dspy", f"/{MOD}/sd_project/update_sd_project_list.dspy", f"/{MOD}/sd_project/delete_sd_project_list.dspy", f"/{MOD}/sd_iteration", f"/{MOD}/sd_iteration/index.ui", f"/{MOD}/sd_iteration/get_sd_iteration_list.dspy", f"/{MOD}/sd_iteration/add_sd_iteration_list.dspy", f"/{MOD}/sd_iteration/update_sd_iteration_list.dspy", f"/{MOD}/sd_iteration/delete_sd_iteration_list.dspy", f"/{MOD}/sd_test_plan", f"/{MOD}/sd_test_plan/index.ui", f"/{MOD}/sd_test_plan/get_sd_test_plan_list.dspy", f"/{MOD}/sd_test_plan/add_sd_test_plan_list.dspy", f"/{MOD}/sd_test_plan/update_sd_test_plan_list.dspy", f"/{MOD}/sd_test_plan/delete_sd_test_plan_list.dspy", f"/{MOD}/sd_test_case", f"/{MOD}/sd_test_case/index.ui", f"/{MOD}/sd_test_case/get_sd_test_case_list.dspy", f"/{MOD}/sd_test_case/add_sd_test_case_list.dspy", f"/{MOD}/sd_test_case/update_sd_test_case_list.dspy", f"/{MOD}/sd_test_case/delete_sd_test_case_list.dspy", f"/{MOD}/sd_bug", f"/{MOD}/sd_bug/index.ui", f"/{MOD}/sd_bug/get_sd_bug_list.dspy", f"/{MOD}/sd_bug/add_sd_bug_list.dspy", f"/{MOD}/sd_bug/update_sd_bug_list.dspy", f"/{MOD}/sd_bug/delete_sd_bug_list.dspy", f"/{MOD}/sd_deploy_env", f"/{MOD}/sd_deploy_env/index.ui", f"/{MOD}/sd_deploy_env/get_sd_deploy_env_list.dspy", f"/{MOD}/sd_deploy_env/add_sd_deploy_env_list.dspy", f"/{MOD}/sd_deploy_env/update_sd_deploy_env_list.dspy", f"/{MOD}/sd_deploy_env/delete_sd_deploy_env_list.dspy", # API endpoints f"/{MOD}/api/create_sd_project.dspy", f"/{MOD}/api/update_sd_project.dspy", f"/{MOD}/api/delete_sd_project.dspy", f"/{MOD}/api/create_sd_iteration.dspy", f"/{MOD}/api/update_sd_iteration.dspy", f"/{MOD}/api/delete_sd_iteration.dspy", f"/{MOD}/api/create_sd_bug.dspy", f"/{MOD}/api/update_sd_bug.dspy", f"/{MOD}/api/close_sd_bug.dspy", f"/{MOD}/api/save_sd_deploy_env.dspy", f"/{MOD}/api/get_project_options.dspy", f"/{MOD}/api/get_iteration_options.dspy", f"/{MOD}/api/check_iteration_bugs.dspy", f"/{MOD}/api/submit_bug.dspy", # Dashboard f"/{MOD}/sd_dashboard/dashboard.ui", ] def find_sage_root(): """Find Sage root directory.""" for candidate in [ os.path.expanduser("~/repos/sage"), os.path.expanduser("~/sage"), ]: if os.path.isdir(os.path.join(candidate, "wwwroot")): return candidate return None def main(): sage_root = find_sage_root() if not sage_root: print("ERROR: Sage root not found") sys.exit(1) set_perm = os.path.join(sage_root, "scripts", "set_role_perm.py") if not os.path.exists(set_perm): set_perm = os.path.join(sage_root, "set_role_perm.py") if not os.path.exists(set_perm): print(f"ERROR: set_role_perm.py not found in {sage_root}") sys.exit(1) python = os.path.join(sage_root, "py3", "bin", "python") if not os.path.exists(python): python = sys.executable count = 0 for role, paths in [("any", PATHS_ANY), ("logined", PATHS_LOGINED)]: for path in paths: cmd = [python, set_perm, role, path] result = subprocess.run(cmd, capture_output=True, text=True, cwd=sage_root) if result.returncode == 0: count += 1 else: print(f"WARN: {path} ({role}): {result.stderr.strip()}") print(f"Registered {count} paths for module '{MOD}'") if __name__ == "__main__": main()