38 lines
942 B
JavaScript
38 lines
942 B
JavaScript
const { admin } = require('./firebase_auth');
|
|
|
|
/**
|
|
* Express middleware to verify Firebase App Check tokens.
|
|
*/
|
|
async function requireAppCheck(req, res, next) {
|
|
const isEnforced = process.env.ENFORCE_APP_CHECK === 'true';
|
|
const appCheckToken = req.header ? req.header('X-Firebase-AppCheck') : req.headers?.['x-firebase-appcheck'];
|
|
|
|
if (!appCheckToken) {
|
|
if (isEnforced) {
|
|
return res.status(403).json({
|
|
error: 'appCheckFailed',
|
|
message: 'Missing X-Firebase-AppCheck header'
|
|
});
|
|
} else {
|
|
return next();
|
|
}
|
|
}
|
|
|
|
try {
|
|
const appCheckClaims = await admin.appCheck().verifyToken(appCheckToken);
|
|
req.appCheck = appCheckClaims;
|
|
next();
|
|
} catch (err) {
|
|
if (isEnforced) {
|
|
return res.status(403).json({
|
|
error: 'appCheckFailed',
|
|
message: 'Invalid App Check token'
|
|
});
|
|
} else {
|
|
return next();
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = { requireAppCheck };
|