Bläddra i källkod

updated dependencies. improved AddAlert function.

lllllllillllllillll 1 år sedan
förälder
incheckning
82c134158d
8 ändrade filer med 47 tillägg och 46 borttagningar
  1. 1 1
      CHANGELOG.md
  2. 6 7
      README.md
  3. 9 4
      controllers/dashboard.js
  4. 12 12
      package-lock.json
  5. 3 3
      package.json
  6. 1 1
      utils/install.js
  7. 13 16
      views/modals/permissions.html
  8. 2 2
      views/partials/footer.html

+ 1 - 1
CHANGELOG.md

@@ -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.

+ 6 - 7
README.md

@@ -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

+ 9 - 4
controllers/dashboard.js

@@ -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') {

+ 12 - 12
package-lock.json

@@ -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",

+ 3 - 3
package.json

@@ -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"
   }
 }

+ 1 - 1
utils/install.js

@@ -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 });

+ 13 - 16
views/modals/permissions.html

@@ -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>

+ 2 - 2
views/partials/footer.html

@@ -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>