20 lines
914 B
TypeScript
20 lines
914 B
TypeScript
import { getServerSession } from 'next-auth'
|
|
import type { NextRequest } from 'next/server'
|
|
import { authOptions } from '@/lib/auth'
|
|
import {
|
|
DINGTALK_PERFORMANCE_SESSION_HEADER,
|
|
verifyDingtalkPerformanceSessionToken,
|
|
} from '@/lib/dingtalk-performance-session'
|
|
|
|
export async function getAuthenticatedUploadUserId(request: NextRequest): Promise<string | null> {
|
|
const session = await getServerSession(authOptions)
|
|
const sessionUserId = String((session?.user as any)?.id || '').trim()
|
|
if (sessionUserId) return sessionUserId
|
|
|
|
const headerToken = request.headers.get(DINGTALK_PERFORMANCE_SESSION_HEADER)
|
|
const authorization = request.headers.get('authorization') || ''
|
|
const bearerToken = authorization.match(/^Bearer\s+(.+)$/i)?.[1]?.trim()
|
|
const payload = verifyDingtalkPerformanceSessionToken(headerToken || bearerToken || null)
|
|
return payload?.userId ? String(payload.userId).trim() : null
|
|
}
|