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

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.verify));
  14. // Use Custom Strategy
  15. app.use('*', passport.authenticate('custom', { session: false }));
  16. // Main Route /
  17. app.all('*', function(req, res, next) {
  18. // TODO: lookup base url based on client_id in request body
  19. var baseUrl = clientLookup(req.body.client_id);
  20. // Perform the actual request to the requested API
  21. request(
  22. {
  23. method : req.body._method || req.method,
  24. uri : baseUrl + req.path,
  25. multipart : [{
  26. 'content-type' : 'application/json',
  27. 'body' : JSON.stringify(req.body.params) || ''
  28. }]
  29. },
  30. function(error, response, body) {
  31. if (!error && response.statusCode == 200) {
  32. var request = {
  33. "baseUrl" : baseUrl,
  34. "body" : req.body,
  35. "method" : req.method,
  36. "requestParams" : req.body.params,
  37. "originalUrl" : req.originalUrl,
  38. "path" : req.path,
  39. "protocol" : req.protocol,
  40. "query" : req.query,
  41. "secure" : req.secure,
  42. "signedCookies" : req.signedCookies,
  43. "response" : JSON.parse(body),
  44. }
  45. res.json(request);
  46. } else {
  47. console.log('Error code : ' + response.statusCode);
  48. console.log('Error message : ' + error);
  49. }
  50. });
  51. });
  52. var port = process.env.PORT;
  53. app.listen(port, '127.0.0.1', function () {
  54. console.log('Example app listening at http://%s:%s', '127.0.0.1', port);
  55. });