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.

75 lines
2.5 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. request(
  32. {
  33. method : req.body._method || req.method,
  34. uri : url + req.path,
  35. multipart : [{
  36. 'content-type' : 'application/json',
  37. 'body' : JSON.stringify(req.body.params) || ''
  38. }]
  39. },
  40. function(error, response, body) {
  41. if (!error && response.statusCode == 200) {
  42. var request = {
  43. "baseUrl" : url,
  44. "body" : req.body,
  45. "method" : req.method,
  46. "requestParams" : req.body.params,
  47. "originalUrl" : req.originalUrl,
  48. "path" : req.path,
  49. "protocol" : req.protocol,
  50. "query" : req.query,
  51. "secure" : req.secure,
  52. "signedCookies" : req.signedCookies,
  53. "response" : JSON.parse(body),
  54. }
  55. res.json(request);
  56. } else {
  57. //console.log('Error code : ' + response.statusCode);
  58. console.log('Error message : ' + error);
  59. }
  60. }
  61. );
  62. });
  63. });
  64. var port = process.env.PORT;
  65. app.listen(port, '127.0.0.1', function () {
  66. console.log('Example app listening at http://%s:%s', '127.0.0.1', port);
  67. });