52 lines
1.6 KiB
JavaScript
52 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,
|
||
|
]),
|
||
|
};
|