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

8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
  1. var bodyParser = require('body-parser');
  2. var express = require('express');
  3. var passport = require('passport');
  4. var Strategy = require('passport-custom').Strategy;
  5. var request = require('request');
  6. var dotEnv = require('dot-env');
  7. var DB = require('./database.js');
  8. var app = express();
  9. app.use(bodyParser.json());
  10. app.use(bodyParser.urlencoded({extended:false}));
  11. app.use(passport.initialize());
  12. // Custom Strategy
  13. passport.use(new Strategy(DB.DatabaseLookup));
  14. app.use('*', passport.authenticate('custom', { session: false }));
  15. // Main Route /
  16. app.all('*', function(req, res, next) {
  17. // Lookup client
  18. var baseUrl = DB.ClientLookup(req.body.client_id, function(err, url) {
  19. if (err) {
  20. console.log(err);
  21. return res.sendStatus(404);
  22. }
  23. if (!url) {
  24. console.log('No Results');
  25. return res.sendStatus(400);
  26. }
  27. // Perform request on API
  28. console.log(req.body._method);
  29. console.log(url);
  30. console.log(req.path);
  31. var method = req.body._method || req.method;
  32. request(
  33. {
  34. method : method,
  35. uri : url + req.path,
  36. multipart : [{
  37. 'content-type' : 'application/json',
  38. 'body' : JSON.stringify(req.body.params) || ''
  39. }]
  40. },
  41. function(error, response, body) {
  42. if (!error && response.statusCode == 200) {
  43. var request = {
  44. "ok" : response.statusCode==200?true:false,
  45. "baseUrl" : url,
  46. "body" : req.body,
  47. "method" : method,
  48. "ProxyRequest" : req.body.params,
  49. "originalUrl" : req.originalUrl,
  50. "path" : req.path,
  51. "protocol" : req.protocol,
  52. "query" : req.query,
  53. "secure" : req.secure,
  54. "signedCookies" : req.signedCookies,
  55. "response" : JSON.parse(body),
  56. }
  57. res.json(request);
  58. } else {
  59. //console.log('Error code : ' + response.statusCode);
  60. console.log('Error message : ' + error);
  61. }
  62. }
  63. );
  64. });
  65. });
  66. var port = process.env.PORT;
  67. app.listen(port, '127.0.0.1', function () {
  68. console.log('Example app listening at http://%s:%s', '127.0.0.1', port);
  69. });