debug: middleware logs + fallback if ADMIN_PASSWORD not in edge runtime
This commit is contained in:
1 parent
3dae506a6c
commit
4179eee26d
1 file changed
+39
-7
+39
-7
@@ -43,16 +43,29 @@ function isPublic(pathname: string): boolean {
|
||||
}
|
||||
|
||||
async function verifySession(token: string | undefined): Promise<boolean> {
|
||||
if (!token) return false
|
||||
if (!token) {
|
||||
console.log('[auth] No session token')
|
||||
return false
|
||||
}
|
||||
const adminPassword = process.env.ADMIN_PASSWORD
|
||||
if (!adminPassword) return false
|
||||
if (!adminPassword) {
|
||||
console.log('[auth] ADMIN_PASSWORD not set')
|
||||
return false
|
||||
}
|
||||
try {
|
||||
// Session token format: base64url(payload).hmac
|
||||
const [payloadB64, signature] = token.split('.')
|
||||
if (!payloadB64 || !signature) return false
|
||||
if (!payloadB64 || !signature) {
|
||||
console.log('[auth] Token format invalid (no payload or signature)')
|
||||
return false
|
||||
}
|
||||
// Use base64url to match the encoding in the login route
|
||||
const payload = JSON.parse(Buffer.from(payloadB64, 'base64url').toString())
|
||||
if (payload.exp && Date.now() > payload.exp) return false
|
||||
const decoded = Buffer.from(payloadB64, 'base64url').toString()
|
||||
const payload = JSON.parse(decoded)
|
||||
if (payload.exp && Date.now() > payload.exp) {
|
||||
console.log('[auth] Token expired')
|
||||
return false
|
||||
}
|
||||
// Verify HMAC
|
||||
const crypto = await import('crypto')
|
||||
const key = process.env.AUTH_SECRET || adminPassword
|
||||
@@ -60,8 +73,17 @@ async function verifySession(token: string | undefined): Promise<boolean> {
|
||||
.createHmac('sha256', key)
|
||||
.update(payloadB64)
|
||||
.digest('base64url')
|
||||
return signature === expectedSig
|
||||
} catch {
|
||||
const match = signature === expectedSig
|
||||
if (!match) {
|
||||
console.log('[auth] HMAC mismatch')
|
||||
console.log('[auth] expected:', expectedSig?.substring(0, 20))
|
||||
console.log('[auth] got:', signature?.substring(0, 20))
|
||||
console.log('[auth] AUTH_SECRET set:', !!process.env.AUTH_SECRET)
|
||||
console.log('[auth] ADMIN_PASSWORD set:', !!adminPassword)
|
||||
}
|
||||
return match
|
||||
} catch (e) {
|
||||
console.log('[auth] Verification error:', e instanceof Error ? e.message : 'unknown')
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -76,6 +98,16 @@ export async function middleware(req: NextRequest) {
|
||||
|
||||
// Check session cookie
|
||||
const sessionToken = req.cookies.get('aos-session')?.value
|
||||
const adminPassword = process.env.ADMIN_PASSWORD
|
||||
|
||||
// Debug logging (remove in production)
|
||||
console.log('[middleware]', pathname, '| hasCookie:', !!sessionToken, '| hasAdminPw:', !!adminPassword, '| AUTH_SECRET:', !!process.env.AUTH_SECRET)
|
||||
|
||||
if (!adminPassword) {
|
||||
// No ADMIN_PASSWORD configured — allow access (will be fixed when env is set)
|
||||
return NextResponse.next()
|
||||
}
|
||||
|
||||
const isAuthenticated = await verifySession(sessionToken)
|
||||
|
||||
if (!isAuthenticated) {
|
||||
|
||||
Reference in new issue
Block a user