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.
 

78 lines
2.6 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.DatabaseLookup));
app.use('*', passport.authenticate('custom', { session: false }));
// Main Route /
app.all('*', function(req, res, next) {
// Lookup client
var baseUrl = DB.ClientLookup(req.body.client_id, function(err, url) {
if (err) {
console.log(err);
return res.sendStatus(404);
}
if (!url) {
console.log('No Results');
return res.sendStatus(400);
}
// Perform request on API
console.log(req.body._method);
console.log(url);
console.log(req.path);
var method = req.body._method || req.method;
request(
{
method : method,
uri : url + req.path,
multipart : [{
'content-type' : 'application/json',
'body' : JSON.stringify(req.body.params) || ''
}]
},
function(error, response, body) {
if (!error && response.statusCode == 200) {
var request = {
"ok" : response.statusCode==200?true:false,
"baseUrl" : url,
"body" : req.body,
"method" : method,
"ProxyRequest" : 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);
});