app.js-authz 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. const express = require('express');
  2. const session = require('express-session');
  3. const bodyParser = require('body-parser');
  4. const Keycloak = require('keycloak-connect');
  5. const cors = require('cors');
  6. const audit = require('express-requests-logger');
  7. const app = express();
  8. app.use(bodyParser.json());
  9. // Enable CORS support
  10. app.use(cors());
  11. //request logger:
  12. app.use(audit());
  13. /*app.use(audit({
  14. request: {
  15. excludeBody: '*', // Exclude all body
  16. },
  17. response: {
  18. excludeBody: '*' // Exclude all body from responses
  19. }
  20. }));*/
  21. // Create a session-store to be used by both the express-session
  22. // middleware and the keycloak middleware.
  23. const memoryStore = new session.MemoryStore();
  24. app.use(session({
  25. secret: 'f60OrkxQNIlIv8P9BbD69pH62dq1ySeE',
  26. resave: false,
  27. saveUninitialized: true,
  28. store: memoryStore
  29. }));
  30. // Provide the session store to the Keycloak so that sessions
  31. // can be invalidated from the Keycloak console callback.
  32. //
  33. // Additional configuration is read from keycloak.json file
  34. // installed from the Keycloak web console.
  35. const keycloak = new Keycloak({
  36. store: memoryStore
  37. });
  38. app.use(keycloak.middleware({
  39. logout: '/logout',
  40. admin: '/admin'
  41. }));
  42. app.get('/campaign/list', keycloak.protect('realm:marketing-user'), function (req, res) {
  43. console.log("Listing campaigns");
  44. if (res.status == 403) {
  45. console.log("You need to be authenticated");
  46. res.json({ message: 'You need to be authenticated' });
  47. } else {
  48. //res.json({message: 'You can list the campaigns'});
  49. res.json(
  50. [
  51. { 'name': 'New Product announce', 'description':'We are releasing a new product' },
  52. { 'name': 'Summer Time Season', 'description':'Summer is coming' },
  53. { 'name': 'Singles day Promotions', 'description':'We have big discounts for singles!!!' },
  54. { 'name': 'Spring Collection', 'description':'Spring is coming' },
  55. { 'name': 'Black Friday Discounts', 'description':'Almost everything for free' }]
  56. );
  57. }
  58. });
  59. /*app.get('/campaign/add', keycloak.protect('realm:marketing-user'), function (req, res) {
  60. logTokens(req);
  61. if (res.status == 403) {
  62. res.json({message: 'You need the marketing-user role'});
  63. } else {
  64. res.json({message: 'You can add a campaign'});
  65. }
  66. });
  67. app.get('/campaign/delete', keycloak.protect('realm:marketing-admin'), function (req, res) {
  68. logTokens(req);
  69. if (res.status == 403) {
  70. //res.json({message: 'You need the marketing-admin role'});
  71. res.send(403,'You need the marketing-admin role');
  72. } else{
  73. res.json({message: 'You can select one to delete'});
  74. }
  75. });*/
  76. app.use('*', function (req, res) {
  77. res.send('Not found!');
  78. });
  79. app.listen(3000, function () {
  80. console.log('Started at port 3000');
  81. });