-
Notifications
You must be signed in to change notification settings - Fork 0
/
auth-service-middleware.js
49 lines (47 loc) · 2.05 KB
/
auth-service-middleware.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{
const axios = require('axios');
const config = require('./config.json');
const logger = require('./logger/logger.js');
const logFormat = require('./logger/log-formatter.js')
const requestLog = require('./log-request.js')
module.exports = async (req, res, next) =>
{
const url = req.originalUrl;
let log = new requestLog(req.method, url, req.ip, "checking the need for authentication.");
logger.debug(logFormat(log));
const authToken = req.headers[config.authRequestTokenHeader];
if (authToken === undefined) {
log = new requestLog(req.method, url, req.ip, "no authentication required.");
logger.debug(logFormat(log));
next();
return;
}
log = new requestLog(req.method, url, req.ip, "authentication required.");
logger.debug(logFormat(log));
let authUrl = config.authService;
if (false == authUrl.endsWith('/')) {
authUrl += '/';
}
const authReq = `${authUrl}?${config.authRequestTokenHeader}=${authToken}`;
try {
const response = await axios.get(authReq);
log = new requestLog(req.method, url, req.ip, "authentication token received.");
logger.debug(logFormat(log));
const token = response.headers[config.authTokenHeader];
delete req.headers[config.authRequestTokenHeader];
req.headers[config.authTokenHeader] = token;
next();
} catch (err) {
const ERROR_STATUS_UNAUTHORIZED = 401;
log = new requestLog(req.method, url, req.ip, "failed to get authentication token.");
logger.error(logFormat(log));
const errResponse = err.response;
if (errResponse) {
res._headers = errResponse.headers;
res.statusMessage = errResponse.statusMessage;
res.status(ERROR_STATUS_UNAUTHORIZED).send();
}
res.status(ERROR_STATUS_UNAUTHORIZED).send({ error: err.message});
}
}
}