#!/usr/bin/env python3 """RBAC path registration for pipeline-sdlc module.""" import os, sys, subprocess MOD = "pipeline-sdlc" PATHS_ANY = [ f"/{MOD}/index.ui", ] PATHS_LOGINED = [ f"/{MOD}", # Dashboard f"/{MOD}/sd_dashboard/index.ui", f"/{MOD}/sd_dashboard/dashboard_data.dspy", # Projects f"/{MOD}/sd_projects/index.ui", f"/{MOD}/sd_projects/get_sd_projects.dspy", f"/{MOD}/sd_projects/add_sd_projects.dspy", f"/{MOD}/sd_projects/update_sd_projects.dspy", f"/{MOD}/sd_projects/delete_sd_projects.dspy", f"/{MOD}/sd_project_list/index.ui", # Iterations f"/{MOD}/sd_iterations/index.ui", f"/{MOD}/sd_iterations/get_sd_iterations.dspy", f"/{MOD}/sd_iterations/add_sd_iterations.dspy", f"/{MOD}/sd_iterations/update_sd_iterations.dspy", f"/{MOD}/sd_iterations/delete_sd_iterations.dspy", f"/{MOD}/sd_iteration_list/index.ui", # Test Plans f"/{MOD}/sd_test_plans/index.ui", f"/{MOD}/sd_test_plans/get_sd_test_plans.dspy", f"/{MOD}/sd_test_plans/add_sd_test_plans.dspy", f"/{MOD}/sd_test_plans/update_sd_test_plans.dspy", f"/{MOD}/sd_test_plans/delete_sd_test_plans.dspy", f"/{MOD}/sd_test_plan_list/index.ui", # Test Cases f"/{MOD}/sd_test_cases/index.ui", f"/{MOD}/sd_test_cases/get_sd_test_cases.dspy", f"/{MOD}/sd_test_cases/add_sd_test_cases.dspy", f"/{MOD}/sd_test_cases/update_sd_test_cases.dspy", f"/{MOD}/sd_test_cases/delete_sd_test_cases.dspy", f"/{MOD}/sd_test_case_list/index.ui", # Bugs f"/{MOD}/sd_bugs/index.ui", f"/{MOD}/sd_bugs/get_sd_bugs.dspy", f"/{MOD}/sd_bugs/add_sd_bugs.dspy", f"/{MOD}/sd_bugs/update_sd_bugs.dspy", f"/{MOD}/sd_bugs/delete_sd_bugs.dspy", f"/{MOD}/sd_bug_list/index.ui", # Deploy Envs f"/{MOD}/sd_deploy_envs/index.ui", f"/{MOD}/sd_deploy_envs/get_sd_deploy_envs.dspy", f"/{MOD}/sd_deploy_envs/add_sd_deploy_envs.dspy", f"/{MOD}/sd_deploy_envs/update_sd_deploy_envs.dspy", f"/{MOD}/sd_deploy_envs/delete_sd_deploy_envs.dspy", f"/{MOD}/sd_deploy_env_list/index.ui", # Review f"/{MOD}/sd_review/index.ui", # API f"/{MOD}/api/bug_close.dspy", f"/{MOD}/api/bug_confirm.dspy", f"/{MOD}/api/check_iteration_bugs.dspy", f"/{MOD}/api/env_verify.dspy", f"/{MOD}/api/get_iteration_options.dspy", f"/{MOD}/api/get_project_options.dspy", f"/{MOD}/api/get_test_plan_options.dspy", f"/{MOD}/api/submit_bug.dspy", f"/{MOD}/api/sd_bug_create.dspy", f"/{MOD}/api/sd_bug_update.dspy", f"/{MOD}/api/sd_bug_delete.dspy", f"/{MOD}/api/sd_case_create.dspy", f"/{MOD}/api/sd_case_update.dspy", f"/{MOD}/api/sd_case_delete.dspy", f"/{MOD}/api/sd_env_create.dspy", f"/{MOD}/api/sd_env_update.dspy", f"/{MOD}/api/sd_env_delete.dspy", f"/{MOD}/api/sd_iter_create.dspy", f"/{MOD}/api/sd_iter_update.dspy", f"/{MOD}/api/sd_iter_delete.dspy", f"/{MOD}/api/sd_plan_create.dspy", f"/{MOD}/api/sd_plan_update.dspy", f"/{MOD}/api/sd_plan_delete.dspy", f"/{MOD}/api/sd_proj_create.dspy", f"/{MOD}/api/sd_proj_update.dspy", f"/{MOD}/api/sd_proj_delete.dspy", # Search data sources f"/{MOD}/api/get_search_bug_status.dspy", f"/{MOD}/api/get_search_case_status.dspy", f"/{MOD}/api/get_search_case_type.dspy", f"/{MOD}/api/get_search_env_status.dspy", f"/{MOD}/api/get_search_env_type.dspy", f"/{MOD}/api/get_search_iteration_status.dspy", f"/{MOD}/api/get_search_iteration_type.dspy", f"/{MOD}/api/get_search_plan_status.dspy", f"/{MOD}/api/get_search_plan_type.dspy", f"/{MOD}/api/get_search_priority.dspy", f"/{MOD}/api/get_search_project_type.dspy", f"/{MOD}/api/get_search_reporter_type.dspy", f"/{MOD}/api/get_search_severity.dspy", f"/{MOD}/api/get_search_status.dspy", ] def find_app_root(): for c in [os.path.dirname(os.path.dirname(os.path.abspath(__file__))), os.path.expanduser("~/pipeline")]: if os.path.isfile(os.path.join(c, "set_role_perm.py")): return c return None def main(): root = find_app_root() if not root: print("ERROR: pipeline root not found") sys.exit(1) set_perm = os.path.join(root, "set_role_perm.py") py = sys.executable count = 0 for role, paths in [("any", PATHS_ANY), ("logined", PATHS_LOGINED)]: for path in paths: cmd = [py, set_perm, role, path] r = subprocess.run(cmd, capture_output=True, text=True, cwd=root) if r.returncode == 0: count += 1 else: print(f" WARN: {path} -> {r.stderr.strip()[-80:]}") print(f"Registered {count}/{len(PATHS_ANY)+len(PATHS_LOGINED)} paths for {MOD}") if __name__ == "__main__": main()