From e3ddb6f95aea2b507d5cc7708afee207ea8e355a Mon Sep 17 00:00:00 2001 From: Matt James Date: Tue, 30 Jul 2024 15:15:30 +0100 Subject: [PATCH] 0.2.0 --- bs-config.js | 2 +- config.json | 4 +- handlers/email.js | 12 +- index.js | 2 +- public/assets/tailwind.css | 276 +++----- public/javascript/search/index.js | 2 +- routes/Instance/Files.js | 2 +- views/500.ejs | 2 +- views/account.ejs | 24 +- views/admin/apikeys.ejs | 24 +- views/admin/auditlogs.ejs | 2 +- views/admin/edit-user.ejs | 14 +- views/admin/images.ejs | 38 +- views/admin/instances.ejs | 54 +- views/admin/node.ejs | 18 +- views/admin/nodes.ejs | 63 +- views/admin/overview.ejs | 38 +- views/admin/plugin.ejs | 10 +- views/admin/plugins.ejs | 22 +- views/admin/settings/appearance.ejs | 196 +++--- views/admin/settings/smtp.ejs | 30 +- views/admin/users.ejs | 50 +- views/auth/2fa.ejs | 16 +- views/auth/login.ejs | 41 +- views/auth/password-reset-form.ejs | 16 +- views/auth/register.ejs | 21 +- views/auth/resend-verification.ejs | 14 +- views/auth/reset-password.ejs | 14 +- views/components/admin_addons_template.ejs | 456 +++++++++---- views/components/instance.ejs | 42 +- views/components/settings.ejs | 26 +- views/components/template.ejs | 715 +++++++++++---------- views/enable-2fa.ejs | 8 +- views/errors/404.ejs | 2 +- views/instance/archives.ejs | 8 +- views/instance/createFile.ejs | 8 +- views/instance/createFolder.ejs | 8 +- views/instance/db.ejs | 14 +- views/instance/file.ejs | 6 +- views/instance/files.ejs | 71 +- views/instance/ftp.ejs | 12 +- views/instance/instance.ejs | 66 +- views/instance/network.ejs | 4 +- views/instance/settings.ejs | 8 +- views/instance/suspended.ejs | 5 +- views/instance/users.ejs | 14 +- views/instances.ejs | 24 +- 47 files changed, 1325 insertions(+), 1179 deletions(-) diff --git a/bs-config.js b/bs-config.js index a73cf3c..a6ff1d5 100644 --- a/bs-config.js +++ b/bs-config.js @@ -7,5 +7,5 @@ module.exports = { }, open: false, notify: false - }; +}; diff --git a/config.json b/config.json index 8499308..4a320e4 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,6 @@ { - "baseURL": "http://localhost:3001", + "baseUri": "http://localhost:3001", "port": 3001, "domain": "localhost", - "version": "0.1.0-beta7" + "version": "0.2.0-beta1" } diff --git a/handlers/email.js b/handlers/email.js index 5051f22..a174c46 100644 --- a/handlers/email.js +++ b/handlers/email.js @@ -112,10 +112,10 @@ async function sendVerificationEmail(email, token) {

Hello,

Thank you for registering on ${name}. Please click the button below to verify your email address:

- Verify Email Address + Verify Email Address

If you're having trouble clicking the button above, you can also verify your email by copying and pasting the following link into your browser:

-

${config.baseURL}/verify/${token}

+

${config.baseUri}/verify/${token}

If you didn't create an account on ${name}, please disregard this email.

Thanks,
The ${name} Team

@@ -241,10 +241,10 @@ async function sendTestEmail(recipientEmail) {

Hello,

We received a request to reset your password. Click the button below to reset it:

- Reset Password + Reset Password

If the button above does not work, click the link below:

-

${config.baseURL}/auth/reset/${token}

+

${config.baseUri}/auth/reset/${token}

If you did not request a password reset, please ignore this email. Your password will remain unchanged.

Thank you,

The ${name} Team

@@ -275,10 +275,10 @@ async function sendTestEmail(recipientEmail) {

Hello,

We received a request to reset your password. Click the button below to reset it:

- Reset Password + Reset Password

If the button above does not work, click the link below:

-

${config.baseURL}/auth/reset/${token}

+

${config.baseUri}/auth/reset/${token}

If you did not request a password reset, please ignore this email. Your password will remain unchanged.

Thank you,

The ${name} Team

diff --git a/index.js b/index.js index b55066b..fd09f1b 100644 --- a/index.js +++ b/index.js @@ -6,7 +6,7 @@ * /____/_/|_|\__, / .___/\____/_/ \__/ * /____/_/ * - * Skyport Panel v1 (Firestorm) + * Skyport Panel (Incendior) * (c) 2024 Matt James and contributers * */ diff --git a/public/assets/tailwind.css b/public/assets/tailwind.css index 1a04180..6bac6dc 100644 --- a/public/assets/tailwind.css +++ b/public/assets/tailwind.css @@ -1,5 +1,5 @@ /* -! tailwindcss v3.4.6 | MIT License | https://tailwindcss.com +! tailwindcss v3.4.7 | MIT License | https://tailwindcss.com */ /* @@ -953,6 +953,14 @@ select { margin: 1.5rem; } +.m-8 { + margin: 2rem; +} + +.m-5 { + margin: 1.25rem; +} + .-mx-2 { margin-left: -0.5rem; margin-right: -0.5rem; @@ -1119,6 +1127,10 @@ select { margin-top: 0.875rem; } +.mt-32 { + margin-top: 8rem; +} + .mt-4 { margin-top: 1rem; } @@ -1147,14 +1159,6 @@ select { margin-top: auto; } -.mt-44 { - margin-top: 11rem; -} - -.mt-32 { - margin-top: 8rem; -} - .block { display: block; } @@ -1234,6 +1238,10 @@ select { height: 1rem; } +.h-48 { + height: 12rem; +} + .h-5 { height: 1.25rem; } @@ -1254,14 +1262,6 @@ select { height: 100%; } -.h-48 { - height: 12rem; -} - -.h-screen { - height: 100vh; -} - .min-h-full { min-height: 100%; } @@ -1355,14 +1355,6 @@ select { max-width: 28rem; } -.max-w-screen-sm { - max-width: 640px; -} - -.max-w-screen-xl { - max-width: 1280px; -} - .max-w-sm { max-width: 24rem; } @@ -1631,6 +1623,10 @@ select { border-radius: 0.75rem; } +.rounded-2xl { + border-radius: 1rem; +} + .rounded-b-lg { border-bottom-right-radius: 0.5rem; border-bottom-left-radius: 0.5rem; @@ -1651,6 +1647,16 @@ select { border-top-right-radius: 0.5rem; } +.rounded-t-xl { + border-top-left-radius: 0.75rem; + border-top-right-radius: 0.75rem; +} + +.rounded-b-xl { + border-bottom-right-radius: 0.75rem; + border-bottom-left-radius: 0.75rem; +} + .border { border-width: 1px; } @@ -1688,6 +1694,11 @@ select { border-color: rgb(209 213 219 / var(--tw-border-opacity)); } +.border-gray-400 { + --tw-border-opacity: 1; + border-color: rgb(156 163 175 / var(--tw-border-opacity)); +} + .border-neutral-600\/30 { border-color: rgb(82 82 82 / 0.3); } @@ -1713,25 +1724,6 @@ select { border-color: rgb(255 255 255 / 0.05); } -.border-gray-600 { - --tw-border-opacity: 1; - border-color: rgb(75 85 99 / var(--tw-border-opacity)); -} - -.border-gray-700 { - --tw-border-opacity: 1; - border-color: rgb(55 65 81 / var(--tw-border-opacity)); -} - -.border-gray-700\/20 { - border-color: rgb(55 65 81 / 0.2); -} - -.border-gray-400 { - --tw-border-opacity: 1; - border-color: rgb(156 163 175 / var(--tw-border-opacity)); -} - .bg-\[\#101010\] { --tw-bg-opacity: 1; background-color: rgb(16 16 16 / var(--tw-bg-opacity)); @@ -1901,69 +1893,10 @@ select { background-color: rgb(234 179 8 / var(--tw-bg-opacity)); } -.bg-gray-700 { - --tw-bg-opacity: 1; - background-color: rgb(55 65 81 / var(--tw-bg-opacity)); -} - -.bg-gray-800 { - --tw-bg-opacity: 1; - background-color: rgb(31 41 55 / var(--tw-bg-opacity)); -} - -.bg-gray-900 { - --tw-bg-opacity: 1; - background-color: rgb(17 24 39 / var(--tw-bg-opacity)); -} - -.bg-indigo-600 { - --tw-bg-opacity: 1; - background-color: rgb(79 70 229 / var(--tw-bg-opacity)); -} - -.bg-gray-100 { - --tw-bg-opacity: 1; - background-color: rgb(243 244 246 / var(--tw-bg-opacity)); -} - -.bg-neutral-950 { - --tw-bg-opacity: 1; - background-color: rgb(10 10 10 / var(--tw-bg-opacity)); -} - .bg-opacity-50 { --tw-bg-opacity: 0.5; } -.bg-gradient-to-r { - background-image: linear-gradient(to right, var(--tw-gradient-stops)); -} - -.from-gray-800 { - --tw-gradient-from: #1f2937 var(--tw-gradient-from-position); - --tw-gradient-to: rgb(31 41 55 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.from-indigo-500 { - --tw-gradient-from: #6366f1 var(--tw-gradient-from-position); - --tw-gradient-to: rgb(99 102 241 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.via-gray-900 { - --tw-gradient-to: rgb(17 24 39 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), #111827 var(--tw-gradient-via-position), var(--tw-gradient-to); -} - -.to-black { - --tw-gradient-to: #000 var(--tw-gradient-to-position); -} - -.to-purple-500 { - --tw-gradient-to: #a855f7 var(--tw-gradient-to-position); -} - .object-cover { -o-object-fit: cover; object-fit: cover; @@ -2160,6 +2093,10 @@ select { padding-top: 2rem; } +.pl-2 { + padding-left: 0.5rem; +} + .text-left { text-align: left; } @@ -2312,6 +2249,11 @@ select { color: rgb(156 163 175 / var(--tw-text-opacity)); } +.text-gray-500 { + --tw-text-opacity: 1; + color: rgb(107 114 128 / var(--tw-text-opacity)); +} + .text-gray-600 { --tw-text-opacity: 1; color: rgb(75 85 99 / var(--tw-text-opacity)); @@ -2367,6 +2309,11 @@ select { color: rgb(254 226 226 / var(--tw-text-opacity)); } +.text-red-300 { + --tw-text-opacity: 1; + color: rgb(252 165 165 / var(--tw-text-opacity)); +} + .text-red-400 { --tw-text-opacity: 1; color: rgb(248 113 113 / var(--tw-text-opacity)); @@ -2411,21 +2358,6 @@ select { color: rgb(212 212 216 / var(--tw-text-opacity)); } -.text-gray-300 { - --tw-text-opacity: 1; - color: rgb(209 213 219 / var(--tw-text-opacity)); -} - -.text-indigo-400 { - --tw-text-opacity: 1; - color: rgb(129 140 248 / var(--tw-text-opacity)); -} - -.text-gray-500 { - --tw-text-opacity: 1; - color: rgb(107 114 128 / var(--tw-text-opacity)); -} - .placeholder-neutral-400::-moz-placeholder { --tw-placeholder-opacity: 1; color: rgb(163 163 163 / var(--tw-placeholder-opacity)); @@ -2472,6 +2404,12 @@ select { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } +.shadow-2xl { + --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + .shadow-lg { --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); @@ -2496,18 +2434,6 @@ select { box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); } -.shadow-md { - --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); - --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - -.shadow-2xl { - --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); - --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); - box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); -} - .ring-1 { --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); @@ -2564,20 +2490,20 @@ select { transition-duration: 150ms; } -.transition-opacity { - transition-property: opacity; +.transition-colors { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } -.transition-transform { - transition-property: transform; +.transition-opacity { + transition-property: opacity; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } -.transition-colors { - transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; +.transition-transform { + transition-property: transform; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } @@ -2610,6 +2536,10 @@ select { border-radius: 0.5rem; } +.file\:rounded-xl::file-selector-button { + border-radius: 0.75rem; +} + .file\:border-0::file-selector-button { border-width: 0px; } @@ -2637,6 +2567,10 @@ select { font-weight: 600; } +.file\:font-medium::file-selector-button { + font-weight: 500; +} + .file\:text-neutral-300::file-selector-button { --tw-text-opacity: 1; color: rgb(212 212 212 / var(--tw-text-opacity)); @@ -2701,11 +2635,6 @@ select { background-color: rgb(37 99 235 / var(--tw-bg-opacity)); } -.hover\:bg-blue-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(29 78 216 / var(--tw-bg-opacity)); -} - .hover\:bg-emerald-500:hover { --tw-bg-opacity: 1; background-color: rgb(16 185 129 / var(--tw-bg-opacity)); @@ -2799,6 +2728,10 @@ select { background-color: rgb(220 38 38 / var(--tw-bg-opacity)); } +.hover\:bg-white\/10:hover { + background-color: rgb(255 255 255 / 0.1); +} + .hover\:bg-white\/25:hover { background-color: rgb(255 255 255 / 0.25); } @@ -2812,24 +2745,9 @@ select { background-color: rgb(250 204 21 / var(--tw-bg-opacity)); } -.hover\:bg-indigo-700:hover { - --tw-bg-opacity: 1; - background-color: rgb(67 56 202 / var(--tw-bg-opacity)); -} - -.hover\:bg-indigo-900:hover { +.hover\:bg-amber-500:hover { --tw-bg-opacity: 1; - background-color: rgb(49 46 129 / var(--tw-bg-opacity)); -} - -.hover\:from-indigo-600:hover { - --tw-gradient-from: #4f46e5 var(--tw-gradient-from-position); - --tw-gradient-to: rgb(79 70 229 / 0) var(--tw-gradient-to-position); - --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); -} - -.hover\:to-purple-600:hover { - --tw-gradient-to: #9333ea var(--tw-gradient-to-position); + background-color: rgb(245 158 11 / var(--tw-bg-opacity)); } .hover\:text-amber-600:hover { @@ -2852,13 +2770,14 @@ select { color: rgb(212 212 212 / var(--tw-text-opacity)); } -.hover\:text-white:hover { +.hover\:text-red-400:hover { --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); + color: rgb(248 113 113 / var(--tw-text-opacity)); } -.hover\:underline:hover { - text-decoration-line: underline; +.hover\:text-white:hover { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); } .hover\:shadow:hover { @@ -2893,6 +2812,11 @@ select { border-style: none; } +.focus\:border-indigo-500:focus { + --tw-border-opacity: 1; + border-color: rgb(99 102 241 / var(--tw-border-opacity)); +} + .focus\:border-neutral-500:focus { --tw-border-opacity: 1; border-color: rgb(115 115 115 / var(--tw-border-opacity)); @@ -2911,11 +2835,6 @@ select { border-color: rgb(255 255 255 / 0.1); } -.focus\:border-indigo-500:focus { - --tw-border-opacity: 1; - border-color: rgb(99 102 241 / var(--tw-border-opacity)); -} - .focus\:outline-none:focus { outline: 2px solid transparent; outline-offset: 2px; @@ -2951,14 +2870,14 @@ select { box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); } -.focus\:ring-blue-400:focus { +.focus\:ring-emerald-500:focus { --tw-ring-opacity: 1; - --tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity)); + --tw-ring-color: rgb(16 185 129 / var(--tw-ring-opacity)); } -.focus\:ring-emerald-500:focus { +.focus\:ring-indigo-500:focus { --tw-ring-opacity: 1; - --tw-ring-color: rgb(16 185 129 / var(--tw-ring-opacity)); + --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity)); } .focus\:ring-neutral-500:focus { @@ -2980,11 +2899,6 @@ select { --tw-ring-color: transparent; } -.focus\:ring-indigo-500:focus { - --tw-ring-opacity: 1; - --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity)); -} - .focus\:ring-offset-2:focus { --tw-ring-offset-width: 2px; } @@ -3268,21 +3182,11 @@ select { padding-right: 1rem; } - .lg\:px-6 { - padding-left: 1.5rem; - padding-right: 1.5rem; - } - .lg\:px-8 { padding-left: 2rem; padding-right: 2rem; } - .lg\:py-32 { - padding-top: 8rem; - padding-bottom: 8rem; - } - .lg\:pl-56 { padding-left: 14rem; } diff --git a/public/javascript/search/index.js b/public/javascript/search/index.js index 6daf2b9..7e49403 100644 --- a/public/javascript/search/index.js +++ b/public/javascript/search/index.js @@ -56,7 +56,7 @@ function filterLinks(searchTerm) { 'py-2', 'text-sm', 'font-medium', - 'rounded-lg', + 'rounded-xl', ); if (index === 0) { diff --git a/routes/Instance/Files.js b/routes/Instance/Files.js index 3dd881c..d4b3d64 100644 --- a/routes/Instance/Files.js +++ b/routes/Instance/Files.js @@ -43,7 +43,7 @@ router.get("/instance/:id/files", async (req, res) => { const files = await fetchFiles(instance, req.query.path); res.render('instance/files', { req, - files, + files: files, user: req.user, name: await db.get('name') || 'Skyport', logo: await db.get('logo') || false , diff --git a/views/500.ejs b/views/500.ejs index 3d3196a..49400c6 100644 --- a/views/500.ejs +++ b/views/500.ejs @@ -4,7 +4,7 @@
-

Manage Instance

+

Manage Instance

View, update and manage an instance on the Skyport panel.

diff --git a/views/account.ejs b/views/account.ejs index 5f247e1..0e06581 100644 --- a/views/account.ejs +++ b/views/account.ejs @@ -2,16 +2,14 @@
-
+

- Edit profile - - + Update account + class="bg-neutral-600/20 hidden text-neutral-400 text-sm ml-1.5 font-medium me-2 px-2.5 py-1 rounded-full"> <%= user.username %> @@ -23,31 +21,31 @@
- +

- +
- + - - + +
<% if (user.twoFAEnabled !== true) { %> - + <% } else { %>
- +
<% } %>
diff --git a/views/admin/apikeys.ejs b/views/admin/apikeys.ejs index c16c2de..dc2e88a 100644 --- a/views/admin/apikeys.ejs +++ b/views/admin/apikeys.ejs @@ -3,7 +3,7 @@
-

API Keys

+

API Keys

A list of all the API Keys on the Skyport panel.

@@ -12,7 +12,7 @@ @@ -20,7 +20,7 @@
<% if (req.query.err == "CREATED") { %>
-
+
@@ -28,7 +28,7 @@
-

CREATED!

+

CREATED!

The API-Key was CREATED successfully.

@@ -49,22 +49,22 @@ ID - + Key Created At Actions @@ -83,7 +83,7 @@
<%= key.key %>
@@ -93,7 +93,7 @@
<%= key.createdAt %>
@@ -106,7 +106,7 @@ diff --git a/views/admin/auditlogs.ejs b/views/admin/auditlogs.ejs index 375ce2b..9e1d08e 100644 --- a/views/admin/auditlogs.ejs +++ b/views/admin/auditlogs.ejs @@ -3,7 +3,7 @@
-

Audit Logs

+

Audit Logs

A history of actions performed by admins.

diff --git a/views/admin/edit-user.ejs b/views/admin/edit-user.ejs index 91fead1..2141e08 100644 --- a/views/admin/edit-user.ejs +++ b/views/admin/edit-user.ejs @@ -3,7 +3,7 @@
-

Edit User

+

Edit User

Modify the details of the selected user.

@@ -16,7 +16,7 @@ id="userName" type="text" name="username" - class="rounded-lg focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" + class="rounded-xl focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" value="<%= editUser.username %>" placeholder="JohnDoe" /> @@ -25,7 +25,7 @@ id="email" type="email" name="email" - class="rounded-lg focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" + class="rounded-xl focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" value="<%= editUser.email %>" placeholder="your@email.tld" /> @@ -34,14 +34,14 @@ id="userPass" type="password" name="password" - class="rounded-lg focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" + class="rounded-xl focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" placeholder="******" /> @@ -58,7 +58,7 @@ diff --git a/views/admin/images.ejs b/views/admin/images.ejs index 982634f..f755c36 100644 --- a/views/admin/images.ejs +++ b/views/admin/images.ejs @@ -3,11 +3,11 @@
-

Images

+

Images

A list of all the images on the Skyport panel.

- +
@@ -21,10 +21,10 @@ - Name - Author - Docker Image - Actions + Name + Author + Docker Image + Actions @@ -47,7 +47,7 @@
-
Remove
+
Remove
@@ -56,26 +56,26 @@
<%- include('../components/footer') %> - - -

System information

+ +

System information

- You are running Skyport version . + You are running Skyport Panel version .

- + Discord Server - + Documentation - + GitHub - + diff --git a/views/admin/plugin.ejs b/views/admin/plugin.ejs index 8651192..4fd5305 100644 --- a/views/admin/plugin.ejs +++ b/views/admin/plugin.ejs @@ -3,7 +3,7 @@
-

Edit Plugin Manifest

+

Edit Plugin Manifest

Edit the content of the manifest.json of the plugin.

@@ -11,12 +11,12 @@
-
+
-
+
- - + +
diff --git a/views/admin/plugins.ejs b/views/admin/plugins.ejs index 110f857..c16fe00 100644 --- a/views/admin/plugins.ejs +++ b/views/admin/plugins.ejs @@ -3,11 +3,11 @@
-

Plugins Overview

-

A list of all the Plugins installed on the panel.p> +

Plugins Overview

+

A list of all the Plugins installed on the panel.

- diff --git a/views/admin/settings/appearance.ejs b/views/admin/settings/appearance.ejs index b86509a..bce3ea3 100644 --- a/views/admin/settings/appearance.ejs +++ b/views/admin/settings/appearance.ejs @@ -1,111 +1,99 @@ <%- include('../../components/template') %> -
-
-
-
-

Settings

-

Change common settings on this Skyport panel.

+
+
+
+

Settings

+

Change common settings on the Skyport panel.

+
-
-
- - <%- include('../../components/settings') %> - - -
-

Appearance

-
- -
-
- - - -
-
- -
-
-
- - -
- - - -
-
- -
-
-
- <% if (settings.register === true) { %> - Register Page: Enabled - <% } else { %> - Register Page: Disabled - <% } %> -
- -
- <% if (settings.register === true) { %> - - - <% } else { %> - - - <% } %> -
-
- -
-
-
- <% if (settings.forceVerify === true) { %> - Force Verify Email: Enabled - <% } else { %> - Force Verify Email: Disabled - <% } %> +
+ <%- include('../../components/settings') %> + +
+

General

+
+
+ + + + + +
+
+ +
+
+ + +
+ + + +
+
+
+
+
+ <% if (settings.register === true) { %> + Register Page: Enabled + <% } else { %> + Register Page: Disabled + <% } %> +
+
+ <% if (settings.register === true) { %> + + + <% } else { %> + + + <% } %> +
+
+
+
+
+ <% if (settings.forceVerify === true) { %> + Force Verify Email: Enabled + <% } else { %> + Force Verify Email: Disabled + <% } %> +
+
+ <% if (settings.forceVerify === true) { %> + + + <% } else { %> + + + <% } %> +
+
+
+
- -
- <% if (settings.forceVerify === true) { %> - - - <% } else { %> - - - <% } %> -
- -
-
-
- - - -
+ +
- <%- include('../../components/footer') %> - + document.getElementById('useImage').addEventListener('change', function() { + const imageUploadBox = document.getElementById('imageUploadBox'); + const logoButton = document.getElementById('logoButton'); + const logoType = document.getElementById('logoType'); + + if (this.checked) { + imageUploadBox.classList.remove('hidden'); + logoButton.textContent = 'Save new logo'; + logoType.value = 'image'; + } else { + imageUploadBox.classList.add('hidden'); + logoButton.textContent = 'Remove logo'; + logoType.value = 'none'; + } + }); + \ No newline at end of file diff --git a/views/admin/settings/smtp.ejs b/views/admin/settings/smtp.ejs index 2427965..0818ce4 100644 --- a/views/admin/settings/smtp.ejs +++ b/views/admin/settings/smtp.ejs @@ -4,7 +4,7 @@
-

Settings

+

Settings

Change common settings on this Skyport panel.

@@ -12,36 +12,35 @@ <%- include('../../components/settings') %> -
-

SMTP Settings

-
-
+
+

SMTP

+ - + - + - + - + - + - + - + -
+ - - + + <% if (req.query.msg && req.query.msg == "TestemailSentsuccess") { %>
Test Mail Sent Successfully. Your SMTP Server is Working! @@ -63,7 +62,6 @@
<% } %>
-
diff --git a/views/admin/users.ejs b/views/admin/users.ejs index 61f54eb..331d28d 100644 --- a/views/admin/users.ejs +++ b/views/admin/users.ejs @@ -3,7 +3,7 @@
-

Users

+

Users

A list of all the users set up on the Skyport panel.

@@ -12,7 +12,7 @@ @@ -32,34 +32,34 @@ Name Email - + Information Role Verification Status Actions @@ -84,7 +84,7 @@
<%= user.email %>
@@ -93,7 +93,7 @@
<%= user.userId %>
@@ -141,7 +141,7 @@ > Remove @@ -172,14 +172,14 @@ id="userName" type="text" name="username" - class="rounded-lg focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" + class="rounded-xl focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" placeholder="JohnDoe" /> @@ -190,7 +190,7 @@ id="userPass" type="password" name="password" - class="rounded-lg focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" + class="rounded-xl focus:ring-transparent focus:border-transparent text-white text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 flex border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" placeholder="******" /> @@ -200,7 +200,7 @@ + --> diff --git a/views/auth/2fa.ejs b/views/auth/2fa.ejs index 8f6a8fb..ff95d30 100644 --- a/views/auth/2fa.ejs +++ b/views/auth/2fa.ejs @@ -7,17 +7,17 @@ - + - +
<% if (logo == true) { %> <% } %> - +

- Please enter the 6 character code displayed on your authenticator App. + Please enter the 6 character code displayed on your authenticator app.

@@ -28,17 +28,17 @@
- +
- +
<% if (req.query.err && req.query.err == "InvalidAuthCode") { %>
- Invalid Auth Code Pleas Wait util a New Auth Code gets Generated in yor Authenticator App and Try Again. + Invalid auth code. <% } %>
@@ -46,7 +46,7 @@
diff --git a/views/auth/login.ejs b/views/auth/login.ejs index fe47ccd..2efa928 100644 --- a/views/auth/login.ejs +++ b/views/auth/login.ejs @@ -7,16 +7,17 @@ - + + - +
<% if (logo == true) { %> <% } %> - -

+

+

Please enter your account credentials below.

@@ -26,15 +27,15 @@
<% if (settings.register) { %> -
- - Don't have an account? Create one +
+ + Need an account? Register
<% } %> @@ -92,23 +93,19 @@ <% } %> <% if (req.query.msg && req.query.msg == "UserAlreadyVerified") { %>
- User Already Verified, Login With Your Account. + Your account is already verified, you may sign in. <% } %> <% if (req.query.msg && req.query.msg == "AccountcreateEmailSent") { %>
- Your Account successfully create and please check your email for verify your account. + Your account was successfully created - please check your email to continue. <% } %> <% if (req.query.msg && req.query.msg == "AccountCreated") { %>
- Your Account successfully create, login with your username/email and password. + Your account was successfully created, you may sign in now. <% } %> <% if (req.query.err && req.query.err === "UserNotVerified") { %>
-

Oops! Your Account Isn't Verified Yet.

-

Please verify your account to proceed.

- - Click Here to Resend Verification Email - +

Your account isn't verify, please check your email. Resend Email

<% } %> diff --git a/views/auth/password-reset-form.ejs b/views/auth/password-reset-form.ejs index 8672873..e2f8897 100644 --- a/views/auth/password-reset-form.ejs +++ b/views/auth/password-reset-form.ejs @@ -7,17 +7,17 @@ - + - +
<% if (logo == true) { %> <% } %> - +

- Please enter New Password below. + Please enter a new password below.

@@ -26,7 +26,7 @@
- + @@ -38,7 +38,7 @@
- + @@ -52,7 +52,7 @@
- +
<% if (req.query.err && req.query.err === "InvalidToken") { %> @@ -65,7 +65,7 @@
diff --git a/views/auth/register.ejs b/views/auth/register.ejs index 2a32dcc..7869da5 100644 --- a/views/auth/register.ejs +++ b/views/auth/register.ejs @@ -5,17 +5,16 @@ <%= name %> - - - + + - +
- -

Register an account

+ +

Register an account

Please enter your details below.

@@ -27,26 +26,26 @@
- +
- +
- +
- +
<% if (req.query.err && req.query.err == "InvalidCredentials") { %> @@ -57,7 +56,7 @@
- Already have an account? Sign in + Already have an account? Sign in
diff --git a/views/auth/resend-verification.ejs b/views/auth/resend-verification.ejs index 5c41f3e..65ad7f7 100644 --- a/views/auth/resend-verification.ejs +++ b/views/auth/resend-verification.ejs @@ -7,17 +7,17 @@ - + - +
<% if (logo == true) { %> <% } %> - +

- Please enter your Email below to resend the verification email. + Please enter your email below to resend the verification email.

@@ -26,12 +26,12 @@
- +
- +
<% if (req.query.msg && req.query.msg === 'VerificationEmailResent') { %> @@ -52,7 +52,7 @@
diff --git a/views/auth/reset-password.ejs b/views/auth/reset-password.ejs index f665f96..3b0d046 100644 --- a/views/auth/reset-password.ejs +++ b/views/auth/reset-password.ejs @@ -7,17 +7,17 @@ - + - +
<% if (logo == true) { %> <% } %> - +

- Please enter your Email below. + Please enter your email below.

@@ -26,12 +26,12 @@
- +
- +
<% if (req.query.msg && req.query.msg === 'PasswordSent') { %> @@ -52,7 +52,7 @@
diff --git a/views/components/admin_addons_template.ejs b/views/components/admin_addons_template.ejs index 91908a1..5822679 100644 --- a/views/components/admin_addons_template.ejs +++ b/views/components/admin_addons_template.ejs @@ -1,137 +1,335 @@ - - <%= name %> - - - - - - - - -
- + + + +
+
+ +
+
+
+ + + + +
+ +
+ + + +
+ +
+ +
+
+
+
+ - - + function animatePageTransition(callback) { + if (isAnimating) return; + isAnimating = true; -
-
- + contentSection.style.opacity = '0'; + contentSection.style.transform = 'translateX(-20px)'; -
- - - -
- -
- -
-
-
-
- -
- - - - - -
+
+ + + + + +
\ No newline at end of file diff --git a/views/components/instance.ejs b/views/components/instance.ejs index 59e6ff6..83b852e 100644 --- a/views/components/instance.ejs +++ b/views/components/instance.ejs @@ -3,24 +3,24 @@
- - - - diff --git a/views/components/settings.ejs b/views/components/settings.ejs index fa67dd3..3ffbdf6 100644 --- a/views/components/settings.ejs +++ b/views/components/settings.ejs @@ -3,19 +3,19 @@
- - + + + +
+
+ +
+
+
+ + + + +
+ +
+ + + +
+ +
+ +
+
+
+
+ - - - - + } + function animatePageTransition(callback) { + if (isAnimating) return; + isAnimating = true; + contentSection.style.opacity = '0'; + contentSection.style.transform = 'translateX(-20px)'; - -
-
- - -
-
-
- - - - -
- - -
- - - - + setTimeout(() => { + contentSection.style.transition = ''; + isAnimating = false; + }, 300); + }, 300); + } + + navLinks.forEach(link => { + link.addEventListener('click', (e) => { + e.preventDefault(); + const href = link.getAttribute('href'); -
- -
- -
-
-
-
- -
- - - - - - -
+
+ + + + + +
\ No newline at end of file diff --git a/views/enable-2fa.ejs b/views/enable-2fa.ejs index c870c6b..8501922 100644 --- a/views/enable-2fa.ejs +++ b/views/enable-2fa.ejs @@ -1,20 +1,20 @@ <%- include('components/template') %>
-
+

Enable Two-Factor Authentication

Secure your account with an extra layer of protection.

-
+
QR Code for 2FA
- +
- +
diff --git a/views/errors/404.ejs b/views/errors/404.ejs index d1fbc73..a40cb06 100644 --- a/views/errors/404.ejs +++ b/views/errors/404.ejs @@ -17,7 +17,7 @@

404

Something's missing.

Sorry, we can't find that page.

- Back to <%= name %> + Back to <%= name %>
diff --git a/views/instance/archives.ejs b/views/instance/archives.ejs index ba04d61..2832f87 100644 --- a/views/instance/archives.ejs +++ b/views/instance/archives.ejs @@ -3,12 +3,12 @@
-

Manage Instance

+

Manage Instance

View, update, and manage an instance on the Skyport panel.

<% let query = req.query.path ? '?path=' + req.query.path : ''; %>
- @@ -40,8 +40,8 @@ <%= archive.lastUpdated %> - Restore - + Restore + diff --git a/views/instance/createFile.ejs b/views/instance/createFile.ejs index d3ea0a2..cd3efa8 100644 --- a/views/instance/createFile.ejs +++ b/views/instance/createFile.ejs @@ -4,7 +4,7 @@
-

Manage Instance

+

Manage Instance

View, update and manage an instance on the Skyport panel.

@@ -23,7 +23,7 @@ id="filename" type="text" name="filename" - class="rounded-lg focus:ring-transparent focus:border-transparent text-white inline-flex ml-2 text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" + class="rounded-xl focus:ring-transparent focus:border-transparent text-white inline-flex ml-2 text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" placeholder="file.txt" /> @@ -31,10 +31,10 @@
- + Back -
diff --git a/views/instance/createFolder.ejs b/views/instance/createFolder.ejs index 702bc42..58687c6 100644 --- a/views/instance/createFolder.ejs +++ b/views/instance/createFolder.ejs @@ -3,7 +3,7 @@
-

Manage Instance

+

Manage Instance

View, update and manage an instance on the Skyport panel.

@@ -22,17 +22,17 @@ id="folder" type="text" name="folder" - class="rounded-lg focus:ring-transparent focus:border-transparent text-white inline-flex ml-2 text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" + class="rounded-xl focus:ring-transparent focus:border-transparent text-white inline-flex ml-2 text-sm mt-2 mb-6 w-96 items-center transition justify-left gap-16 hover:bg-white/5 px-4 py-2 border-white/5 bg-neutral-900 placeholder:text-white/20 text-white border border-black/10" placeholder="folder" />
- + Back -
diff --git a/views/instance/db.ejs b/views/instance/db.ejs index f51c041..7eaa5bb 100644 --- a/views/instance/db.ejs +++ b/views/instance/db.ejs @@ -3,29 +3,29 @@
-

Manage Instance

+

Manage Instance

View, update, and manage an instance on the Skyport panel.

- +
-
+
-

Create Database

+

Create Database

Enter the name of the database you want to create.

- +
- - + +
diff --git a/views/instance/file.ejs b/views/instance/file.ejs index 3a48d1b..e3bbabd 100644 --- a/views/instance/file.ejs +++ b/views/instance/file.ejs @@ -4,7 +4,7 @@
-

Manage Instance

+

Manage Instance

View, update and manage an instance on the Skyport panel.

@@ -27,10 +27,10 @@
- + Back -
diff --git a/views/instance/files.ejs b/views/instance/files.ejs index d1b6f43..a264111 100644 --- a/views/instance/files.ejs +++ b/views/instance/files.ejs @@ -47,19 +47,19 @@
-

Manage Instance

+

Manage Instance

View, update and manage an instance on the Skyport panel.

<% let query = req.query.path ? '?path=' + req.query.path : ''; %>
- - + + Create File - + Create Folder - @@ -82,7 +82,7 @@ <% } else { %> <% currentPath = '' %> <% } %> - +

@@ -140,10 +140,10 @@ - -
+
-
-

Confirm Mass Deletion

+
+

Confirm Mass Deletion

- - + +
-
-

Confirm Deletion

+
+

Confirm Deletion

- - + +
-
-

Rename File

+
+

Rename File

Please choose a new name for this file.

- +
- - + +
-
-

Uploading File(s)

+
+

Uploading File(s)

@@ -213,11 +213,15 @@ function toggleDropdown(event, fileName) { event.stopPropagation(); const dropdown = document.getElementById(`dropdown-${fileName}`); + + // Close other open dropdowns with animation document.querySelectorAll('[id^="dropdown-"]').forEach((el) => { if (el.id !== `dropdown-${fileName}` && !el.classList.contains('pointer-events-none')) { closeDropdown(el); } }); + + // Toggle the clicked dropdown if (dropdown.classList.contains('pointer-events-none')) { openDropdown(dropdown); } else { @@ -234,6 +238,8 @@ dropdown.classList.remove('opacity-100', 'scale-100'); dropdown.classList.add('opacity-0', 'scale-95', 'pointer-events-none'); } + + // Close dropdowns when clicking outside document.addEventListener('click', function(event) { if (!event.target.closest('td')) { document.querySelectorAll('[id^="dropdown-"]').forEach((dropdown) => { @@ -244,10 +250,10 @@ } }); - const searchInput = document.getElementById('searchInput'); + const searchInput2 = document.getElementById('searchInput2'); const fileRows = document.querySelectorAll('tbody tr'); - searchInput.addEventListener('input', function() { + searchInput2.addEventListener('input', function() { const searchTerm = this.value.toLowerCase(); fileRows.forEach(row => { @@ -271,6 +277,7 @@ const formData = new FormData(); Array.from(files).forEach(file => formData.append('files', file)); + // Open the upload modal const modal = document.getElementById('uploadModal'); modal.classList.remove('opacity-0', 'pointer-events-none'); modal.querySelector('div').classList.remove('scale-95'); @@ -289,14 +296,17 @@ if (xhr.status == 200) { document.getElementById('uploadStatus').textContent = 'Upload complete!'; setTimeout(() => { + // Close the modal modal.classList.add('opacity-0', 'pointer-events-none'); modal.querySelector('div').classList.remove('scale-100'); modal.querySelector('div').classList.add('scale-95'); + // Reload the page window.location.reload(); }, 1000); } else { document.getElementById('uploadStatus').textContent = 'Upload failed. Server responded with status ' + xhr.status; setTimeout(() => { + // Close the modal modal.classList.add('opacity-0', 'pointer-events-none'); modal.querySelector('div').classList.remove('scale-100'); modal.querySelector('div').classList.add('scale-95'); @@ -304,7 +314,7 @@ } }; xhr.send(formData); - document.getElementById('fileInput').value = ''; + document.getElementById('fileInput').value = ''; // Reset file input }); let deleteUrl = ''; @@ -381,6 +391,7 @@ } }); + // Mass actions functionality const selectAllCheckbox = document.getElementById('selectAll'); const fileCheckboxes = document.querySelectorAll('.file-checkbox'); const floatingActionBar = document.getElementById('floatingActionBar'); @@ -401,8 +412,10 @@ if (selectedFiles.length > 0) { floatingActionBar.classList.remove('translate-y-full'); + floatingActionBar.classList.remove('hidden') } else { floatingActionBar.classList.add('translate-y-full'); + floatingActionBar.classList.add('hidden') } } diff --git a/views/instance/ftp.ejs b/views/instance/ftp.ejs index a127962..7a9ead4 100644 --- a/views/instance/ftp.ejs +++ b/views/instance/ftp.ejs @@ -3,37 +3,37 @@
-

Manage Instance

+

Manage Instance

View, update and manage an instance on the Skyport panel.

<% let query = req.query.path ? '?path=' + req.query.path : ''; %>
<%- include('../components/instance') %> -
+

FTP Details

-
+
ftp://<%- logindata.host %>:<%- logindata.port %>
-
+
<%- logindata.username %>
-
+
<%- logindata.password %>
- +