# Gitea Manager Audit és Hardcode Teszt Jelentés ## 1. Gitea Manager Feltérképezése ### Fájl helye `/opt/docker/dev/service_finder/.roo/scripts/gitea_manager.py` ### Használati mód A `gitea_manager.py` **CLI argumentumokkal** várja a hívásokat, nem importálható osztályként. A szkript egy standalone Python program, amely a `docker exec roo-helper python3 /scripts/gitea_manager.py` paranccsal hívható meg. ### Főbb funkciók - **API kommunikáció:** HTTP kérésekkel kommunikál a Gitea REST API-val - **Hibrid hálózat felismerés:** Automatikusan detektálja, hogy belső (`gitea`) vagy külső (`192.168.100.10`) címről kell kommunikálni - **Label kezelés:** Automatikusan létrehozza a hiányzó címkéket (Status, Scope, Type, Role kategóriák) - **Lapozás támogatás:** A `fetch_all_pages()` függvény kezeli a Gitea API lapozását - **Mérföldkő kezelés:** Lehetőség van mérföldkövek létrehozására és listázására ### Parancssori interfész ``` python3 gitea_manager.py [parancs] [argumentumok] list - Nyitott kártyák listázása list closed - Lezárt kártyák listázása ms list - Mérföldkövek listázása ms create "Név" - Új mérföldkő létrehozása create "Cím" "Leírás" [Mérföldkő] [Címkék...] [--due YYYY-MM-DD] [--assign username] start - Munka megkezdése finish [msg] - Munka lezárása get - Kártya lekérése update [--title "Új cím"] [--body "Új leírás"] - Kártya frissítése ``` ### Integrációs lehetőségek 1. **Subprocess hívás:** A teszt szkriptben a `subprocess.run()` használata ajánlott 2. **Közvetlen import:** A fájl nem tervezett importálásra, mivel tartalmaz `if __name__ == "__main__":` blokkot és globális változókat 3. **Docker konténeren belüli futtatás:** Minden hívás a `roo-helper` konténerben történik ## 2. Hardcode Audit Teszt Szkript ### Fájl helye `/opt/docker/dev/service_finder/backend/app/tests/test_admin_audit_gitea.py` ### Teljes kód ```python #!/usr/bin/env python3 """ Hardcode Audit Teszt és Gitea Integráció Ez a szkript: 1. Szkennel a backend/app/services/ és backend/app/api/ mappákban hardcode értékeket 2. Generál egy Markdown riportot a találatokról 3. Létrehoz egy mérföldkövet és 4 issue-t a Gitea-ban az admin rendszer fejlesztéséhez """ import os import re import sys import subprocess from pathlib import Path from typing import List, Dict, Tuple # ==================== KONFIGURÁCIÓ ==================== PROJECT_ROOT = Path(__file__).parent.parent.parent.parent # /opt/docker/dev/service_finder GITEA_SCRIPT = PROJECT_ROOT / ".roo" / "scripts" / "gitea_manager.py" SCAN_DIRS = [ PROJECT_ROOT / "backend" / "app" / "services", PROJECT_ROOT / "backend" / "app" / "api", ] # Hardcode minta regexek HARDCODE_PATTERNS = [ (r'\b\d{1,3}\b', "Mágikus szám (1-3 jegyű)"), (r'\b(50|10|100|1000|5000|10000)\b', "Gyakori mágikus szám (pl. 50, 10)"), (r'"(active|inactive|pending|approved|rejected|blocked)"', "Fix státusz string"), (r"'active'|'inactive'|'pending'|'approved'|'rejected'|'blocked'", "Fix státusz string (aposztróf)"), (r'\b(True|False)\b', "Hardcode boolean"), (r'\b(max|min|limit|threshold|default)\s*=\s*\d+', "Limit/Threshold érték"), ] # ==================== SEGÉDFÜGGVÉNYEK ==================== def find_python_files(directory: Path) -> List[Path]: """Rekurzívan gyűjti össze az összes .py fájlt a megadott könyvtárban.""" python_files = [] for root, dirs, files in os.walk(directory): for file in files: if file.endswith('.py'): python_files.append(Path(root) / file) return python_files def scan_file(file_path: Path) -> List[Dict]: """Egy fájlban keres hardcode értékeket a regex minták alapján.""" findings = [] try: content = file_path.read_text(encoding='utf-8') lines = content.splitlines() for line_num, line in enumerate(lines, 1): for pattern, description in HARDCODE_PATTERNS: matches = re.finditer(pattern, line) for match in matches: findings.append({ 'file': str(file_path.relative_to(PROJECT_ROOT)), 'line': line_num, 'column': match.start() + 1, 'match': match.group(), 'description': description, 'context': line.strip()[:100] }) except Exception as e: print(f"⚠️ Hiba a fájl olvasásakor {file_path}: {e}") return findings def generate_markdown_report(findings: List[Dict]) -> str: """Generál egy Markdown formátumú riportot a találatokról.""" if not findings: return "## ✅ Nincs hardcode találat\n\nA szkennelés nem talált gyanús hardcode értékeket." # Csoportosítás fájl szerint by_file = {} for finding in findings: file = finding['file'] if file not in by_file: by_file[file] = [] by_file[file].append(finding) report_lines = [ "# 🔍 Hardcode Audit Részletes Részletek", "", f"**Összes találat:** {len(findings)}", "", "---", ] for file, file_findings in sorted(by_file.items()): report_lines.append(f"## 📄 {file}") report_lines.append("") for finding in file_findings: report_lines.append(f"### L{ finding['line'] }: `{ finding['match'] }`") report_lines.append(f"- **Leírás:** {finding['description']}") report_lines.append(f"- **Kontextus:** `{finding['context']}`") report_lines.append(f"- **Hely:** {finding['file']}:{finding['line']}:{finding['column']}") report_lines.append("") return "\n".join(report_lines) def run_gitea_command(args: List[str]) -> Tuple[bool, str]: """Futtat egy Gitea manager parancsot.""" cmd = ["docker", "exec", "roo-helper", "python3", "/scripts/gitea_manager.py"] + args try: result = subprocess.run(cmd, capture_output=True, text=True, timeout=30) return result.returncode == 0, result.stdout + "\n" + result.stderr except subprocess.TimeoutExpired: return False, "Időtúllépés a parancs futtatásakor" except Exception as e: return False, f"Hiba: {e}" def create_milestone() -> bool: """Létrehozza a 'v2.0 - Enterprise Admin Rendszer & Dinamikus Konfig' mérföldkövet.""" print("📌 Mérföldkő létrehozása...") success, output = run_gitea_command([ "ms", "create", "v2.0 - Enterprise Admin Rendszer & Dinamikus Konfig", "Admin rendszer fejlesztése: RBAC, dinamikus konfiguráció, anomália detektálás" ]) if success: print("✅ Mérföldkő sikeresen létrehozva") else: print(f"⚠️ Figyelmeztetés: {output}") return success def create_issue(title: str, body: str, labels: List[str]) -> bool: """Létrehoz egy issue-t a Gitea-ban.""" print(f"📝 Issue létrehozása: {title}") # Build the command cmd = ["create", f'"{title}"', f'"{body}"', "v2.0 - Enterprise Admin Rendszer & Dinamikus Konfig"] cmd.extend(labels) success, output = run_gitea_command(cmd) if success: print(f"✅ Issue sikeresen létrehozva: {title}") else: print(f"⚠️ Hiba az issue létrehozásakor: {output}") return success def create_gitea_issues(markdown_report: str): """Létrehozza a 4 issue-t a Gitea-ban a megadott sablonnal.""" # Issue 1: Hardcode értékek dinamikussá tétele issue1_body = f"""**Mérföldkő:** v2.0 - Enterprise Admin Rendszer & Dinamikus Konfig **Cél:** Hardcode értékek kiszervezése SystemParameter táblába és ConfigService-be ### 🔗 Függőségek (Dependencies) - **Bemenet (Mikre támaszkodik):** Database (system.parameters tábla), ConfigService - **Kimenet (Mik támaszkodnak rá):** GamificationService, NotificationService, SecurityService ### 📝 Elemzés A hardcode audit {len(markdown_report.splitlines())} sor találatot jelentett. Ezeket az értékeket át kell helyezni a dinamikus konfigurációs rendszerbe. ### 🔍 Hardcode Találatok (Összefoglaló) {markdown_report[:2000]}... """ # Issue 2: RBAC és Admin API Router issue2_body = """**Mérföldkő:** v2.0 - Enterprise Admin Rendszer & Dinamikus Konfig **Cél:** Superadmin, Moderator szerepkörök és `/api/v1/admin` végpontok implementálása ### 🔗 Függőségek (Dependencies) - **Bemenet (Mikre támaszkodik):** Identity modell (User, Role), Permission tábla - **Kimenet (Mik támaszkodnak rá):** Admin UI, Moderátori felület ### 📝 Elemzés Létre kell hozni a Role-Based Access Control (RBAC) rendszert, amely támogatja a Superadmin, Moderator, és Auditor szerepköröket. Az admin végpontoknak külön routerben kell lenniük, és JWT token alapú autorizációt kell használniuk. """ # Issue 3: Core Felügyeleti Végpontok issue3_body = """**Mérföldkő:** v2.0 - Enterprise Admin Rendszer & Dinamikus Konfig **Cél:** User (KYC), Jármű, Szerviz felügyelet (Tiltás/Jóváhagyás) végpontok ### 🔗 Függőségek (Dependencies) - **Bemenet (Mikre támaszkodik):** UserService, VehicleService, ServiceRegistry - **Kimenet (Mik támaszkodnak rá):** Admin dashboard, Moderátori munkafolyamatok ### 📝 Elemzés Külön végpontok kellenek a felhasználók KYC (Know Your Customer) jóváhagyásához, járművek tiltásához/engedélyezéséhez, és szervizek moderálásához. Minden művelet naplózandó az audit logba. """ # Issue 4: Anomália Detektálás (Anti-Cheat) issue4_body = """**Mérföldkő:** v2.0 - Enterprise Admin Rendszer & Dinamikus Konfig **Cél:** Robot felügyelő a gyanús aktivitásokhoz (pl. túl gyors pontgyűjtés, sok sikertelen bejelentkezés) ### 🔗 Függőségek (Dependencies) - **Bemenet (Mikre támaszkodik):** Audit log, Gamification events, Security events - **Kimenet (Mik támaszkodnak rá):** Admin értesítések, Automatikus tiltások ### 📝 Elemzés Anomália detektáló algoritmus készítése, amely gyanús mintákat keres a felhasználói aktivitásban. A rendszer automatikusan jelzést küld és/vagy ideiglenesen tiltja a gyanús fiókokat. """ # Issue létrehozások issues = [ ("Phase 1: Hardcode Értékek Dinamikussá Tétele", issue1_body, ["Scope: Backend", "Type: Refactor"]), ("Phase 2: RBAC és Admin API Router", issue2_body, ["Scope: Backend", "Type: Feature"]), ("Phase 3: Core Felügyeleti Végpontok", issue3_body, ["Scope: API", "Type: Feature"]), ("Phase 4: Anomália Detektálás (Anti-Cheat)", issue4_body, ["Scope: Core", "Type: Feature"]), ] for title, body, labels in issues: create_issue(title, body, labels) # ==================== FŐPROGRAM ==================== def main(): print("🔍 Hardcode Audit Szkennelés indítása...") # 1. Python fájlok gyűjtése all_files = [] for scan_dir in SCAN_DIRS: if scan_dir.exists(): all_files.extend(find_python_files(scan_dir)) else: print(f"⚠️ A könyvtár nem létezik: {scan_dir}") print(f"📁 Összesen {len(all_files)} fájl található a szkenneléshez") # 2. Hardcode értékek keresése all_findings = [] for file in all_files: findings = scan_file(file) all_findings.extend(findings) print(f"🔎 {len(all_findings)} hardcode találat") # 3. Markdown riport generálása markdown_report = generate_markdown_report(all_findings) # 4. Riport mentése fájlba (opcionális) report_path = PROJECT_ROOT / "hardcode_audit_report.md" report_path.write_text(markdown_report, encoding='utf-8') print(f"📄 Részletes riport mentve: {report_path}") # 5. Gitea integráció print("\n🚀 Gitea Integráció indítása...") # Ellenőrizzük, hogy a Gitea script létezik-e if not GITEA_SCRIPT.exists(): print(f"❌ A Gitea manager script nem található: {GITEA_SCRIPT}") print("A szkript csak a riportot generálta, Gitea műveletek kihagyva.") return # Mérföldkő létrehozása create_milestone() # Issue-ok létrehozása create_gitea_issues(markdown_report) print("\n✅ Audit szkript sikeresen lefutott!") print(f" - Találatok: {len(all_findings)}") print(f" - Riport: {report_path}") print(" - Gitea issue-k létrehozva a 'v2.0 - Enterprise Admin Rendszer & Dinamikus Konfig' mérföldkő alatt") if __name__ == "__main__": main() ``` ## 3. Összefoglalás ### A Gitea Manager használati módja - **CLI alapú:** A szkript parancssori argumentumokkal hívható - **Docker konténeren belül:** Mind