fix(diagnostics): BUG-3 - add authentication check to /diagnostics/config endpoint
This commit is contained in:
parent
4cb8b499af
commit
4ffb28d8d2
@ -17,11 +17,11 @@
|
|||||||
* @module diagnostics
|
* @module diagnostics
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import type { FastifyInstance } from 'fastify';
|
import type { FastifyInstance, FastifyRequest } from 'fastify';
|
||||||
import { generateId, buildPk } from './types.js';
|
import { generateId, buildPk } from './types.js';
|
||||||
import { getRequestProductId } from '../../lib/request-context.js';
|
import { getRequestProductId } from '../../lib/request-context.js';
|
||||||
import { requireRole } from '../../lib/auth.js';
|
import { requireRole } from '../../lib/auth.js';
|
||||||
import { BadRequestError, NotFoundError } from '../../lib/errors.js';
|
import { BadRequestError, NotFoundError, UnauthorizedError } from '../../lib/errors.js';
|
||||||
import * as repo from './repository.js';
|
import * as repo from './repository.js';
|
||||||
import {
|
import {
|
||||||
CreateDebugSessionSchema,
|
CreateDebugSessionSchema,
|
||||||
@ -46,15 +46,19 @@ import {
|
|||||||
type QueryLogsInput,
|
type QueryLogsInput,
|
||||||
} from './types.js';
|
} from './types.js';
|
||||||
|
|
||||||
// TODO-1: Event bus integration - need to emit events for session lifecycle
|
import { bus } from '../../lib/event-bus.js';
|
||||||
// Import event bus once available: import { emitEvent } from '../../lib/event-bus.js';
|
import { generateSasUrl } from '../../lib/blob.js';
|
||||||
|
import * as auditRepo from '../audit/repository.js';
|
||||||
|
import type { AuditDoc } from '../audit/types.js';
|
||||||
|
|
||||||
|
// TODO-1: Event bus integration - emit events for session lifecycle
|
||||||
|
// Import event bus: import { bus } from '../../lib/event-bus.js';
|
||||||
|
|
||||||
// Re-export shared helpers from types
|
// Re-export shared helpers from types
|
||||||
export { generateId, buildPk } from './types.js';
|
export { generateId, buildPk } from './types.js';
|
||||||
|
|
||||||
// ─── Helpers ───────────────────────────────────────────────────────────────
|
// ─── Helpers ───────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
|
||||||
// TODO-2: PII Redaction - need to implement PII scanning for log messages
|
// TODO-2: PII Redaction - need to implement PII scanning for log messages
|
||||||
// This should be shared with telemetry module
|
// This should be shared with telemetry module
|
||||||
function redactPii(message: string): { redacted: string; patterns: string[] } {
|
function redactPii(message: string): { redacted: string; patterns: string[] } {
|
||||||
@ -62,6 +66,16 @@ function redactPii(message: string): { redacted: string; patterns: string[] } {
|
|||||||
return { redacted: message, patterns: [] };
|
return { redacted: message, patterns: [] };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Require at least authentication (JWT present).
|
||||||
|
* Used for client endpoints that need to identify the caller but don't require admin.
|
||||||
|
*/
|
||||||
|
function requireAuth(req: FastifyRequest): void {
|
||||||
|
if (!req.jwtPayload?.sub) {
|
||||||
|
throw new UnauthorizedError('Authentication required');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ─── Routes ─────────────────────────────────────────────────────────────────
|
// ─── Routes ─────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
export async function diagnosticsRoutes(app: FastifyInstance) {
|
export async function diagnosticsRoutes(app: FastifyInstance) {
|
||||||
@ -231,6 +245,8 @@ export async function diagnosticsRoutes(app: FastifyInstance) {
|
|||||||
|
|
||||||
// Client polling endpoint (any authenticated user)
|
// Client polling endpoint (any authenticated user)
|
||||||
app.get('/diagnostics/config', async (req, reply) => {
|
app.get('/diagnostics/config', async (req, reply) => {
|
||||||
|
// BUG-3 FIX: Add authentication check
|
||||||
|
requireAuth(req);
|
||||||
const productId = getRequestProductId(req);
|
const productId = getRequestProductId(req);
|
||||||
const userId = req.jwtPayload?.sub;
|
const userId = req.jwtPayload?.sub;
|
||||||
const deviceId = req.headers['x-device-id'] as string | undefined;
|
const deviceId = req.headers['x-device-id'] as string | undefined;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user