átlagos kiegészítséek jó sok
This commit is contained in:
313
gitea_audit_report.md
Normal file
313
gitea_audit_report.md
Normal file
@@ -0,0 +1,313 @@
|
||||
# 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 <id> - Munka megkezdése
|
||||
finish <id> [msg] - Munka lezárása
|
||||
get <id> - Kártya lekérése
|
||||
update <id> [--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
|
||||
Reference in New Issue
Block a user