diff --git a/app/app.ts b/app/app.ts index 3d026e9..9b3ddca 100644 --- a/app/app.ts +++ b/app/app.ts @@ -1,4 +1,4 @@ -const version = 1.9; +const version = 1.12; import "dotenv"; @@ -16,6 +16,7 @@ import path from "path"; import authRouter from "./routes/auth"; import indexRouter from "./routes/index"; import adduserRouter from "./routes/adduser"; +import settingsRouter from "./routes/settings"; import {db, expire, createDatabase, updateDatabase, MediaRow} from "./lib/db"; @@ -69,7 +70,7 @@ function onError(error: any) { // Check if there is an existing DB or not, then check if it needs to be updated to new schema db.get("SELECT * FROM sqlite_master WHERE name ='users' and type='table'", async (err, row) => { - if (!row) createDatabase(2); + if (!row) createDatabase(3); else checkVersion(); }); @@ -77,12 +78,11 @@ function checkVersion () { db.get("PRAGMA user_version", (err: Error, row: any) => { if (row && row.user_version) { const version = row.user_version; - if (version != 2) console.log("DATABASE IS OUTDATED"); - //no future releases yet, and else statement handles version 1 - //updateDatabase(version, 2); + if (version != 3) console.log("DATABASE IS OUTDATED"); + updateDatabase(version, 3); } else { // Because ver 1 does not have user_version set, we can safely assume that it is ver 1 - updateDatabase(1, 2); + updateDatabase(1, 3); } }); } @@ -124,6 +124,7 @@ app.use(passport.authenticate("session")); app.use("/", indexRouter); app.use("/", authRouter); app.use("/", adduserRouter); +app.use("/", settingsRouter); app.use("/uploads", express.static("uploads")); @@ -141,6 +142,8 @@ async function prune () { fs.unlink(`uploads/${row.path}`, (err) => { if (err && err.errno == -4058) { console.log("File already deleted"); + } else { + if (err) console.log(err); } }); }); diff --git a/app/lib/db.ts b/app/lib/db.ts index 42da724..1bd165b 100644 --- a/app/lib/db.ts +++ b/app/lib/db.ts @@ -31,6 +31,14 @@ export function createDatabase(version: number) { )" ); + db.run( + "CREATE TABLE IF NOT EXISTS settings ( \ + id INTEGER PRIMARY KEY, \ + downsclaing BOOLEAN, \ + namerandomization BOOLEAN \ + )" + ); + db.run(`PRAGMA user_version = ${version}`); } @@ -38,9 +46,10 @@ export function createDatabase(version: number) { export function updateDatabase(oldVersion: number, newVersion: number) { if (oldVersion == 1) { console.log(`Updating database from ${oldVersion} to ${newVersion}`); - db.run("PRAGMA user_version = 2", (err) => { + db.run("PRAGMA user_version = 3", (err) => { if (err) return; }); + db.run("ALTER TABLE media ADD COLUMN username TEXT", (err) => { if (err) return; }); @@ -49,6 +58,20 @@ export function updateDatabase(oldVersion: number, newVersion: number) { if (err) return; }); } + if (oldVersion == 2) { + console.log(`Updating database from ${oldVersion} to ${newVersion}`); + db.run("PRAGMA user_version = 3", (err) => { + if (err) return; + }); + + db.run( + "CREATE TABLE IF NOT EXISTS settings ( \ + id INTEGER PRIMARY KEY, \ + downsclaing BOOLEAN, \ + namerandomization BOOLEAN \ + )" + ); + } } /**Inserts into the media table */ diff --git a/app/public/css/login.css b/app/public/css/login.css index d33b643..12f94a1 100644 --- a/app/public/css/login.css +++ b/app/public/css/login.css @@ -2,7 +2,7 @@ max-width: 400px; margin: 50px auto; padding: 25px; - background: #11111; + background: #111111; border: 1px solid #e6e6e6; border-radius: 8px; } diff --git a/app/routes/settings.ts b/app/routes/settings.ts new file mode 100644 index 0000000..5d83ca0 --- /dev/null +++ b/app/routes/settings.ts @@ -0,0 +1,44 @@ +import type { + RequestHandler as Middleware, + Request, + Response, + NextFunction, +} from "express"; + +import express from "express"; + +import { db, UserRow } from "../lib/db"; + +const router = express.Router(); + +const fetchUsers = (): Promise<[UserRow]> => { + const query = "SELECT * FROM users"; + + return new Promise((resolve, reject) => { + db.all(query, (err: Error, rows: [UserRow]) => { + if (err) reject(err); + resolve(rows); + }); + }); +} + +const fetchSettings: Middleware = async (req, res, next) => { + res.locals.users = req.user.username == "admin" ? await fetchUsers() : null; + next(); +}; + +router.get( + "/settings", + (req: Request, res: Response, next: NextFunction) => { + if (!req.user) return res.render("home"); + console.log(req.user); + next(); + }, + fetchSettings, + (req: Request, res: Response) => { + res.locals.filter = null; + req.user.username == "admin" ? res.render("settings", { user: req.user, userList: res.locals.users }) : res.redirect("/"); + } +); + +export default router; \ No newline at end of file diff --git a/app/views/login.ejs b/app/views/login.ejs index f727a96..a851795 100644 --- a/app/views/login.ejs +++ b/app/views/login.ejs @@ -1,37 +1,40 @@ - - - - Embedder - - - - - - - - - -
-

Embedder

-

Sign in

-
-
- - -
-
- - -
- -
-
-
- - - + + + + + Embedder + + + + + + + + + + +
+

Embedder

+

Sign in

+
+
+ + +
+
+ + +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/app/views/settings.ejs b/app/views/settings.ejs new file mode 100644 index 0000000..b2b4de5 --- /dev/null +++ b/app/views/settings.ejs @@ -0,0 +1,61 @@ + + + + + + + Embedder + + + + + + + + + + + +
+

Embedder

+

Settings

+
+
+ + +
+ <% if (user.name == "admin" || user.username == "admin") { %> +
+ + +
+
+ + <%= JSON.stringify(userList.map(obj => obj.username)) %> +
+ <% } %> + +
+
+
+ + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d651558..39f8ec5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "embedder", - "version": "1.10.1", + "version": "1.11", "hasInstallScript": true, "license": "Unlicense", "dependencies": { diff --git a/package.json b/package.json index 7180170..c7f5b89 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "copy-files": "copyfiles -a -u 1 app/public/* app/views/* app/public/**/* app/views/**/* dist/", "tsc": "tsc", "postinstall": "npm run tsc && npm run copy-files", - "build": "npm run clean && npm run copy-files && npm run tsc" + "build": "npm run clean && npm run copy-files && npm run tsc", + "dev": "ts-node-dev --respawn --watch ./app/views/*.ejs --transpile-only ./app/app.ts" }, "dependencies": { "@ffmpeg-installer/ffmpeg": "^1.1.0",