This repository has been archived on 2024-08-10. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
nubian/src/middlewares/auth-middleware.js

52 lines
1.6 KiB
JavaScript
Raw Normal View History

2021-11-18 00:21:58 +00:00
// 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,
]),
};