UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

51 lines (46 loc) 1.46 kB
import { headers } from 'next/headers'; import { createHmac } from 'node:crypto'; import { authEnv } from '@/config/auth'; export type LogtToUserEntity = { applicationId?: string; avatar?: string; createdAt?: string; customData?: object; id: string; identities?: object; isSuspended?: boolean; lastSignInAt?: string; name?: string; primaryEmail?: string; primaryPhone?: string; username?: string; }; interface LogtoWebhookPayload { // Only support user event currently data: LogtToUserEntity; event: string; } export const validateRequest = async (request: Request, signingKey: string) => { const payloadString = await request.text(); const headerPayload = await headers(); const logtoHeaderSignature = headerPayload.get('logto-signature-sha-256')!; try { const hmac = createHmac('sha256', signingKey); hmac.update(payloadString); const signature = hmac.digest('hex'); if (signature === logtoHeaderSignature) { return JSON.parse(payloadString) as LogtoWebhookPayload; } else { console.warn( '[logto]: signature verify failed, please check your logto signature in `LOGTO_WEBHOOK_SIGNING_KEY`', ); return; } } catch (e) { if (!authEnv.LOGTO_WEBHOOK_SIGNING_KEY) { throw new Error('`LOGTO_WEBHOOK_SIGNING_KEY` environment variable is missing.'); } console.error('[logto]: incoming webhook failed in verification.\n', e); return; } };