33 lines
1 KiB
JavaScript
33 lines
1 KiB
JavaScript
![]() |
// 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;
|