51 lines
1.6 KiB
JavaScript
51 lines
1.6 KiB
JavaScript
// Imports
|
|
const axios = require("axios");
|
|
const express = require("express");
|
|
const authMiddleware = express.Router();
|
|
const authOptMiddleware = express.Router();
|
|
const bearerTokenMiddleware = require("express-bearer-token")();
|
|
const crudUsers = require("../crud/users");
|
|
// Constants
|
|
const { CAIRO_URL } = process.env;
|
|
// Methods
|
|
const cairoAuthenticate = async (token) => {
|
|
const config = { headers: { Authorization: `Bearer ${token}` } };
|
|
return axios
|
|
.get(`${CAIRO_URL}/api/user/info`, config)
|
|
.then((res) => res.data);
|
|
};
|
|
|
|
const cairoAuthOptMiddleware = (req, res, next) => {
|
|
if (!req.token) next();
|
|
else
|
|
cairoAuthenticate(req.token)
|
|
.then((authData) => crudUsers.upsertUser(authData.id))
|
|
.then((users) => (req.user = users[0]))
|
|
.catch()
|
|
.then(() => next());
|
|
};
|
|
// Middleware
|
|
const cairoAuthMiddleware = (req, res, next) => {
|
|
if (!req.token) return res.status(401).send("Cairo token required!");
|
|
logVerbose("AUTH", `${CAIRO_URL}/api/user/info`);
|
|
cairoAuthenticate(req.token)
|
|
.then((authData) => crudUsers.upsertUser(authData.id))
|
|
.then((users) => (req.user = users[0]))
|
|
.then(() => next())
|
|
.catch((err) => {
|
|
logError("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);
|
|
});
|
|
};
|
|
|
|
module.exports = {
|
|
authMiddleware: authMiddleware.use([
|
|
bearerTokenMiddleware,
|
|
cairoAuthMiddleware,
|
|
]),
|
|
authOptMiddleware: authOptMiddleware.use([
|
|
bearerTokenMiddleware,
|
|
cairoAuthOptMiddleware,
|
|
]),
|
|
};
|