updated dependencies. improved AddAlert function.

This commit is contained in:
lllllllillllllillll 2024-05-04 15:47:24 -07:00
parent 2d9914c458
commit 82c134158d
8 changed files with 47 additions and 46 deletions

View File

@ -1,4 +1,4 @@
## v0.50 (dev)
## v0.60 (dev)
* Converted template literals into html.
* Converted modals into html/htmx.
* Moved functions into dashboard controller.

View File

@ -1,5 +1,5 @@
<h3 align="center"><img width="150" src="https://raw.githubusercontent.com/lllllllillllllillll/DweebUI/main/public/images/logo.png"></h3>
<h4 align="center">DweebUI Beta v0.50 ( :fire: Experimental :fire: )</h4>
<h4 align="center">DweebUI Beta v0.60 ( :fire: Experimental :fire: )</h4>
<h3 align="center">Free and Open-Source WebUI For Managing Your Containers.</h3>
<p align="center">
<a href=""><img src="https://img.shields.io/github/stars/lllllllillllllillll/DweebUI?style=flat"/></a>
@ -20,17 +20,16 @@
* DweebUI is a management interface and should not be directly exposed to the internet
## Features
* [x] Dashboard provides server metrics, container metrics, and container controls, on a single page.
* [x] A dynamically updating dashboard that displays server metrics along with individual container metrics and container controls.
* [x] Multi-users with permissions system.
* [x] View container logs.
* [ ] Update containers (planned).
* [x] Manage your Docker networks, images, and volumes.
* [x] Light/Dark Mode.
* [x] Mobile Friendly.
* [x] Easy to install app templates.
* [x] Multiple Users.
* [ ] Permissions system (in development).
* [x] Support for Windows, Linux, and MacOS.
* [x] Windows, Linux, and MacOS compatable.
* [ ] Docker compose (in development).
* [ ] Update containers (planned).
* [x] Templates.json maintains compatability with Portainer, allowing you to use the template without needing to use DweebUI.
* [ ] Preset variables (planned).
* [ ] Themes (planned).
@ -44,7 +43,7 @@ version: "3.9"
services:
dweebui:
container_name: dweebui
image: lllllllillllllillll/dweebui:v0.50
image: lllllllillllllillll/dweebui:v0.60
environment:
PORT: 8000
SECRET: MrWiskers

View File

