import { Request, Response } from 'express'; import { DyNTS_SingletonServiceBase } from '../../_services/base/singleton.service-base'; import { DyNTS_AdminApiKey_Config } from './_models/admin-api-key-config.interface'; /** * Admin API key auth service — opt-in HTTP guard a meglevo `DyNTS_Endpoint_Params.preProcesses` * mechanizmushoz. Egy env var-ban tarolt fix kulccsal valid-alja a bejovo kerest. * * **Hasznalat (host app):** * ```ts * const adminAuth = DyNTS_AdminApiKey_AuthService.getInstance(); * // opcionalis konfig: * // adminAuth.configure({ envVarName: 'MY_KEY', headerName: 'x-my-key' }); * * new DyNTS_Endpoint_Params({ * ..., * preProcesses: [adminAuth.verify, ...other], * }); * * // vagy a logs routing module-on at * DyNTS_getLogsRoutingModule({ authPreProcess: adminAuth.verify }); * ``` * * **Viselkedes:** * - env var beallitva ES helyes header → silent pass * - env var beallitva, header hianyzik / rossz → 401 DyFM_Error * - env var NINCS beallitva → 500 DyFM_Error (fail-closed; NEM silent allow) * * **Header lookup:** * 1. `x-admin-api-key` (default canonical header) * 2. `Authorization: Bearer ` (fallback ha `allowAuthorizationBearer === true`) * * **Timing-safe:** `crypto.timingSafeEqual` Buffer-konvertalassal. Length-mismatch * eseten dummy compare-rel azonos idő, hogy a kulcs-hossz ne szivarogjon ki. * * **Env var read-on-each-call:** a `verify()` minden hivasnal olvassa az env-et, * nem cache-eli. Igy a host az env-et utolagosan is allithatja (pl. config * loader az auth.service.install() utan). * * **Singleton:** `getInstance()`-szel hivd. A `.verify` mezo binding-elve van * `this`-re, igy direkt atadhato `preProcesses`-be ujracsomagolas nelkul. */ export declare class DyNTS_AdminApiKey_AuthService extends DyNTS_SingletonServiceBase { static getInstance(): DyNTS_AdminApiKey_AuthService; private envVarName; private headerName; private allowAuthorizationBearer; /** * Konfig override. Hianyzo mezok a default-okat orzik. * Hivhato barmikor — a `verify()` a friss config-ot olvassa. */ configure(config: DyNTS_AdminApiKey_Config): void; /** * Aktualis konfig olvasasa (test/diagnosztika celokra). */ getConfig(): Required; /** * Pre-process function — atadhato `DyNTS_Endpoint_Params.preProcesses`-be, * vagy `DyNTS_getLogsRoutingModule({ authPreProcess: ... })`-be. * * Throws: * - 500 ha az env var nincs beallitva (vagy ures string) * - 401 ha a header hianyzik vagy nem egyezik * * A `req`/`res` parametereket NEM modositja (a kerest tovabb engedi a tovabbi * preProcess-eknek; csak hiba eseten throw-ol). */ readonly verify: (req: Request, _res: Response) => Promise; /** * Header lookup — elobb a primer header, aztan opcionalisan az Authorization Bearer. * Az ures string is "hianyzo"-nak szamit (a Buffer.from('') es timingSafeEqual * konzisztencia miatt). */ private extractKeyFromRequest; /** * Timing-safe compare ket string kozott. Length-mismatch eseten egy dummy * compare-rel azonos idot kenyszeritunk (a kulcs-hossz nem szivaroghat ki * timing-attackal). * * crypto.timingSafeEqual KOTELEZOEN azonos Buffer-hosszt var — kulonbozo * hosszra throw-ol, ezert vizsgaljuk elobb a length-et es csak utana * compare-elunk. */ private timingSafeEquals; /** * Test-only: visszaallitja a default config-ot, hogy a specfajlok ne szivarogjak * at egymas state-jet. Production code NE hivja. */ _resetForTesting(): void; } //# sourceMappingURL=admin-api-key.auth-service.d.ts.map