index.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import express from "express";
  2. import { Permission } from '../database/models.js';
  3. export const router = express.Router();
  4. // Controllers
  5. import { Login, submitLogin, Logout } from "../controllers/login.js";
  6. import { Register, submitRegister } from "../controllers/register.js";
  7. import { Dashboard, DashboardAction, Stats, Chart, SSE, UpdatePermissions } from "../controllers/dashboard.js";
  8. import { Apps, appSearch, InstallModal, ImportModal, LearnMore, Upload } from "../controllers/apps.js";
  9. import { Users } from "../controllers/users.js";
  10. import { Images } from "../controllers/images.js";
  11. import { Networks, removeNetwork } from "../controllers/networks.js";
  12. import { Volumes, removeVolume } from "../controllers/volumes.js";
  13. import { Account } from "../controllers/account.js";
  14. import { Variables } from "../controllers/variables.js";
  15. import { Settings } from "../controllers/settings.js";
  16. import { Supporters, Thanks } from "../controllers/supporters.js";
  17. import { Syslogs } from "../controllers/syslogs.js";
  18. import { Install } from "../utils/install.js"
  19. import { Uninstall } from "../utils/uninstall.js"
  20. // Permission Middleware
  21. const adminOnly = async (req, res, next) => {
  22. if (req.session.role == 'admin') { next(); }
  23. else { res.redirect('/dashboard'); }
  24. }
  25. const sessionCheck = async (req, res, next) => {
  26. if (req.session.user) { next(); }
  27. else { res.redirect('/login'); }
  28. }
  29. const permissionCheck = async (req, res, next) => {
  30. if (req.session.role == 'admin') { next(); return; }
  31. let user = req.session.user;
  32. let action = req.path.split("/")[2];
  33. let trigger = req.header('hx-trigger-name');
  34. const userAction = ['start', 'stop', 'restart', 'pause', 'uninstall', 'upgrade', 'edit', 'logs', 'view'];
  35. const userPaths = ['card', 'updates', 'hide', 'reset', 'alert'];
  36. if (userAction.includes(action)) {
  37. let permission = await Permission.findOne({ where: { containerName: trigger, user: user }, attributes: [`${action}`] });
  38. if (permission) {
  39. if (permission[action] == true) {
  40. console.log(`User ${user} has permission to ${action} ${trigger}`);
  41. next();
  42. return;
  43. }
  44. else {
  45. console.log(`User ${user} does not have permission to ${action} ${trigger}`);
  46. }
  47. }
  48. } else if (userPaths.includes(action)) {
  49. next();
  50. return;
  51. }
  52. }
  53. // Utils
  54. router.post("/install", adminOnly, Install);
  55. router.post("/uninstall", adminOnly, Uninstall);
  56. // Routes
  57. router.get("/login", Login);
  58. router.post("/login", submitLogin);
  59. router.get("/logout", Logout);
  60. router.get("/register", Register);
  61. router.post("/register", submitRegister);
  62. router.get("/", sessionCheck, Dashboard);
  63. router.get("/dashboard", sessionCheck, Dashboard);
  64. router.post("/dashboard/:action", sessionCheck, permissionCheck, DashboardAction);
  65. router.get("/sse", sessionCheck, SSE);
  66. router.post("/updatePermissions", adminOnly, UpdatePermissions);
  67. router.get("/stats", sessionCheck, Stats);
  68. router.get("/chart", sessionCheck, Chart);
  69. router.get("/images", adminOnly, Images);
  70. router.post("/images/:action", adminOnly, Images);
  71. router.get("/volumes", adminOnly, Volumes);
  72. router.post("/removeVolume", adminOnly, removeVolume);
  73. router.get("/networks", adminOnly, Networks);
  74. router.post("/removeNetwork", adminOnly, removeNetwork);
  75. router.get("/apps/:page?/:template?", adminOnly, Apps);
  76. router.post("/apps", adminOnly, appSearch);
  77. router.get("/install_modal", adminOnly, InstallModal)
  78. router.get("/import_modal", adminOnly, ImportModal)
  79. router.get("/learn_more", adminOnly, LearnMore)
  80. router.post("/upload", adminOnly, Upload);
  81. router.get("/users", adminOnly, Users);
  82. router.get("/syslogs", adminOnly, Syslogs);
  83. router.get("/variables", adminOnly, Variables);
  84. router.get("/settings", adminOnly, Settings);
  85. router.get("/account", sessionCheck, Account);
  86. router.get("/supporters", sessionCheck, Supporters);
  87. router.post("/thank", sessionCheck, Thanks);