@ -37,6 +37,7 @@ export const DashboardAction = async (req, res) => {
let permissions_list = '';
let permissions_modal = readFileSync('./views/modals/permissions.html', 'utf8');
permissions_modal = permissions_modal.replace(/PermissionsTitle/g, title);
permissions_modal = permissions_modal.replace(/PermissionsContainer/g, name);
let users = await User.findAll({ attributes: ['username', 'UUID']});
for (let i = 0; i < users.length; i++) {
let user_permissions = readFileSync('./views/partials/user_permissions.html', 'utf8');
@ -334,14 +335,14 @@ export const Stats = async (req, res) => {
}
// Imported by utils/install.js
export async function addAlert (session, name) {
session.alert = `<div class="alert alert-success alert-dismissible py-2 mb-0" role="alert" id="alert">
export async function addAlert (session, type, message) {
session.alert = `<div class="alert alert-${type} alert-dismissible py-2 mb-0" role="alert" id="alert">
<div class="d-flex">
<div class="spinner-border text-info nav-link">
<span class="visually-hidden">Loading...</span>
</div>
<div>
Installing ${name}. It should appear on the dashboard shortly.
${message}
</div>
</div>
<button class="btn-close" data-hx-post="/dashboard/alert" data-hx-trigger="click" data-hx-target="#alert" data-hx-swap="outerHTML" style="padding-top: 0.5rem;" ></button>
@ -349,8 +350,12 @@ export async function addAlert (session, name) {
}
export const UpdatePermissions = async (req, res) => {
let { user, container } = req.body;
let { user, container, reset_permissions } = req.body;
let id = req.header('hx-trigger');
if (reset_permissions) {
await Permission.update({ uninstall: false, edit: false, upgrade: false, start: false, stop: false, pause: false, restart: false, logs: false, view: false }, { where: { containerName: container} });
return;
}
await Permission.update({ uninstall: false, edit: false, upgrade: false, start: false, stop: false, pause: false, restart: false, logs: false }, { where: { containerName: container, user: user } });
Object.keys(req.body).forEach(async function(key) {
if (key != 'user' && key != 'container') {

24
package-lock.json generated
View File

@ -12,15 +12,15 @@
"bcrypt": "^5.1.1",
"dockerode": "^4.0.2",
"dockerode-compose": "^1.4.0",
"ejs": "^3.1.9",
"ejs": "^3.1.10",
"express": "^4.19.2",
"express-session": "^1.18.0",
"js-yaml": "^4.1.0",
"memorystore": "^1.6.7",
"multer": "^1.4.5-lts.1",
"sequelize": "^6.37.1",
"sequelize": "^6.37.3",
"sqlite3": "^5.1.7",
"systeminformation": "^5.22.6"
"systeminformation": "^5.22.7"
}
},
"node_modules/@balena/dockerignore": {
@ -767,9 +767,9 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
"node_modules/ejs": {
"version": "3.1.9",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
"integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
"integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
"dependencies": {
"jake": "^10.8.5"
},
@ -2270,9 +2270,9 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
},
"node_modules/sequelize": {
"version": "6.37.1",
"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.1.tgz",
"integrity": "sha512-vIKKzQ9dGp2aBOxQRD1FmUYViuQiKXSJ8yah8TsaBx4U3BokJt+Y2A0qz2C4pj08uX59qpWxRqSLEfRmVOEgQw==",
"version": "6.37.3",
"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.3.tgz",
"integrity": "sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A==",
"funding": [
{
"type": "opencollective",
@ -2620,9 +2620,9 @@
}
},
"node_modules/systeminformation": {
"version": "5.22.6",
"resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.22.6.tgz",
"integrity": "sha512-hUTQX+bRgIFbv1T/z251NtwGwNIeSyWURnT2BGnsYu6dQNbkiBl4oAwk50acVfITFq1Zvb8KDNgibQK9uGlUGg==",
"version": "5.22.7",
"resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.22.7.tgz",
"integrity": "sha512-AWxlP05KeHbpGdgvZkcudJpsmChc2Y5Eo/GvxG/iUA/Aws5LZKHAMSeAo+V+nD+nxWZaxrwpWcnx4SH3oxNL3A==",
"os": [
"darwin",
"linux",

View File

@ -15,14 +15,14 @@
"bcrypt": "^5.1.1",
"dockerode": "^4.0.2",
"dockerode-compose": "^1.4.0",
"ejs": "^3.1.9",
"ejs": "^3.1.10",
"express": "^4.19.2",
"express-session": "^1.18.0",
"js-yaml": "^4.1.0",
"memorystore": "^1.6.7",
"multer": "^1.4.5-lts.1",
"sequelize": "^6.37.1",
"sequelize": "^6.37.3",
"sqlite3": "^5.1.7",
"systeminformation": "^5.22.6"
"systeminformation": "^5.22.7"
}
}

View File

@ -21,7 +21,7 @@ export const Install = async (req, res) => {
let docker_volumes = [];
addAlert(req.session, name);
addAlert(req.session, 'success', `Installing ${name}. It should appear on the dashboard shortly.`);
if (image.startsWith('https://')){
mkdirSync(`./appdata/${name}`, { recursive: true });

View File

@ -1,25 +1,22 @@
<div class="modal-dialog modal-sm modal-dialog-centered modal-dialog-scrollables">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">PermissionsTitle Permissions</h5>
</div>
<div class="modal-body">
<div class="modal-header">
<h5 class="modal-title">PermissionsTitle Permissions</h5>
</div>
<div class="modal-body">
<div class="accordion" id="modal-accordion">
PermissionsList
</div>
</div>
<div class="modal-footer">
<div class="row">
<div class="col">
<button type="button" class="btn btn-danger" data-bs-dismiss="modal" name="reset_permissions" hx-post="/updatePermissions" hx-trigger="click" hx-confirm="Are you sure you want to reset permissions for this container?">Reset</button>
</div>
<!-- <div class="col">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal" disabled="">Update</button>
</div> -->
</div>
<div class="modal-footer">
<div class="row">
<div class="col">
<form id="reset_permissions">
<input type="hidden" name="container" value="PermissionsContainer">
<button type="button" class="btn btn-danger" data-bs-dismiss="modal" name="reset_permissions" value="reset_permissions" id="submit" hx-post="/updatePermissions" hx-trigger="click" hx-confirm="Are you sure you want to reset permissions for this container?">Reset</button>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@ -7,7 +7,7 @@
<li class="list-inline-item"><a href="https://github.com/lllllllillllllillll/DweebUI/blob/main/LICENSE" class="link-secondary">License</a></li>
<li class="list-inline-item"><a href="https://github.com/lllllllillllllillll/DweebUI/tree/main" target="_blank" class="link-secondary" rel="noopener">Source code</a></li>
<li class="list-inline-item">
<a href="https://github.com/lllllllillllllillll/DweebUI/tree/main" target="_blank" class="link-secondary" rel="noopener">
<a href="https://www.buymeacoffee.com/lllllllillllllillll" target="_blank" class="link-secondary" rel="noopener">
<svg xmlns="http://www.w3.org/2000/svg" class="icon text-pink icon-filled icon-inline" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572" /></svg>
Sponsor
</a>
@ -23,7 +23,7 @@
</li>
<li class="list-inline-item">
<a href="https://github.com/lllllllillllllillll/DweebUI/releases" class="link-secondary" rel="noopener">
v0.50
v0.60
</a>
</li>
</ul>