95 lines
3.8 KiB
Markdown
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
|