DweebUI/router/index.js

107 lines
4.1 KiB
JavaScript
Raw Normal View History

2024-01-08 02:29:56 +00:00
import express from "express";
2024-03-27 03:38:57 +00:00
import { Permission } from '../database/models.js';
export const router = express.Router();
2024-01-08 02:29:56 +00:00
// Controllers
import { Login, submitLogin, Logout } from "../controllers/login.js";
2024-01-08 02:29:56 +00:00
import { Register, submitRegister } from "../controllers/register.js";
2024-04-23 02:20:13 +00:00
import { Dashboard, DashboardAction, Stats, Chart, SSE, UpdatePermissions } from "../controllers/dashboard.js";
2024-05-19 09:31:21 +00:00
import { Apps, appSearch, InstallModal, ImportModal, LearnMore, Upload, removeTemplate } from "../controllers/apps.js";
2024-01-08 02:29:56 +00:00
import { Users } from "../controllers/users.js";
2024-04-23 02:20:13 +00:00
import { Images } from "../controllers/images.js";
import { Networks, removeNetwork } from "../controllers/networks.js";
2024-05-30 07:58:19 +00:00
import { Volumes, addVolume, removeVolume } from "../controllers/volumes.js";
2024-01-08 02:29:56 +00:00
import { Account } from "../controllers/account.js";
import { Variables } from "../controllers/variables.js";
2024-01-08 02:29:56 +00:00
import { Settings } from "../controllers/settings.js";
2024-02-14 09:45:29 +00:00
import { Supporters, Thanks } from "../controllers/supporters.js";
import { Syslogs } from "../controllers/syslogs.js";
2024-04-23 02:20:13 +00:00
import { Install } from "../utils/install.js"
import { Uninstall } from "../utils/uninstall.js"
2024-03-27 03:38:57 +00:00
2024-04-23 02:20:13 +00:00
// Permission Middleware
const adminOnly = async (req, res, next) => {
if (req.session.role == 'admin') { next(); }
else { res.redirect('/dashboard'); }
}
2024-04-23 02:20:13 +00:00
const sessionCheck = async (req, res, next) => {
if (req.session.user) { next(); }
else { res.redirect('/login'); }
}
2024-04-23 02:20:13 +00:00
const permissionCheck = async (req, res, next) => {
2024-05-03 08:13:24 +00:00
if (req.session.role == 'admin') { next(); return; }
2024-04-23 02:20:13 +00:00
let user = req.session.user;
let action = req.path.split("/")[2];
2024-04-23 02:20:13 +00:00
let trigger = req.header('hx-trigger-name');
2024-05-03 08:13:24 +00:00
const userAction = ['start', 'stop', 'restart', 'pause', 'uninstall', 'upgrade', 'edit', 'logs', 'view'];
2024-05-04 08:18:51 +00:00
const userPaths = ['card', 'updates', 'hide', 'reset', 'alert'];
2024-04-23 02:20:13 +00:00
if (userAction.includes(action)) {
let permission = await Permission.findOne({ where: { containerName: trigger, user: user }, attributes: [`${action}`] });
2024-04-23 02:20:13 +00:00
if (permission) {
if (permission[action] == true) {
console.log(`User ${user} has permission to ${action} ${trigger}`);
next();
2024-04-23 02:20:13 +00:00
return;
}
else {
console.log(`User ${user} does not have permission to ${action} ${trigger}`);
}
}
2024-04-23 02:20:13 +00:00
} else if (userPaths.includes(action)) {
next();
return;
}
2024-03-27 03:38:57 +00:00
}
2024-01-08 02:29:56 +00:00
2024-04-23 02:20:13 +00:00
// Utils
router.post("/install", adminOnly, Install);
router.post("/uninstall", adminOnly, Uninstall);
2024-04-23 02:20:13 +00:00
// Routes
router.get("/login", Login);
router.post("/login", submitLogin);
router.get("/logout", Logout);
router.get("/register", Register);
router.post("/register", submitRegister);
2024-04-23 02:20:13 +00:00
router.get("/", sessionCheck, Dashboard);
router.get("/dashboard", sessionCheck, Dashboard);
2024-05-03 08:13:24 +00:00
router.post("/dashboard/:action", sessionCheck, permissionCheck, DashboardAction);
2024-04-23 02:20:13 +00:00
router.get("/sse", sessionCheck, SSE);
router.post("/updatePermissions", adminOnly, UpdatePermissions);
router.get("/stats", sessionCheck, Stats);
router.get("/chart", sessionCheck, Chart);
2024-04-23 02:20:13 +00:00
router.get("/images", adminOnly, Images);
router.post("/images/:action", adminOnly, Images);
2024-01-08 02:29:56 +00:00
2024-04-23 02:20:13 +00:00
router.get("/volumes", adminOnly, Volumes);
2024-05-30 07:58:19 +00:00
router.post("/addVolume", adminOnly, addVolume);
2024-04-23 02:20:13 +00:00
router.post("/removeVolume", adminOnly, removeVolume);
2024-01-08 02:29:56 +00:00
2024-04-23 02:20:13 +00:00
router.get("/networks", adminOnly, Networks);
router.post("/removeNetwork", adminOnly, removeNetwork);
2024-02-14 09:45:29 +00:00
2024-05-03 08:13:24 +00:00
router.get("/apps/:page?/:template?", adminOnly, Apps);
2024-04-23 02:20:13 +00:00
router.post("/apps", adminOnly, appSearch);
2024-05-19 09:31:21 +00:00
router.get("/remove_template/:template", adminOnly, removeTemplate);
2024-05-03 08:13:24 +00:00
2024-04-23 02:20:13 +00:00
router.get("/install_modal", adminOnly, InstallModal)
router.get("/import_modal", adminOnly, ImportModal)
router.get("/learn_more", adminOnly, LearnMore)
router.post("/upload", adminOnly, Upload);
2024-04-23 02:20:13 +00:00
router.get("/users", adminOnly, Users);
router.get("/syslogs", adminOnly, Syslogs);
2024-04-23 02:20:13 +00:00
router.get("/variables", adminOnly, Variables);
router.get("/settings", adminOnly, Settings);
2024-04-23 02:20:13 +00:00
router.get("/account", sessionCheck, Account);
router.get("/supporters", sessionCheck, Supporters);
router.post("/thank", sessionCheck, Thanks);
2024-03-24 21:09:53 +00:00