// Imports import { Router } from "express"; import bearerTokenMiddleware from "express-bearer-token"; import { ERR, VERB } from "../../util/logging.js"; // Constants const { MCL_CAIRO_URL } = process.env; const cairoAuthMiddleware = Router(); const cairoAuthenticate = async (token) => { const config = { headers: { Authorization: `Bearer ${token}` } }; return fetch(`${MCL_CAIRO_URL}/api/user/info`, config).then((res) => res.json(), ); }; // Middleware const cairoAuthHandler = (req, res, next) => { if (!req.token) return res.status(401).send("Cairo auth required!"); cairoAuthenticate(req.token) .then((authData) => (req.cairoId = authData.id)) .then(() => next()) .catch((err) => { ERR("AUTH", err.response ? err.response.data : err.message); if (!err.response) return res.status(500).send(`Auth failure ${err}`); return res.status(err.response.status).send(err.response.data); }); }; cairoAuthMiddleware.use([bearerTokenMiddleware(), cairoAuthHandler]); export default cairoAuthMiddleware;