File size: 1,352 Bytes
c89bb66
12d3f0e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { admin } from './firebase.js';

// ── Strict Authentication Middleware ──
export async function requireStrictAuth(req, res, next) {
    const authHeader = req.headers.authorization;

    if (!authHeader || !authHeader.startsWith('Bearer ')) {
        return res.status(401).json({
            error: 'UNAUTHORIZED',
            message: 'Missing Authorization Bearer token header.'
        });
    }

    const token = authHeader.substring(7).trim();

    try {
        const decodedToken = await admin.auth().verifyIdToken(token);
        const uid = decodedToken.uid;
        const signInProvider = decodedToken.firebase?.sign_in_provider || '';
        const isAnonymous = signInProvider === 'anonymous';

        if (isAnonymous) {
            return res.status(403).json({
                error: 'ANONYMOUS_NOT_ALLOWED',
                message: 'Guest/anonymous accounts cannot generate or download resumes. Please sign in or create an account to proceed.'
            });
        }

        req.user = {
            uid,
            email: decodedToken.email
        };

        next();
    } catch (error) {
        console.error('[Auth Error]', error.message);
        return res.status(401).json({
            error: 'UNAUTHORIZED',
            message: 'Invalid or expired Firebase authentication token.'
        });
    }
}