@panguard-ai/threat-cloud 0.2.1 → 0.2.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3,5 +3,5 @@ export { ThreatCloudDB } from './database.js';
3
3
  export { LLMReviewer } from './llm-reviewer.js';
4
4
  export { BackupManager } from './backup.js';
5
5
  export type { BackupResult } from './backup.js';
6
- export type { AnonymizedThreatData, ThreatCloudRule, ThreatStats, ServerConfig, ApiResponse, ATRProposal, SkillThreatSubmission, } from './types.js';
6
+ export type { AnonymizedThreatData, ThreatCloudRule, ThreatStats, ServerConfig, ApiResponse, ATRProposal, SkillThreatSubmission, SkillBlacklistEntry, } from './types.js';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"llm-reviewer.d.ts","sourceRoot":"","sources":["../src/llm-reviewer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAgBnD;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM;IAM7D,sEAAsE;IACtE,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAmClD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAmCzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqExB;;;OAGG;IACH,OAAO,CAAC,YAAY;CAsCrB"}
1
+ {"version":3,"file":"llm-reviewer.d.ts","sourceRoot":"","sources":["../src/llm-reviewer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAgBnD;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,MAAM;IAM7D,sEAAsE;IACtE,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAmClD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAmCzB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAyExB;;;OAGG;IACH,OAAO,CAAC,YAAY;CA0CrB"}
@@ -111,9 +111,7 @@ Output ONLY valid JSON (no markdown, no explanation outside the JSON):
111
111
  const requestBody = JSON.stringify({
112
112
  model: this.model,
113
113
  max_tokens: 1024,
114
- messages: [
115
- { role: 'user', content: prompt },
116
- ],
114
+ messages: [{ role: 'user', content: prompt }],
117
115
  });
118
116
  const options = {
119
117
  hostname: 'api.anthropic.com',
@@ -1 +1 @@
1
- {"version":3,"file":"llm-reviewer.js","sourceRoot":"","sources":["../src/llm-reviewer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm-reviewer.js","sourceRoot":"","sources":["../src/llm-reviewer.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -14,6 +14,7 @@
14
14
  * - GET /api/yara-rules Fetch YARA rules (?since= filter)
15
15
  * - GET /api/feeds/ip-blocklist IP blocklist feed (text/plain, ?minReputation=)
16
16
  * - GET /api/feeds/domain-blocklist Domain blocklist feed (text/plain, ?minReputation=)
17
+ * - GET /api/skill-blacklist Community skill blacklist (aggregated threats)
17
18
  * - GET /health Health check
18
19
  *
19
20
  * @module @panguard-ai/threat-cloud/server
@@ -40,7 +41,7 @@ export declare class ThreatCloudServer {
40
41
  private handleRequest;
41
42
  /** POST /api/threats - Upload anonymized threat data (single or batch) */
42
43
  private handlePostThreat;
43
- /** GET /api/rules?since=<ISO timestamp> */
44
+ /** GET /api/rules?since=<ISO>&category=<cat>&severity=<sev>&source=<src> */
44
45
  private handleGetRules;
45
46
  /** POST /api/rules - Publish rules (single or batch) */
46
47
  private handlePostRule;
@@ -64,8 +65,16 @@ export declare class ThreatCloudServer {
64
65
  private handlePostSkillWhitelist;
65
66
  /** GET /api/skill-whitelist - Fetch community-confirmed safe skills */
66
67
  private handleGetSkillWhitelist;
68
+ /**
69
+ * GET /api/skill-blacklist?minReports=3&minAvgRisk=70
70
+ * Fetch community skill blacklist (aggregated from skill threat reports)
71
+ * 取得社群技能黑名單(從技能威脅回報聚合)
72
+ */
73
+ private handleGetSkillBlacklist;
67
74
  /** Anonymize IP by zeroing last octet / 匿名化 IP */
68
75
  private anonymizeIP;
76
+ /** Serve admin dashboard HTML (requires admin key or returns login page) */
77
+ private serveAdminDashboard;
69
78
  /** Check admin API key for write-protected endpoints / 檢查管理員 API 金鑰 */
70
79
  private checkAdminAuth;
71
80
  /** Rate limit check / 速率限制檢查 */
@@ -74,5 +83,10 @@ export declare class ThreatCloudServer {
74
83
  private readBody;
75
84
  /** Send JSON response / 發送 JSON 回應 */
76
85
  private sendJson;
86
+ /**
87
+ * Seed rules from bundled config/ directory on first startup.
88
+ * Looks for config/ in cwd, relative to this file, or common Docker paths.
89
+ */
90
+ private seedFromBundled;
77
91
  }
78
92
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAA0F,MAAM,YAAY,CAAC;AAcvI;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,UAAU,CAA0C;IAE5D,kDAAkD;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAkB;gBAEnD,MAAM,EAAE,YAAY;IAQhC,+BAA+B;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B5B,8BAA8B;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAeb,aAAa;IAyJ3B,0EAA0E;YAC5D,gBAAgB;IAwB9B,2CAA2C;IAC3C,OAAO,CAAC,cAAc;IAWtB,wDAAwD;YAC1C,cAAc;IAqB5B,qBAAqB;IACrB,OAAO,CAAC,cAAc;IAMtB,uEAAuE;YACzD,qBAAqB;IAqCnC,8DAA8D;YAChD,qBAAqB;IAcnC,+DAA+D;YACjD,qBAAqB;IA4BnC,0EAA0E;IAC1E,OAAO,CAAC,iBAAiB;IAQzB,yDAAyD;IACzD,OAAO,CAAC,kBAAkB;IAQ1B,oFAAoF;IACpF,OAAO,CAAC,oBAAoB;IAW5B,4FAA4F;IAC5F,OAAO,CAAC,wBAAwB;IAWhC,qEAAqE;YACvD,wBAAwB;IAkBtC,uEAAuE;IACvE,OAAO,CAAC,uBAAuB;IAK/B,kDAAkD;IAClD,OAAO,CAAC,WAAW;IAiBnB,uEAAuE;IACvE,OAAO,CAAC,cAAc;IAOtB,gCAAgC;IAChC,OAAO,CAAC,cAAc;IAWtB,wDAAwD;IACxD,OAAO,CAAC,QAAQ;IAoBhB,sCAAsC;IACtC,OAAO,CAAC,QAAQ;CAIjB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AASH,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,YAAY,CAAC;AAoBpB;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAgB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,UAAU,CAA0C;IAE5D,kDAAkD;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAkB;gBAEnD,MAAM,EAAE,YAAY;IAQhC,+BAA+B;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmD5B,8BAA8B;IACxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAeb,aAAa;IA8K3B,0EAA0E;YAC5D,gBAAgB;IAuC9B,4EAA4E;IAC5E,OAAO,CAAC,cAAc;IAkBtB,wDAAwD;YAC1C,cAAc;IAoB5B,qBAAqB;IACrB,OAAO,CAAC,cAAc;IAMtB,uEAAuE;YACzD,qBAAqB;IA4CnC,8DAA8D;YAChD,qBAAqB;IAiBnC,+DAA+D;YACjD,qBAAqB;IA+BnC,0EAA0E;IAC1E,OAAO,CAAC,iBAAiB;IAQzB,yDAAyD;IACzD,OAAO,CAAC,kBAAkB;IAQ1B,oFAAoF;IACpF,OAAO,CAAC,oBAAoB;IAW5B,4FAA4F;IAC5F,OAAO,CAAC,wBAAwB;IAWhC,qEAAqE;YACvD,wBAAwB;IAqBtC,uEAAuE;IACvE,OAAO,CAAC,uBAAuB;IAK/B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAU/B,kDAAkD;IAClD,OAAO,CAAC,WAAW;IAiBnB,4EAA4E;IAC5E,OAAO,CAAC,mBAAmB;IAQ3B,uEAAuE;IACvE,OAAO,CAAC,cAAc;IAOtB,gCAAgC;IAChC,OAAO,CAAC,cAAc;IAWtB,wDAAwD;IACxD,OAAO,CAAC,QAAQ;IAoBhB,sCAAsC;IACtC,OAAO,CAAC,QAAQ;IAKhB;;;OAGG;IACH,OAAO,CAAC,eAAe;CAgHxB"}
package/dist/server.js CHANGED
@@ -14,17 +14,26 @@
14
14
  * - GET /api/yara-rules Fetch YARA rules (?since= filter)
15
15
  * - GET /api/feeds/ip-blocklist IP blocklist feed (text/plain, ?minReputation=)
16
16
  * - GET /api/feeds/domain-blocklist Domain blocklist feed (text/plain, ?minReputation=)
17
+ * - GET /api/skill-blacklist Community skill blacklist (aggregated threats)
17
18
  * - GET /health Health check
18
19
  *
19
20
  * @module @panguard-ai/threat-cloud/server
20
21
  */
21
22
  import { createServer } from 'node:http';
23
+ import { readdirSync, readFileSync, statSync } from 'node:fs';
24
+ import { join, basename, relative, dirname } from 'node:path';
25
+ import { fileURLToPath } from 'node:url';
22
26
  import { ThreatCloudDB } from './database.js';
23
27
  import { LLMReviewer } from './llm-reviewer.js';
28
+ import { getAdminHTML } from './admin-dashboard.js';
24
29
  /** Simple structured logger for threat-cloud (no core dependency) */
25
30
  const log = {
26
- info: (msg) => { process.stdout.write(`[threat-cloud] ${msg}\n`); },
27
- error: (msg, err) => { process.stderr.write(`[threat-cloud] ERROR ${msg}${err ? `: ${err instanceof Error ? err.message : String(err)}` : ''}\n`); },
31
+ info: (msg) => {
32
+ process.stdout.write(`[threat-cloud] ${msg}\n`);
33
+ },
34
+ error: (msg, err) => {
35
+ process.stderr.write(`[threat-cloud] ERROR ${msg}${err ? `: ${err instanceof Error ? err.message : String(err)}` : ''}\n`);
36
+ },
28
37
  };
29
38
  /**
30
39
  * Threat Cloud API Server
@@ -57,6 +66,31 @@ export class ThreatCloudServer {
57
66
  if (this.llmReviewer) {
58
67
  log.info('LLM reviewer enabled for ATR proposal review');
59
68
  }
69
+ // Auto-seed rules from bundled config/ if DB is empty (first startup)
70
+ const stats = this.db.getStats();
71
+ if (stats.totalRules === 0) {
72
+ log.info('First startup detected — seeding bundled rules...');
73
+ try {
74
+ const seeded = this.seedFromBundled();
75
+ log.info(`Seeded ${seeded} rules into database`);
76
+ }
77
+ catch (err) {
78
+ log.error('Rule seeding failed', err);
79
+ }
80
+ }
81
+ else {
82
+ log.info(`Database: ${stats.totalRules} rules, ${stats.totalThreats} threats`);
83
+ }
84
+ // Backfill classification for existing unclassified rules (one-time on startup)
85
+ try {
86
+ const backfilled = this.db.backfillClassification();
87
+ if (backfilled > 0) {
88
+ log.info(`Backfilled classification for ${backfilled} rules`);
89
+ }
90
+ }
91
+ catch (err) {
92
+ log.error('Classification backfill failed', err);
93
+ }
60
94
  // Start promotion cron (every 15 minutes)
61
95
  this.promotionTimer = setInterval(() => {
62
96
  try {
@@ -112,7 +146,8 @@ export class ThreatCloudServer {
112
146
  }
113
147
  }
114
148
  // CORS — restrict to known origins
115
- const allowedOrigins = (process.env['CORS_ALLOWED_ORIGINS'] ?? 'https://panguard.ai,https://www.panguard.ai').split(',');
149
+ const allowedOrigins = (process.env['CORS_ALLOWED_ORIGINS'] ??
150
+ 'https://panguard.ai,https://www.panguard.ai,https://tc.panguard.ai,https://get.panguard.ai,https://docs.panguard.ai').split(',');
116
151
  const origin = req.headers.origin ?? '';
117
152
  if (allowedOrigins.includes(origin)) {
118
153
  res.setHeader('Access-Control-Allow-Origin', origin);
@@ -127,7 +162,13 @@ export class ThreatCloudServer {
127
162
  try {
128
163
  switch (pathname) {
129
164
  case '/health':
130
- this.sendJson(res, 200, { ok: true, data: { status: 'healthy', uptime: process.uptime() } });
165
+ this.sendJson(res, 200, {
166
+ ok: true,
167
+ data: { status: 'healthy', uptime: process.uptime() },
168
+ });
169
+ break;
170
+ case '/admin':
171
+ this.serveAdminDashboard(req, res);
131
172
  break;
132
173
  case '/api/threats':
133
174
  if (req.method === 'POST') {
@@ -143,7 +184,10 @@ export class ThreatCloudServer {
143
184
  }
144
185
  else if (req.method === 'POST') {
145
186
  if (!this.checkAdminAuth(req)) {
146
- this.sendJson(res, 403, { ok: false, error: 'Admin API key required for rule publishing' });
187
+ this.sendJson(res, 403, {
188
+ ok: false,
189
+ error: 'Admin API key required for rule publishing',
190
+ });
147
191
  break;
148
192
  }
149
193
  await this.handlePostRule(req, res);
@@ -227,6 +271,14 @@ export class ThreatCloudServer {
227
271
  this.sendJson(res, 405, { ok: false, error: 'Method not allowed' });
228
272
  }
229
273
  break;
274
+ case '/api/skill-blacklist':
275
+ if (req.method === 'GET') {
276
+ this.handleGetSkillBlacklist(url, res);
277
+ }
278
+ else {
279
+ this.sendJson(res, 405, { ok: false, error: 'Method not allowed' });
280
+ }
281
+ break;
230
282
  default:
231
283
  this.sendJson(res, 404, { ok: false, error: 'Not found' });
232
284
  }
@@ -246,23 +298,41 @@ export class ThreatCloudServer {
246
298
  : [parsed];
247
299
  for (const data of events) {
248
300
  // Validate required fields
249
- if (!data.attackSourceIP || !data.attackType || !data.mitreTechnique || !data.sigmaRuleMatched || !data.timestamp || !data.region) {
250
- this.sendJson(res, 400, { ok: false, error: 'Missing required fields: attackSourceIP, attackType, mitreTechnique, sigmaRuleMatched, timestamp, region' });
301
+ if (!data.attackSourceIP ||
302
+ !data.attackType ||
303
+ !data.mitreTechnique ||
304
+ !data.sigmaRuleMatched ||
305
+ !data.timestamp ||
306
+ !data.region) {
307
+ this.sendJson(res, 400, {
308
+ ok: false,
309
+ error: 'Missing required fields: attackSourceIP, attackType, mitreTechnique, sigmaRuleMatched, timestamp, region',
310
+ });
251
311
  return;
252
312
  }
253
313
  // Anonymize IP further (zero last octet if not already)
254
314
  data.attackSourceIP = this.anonymizeIP(data.attackSourceIP);
255
315
  this.db.insertThreat(data);
256
316
  }
257
- this.sendJson(res, 201, { ok: true, data: { message: 'Threat data received', count: events.length } });
317
+ this.sendJson(res, 201, {
318
+ ok: true,
319
+ data: { message: 'Threat data received', count: events.length },
320
+ });
258
321
  }
259
- /** GET /api/rules?since=<ISO timestamp> */
322
+ /** GET /api/rules?since=<ISO>&category=<cat>&severity=<sev>&source=<src> */
260
323
  handleGetRules(url, res) {
261
324
  const params = new URL(url, `http://localhost:${this.config.port}`).searchParams;
262
325
  const since = params.get('since');
326
+ const filters = {
327
+ category: params.get('category') ?? undefined,
328
+ severity: params.get('severity') ?? undefined,
329
+ source: params.get('source') ?? undefined,
330
+ };
263
331
  // Cache for 1 hour — rules rarely change, let CDN absorb traffic
264
332
  res.setHeader('Cache-Control', 'public, max-age=3600, s-maxage=3600');
265
- const rules = since ? this.db.getRulesSince(since) : this.db.getAllRules();
333
+ const rules = since
334
+ ? this.db.getRulesSince(since, filters)
335
+ : this.db.getAllRules(5000, filters);
266
336
  this.sendJson(res, 200, rules);
267
337
  }
268
338
  /** POST /api/rules - Publish rules (single or batch) */
@@ -270,9 +340,7 @@ export class ThreatCloudServer {
270
340
  const body = await this.readBody(req);
271
341
  const parsed = JSON.parse(body);
272
342
  // Support both single object and batch { rules: [...] } format
273
- const rules = 'rules' in parsed && Array.isArray(parsed.rules)
274
- ? parsed.rules
275
- : [parsed];
343
+ const rules = 'rules' in parsed && Array.isArray(parsed.rules) ? parsed.rules : [parsed];
276
344
  const now = new Date().toISOString();
277
345
  let count = 0;
278
346
  for (const rule of rules) {
@@ -296,7 +364,10 @@ export class ThreatCloudServer {
296
364
  const data = JSON.parse(body);
297
365
  const clientId = req.headers['x-panguard-client-id'] ?? undefined;
298
366
  if (!data.patternHash || !data.ruleContent) {
299
- this.sendJson(res, 400, { ok: false, error: 'Missing required fields: patternHash, ruleContent' });
367
+ this.sendJson(res, 400, {
368
+ ok: false,
369
+ error: 'Missing required fields: patternHash, ruleContent',
370
+ });
300
371
  return;
301
372
  }
302
373
  // Check if a proposal with the same patternHash already exists
@@ -304,7 +375,10 @@ export class ThreatCloudServer {
304
375
  const existing = proposals.find((p) => p['pattern_hash'] === data.patternHash);
305
376
  if (existing) {
306
377
  this.db.confirmATRProposal(data.patternHash);
307
- this.sendJson(res, 200, { ok: true, data: { message: 'Proposal confirmed', patternHash: data.patternHash } });
378
+ this.sendJson(res, 200, {
379
+ ok: true,
380
+ data: { message: 'Proposal confirmed', patternHash: data.patternHash },
381
+ });
308
382
  }
309
383
  else {
310
384
  const proposal = {
@@ -318,7 +392,10 @@ export class ThreatCloudServer {
318
392
  log.error(`LLM review failed for ${data.patternHash}`, err);
319
393
  });
320
394
  }
321
- this.sendJson(res, 201, { ok: true, data: { message: 'Proposal submitted', patternHash: data.patternHash } });
395
+ this.sendJson(res, 201, {
396
+ ok: true,
397
+ data: { message: 'Proposal submitted', patternHash: data.patternHash },
398
+ });
322
399
  }
323
400
  }
324
401
  /** POST /api/atr-feedback - Submit feedback on an ATR rule */
@@ -327,7 +404,10 @@ export class ThreatCloudServer {
327
404
  const data = JSON.parse(body);
328
405
  const clientId = req.headers['x-panguard-client-id'] ?? undefined;
329
406
  if (!data.ruleId || typeof data.isTruePositive !== 'boolean') {
330
- this.sendJson(res, 400, { ok: false, error: 'Missing required fields: ruleId (string), isTruePositive (boolean)' });
407
+ this.sendJson(res, 400, {
408
+ ok: false,
409
+ error: 'Missing required fields: ruleId (string), isTruePositive (boolean)',
410
+ });
331
411
  return;
332
412
  }
333
413
  this.db.insertATRFeedback(data.ruleId, data.isTruePositive, clientId);
@@ -339,7 +419,10 @@ export class ThreatCloudServer {
339
419
  const data = JSON.parse(body);
340
420
  const clientId = req.headers['x-panguard-client-id'] ?? undefined;
341
421
  if (!data.skillHash || !data.skillName) {
342
- this.sendJson(res, 400, { ok: false, error: 'Missing required fields: skillHash, skillName' });
422
+ this.sendJson(res, 400, {
423
+ ok: false,
424
+ error: 'Missing required fields: skillHash, skillName',
425
+ });
343
426
  return;
344
427
  }
345
428
  if (typeof data.riskScore !== 'number' || data.riskScore < 0 || data.riskScore > 100) {
@@ -414,6 +497,19 @@ export class ThreatCloudServer {
414
497
  const whitelist = this.db.getSkillWhitelist();
415
498
  this.sendJson(res, 200, { ok: true, data: whitelist });
416
499
  }
500
+ /**
501
+ * GET /api/skill-blacklist?minReports=3&minAvgRisk=70
502
+ * Fetch community skill blacklist (aggregated from skill threat reports)
503
+ * 取得社群技能黑名單(從技能威脅回報聚合)
504
+ */
505
+ handleGetSkillBlacklist(url, res) {
506
+ const params = new URL(url, `http://localhost:${this.config.port}`).searchParams;
507
+ const minReports = Number(params.get('minReports') ?? '3');
508
+ const minAvgRisk = Number(params.get('minAvgRisk') ?? '70');
509
+ res.setHeader('Cache-Control', 'public, max-age=1800, s-maxage=1800');
510
+ const blacklist = this.db.getSkillBlacklist(minReports, minAvgRisk);
511
+ this.sendJson(res, 200, { ok: true, data: blacklist });
512
+ }
417
513
  /** Anonymize IP by zeroing last octet / 匿名化 IP */
418
514
  anonymizeIP(ip) {
419
515
  if (ip.includes('.')) {
@@ -431,6 +527,14 @@ export class ThreatCloudServer {
431
527
  }
432
528
  return ip;
433
529
  }
530
+ /** Serve admin dashboard HTML (requires admin key or returns login page) */
531
+ serveAdminDashboard(_req, res) {
532
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
533
+ res.setHeader('Cache-Control', 'no-store');
534
+ res.setHeader('X-Robots-Tag', 'noindex, nofollow');
535
+ res.writeHead(200);
536
+ res.end(getAdminHTML());
537
+ }
434
538
  /** Check admin API key for write-protected endpoints / 檢查管理員 API 金鑰 */
435
539
  checkAdminAuth(req) {
436
540
  if (!this.config.adminApiKey)
@@ -474,5 +578,122 @@ export class ThreatCloudServer {
474
578
  res.writeHead(status);
475
579
  res.end(JSON.stringify(data));
476
580
  }
581
+ /**
582
+ * Seed rules from bundled config/ directory on first startup.
583
+ * Looks for config/ in cwd, relative to this file, or common Docker paths.
584
+ */
585
+ seedFromBundled() {
586
+ const __dirname = dirname(fileURLToPath(import.meta.url));
587
+ const candidates = [
588
+ join(process.cwd(), 'config'),
589
+ join(__dirname, '..', '..', '..', 'config'), // monorepo: packages/threat-cloud/dist -> config
590
+ join(__dirname, '..', '..', '..', '..', 'config'), // deeper nesting
591
+ '/app/config', // Docker standard
592
+ ];
593
+ const configDir = candidates.find((d) => {
594
+ try {
595
+ return statSync(d).isDirectory();
596
+ }
597
+ catch {
598
+ return false;
599
+ }
600
+ });
601
+ if (!configDir) {
602
+ log.info(`No config/ directory found (searched: ${candidates.join(', ')})`);
603
+ return 0;
604
+ }
605
+ log.info(`Using config directory: ${configDir}`);
606
+ const now = new Date().toISOString();
607
+ let seeded = 0;
608
+ const collectFiles = (dir, extensions) => {
609
+ const results = [];
610
+ try {
611
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
612
+ const fullPath = join(dir, entry.name);
613
+ if (entry.isDirectory()) {
614
+ results.push(...collectFiles(fullPath, extensions));
615
+ }
616
+ else if (extensions.some((ext) => entry.name.endsWith(ext))) {
617
+ results.push(fullPath);
618
+ }
619
+ }
620
+ }
621
+ catch (err) {
622
+ log.error(`Cannot read directory ${dir}`, err);
623
+ }
624
+ return results;
625
+ };
626
+ // Sigma rules
627
+ const sigmaDir = join(configDir, 'sigma-rules');
628
+ try {
629
+ const files = collectFiles(sigmaDir, ['.yml', '.yaml']);
630
+ for (const file of files) {
631
+ const content = readFileSync(file, 'utf-8');
632
+ const ruleId = `sigma:${relative(sigmaDir, file).replace(/\//g, ':')}`;
633
+ this.db.upsertRule({ ruleId, ruleContent: content, publishedAt: now, source: 'sigma' });
634
+ seeded++;
635
+ }
636
+ log.info(` Sigma: ${files.length} files`);
637
+ }
638
+ catch (err) {
639
+ log.error('Sigma seeding failed', err);
640
+ }
641
+ // YARA rules (split multi-rule files)
642
+ const yaraDir = join(configDir, 'yara-rules');
643
+ try {
644
+ const files = collectFiles(yaraDir, ['.yar', '.yara']);
645
+ for (const file of files) {
646
+ const content = readFileSync(file, 'utf-8');
647
+ const ruleMatches = content.match(/rule\s+\w+/g);
648
+ if (ruleMatches && ruleMatches.length > 1) {
649
+ for (const match of ruleMatches) {
650
+ const ruleName = match.replace('rule ', '');
651
+ const ruleId = `yara:${basename(file, '.yar').replace('.yara', '')}:${ruleName}`;
652
+ this.db.upsertRule({ ruleId, ruleContent: content, publishedAt: now, source: 'yara' });
653
+ seeded++;
654
+ }
655
+ }
656
+ else {
657
+ const ruleId = `yara:${relative(yaraDir, file).replace(/\//g, ':')}`;
658
+ this.db.upsertRule({ ruleId, ruleContent: content, publishedAt: now, source: 'yara' });
659
+ seeded++;
660
+ }
661
+ }
662
+ log.info(` YARA: ${files.length} files`);
663
+ }
664
+ catch (err) {
665
+ log.error('YARA seeding failed', err);
666
+ }
667
+ // ATR rules
668
+ const atrCandidates = [
669
+ join(process.cwd(), 'node_modules', 'agent-threat-rules', 'rules'),
670
+ join(__dirname, '..', '..', 'atr', 'rules'),
671
+ join(__dirname, '..', '..', '..', 'packages', 'atr', 'rules'),
672
+ ];
673
+ const atrDir = atrCandidates.find((d) => {
674
+ try {
675
+ return statSync(d).isDirectory();
676
+ }
677
+ catch {
678
+ return false;
679
+ }
680
+ });
681
+ if (atrDir) {
682
+ try {
683
+ const files = collectFiles(atrDir, ['.yaml', '.yml']);
684
+ for (const file of files) {
685
+ const content = readFileSync(file, 'utf-8');
686
+ const ruleId = `atr:${relative(atrDir, file).replace(/\//g, ':')}`;
687
+ this.db.upsertRule({ ruleId, ruleContent: content, publishedAt: now, source: 'atr' });
688
+ seeded++;
689
+ }
690
+ log.info(` ATR: ${files.length} files`);
691
+ }
692
+ catch (err) {
693
+ log.error('ATR seeding failed', err);
694
+ }
695
+ }
696
+ return seeded;
697
+ }
477
698
  }
478
699
  //# sourceMappingURL=server.js.map