A single proxy server to authenticate requests to multiple internal APIs
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

64 lines
2.2 KiB

var bodyParser = require('body-parser');
var express = require('express');
var passport = require('passport');
var Strategy = require('passport-custom').Strategy;
var request = require('request');
var dotEnv = require('dot-env');
var db = require('./database.js');
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:false}));
app.use(passport.initialize());
// Custom Strategy
passport.use(new Strategy(db.verify));
// Use Custom Strategy
app.use('*', passport.authenticate('custom', { session: false }));
// Main Route /
app.all('*', function(req, res, next) {
// TODO: lookup base url based on client_id in request body
var baseUrl = clientLookup(req.body.client_id);
// Perform the actual request to the requested API
request(
{
method : req.body._method || req.method,
uri : baseUrl + req.path,
multipart : [{
'content-type' : 'application/json',
'body' : JSON.stringify(req.body.params) || ''
}]
},
function(error, response, body) {
if (!error && response.statusCode == 200) {
var request = {
"baseUrl" : baseUrl,
"body" : req.body,
"method" : req.method,
"requestParams" : req.body.params,
"originalUrl" : req.originalUrl,
"path" : req.path,
"protocol" : req.protocol,
"query" : req.query,
"secure" : req.secure,
"signedCookies" : req.signedCookies,
"response" : JSON.parse(body),
}
res.json(request);
} else {
console.log('Error code : ' + response.statusCode);
console.log('Error message : ' + error);
}
});
});
var port = process.env.PORT;
app.listen(port, '127.0.0.1', function () {
console.log('Example app listening at http://%s:%s', '127.0.0.1', port);
});