aladhefafalquran
Deploy StreamTime server
a43472b
raw
history blame contribute delete
958 Bytes
import { Request, Response, NextFunction } from 'express'
import jwt from 'jsonwebtoken'
import crypto from 'crypto'
import { prisma } from '../db.js'
import { env } from '../env.js'
export interface AuthRequest extends Request {
userId?: string
}
export async function requireAuth(req: AuthRequest, res: Response, next: NextFunction) {
const token = req.cookies.st_token
if (!token) {
res.status(401).json({ error: 'Unauthorized' })
return
}
try {
const payload = jwt.verify(token, env.JWT_SECRET) as { sub: string; jti: string }
const hash = crypto.createHash('sha256').update(payload.jti).digest('hex')
const session = await prisma.session.findUnique({ where: { token: hash } })
if (!session || session.expiresAt < new Date()) {
res.status(401).json({ error: 'Session expired' })
return
}
req.userId = payload.sub
next()
} catch {
res.status(401).json({ error: 'Invalid token' })
}
}