@futdevpro/nts-dynamo 1.15.20 → 1.15.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_specifications/BACKLOG.md +2 -2
- package/build/_modules/logs/_models/file-log-entry.interface.d.ts +14 -0
- package/build/_modules/logs/_models/file-log-entry.interface.d.ts.map +1 -0
- package/build/_modules/logs/_models/file-log-entry.interface.js +3 -0
- package/build/_modules/logs/_models/file-log-entry.interface.js.map +1 -0
- package/build/_modules/logs/_models/file-log-read-result.interface.d.ts +36 -0
- package/build/_modules/logs/_models/file-log-read-result.interface.d.ts.map +1 -0
- package/build/_modules/logs/_models/file-log-read-result.interface.js +3 -0
- package/build/_modules/logs/_models/file-log-read-result.interface.js.map +1 -0
- package/build/_modules/logs/file-log.service.d.ts +46 -0
- package/build/_modules/logs/file-log.service.d.ts.map +1 -1
- package/build/_modules/logs/file-log.service.js +178 -0
- package/build/_modules/logs/file-log.service.js.map +1 -1
- package/build/_modules/logs/file-logs.controller.d.ts +41 -0
- package/build/_modules/logs/file-logs.controller.d.ts.map +1 -0
- package/build/_modules/logs/file-logs.controller.js +139 -0
- package/build/_modules/logs/file-logs.controller.js.map +1 -0
- package/build/_modules/logs/get-file-logs-routing-module.util.d.ts +32 -0
- package/build/_modules/logs/get-file-logs-routing-module.util.d.ts.map +1 -0
- package/build/_modules/logs/get-file-logs-routing-module.util.js +38 -0
- package/build/_modules/logs/get-file-logs-routing-module.util.js.map +1 -0
- package/build/_modules/logs/index.d.ts +4 -0
- package/build/_modules/logs/index.d.ts.map +1 -1
- package/build/_modules/logs/index.js +5 -1
- package/build/_modules/logs/index.js.map +1 -1
- package/package.json +1 -1
- package/src/_modules/logs/_models/file-log-entry.interface.ts +13 -0
- package/src/_modules/logs/_models/file-log-read-result.interface.ts +37 -0
- package/src/_modules/logs/file-log.service.spec.ts +139 -0
- package/src/_modules/logs/file-log.service.ts +183 -0
- package/src/_modules/logs/file-logs.controller.spec.ts +245 -0
- package/src/_modules/logs/file-logs.controller.ts +165 -0
- package/src/_modules/logs/get-file-logs-routing-module.util.ts +51 -0
- package/src/_modules/logs/index.ts +7 -0
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
details: Új admin authentikációs mechanizmus bevezetése, ahol az admin API key-t environment variable-ből olvassuk (pl. DYNTS_ADMIN_API_KEY), és ezzel lehet védeni az érzékeny / admin endpointokat. Implementálva (2026-05-17): DyNTS_AdminApiKey_AuthService (singleton) — preProcess `.verify(req, res)` fn opt-in átadható `DyNTS_Endpoint_Params.preProcesses`-be vagy `DyNTS_getLogsRoutingModule({ authPreProcess })`-be. Default env var DYNTS_ADMIN_API_KEY, header x-admin-api-key + Authorization Bearer fallback. Konfig: `configure({ envVarName, headerName, allowAuthorizationBearer })`. Timing-safe compare (crypto.timingSafeEqual + length-mismatch dummy compare). Hibák: 500 ha env nincs, 401 ha header hiányzik/rossz. Env minden híváskor olvasott (nem cache-elt). 15/15 spec + 1148/0 full suite + smoke verifikálva. Foundational a BL-003 (log fetch) és BL-004 (errors retrofit) entry-knek.
|
|
37
37
|
|
|
38
38
|
- [FEATURE] (BL-20260420-003) Server log file-ok lekérése admin endpointon keresztül
|
|
39
|
-
status:
|
|
39
|
+
status: ✅ done
|
|
40
40
|
priority: medium
|
|
41
41
|
source: user
|
|
42
42
|
area: backend
|
|
43
|
-
details: A BL-20260420-001 file-based log rendszerre épülve egy új endpoint, amin keresztül le lehet kérni a szerverről a kiírt log file-ok tartalmát (pl. paged / range / tail módon).
|
|
43
|
+
details: A BL-20260420-001 file-based log rendszerre épülve egy új endpoint, amin keresztül le lehet kérni a szerverről a kiírt log file-ok tartalmát (pl. paged / range / tail módon). Implementálva (2026-05-17): DyNTS_FileLogs_Controller (GET /list + GET /file/:filename) + DyNTS_getFileLogsRoutingModule() factory + DyNTS_FileLog_Service bővítés (listLogFiles, readLogFile, getCurrentLogFilename). Olvasási módok: tail / head / range (max 10000 sor). Safeguards: filename whitelist regex prefix-szel, path traversal védelem (resolvedPath + sep ellenőrzés), 503/404/400 helyes status code-ok. Auth opt-in: `DyNTS_getFileLogsRoutingModule({ authPreProcess: adminAuth.verify })`. Default route /file-logs. 38/38 FileLog spec (24 service + 14 controller) + 1175/0 full suite + smoke 4/4 verifikálva.
|
|
44
44
|
|
|
45
45
|
- [IMPROVEMENT] (BL-20260420-004) Errors endpointok opcionális admin API key védelme
|
|
46
46
|
status: ⏳ pending
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Egy log fajl meta-adata a listazasban.
|
|
3
|
+
*/
|
|
4
|
+
export interface DyNTS_FileLog_Entry {
|
|
5
|
+
/** Fajlnev (csak basename — NEM teljes path). */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Fajlmeret byte-ban. */
|
|
8
|
+
sizeBytes: number;
|
|
9
|
+
/** Modositasi ido ms-ban (mtimeMs). */
|
|
10
|
+
mtimeMs: number;
|
|
11
|
+
/** Igaz, ha ez az aktualis aktiv session fajlja. */
|
|
12
|
+
isCurrent: boolean;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=file-log-entry.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-log-entry.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/logs/_models/file-log-entry.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,SAAS,EAAE,OAAO,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-log-entry.interface.js","sourceRoot":"","sources":["../../../../src/_modules/logs/_models/file-log-entry.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `readLogFile()` valaszobjektum.
|
|
3
|
+
*/
|
|
4
|
+
export interface DyNTS_FileLog_ReadResult {
|
|
5
|
+
/** Fajlnev (csak basename). */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Teljes fajlmeret byte-ban. */
|
|
8
|
+
sizeBytes: number;
|
|
9
|
+
/** A fajlban talalhato osszes sor szama. */
|
|
10
|
+
totalLines: number;
|
|
11
|
+
/** A visszaadott sorok. */
|
|
12
|
+
lines: string[];
|
|
13
|
+
/** Mod amiben olvastunk: 'tail' | 'head' | 'range'. */
|
|
14
|
+
mode: 'tail' | 'head' | 'range';
|
|
15
|
+
/** Visszaadott tartomany 1-based start (range/tail/head normalizalva). */
|
|
16
|
+
rangeStart: number;
|
|
17
|
+
/** Visszaadott tartomany 1-based end (inclusive). */
|
|
18
|
+
rangeEnd: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* `readLogFile(name, options)` opciok.
|
|
22
|
+
*
|
|
23
|
+
* Egyetlen mod aktiv egyszerre. Prioritas: range > head > tail.
|
|
24
|
+
* Egyik sem megadott → default `tail: 200`.
|
|
25
|
+
*/
|
|
26
|
+
export interface DyNTS_FileLog_ReadOptions {
|
|
27
|
+
/** Utolso N sor (default mod ha semmi mas nincs). */
|
|
28
|
+
tail?: number;
|
|
29
|
+
/** Elso N sor. */
|
|
30
|
+
head?: number;
|
|
31
|
+
/** 1-based line range start (inclusive). `rangeEnd` is kell. */
|
|
32
|
+
rangeStart?: number;
|
|
33
|
+
/** 1-based line range end (inclusive). */
|
|
34
|
+
rangeEnd?: number;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=file-log-read-result.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-log-read-result.interface.d.ts","sourceRoot":"","sources":["../../../../src/_modules/logs/_models/file-log-read-result.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uDAAuD;IACvD,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAChC,0EAA0E;IAC1E,UAAU,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,qDAAqD;IACrD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-log-read-result.interface.js","sourceRoot":"","sources":["../../../../src/_modules/logs/_models/file-log-read-result.interface.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { DyNTS_SingletonServiceBase } from '../../_services/base/singleton.service-base';
|
|
2
|
+
import { DyNTS_FileLog_Entry } from './_models/file-log-entry.interface';
|
|
3
|
+
import { DyNTS_FileLog_ReadOptions, DyNTS_FileLog_ReadResult } from './_models/file-log-read-result.interface';
|
|
2
4
|
/**
|
|
3
5
|
* File-based szerver log service — duplikalja a stdout/stderr-t per-session
|
|
4
6
|
* log fajl(ok)ba, miközben a console kimenet erintetlenul marad. Az
|
|
@@ -48,6 +50,50 @@ export declare class DyNTS_FileLog_Service extends DyNTS_SingletonServiceBase {
|
|
|
48
50
|
* ha az install() sikeresen lefutott; egyebkent ures string).
|
|
49
51
|
*/
|
|
50
52
|
getCurrentLogPath(): string;
|
|
53
|
+
/**
|
|
54
|
+
* Az aktualis aktiv log fajl basename-je (NEM teljes path). Csak akkor
|
|
55
|
+
* nem-ures, ha az install() sikeresen lefutott.
|
|
56
|
+
*/
|
|
57
|
+
getCurrentLogFilename(): string;
|
|
58
|
+
/**
|
|
59
|
+
* Aktiv log dir abszolut path-ja. Csak akkor nem-ures, ha az install()
|
|
60
|
+
* sikeresen lefutott.
|
|
61
|
+
*/
|
|
62
|
+
getActiveLogDir(): string;
|
|
63
|
+
/**
|
|
64
|
+
* Aktiv filename prefix (a service config-jabol). Hasznalja a controller
|
|
65
|
+
* a request-fajlnev whitelist regex epitesehez.
|
|
66
|
+
*/
|
|
67
|
+
getFilenamePrefix(): string;
|
|
68
|
+
/**
|
|
69
|
+
* Osszes log fajl listazasa az aktiv log dir-bol. Csak a service prefix-evel
|
|
70
|
+
* matchelo fajlokat veszi (`{prefix}*.log`).
|
|
71
|
+
*
|
|
72
|
+
* Rendezes: mtime DESC (legujabb elol). Hibakat csendben elnyel — ha a dir
|
|
73
|
+
* nem letezik vagy nem olvashato, ures array-t ad vissza.
|
|
74
|
+
*/
|
|
75
|
+
listLogFiles(): DyNTS_FileLog_Entry[];
|
|
76
|
+
/**
|
|
77
|
+
* Egy konkret log fajl olvasasa, line-based mode-ban (tail / head / range).
|
|
78
|
+
*
|
|
79
|
+
* **Biztonsagi safeguards:**
|
|
80
|
+
* - Filename whitelist: `{prefix}*.log` mintara matchelo nev kotelezo
|
|
81
|
+
* - Path resolution `path.resolve(activeLogDir, name)` + `startsWith(activeLogDir)` (path traversal vedelem)
|
|
82
|
+
* - Sor szam cap: `MAX_READ_LINES` (10000)
|
|
83
|
+
*
|
|
84
|
+
* **Hibak:**
|
|
85
|
+
* - Throw `Error('not installed')` ha a service nincs install-olva
|
|
86
|
+
* - Throw `Error('invalid filename')` ha a name nem matchel a whitelist-re VAGY kilep az activeLogDir-bol
|
|
87
|
+
* - Throw `Error('file not found')` ha a fajl nem letezik
|
|
88
|
+
*
|
|
89
|
+
* A hivot kell vigyaznia hogy ezeket HTTP status code-okra forditja.
|
|
90
|
+
*/
|
|
91
|
+
readLogFile(name: string, options?: DyNTS_FileLog_ReadOptions): DyNTS_FileLog_ReadResult;
|
|
92
|
+
/**
|
|
93
|
+
* Filename whitelist ellenorzes. Csak a service prefix-evel matchelo,
|
|
94
|
+
* biztonsagos karakterkeszletu fajlnev megengedett.
|
|
95
|
+
*/
|
|
96
|
+
private isValidFilename;
|
|
51
97
|
/**
|
|
52
98
|
* Telepitve van-e (csak akkor true, ha az enabled === true es a setup nem bukott).
|
|
53
99
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-log.service.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"file-log.service.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AAEzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AA2B/G;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,qBAAsB,SAAQ,0BAA0B;IAEnE,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAI3C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,gBAAgB,CAAkD;IAC1E,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,mBAAmB,CAAa;IAExC,OAAO,CAAC,mBAAmB,CAA4C;IACvE,OAAO,CAAC,mBAAmB,CAA4C;IAGvE;;;;;;OAMG;IACH,OAAO,IAAI,IAAI;IAoEf;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;OAGG;IACH,qBAAqB,IAAI,MAAM;IAK/B;;;OAGG;IACH,eAAe,IAAI,MAAM;IAIzB;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;;;;OAMG;IACH,YAAY,IAAI,mBAAmB,EAAE;IAiCrC;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,yBAA8B,GAAG,wBAAwB;IAiF5F;;;OAGG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACH,mBAAmB,IAAI,IAAI;IAgB3B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;;OAGG;IACH,OAAO,CAAC,MAAM;IAWd;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CAoCvB"}
|
|
@@ -21,6 +21,10 @@ const DEFAULT_INCLUDE_STDOUT = true;
|
|
|
21
21
|
const DEFAULT_INCLUDE_STDERR = true;
|
|
22
22
|
/** ANSI escape code regex (szin/formazas kodok). */
|
|
23
23
|
const ANSI_ESCAPE_REGEX = /\x1b\[[0-9;]*[a-zA-Z]/g;
|
|
24
|
+
/** Max sor szam egy `readLogFile()` hivasra — vedi a memory-t nagy fajloknal. */
|
|
25
|
+
const MAX_READ_LINES = 10000;
|
|
26
|
+
/** Default tail sor szam (ha semmi mas mod nincs megadva). */
|
|
27
|
+
const DEFAULT_READ_TAIL = 200;
|
|
24
28
|
/**
|
|
25
29
|
* File-based szerver log service — duplikalja a stdout/stderr-t per-session
|
|
26
30
|
* log fajl(ok)ba, miközben a console kimenet erintetlenul marad. Az
|
|
@@ -135,6 +139,180 @@ class DyNTS_FileLog_Service extends singleton_service_base_1.DyNTS_SingletonServ
|
|
|
135
139
|
getCurrentLogPath() {
|
|
136
140
|
return this.currentLogPath;
|
|
137
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Az aktualis aktiv log fajl basename-je (NEM teljes path). Csak akkor
|
|
144
|
+
* nem-ures, ha az install() sikeresen lefutott.
|
|
145
|
+
*/
|
|
146
|
+
getCurrentLogFilename() {
|
|
147
|
+
if (!this.currentLogPath) {
|
|
148
|
+
return '';
|
|
149
|
+
}
|
|
150
|
+
return path.basename(this.currentLogPath);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Aktiv log dir abszolut path-ja. Csak akkor nem-ures, ha az install()
|
|
154
|
+
* sikeresen lefutott.
|
|
155
|
+
*/
|
|
156
|
+
getActiveLogDir() {
|
|
157
|
+
return this.activeLogDir;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Aktiv filename prefix (a service config-jabol). Hasznalja a controller
|
|
161
|
+
* a request-fajlnev whitelist regex epitesehez.
|
|
162
|
+
*/
|
|
163
|
+
getFilenamePrefix() {
|
|
164
|
+
return this.filenamePrefix;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Osszes log fajl listazasa az aktiv log dir-bol. Csak a service prefix-evel
|
|
168
|
+
* matchelo fajlokat veszi (`{prefix}*.log`).
|
|
169
|
+
*
|
|
170
|
+
* Rendezes: mtime DESC (legujabb elol). Hibakat csendben elnyel — ha a dir
|
|
171
|
+
* nem letezik vagy nem olvashato, ures array-t ad vissza.
|
|
172
|
+
*/
|
|
173
|
+
listLogFiles() {
|
|
174
|
+
if (!this.activeLogDir || !this.installed) {
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
177
|
+
const currentBasename = this.getCurrentLogFilename();
|
|
178
|
+
const entries = [];
|
|
179
|
+
try {
|
|
180
|
+
const dirContents = fs.readdirSync(this.activeLogDir);
|
|
181
|
+
for (const name of dirContents) {
|
|
182
|
+
if (!name.startsWith(this.filenamePrefix) || !name.endsWith(DEFAULT_FILENAME_SUFFIX)) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
const fullPath = path.join(this.activeLogDir, name);
|
|
186
|
+
try {
|
|
187
|
+
const stats = fs.statSync(fullPath);
|
|
188
|
+
if (!stats.isFile()) {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
entries.push({
|
|
192
|
+
name: name,
|
|
193
|
+
sizeBytes: stats.size,
|
|
194
|
+
mtimeMs: stats.mtimeMs,
|
|
195
|
+
isCurrent: name === currentBasename,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// egy fajlonkenti hiba ne szakitsa meg a listat
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// dir read hiba → ures listat adunk vissza
|
|
205
|
+
return [];
|
|
206
|
+
}
|
|
207
|
+
// Legujabb elol
|
|
208
|
+
entries.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
209
|
+
return entries;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Egy konkret log fajl olvasasa, line-based mode-ban (tail / head / range).
|
|
213
|
+
*
|
|
214
|
+
* **Biztonsagi safeguards:**
|
|
215
|
+
* - Filename whitelist: `{prefix}*.log` mintara matchelo nev kotelezo
|
|
216
|
+
* - Path resolution `path.resolve(activeLogDir, name)` + `startsWith(activeLogDir)` (path traversal vedelem)
|
|
217
|
+
* - Sor szam cap: `MAX_READ_LINES` (10000)
|
|
218
|
+
*
|
|
219
|
+
* **Hibak:**
|
|
220
|
+
* - Throw `Error('not installed')` ha a service nincs install-olva
|
|
221
|
+
* - Throw `Error('invalid filename')` ha a name nem matchel a whitelist-re VAGY kilep az activeLogDir-bol
|
|
222
|
+
* - Throw `Error('file not found')` ha a fajl nem letezik
|
|
223
|
+
*
|
|
224
|
+
* A hivot kell vigyaznia hogy ezeket HTTP status code-okra forditja.
|
|
225
|
+
*/
|
|
226
|
+
readLogFile(name, options = {}) {
|
|
227
|
+
if (!this.installed || !this.activeLogDir) {
|
|
228
|
+
throw new Error('FileLog service not installed');
|
|
229
|
+
}
|
|
230
|
+
// Whitelist regex: csak a service prefix-evel matchelo fajlnev
|
|
231
|
+
if (!this.isValidFilename(name)) {
|
|
232
|
+
throw new Error('invalid filename');
|
|
233
|
+
}
|
|
234
|
+
// Path resolve + traversal check
|
|
235
|
+
const resolvedPath = path.resolve(this.activeLogDir, name);
|
|
236
|
+
const resolvedDir = path.resolve(this.activeLogDir);
|
|
237
|
+
// path.sep + sufix ellenőrzéssel megelőzzük a hasonló prefixű dir átverést
|
|
238
|
+
// (pl. '/logs' vs '/logs-other'); a resolvedPath az activeLogDir-en BELUL
|
|
239
|
+
// kell legyen.
|
|
240
|
+
if (!resolvedPath.startsWith(resolvedDir + path.sep) && resolvedPath !== resolvedDir) {
|
|
241
|
+
throw new Error('invalid filename');
|
|
242
|
+
}
|
|
243
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
244
|
+
throw new Error('file not found');
|
|
245
|
+
}
|
|
246
|
+
const stats = fs.statSync(resolvedPath);
|
|
247
|
+
if (!stats.isFile()) {
|
|
248
|
+
throw new Error('file not found');
|
|
249
|
+
}
|
|
250
|
+
// Olvass + split soroka. UTF-8 encoding alapertelmezett. Nagy fajloknal a
|
|
251
|
+
// teljes betoltes nem ideal, de a 10000-soros cap es a Stream-based
|
|
252
|
+
// optimization egy kesobbi iteracio lehet ha kell.
|
|
253
|
+
const fullContent = fs.readFileSync(resolvedPath, 'utf-8');
|
|
254
|
+
// Split a sorvegekre — utolso ures stringet kivagjuk ha a fajl
|
|
255
|
+
// sorvégzodessel zarult (regenerált sor szám hibakerulest celozzuk meg)
|
|
256
|
+
const allLines = fullContent.split(/\r?\n/);
|
|
257
|
+
if (allLines.length > 0 && allLines[allLines.length - 1] === '') {
|
|
258
|
+
allLines.pop();
|
|
259
|
+
}
|
|
260
|
+
const totalLines = allLines.length;
|
|
261
|
+
// Mod meghatarozasa: range > head > tail
|
|
262
|
+
let mode;
|
|
263
|
+
let startIdx;
|
|
264
|
+
let endIdx; // exclusive
|
|
265
|
+
if (options.rangeStart !== undefined && options.rangeEnd !== undefined) {
|
|
266
|
+
mode = 'range';
|
|
267
|
+
const start1 = Math.max(1, Math.floor(options.rangeStart));
|
|
268
|
+
const end1 = Math.max(start1, Math.floor(options.rangeEnd));
|
|
269
|
+
startIdx = Math.max(0, Math.min(totalLines, start1 - 1));
|
|
270
|
+
endIdx = Math.max(startIdx, Math.min(totalLines, end1));
|
|
271
|
+
// Cap
|
|
272
|
+
if (endIdx - startIdx > MAX_READ_LINES) {
|
|
273
|
+
endIdx = startIdx + MAX_READ_LINES;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
else if (options.head !== undefined) {
|
|
277
|
+
mode = 'head';
|
|
278
|
+
const headN = Math.min(Math.max(1, Math.floor(options.head)), MAX_READ_LINES);
|
|
279
|
+
startIdx = 0;
|
|
280
|
+
endIdx = Math.min(totalLines, headN);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
mode = 'tail';
|
|
284
|
+
const tailN = Math.min(Math.max(1, Math.floor(options.tail ?? DEFAULT_READ_TAIL)), MAX_READ_LINES);
|
|
285
|
+
startIdx = Math.max(0, totalLines - tailN);
|
|
286
|
+
endIdx = totalLines;
|
|
287
|
+
}
|
|
288
|
+
const lines = allLines.slice(startIdx, endIdx);
|
|
289
|
+
return {
|
|
290
|
+
name: path.basename(resolvedPath),
|
|
291
|
+
sizeBytes: stats.size,
|
|
292
|
+
totalLines: totalLines,
|
|
293
|
+
lines: lines,
|
|
294
|
+
mode: mode,
|
|
295
|
+
rangeStart: startIdx + 1, // 1-based, inclusive
|
|
296
|
+
rangeEnd: Math.max(startIdx, endIdx), // 1-based, inclusive ha lines van; egyebkent 0-szeru
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Filename whitelist ellenorzes. Csak a service prefix-evel matchelo,
|
|
301
|
+
* biztonsagos karakterkeszletu fajlnev megengedett.
|
|
302
|
+
*/
|
|
303
|
+
isValidFilename(name) {
|
|
304
|
+
if (typeof name !== 'string' || name.length === 0 || name.length > 256) {
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
307
|
+
// Path-szeparatorokat kifejezetten tiltjuk (mar a regex is, de gyors check)
|
|
308
|
+
if (name.includes('/') || name.includes('\\') || name.includes('..')) {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
// `{prefix}[\w\-.]+\.log` — szigoru ASCII set
|
|
312
|
+
const escapedPrefix = this.filenamePrefix.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
313
|
+
const regex = new RegExp(`^${escapedPrefix}[\\w\\-.]+\\.log$`);
|
|
314
|
+
return regex.test(name);
|
|
315
|
+
}
|
|
138
316
|
/**
|
|
139
317
|
* Telepitve van-e (csak akkor true, ha az enabled === true es a setup nem bukott).
|
|
140
318
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-log.service.js","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"file-log.service.js","sourceRoot":"","sources":["../../../src/_modules/logs/file-log.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
import { DyNTS_Controller } from '../../_services/route/controller.service';
|
|
3
|
+
/**
|
|
4
|
+
* Config a `DyNTS_FileLogs_Controller`-hez (opcionalis auth pre-process).
|
|
5
|
+
*/
|
|
6
|
+
export interface DyNTS_FileLogsController_Config {
|
|
7
|
+
/**
|
|
8
|
+
* Opcionalis auth pre-process — ha megadod, a controller-en levo endpointok
|
|
9
|
+
* vedettek. Tipikusan: `DyNTS_AdminApiKey_AuthService.getInstance().verify`.
|
|
10
|
+
*/
|
|
11
|
+
authPreProcess?: (req: Request, res: Response) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* NTS File Logs Controller — endpointok a `DyNTS_FileLog_Service` altal irt
|
|
15
|
+
* log fajl-ok lekeresehez.
|
|
16
|
+
*
|
|
17
|
+
* **Endpoint-ok:**
|
|
18
|
+
* GET /list — log fajlok listazasa (basename, sizeBytes, mtimeMs, isCurrent)
|
|
19
|
+
* GET /file/:filename — egy fajl olvasasa, line-based: ?tail=N | ?head=N | ?rangeStart=A&rangeEnd=B
|
|
20
|
+
*
|
|
21
|
+
* **Mount-olas (host app):**
|
|
22
|
+
* app.use(DyNTS_getFileLogsRoutingModule({
|
|
23
|
+
* authPreProcess: adminAuth.verify, // opcionalis
|
|
24
|
+
* route: '/admin/file-logs', // default '/file-logs'
|
|
25
|
+
* }));
|
|
26
|
+
*
|
|
27
|
+
* **Status code-ok:**
|
|
28
|
+
* 200 — sikeres response (lehet ures lista is)
|
|
29
|
+
* 400 — invalid query parameter (tail/head/range)
|
|
30
|
+
* 401 — auth pre-process throw-ol DyFM_Error(401)
|
|
31
|
+
* 404 — fajl nem letezik vagy nem megfelelo nev (whitelist failure / path traversal kiserlet)
|
|
32
|
+
* 503 — a DyNTS_FileLog_Service nincs install-olva (vagy file_log.enabled=false)
|
|
33
|
+
*/
|
|
34
|
+
export declare class DyNTS_FileLogs_Controller extends DyNTS_Controller {
|
|
35
|
+
private static config;
|
|
36
|
+
static configure(config: DyNTS_FileLogsController_Config): void;
|
|
37
|
+
static getInstance(): DyNTS_FileLogs_Controller;
|
|
38
|
+
private readonly fileLogService;
|
|
39
|
+
setupEndpoints(): void;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=file-logs.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-logs.controller.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/file-logs.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAI5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAQ5E;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAGD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,yBAA0B,SAAQ,gBAAgB;IAE7D,OAAO,CAAC,MAAM,CAAC,MAAM,CAAuC;IAE5D,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,+BAA+B,GAAG,IAAI;IAI/D,MAAM,CAAC,WAAW,IAAI,yBAAyB;IAI/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA8D;IAE7F,cAAc,IAAI,IAAI;CAyGvB"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_FileLogs_Controller = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const controller_service_1 = require("../../_services/route/controller.service");
|
|
6
|
+
const endpoint_params_control_model_1 = require("../../_models/control-models/endpoint-params.control-model");
|
|
7
|
+
const file_log_service_1 = require("./file-log.service");
|
|
8
|
+
/**
|
|
9
|
+
* NTS File Logs Controller — endpointok a `DyNTS_FileLog_Service` altal irt
|
|
10
|
+
* log fajl-ok lekeresehez.
|
|
11
|
+
*
|
|
12
|
+
* **Endpoint-ok:**
|
|
13
|
+
* GET /list — log fajlok listazasa (basename, sizeBytes, mtimeMs, isCurrent)
|
|
14
|
+
* GET /file/:filename — egy fajl olvasasa, line-based: ?tail=N | ?head=N | ?rangeStart=A&rangeEnd=B
|
|
15
|
+
*
|
|
16
|
+
* **Mount-olas (host app):**
|
|
17
|
+
* app.use(DyNTS_getFileLogsRoutingModule({
|
|
18
|
+
* authPreProcess: adminAuth.verify, // opcionalis
|
|
19
|
+
* route: '/admin/file-logs', // default '/file-logs'
|
|
20
|
+
* }));
|
|
21
|
+
*
|
|
22
|
+
* **Status code-ok:**
|
|
23
|
+
* 200 — sikeres response (lehet ures lista is)
|
|
24
|
+
* 400 — invalid query parameter (tail/head/range)
|
|
25
|
+
* 401 — auth pre-process throw-ol DyFM_Error(401)
|
|
26
|
+
* 404 — fajl nem letezik vagy nem megfelelo nev (whitelist failure / path traversal kiserlet)
|
|
27
|
+
* 503 — a DyNTS_FileLog_Service nincs install-olva (vagy file_log.enabled=false)
|
|
28
|
+
*/
|
|
29
|
+
class DyNTS_FileLogs_Controller extends controller_service_1.DyNTS_Controller {
|
|
30
|
+
static config = {};
|
|
31
|
+
static configure(config) {
|
|
32
|
+
DyNTS_FileLogs_Controller.config = config;
|
|
33
|
+
}
|
|
34
|
+
static getInstance() {
|
|
35
|
+
return DyNTS_FileLogs_Controller.getSingletonInstance();
|
|
36
|
+
}
|
|
37
|
+
fileLogService = file_log_service_1.DyNTS_FileLog_Service.getInstance();
|
|
38
|
+
setupEndpoints() {
|
|
39
|
+
const preProcesses = [];
|
|
40
|
+
if (DyNTS_FileLogs_Controller.config.authPreProcess) {
|
|
41
|
+
preProcesses.push(DyNTS_FileLogs_Controller.config.authPreProcess);
|
|
42
|
+
}
|
|
43
|
+
this.endpoints = [
|
|
44
|
+
// GET /list — fajllista
|
|
45
|
+
new endpoint_params_control_model_1.DyNTS_Endpoint_Params({
|
|
46
|
+
name: 'listFileLogs',
|
|
47
|
+
type: fsm_dynamo_1.DyFM_HttpCallType.get,
|
|
48
|
+
endpoint: '/list',
|
|
49
|
+
preProcesses: preProcesses,
|
|
50
|
+
logRequest: false,
|
|
51
|
+
tasks: [
|
|
52
|
+
async (req, res) => {
|
|
53
|
+
if (!this.fileLogService.isInstalled()) {
|
|
54
|
+
res.status(503).send({
|
|
55
|
+
error: 'FileLog service is not installed.',
|
|
56
|
+
hint: 'Set DyNTS_global_settings.log_settings.file_log.enabled = true and call DyNTS_FileLog_Service.getInstance().install() at server startup.',
|
|
57
|
+
});
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const files = this.fileLogService.listLogFiles();
|
|
61
|
+
const totalSizeBytes = files.reduce((acc, f) => acc + f.sizeBytes, 0);
|
|
62
|
+
res.send({
|
|
63
|
+
count: files.length,
|
|
64
|
+
totalSizeBytes: totalSizeBytes,
|
|
65
|
+
files: files,
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
}),
|
|
70
|
+
// GET /file/:filename — egy fajl olvasasa tail / head / range modban
|
|
71
|
+
new endpoint_params_control_model_1.DyNTS_Endpoint_Params({
|
|
72
|
+
name: 'readFileLog',
|
|
73
|
+
type: fsm_dynamo_1.DyFM_HttpCallType.get,
|
|
74
|
+
endpoint: '/file/:filename',
|
|
75
|
+
preProcesses: preProcesses,
|
|
76
|
+
logRequest: false,
|
|
77
|
+
tasks: [
|
|
78
|
+
async (req, res) => {
|
|
79
|
+
if (!this.fileLogService.isInstalled()) {
|
|
80
|
+
res.status(503).send({
|
|
81
|
+
error: 'FileLog service is not installed.',
|
|
82
|
+
});
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const filename = req.params.filename;
|
|
86
|
+
const options = {};
|
|
87
|
+
// Mod prioritas: range > head > tail. Csak a megadott mezo aktivalja az adott modot.
|
|
88
|
+
if (req.query.rangeStart !== undefined && req.query.rangeEnd !== undefined) {
|
|
89
|
+
const start = parseInt(req.query.rangeStart, 10);
|
|
90
|
+
const end = parseInt(req.query.rangeEnd, 10);
|
|
91
|
+
if (!Number.isFinite(start) || !Number.isFinite(end) || start < 1 || end < start) {
|
|
92
|
+
res.status(400).send({ error: 'Invalid rangeStart/rangeEnd query parameters' });
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
options.rangeStart = start;
|
|
96
|
+
options.rangeEnd = end;
|
|
97
|
+
}
|
|
98
|
+
else if (req.query.head !== undefined) {
|
|
99
|
+
const head = parseInt(req.query.head, 10);
|
|
100
|
+
if (!Number.isFinite(head) || head < 1) {
|
|
101
|
+
res.status(400).send({ error: 'Invalid head query parameter' });
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
options.head = head;
|
|
105
|
+
}
|
|
106
|
+
else if (req.query.tail !== undefined) {
|
|
107
|
+
const tail = parseInt(req.query.tail, 10);
|
|
108
|
+
if (!Number.isFinite(tail) || tail < 1) {
|
|
109
|
+
res.status(400).send({ error: 'Invalid tail query parameter' });
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
options.tail = tail;
|
|
113
|
+
}
|
|
114
|
+
// egyik query mezo sincs → service alapertelmezett tail (200)
|
|
115
|
+
try {
|
|
116
|
+
const result = this.fileLogService.readLogFile(filename, options);
|
|
117
|
+
res.send(result);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
121
|
+
if (msg === 'FileLog service not installed') {
|
|
122
|
+
res.status(503).send({ error: msg });
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
if (msg === 'invalid filename' || msg === 'file not found') {
|
|
126
|
+
res.status(404).send({ error: msg, filename: filename });
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
// Egyeb hibak (pl. FS read failure) — 500
|
|
130
|
+
res.status(500).send({ error: msg });
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
],
|
|
134
|
+
}),
|
|
135
|
+
];
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.DyNTS_FileLogs_Controller = DyNTS_FileLogs_Controller;
|
|
139
|
+
//# sourceMappingURL=file-logs.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-logs.controller.js","sourceRoot":"","sources":["../../../src/_modules/logs/file-logs.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DyNTS_RoutingModule } from '../../_services/route/routing-module.service';
|
|
2
|
+
import { DyNTS_FileLogsController_Config } from './file-logs.controller';
|
|
3
|
+
/**
|
|
4
|
+
* Config a `DyNTS_getFileLogsRoutingModule()`-hoz.
|
|
5
|
+
*/
|
|
6
|
+
export interface DyNTS_FileLogsRoutingModule_Config extends DyNTS_FileLogsController_Config {
|
|
7
|
+
/** Route prefix. Default: `/file-logs`. */
|
|
8
|
+
route?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Letrehoz egy routing module-t a `DyNTS_FileLogs_Controller`-rel.
|
|
12
|
+
*
|
|
13
|
+
* **Hasznalat (auth nelkul, fejlesztoi env):**
|
|
14
|
+
* ```ts
|
|
15
|
+
* app.use(DyNTS_getFileLogsRoutingModule());
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* **Hasznalat (admin API key auth-tal — javasolt produkcios env-re):**
|
|
19
|
+
* ```ts
|
|
20
|
+
* const adminAuth = DyNTS_AdminApiKey_AuthService.getInstance();
|
|
21
|
+
* app.use(DyNTS_getFileLogsRoutingModule({
|
|
22
|
+
* authPreProcess: adminAuth.verify,
|
|
23
|
+
* route: '/admin/file-logs', // opcionalis override
|
|
24
|
+
* }));
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* **Elofeltetel:** `DyNTS_FileLog_Service.getInstance().install()` lefutott
|
|
28
|
+
* a szerver startup-on (es a `log_settings.file_log.enabled = true`).
|
|
29
|
+
* Egyebkent a controller endpointjai 503-at adnak.
|
|
30
|
+
*/
|
|
31
|
+
export declare function DyNTS_getFileLogsRoutingModule(config?: DyNTS_FileLogsRoutingModule_Config): DyNTS_RoutingModule;
|
|
32
|
+
//# sourceMappingURL=get-file-logs-routing-module.util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-file-logs-routing-module.util.d.ts","sourceRoot":"","sources":["../../../src/_modules/logs/get-file-logs-routing-module.util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAEnF,OAAO,EAA6B,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AAGpG;;GAEG;AACH,MAAM,WAAW,kCAAmC,SAAQ,+BAA+B;IACzF,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,CAAC,EAAE,kCAAkC,GAC1C,mBAAmB,CAYrB"}
|