diff --git a/app/api/documents/token/route.ts b/app/api/documents/token/route.ts index 7593e4f..07cd544 100644 --- a/app/api/documents/token/route.ts +++ b/app/api/documents/token/route.ts @@ -29,11 +29,15 @@ export async function POST(request: Request) { // ความผิด config ฝั่ง server ไม่ใช่ความผิดของผู้เรียก — ไม่ตั้ง = 500 (ห้าม log ค่า secret) const secret = process.env.DOCVER_TOKEN_SECRET?.trim(); + // const secret = + // "487023dd1c1c4d6a07475e96b1cc300fec1e68ac9c2dd7d5ac9b1bf75da1053e"; + if (secret === undefined || secret === "") { return docverError("DOCVER_TOKEN_SECRET ยังไม่ถูกตั้งค่า", 500); } const ttlRaw = Number(process.env.DOCVER_TOKEN_TTL_SECONDS); - const ttlSeconds = Number.isFinite(ttlRaw) && ttlRaw > 0 ? Math.floor(ttlRaw) : 3600; + const ttlSeconds = + Number.isFinite(ttlRaw) && ttlRaw > 0 ? Math.floor(ttlRaw) : 3600; const accessToken = issueDocverToken(parsed.claims, secret, ttlSeconds); return new Response( diff --git a/docker/web.Dockerfile b/docker/web.Dockerfile index 38f1602..84788ea 100644 --- a/docker/web.Dockerfile +++ b/docker/web.Dockerfile @@ -23,8 +23,20 @@ ENV NEXT_TELEMETRY_DISABLED=1 # db/index.ts throw ถ้าไม่มี DATABASE_URL ตอน next build เก็บ page data — # ใส่ค่า dummy (postgres.js เชื่อมแบบ lazy ไม่มี query ตอน build) ตัวจริงฉีดตอน docker run ENV DATABASE_URL=postgresql://placeholder:placeholder@127.0.0.1:5432/placeholder +ENV MINIO_ENDPOINT=127.0.0.1 +ENV MINIO_PORT=19000 +ENV MINIO_USE_SSL=false +ENV MINIO_ACCESS_KEY=minioadmin +ENV MINIO_SECRET_KEY=minioadmin +ENV DOCVER_API_KEY=2d9b76d49a4f5311f6a0dacf759ecec53f34b6d102f24c696890a4052c99cf54 +ENV DOCVER_TOKEN_SECRET=487023dd1c1c4d6a07475e96b1cc300fec1e68ac9c2dd7d5ac9b1bf75da1053e +ENV DOCVER_TOKEN_TTL_SECONDS=604800 +ENV MINIO_BUCKET=docver +ENV DOCVER_LINK_TTL_SECONDS=900 + RUN npm run build + # ─── Stage 3: runtime ตัวเบา (แค่ standalone + public/) ─── FROM node:24-alpine AS runner WORKDIR /app diff --git a/lib/docver-token.ts b/lib/docver-token.ts index ce41a3e..92bfc41 100644 --- a/lib/docver-token.ts +++ b/lib/docver-token.ts @@ -121,12 +121,12 @@ export function verifyDocverToken( * คืน null เมื่อผ่าน / Response 401 เมื่อไม่ผ่าน */ export function requireDocverApiKey(request: Request): Response | null { // เทียบกับค่า trim แล้ว — กัน trailing newline จาก K8s secret / docker env_file - //const envKey = process.env.DOCVER_API_KEY?.trim(); - const envKey = - "2d9b76d49a4f5311f6a0dacf759ecec53f34b6d102f24c696890a4052c99cf54"; - // if (envKey === undefined || envKey === "") { - // return docverError("ระบบยังไม่ได้ตั้งค่า API key", 401); - // } + const envKey = process.env.DOCVER_API_KEY?.trim(); + // const envKey = + // "2d9b76d49a4f5311f6a0dacf759ecec53f34b6d102f24c696890a4052c99cf54"; + if (envKey === undefined || envKey === "") { + return docverError("ระบบยังไม่ได้ตั้งค่า API key", 401); + } const provided = request.headers.get("x-api-key"); if (provided === null || provided === "") { return docverError("API key ไม่ถูกต้อง", 401); @@ -150,10 +150,10 @@ export function requireDocverBearer( ): { ok: true; claims: DocverTokenClaims } | { ok: false; response: Response } { const denied = () => ({ ok: false, response: docverError(BEARER_DENIED, 401) }) as const; - //const secret = process.env.DOCVER_TOKEN_SECRET?.trim(); - const secret = - "487023dd1c1c4d6a07475e96b1cc300fec1e68ac9c2dd7d5ac9b1bf75da1053e"; - //if (secret === undefined || secret === "") return denied(); + const secret = process.env.DOCVER_TOKEN_SECRET?.trim(); + // const secret = + // "487023dd1c1c4d6a07475e96b1cc300fec1e68ac9c2dd7d5ac9b1bf75da1053e"; + if (secret === undefined || secret === "") return denied(); const header = request.headers.get("authorization"); if (header === null) return denied(); const match = /^Bearer\s+(\S+)$/i.exec(header);