const firebaseAuthMiddleware = async function (request, reply) { const authHeader = request.headers['authorization']; // HEADER NOT PROVIDED if (!authHeader) return notAuthorized(reply); const [protocol, token] = authHeader.split(' '); // TOKEN NOT PROVIDED if (!token) return notAuthorized(reply); const started = Date.now(); try { const decodedToken = await firebaseAdminSDK.auth().verifyIdToken(token); const firebaseUser = await firebaseAdminSDK.auth().getUser(decodedToken.uid); request.firebaseUser = firebaseUser; request.authTime = Date.now() - started; return; } catch (error) { if (error.code === FIREBASE_TOKEN_EXPIRED) { reply.code(440); reply.send({ code: errorTypes.SESSION_EXPIRED }); return; } reply.code(401); reply.send({ code: FIREBASE_AUTH_ERROR, error }); return; } };