51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import type { NextFunction, Request, Response } from 'express'
|
|
|
|
import {
|
|
requireActiveWorkerSession,
|
|
verifyWorkerSessionToken,
|
|
type WorkerSession,
|
|
} from '../../services/worker-platform/worker-platform-service.js'
|
|
import { createHttpError, sendRouteError } from '../../utils/http.js'
|
|
|
|
export async function requireWorkerSession(req: Request, res: Response, next: NextFunction): Promise<void> {
|
|
try {
|
|
req.workerSession = await verifyWorkerSessionToken(extractWorkerBearerToken(req))
|
|
next()
|
|
} catch (error) {
|
|
sendRouteError(res, error, '接单端鉴权失败', '[worker/auth]')
|
|
}
|
|
}
|
|
|
|
export function requireActiveWorker(req: Request, res: Response, next: NextFunction): void {
|
|
try {
|
|
requireActiveWorkerSession(req.workerSession)
|
|
next()
|
|
} catch (error) {
|
|
sendRouteError(res, error, '接单账号审核状态无效', '[worker/auth/active]')
|
|
}
|
|
}
|
|
|
|
export function getRequiredWorkerSession(req: Request): WorkerSession {
|
|
if (req.workerSession) {
|
|
return req.workerSession
|
|
}
|
|
|
|
throw createHttpError('未登录或登录已失效', {
|
|
statusCode: 401,
|
|
errorCode: 'worker_auth_required',
|
|
})
|
|
}
|
|
|
|
export function extractWorkerBearerToken(req: Request): string {
|
|
const authorization = String(req.headers.authorization || '').trim()
|
|
const matched = authorization.match(/^Bearer\s+(.+)$/i)
|
|
if (!matched?.[1]) {
|
|
throw createHttpError('未登录或登录已失效', {
|
|
statusCode: 401,
|
|
errorCode: 'worker_auth_required',
|
|
})
|
|
}
|
|
|
|
return matched[1].trim()
|
|
}
|