Files
service-finder/docs/nav_api_v3_fix_audit.md
2026-06-10 08:06:07 +00:00

95 lines
3.8 KiB
Markdown

# 🔍 NAV API v3 Fix Audit - Hiányosságjelentés
**Dátum:** 2026-06-07
**Vizsgált Issue:** #227
**Forrásdokumentáció:** [`docs/nav_api_v3_fix_summary.md`](docs/nav_api_v3_fix_summary.md)
## Összefoglaló
A [`docs/nav_api_v3_fix_summary.md`](docs/nav_api_v3_fix_summary.md) dokumentációban leírt 3 javítási lépésből **egyik sem lett végrehajtva**. Az alábbi táblázat mutatja a pontos állapotot.
## Részletes Hiányosság-leképezés
### 1. `.env` fájl - ❌ Idezőjelek még mindig jelen
| Mező | Jelenlegi érték | Helyes érték |
|------|----------------|--------------|
| [`NAV_API_PASSWORD`](.env:91) | `'Tevelegelek&99'` (aposztrófokkal, 14 karakter) | `Tevelegelek&99` (12 karakter) |
| [`NAV_API_CALLER_TAX_NUMBER`](.env:94) | `"48952046133"` (idézőjellel, 12 karakter) | `48952046133` (11 karakter) |
**Következmény:**
- `passwordHash = SHA-512("'Tevelegelek&99'")`**ROSSZ hash** (aposztrófokkal)
- `caller_tax_number_core[:8]``'"4895204'`**ROSSZ adószám**
### 2. [`backend/app/core/config.py`](backend/app/core/config.py) - ❌ HIÁNYZIK a `strip_quotes` field_validator
A [`config.py:130-136`](backend/app/core/config.py:130) sorokban a NAV_API_* mezők definiálva vannak, de **nincs hozzáadva** a `field_validator`.
**Hiányzó kód** (beszúrandó a [`config.py:136`](backend/app/core/config.py:136) sor után):
```python
@field_validator('NAV_API_PASSWORD', 'NAV_API_SIGN_KEY', 'NAV_API_EXCHANGE_KEY', 'NAV_API_CALLER_TAX_NUMBER')
@classmethod
def strip_quotes(cls, v: str) -> str:
if v:
v = v.strip()
if len(v) >= 2 and v[0] == v[-1] and v[0] in ('"', "'"):
v = v[1:-1]
return v
```
### 3. [`backend/app/services/nav_service.py`](backend/app/services/nav_service.py) - ❌ HIÁNYZIK a `.strip()` hívás
A [`nav_service.py:134-138`](backend/app/services/nav_service.py:134) sorokban és a [`nav_service.py:127-131`](backend/app/services/nav_service.py:127) sorokban is hiányzik a `.strip()`:
```python
# JELENLEGI (hibás):
target_tax_number_core = (
tax_number
.replace("-", "")
.replace(" ", "")[:8]
)
# HELYES:
target_tax_number_core = (
tax_number
.strip()
.replace("-", "")
.replace(" ", "")[:8]
)
```
```python
# JELENLEGI (hibás) - caller_tax_number_core:
caller_tax_number_core = (
settings.NAV_API_CALLER_TAX_NUMBER
.replace("-", "")
.replace(" ", "")[:8]
)
# HELYES:
caller_tax_number_core = (
settings.NAV_API_CALLER_TAX_NUMBER
.strip()
.replace("-", "")
.replace(" ", "")[:8]
)
```
## Javítási Sorrend (Kötelező)
| # | Fájl | Művelet | Parancs |
|---|------|---------|---------|
| 1 | `.env` | Idézőjelek eltávolítása | Kézi szerkesztés |
| 2 | [`backend/app/core/config.py`](backend/app/core/config.py) | `strip_quotes` field_validator hozzáadása | Szerkesztés |
| 3 | [`backend/app/services/nav_service.py`](backend/app/services/nav_service.py) | `.strip()` hozzáadása mindkét helyen | Szerkesztés |
| 4 | Konténer újraindítás | `docker compose restart sf_api` | `docker compose restart sf_api` |
| 5 | Teszt | Lekérdezés futtatása | `docker exec sf_api python3 -c "from app.services.nav_service import NavService; import asyncio; result = asyncio.run(NavService.query_taxpayer('24742063')); print(result)"` |
## Gyökérok Elemzés
A jelenlegi `INVALID_REQUEST_SIGNATURE` hiba oka:
1. A `passwordHash` aposztrófokkal együtt lett hash-elve → a NAV szerver nem ismeri fel a jelszót
2. A `caller_tax_number` idézőjellel együtt kerül a `<user><taxNumber>` mezőbe → a NAV szerver a hívó felet sem tudja azonosítani
3. Mivel a fenti két érték hibás, a teljes `requestSignature` is érvénytelen lesz, mert a NAV szerver a felhasználó azonosítása után számolja ki a saját oldalán a várható signature-t