8.7 KiB
8.7 KiB
Admin System Gap Analysis Report
Generated: 2026-04-03 12:23:47
📊 Executive Summary
- Total hardcoded business values found: 228
- API modules analyzed: 23
- Modules missing admin endpoints: 20
🔍 Hardcoded Business Values
These values should be moved to system_parameters table for dynamic configuration.
| File | Line | Variable | Value | Context |
|---|---|---|---|---|
create_integration_session.py |
26 | TEST_EMAIL |
"tester_pro@profibot.hu..." |
TEST_EMAIL = "tester_pro@profibot.hu" |
create_integration_session.py |
27 | TEST_PASSWORD |
"TestPassword123!..." |
TEST_PASSWORD = "TestPassword123!" |
create_integration_session.py |
117 | output_path |
"/opt/docker/dev/service_finder/tests/integration_s..." |
output_path = "/opt/docker/dev/service_finder/tests/integration_session.json" |
test_schema_changes.py |
14 | DATABASE_URL |
"postgresql+asyncpg://postgres:postgres@postgres:54..." |
DATABASE_URL = "postgresql+asyncpg://postgres:postgres@postgres:5432/service_finder" |
test_token_refresh.py |
10 | base_url |
"http://sf_api:8000..." |
base_url = "http://sf_api:8000" |
test_token_refresh_simple.py |
10 | base_url |
"http://sf_api:8000..." |
base_url = "http://sf_api:8000" |
test_token_debug.py |
10 | base_url |
"http://sf_api:8000..." |
base_url = "http://sf_api:8000" |
test_complete_flow.py |
18 | API_BASE |
"http://localhost:8000..." |
API_BASE = "http://localhost:8000" |
test_complete_flow.py |
160 | email |
"tester_pro@profibot.hu..." |
email = "tester_pro@profibot.hu" |
test_complete_flow.py |
161 | password |
"Password123!..." |
password = "Password123!" |
test_final_verification.py |
13 | API_BASE |
"http://sf_api:8000/api/v1..." |
API_BASE = "http://sf_api:8000/api/v1" |
test_final_verification.py |
14 | EMAIL |
"tester_pro@profibot.hu..." |
EMAIL = "tester_pro@profibot.hu" |
test_final_verification.py |
15 | PASSWORD |
"Password123!..." |
PASSWORD = "Password123!" |
test_minimal_verification.py |
12 | API_BASE |
"http://sf_api:8000/api/v1..." |
API_BASE = "http://sf_api:8000/api/v1" |
test_minimal_verification.py |
13 | EMAIL |
"tester_pro@profibot.hu..." |
EMAIL = "tester_pro@profibot.hu" |
test_minimal_verification.py |
14 | PASSWORD |
"Password123!..." |
PASSWORD = "Password123!" |
test_debug_switch.py |
10 | API_BASE |
"http://sf_api:8000/api/v1..." |
API_BASE = "http://sf_api:8000/api/v1" |
test_debug_switch.py |
11 | EMAIL |
"tester_pro@profibot.hu..." |
EMAIL = "tester_pro@profibot.hu" |
test_debug_switch.py |
12 | PASSWORD |
"Password123!..." |
PASSWORD = "Password123!" |
test_check_response.py |
10 | API_BASE |
"http://sf_api:8000/api/v1..." |
API_BASE = "http://sf_api:8000/api/v1" |
test_check_response.py |
11 | EMAIL |
"tester_pro@profibot.hu..." |
EMAIL = "tester_pro@profibot.hu" |
test_check_response.py |
12 | PASSWORD |
"Password123!..." |
PASSWORD = "Password123!" |
test_decode_token.py |
11 | API_BASE |
"http://sf_api:8000/api/v1..." |
API_BASE = "http://sf_api:8000/api/v1" |
test_decode_token.py |
12 | EMAIL |
"tester_pro@profibot.hu..." |
EMAIL = "tester_pro@profibot.hu" |
test_decode_token.py |
13 | PASSWORD |
"Password123!..." |
PASSWORD = "Password123!" |
test_makes_filter.py |
12 | base_url |
"http://sf_api:8000..." |
base_url = "http://sf_api:8000" |
test_makes_filter.py |
13 | token |
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0Z..." |
token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0ZXJfcHJvQHByb2ZpYm90Lmh1IiwiZXhwIjoxNz |
create_vehicle_for_org.py |
36 | url |
"http://sf_api:8000/api/v1/assets/vehicles..." |
url = "http://sf_api:8000/api/v1/assets/vehicles" |
create_vehicle_via_api.py |
9 | BASE_URL |
"http://192.168.100.10:8000..." |
BASE_URL = "http://192.168.100.10:8000" |
test_auth_e2e.py |
42 | base_url |
"http://localhost:8000/api/v1..." |
base_url = "http://localhost:8000/api/v1" |
test_auth_e2e.py |
43 | email |
"test_architect@example.com..." |
email = "test_architect@example.com" |
test_auth_e2e.py |
44 | password |
"TestPassword123!..." |
password = "TestPassword123!" |
test_auth_e2e.py |
121 | delete_resp_status_code |
200 |
delete_resp_status_code = 200 |
test_asset_e2e_direct.py |
13 | user1_id |
2 |
user1_id = 2 |
test_asset_e2e_direct.py |
14 | user2_id |
3 |
user2_id = 3 |
app/api/v1/endpoints/expenses.py |
42 | limit |
10 |
limit = 10 |
app/api/v1/endpoints/services.py |
75 | new_level |
80 |
new_level = 80 |
app/models/core_logic.py |
17 | __tablename__ |
"subscription_tiers..." |
__tablename__ = "subscription_tiers" |
app/models/core_logic.py |
29 | __tablename__ |
"org_subscriptions..." |
__tablename__ = "org_subscriptions" |
app/models/core_logic.py |
48 | __tablename__ |
"credit_logs..." |
__tablename__ = "credit_logs" |
app/models/core_logic.py |
64 | __tablename__ |
"service_specialties..." |
__tablename__ = "service_specialties" |
app/models/reference_data.py |
7 | __tablename__ |
"reference_lookup..." |
__tablename__ = "reference_lookup" |
app/models/identity/identity.py |
26 | region_admin |
"region_admin..." |
region_admin = "region_admin" |
app/models/identity/identity.py |
27 | country_admin |
"country_admin..." |
country_admin = "country_admin" |
app/models/identity/identity.py |
29 | sales_agent |
"sales_agent..." |
sales_agent = "sales_agent" |
app/models/identity/identity.py |
31 | service_owner |
"service_owner..." |
service_owner = "service_owner" |
app/models/identity/identity.py |
32 | fleet_manager |
"fleet_manager..." |
fleet_manager = "fleet_manager" |
app/models/identity/identity.py |
207 | __tablename__ |
"verification_tokens..." |
__tablename__ = "verification_tokens" |
app/models/identity/identity.py |
221 | __tablename__ |
"social_accounts..." |
__tablename__ = "social_accounts" |
app/models/identity/identity.py |
239 | __tablename__ |
"active_vouchers..." |
__tablename__ = "active_vouchers" |
... and 178 more findings
🏗️ Admin Endpoints Analysis
Modules with Admin Prefix
No modules have /admin prefix
Modules with Admin Routes (but no prefix)
No mixed admin routes found
⚠️ Critical Gaps: Missing Admin Endpoints
These core business modules lack dedicated admin endpoints:
- users - No
/adminprefix and no admin routes - vehicles - No
/adminprefix and no admin routes - services - No
/adminprefix and no admin routes - assets - No
/adminprefix and no admin routes - organizations - No
/adminprefix and no admin routes - billing - No
/adminprefix and no admin routes - gamification - No
/adminprefix and no admin routes - analytics - No
/adminprefix and no admin routes - security - No
/adminprefix and no admin routes - documents - No
/adminprefix and no admin routes - evidence - No
/adminprefix and no admin routes - expenses - No
/adminprefix and no admin routes - finance_admin - No
/adminprefix and no admin routes - notifications - No
/adminprefix and no admin routes - reports - No
/adminprefix and no admin routes - catalog - No
/adminprefix and no admin routes - providers - No
/adminprefix and no admin routes - search - No
/adminprefix and no admin routes - social - No
/adminprefix and no admin routes - system_parameters - No
/adminprefix and no admin routes
Recommended Actions:
- Create
/adminprefixed routers for each missing module - Implement CRUD endpoints for administrative operations
- Add audit logging and permission checks
🚀 Recommendations
Phase 1: Hardcode Elimination
- Create
system_parametersmigration if not exists - Move identified hardcoded values to database
- Implement
ConfigServicefor dynamic value retrieval
Phase 2: Admin Endpoint Expansion
- Prioritize modules with highest business impact:
users(user management)billing(financial oversight)security(access control)
- Follow consistent pattern:
/admin/{module}/... - Implement RBAC with
adminandsuperadminroles
Phase 3: Monitoring & Audit
- Add admin action logging to
SecurityAuditLog - Implement admin dashboard with real-time metrics
- Create automated health checks for admin endpoints
🔧 Technical Details
Scan Parameters
- Project root:
/app - Files scanned: Python files in
/app - Business patterns: 25
- Trivial values excluded: 1, '', True, "", {}, 0, [], None, False