From b6779a7d7c71f3fdafd327dcdb55d54b1fc935b1 Mon Sep 17 00:00:00 2001 From: waveringana Date: Sun, 4 Dec 2022 09:14:16 +0000 Subject: [PATCH 01/13] cleaner code --- app/routes/index.ts | 22 +++++++++++----------- app/routes/middleware.ts | 3 +-- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/app/routes/index.ts b/app/routes/index.ts index cfe49ac..7b49ba0 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -24,12 +24,12 @@ function extension(str: String){ } const storage = multer.diskStorage({ - destination: function (req, file, cb) { + destination: (req, file, cb) => { cb(null, "uploads/"); }, - filename : function(req, file, cb) { + filename : (req, file, cb) => { let nameAndExtension = extension(file.originalname); - db.all("SELECT * FROM media WHERE path = ?", [nameAndExtension[0] + nameAndExtension[1]], function (err: Error, exists: []) { + db.all("SELECT * FROM media WHERE path = ?", [nameAndExtension[0] + nameAndExtension[1]], (err: Error, exists: []) => { if (exists.length != 0) { let suffix = new Date().getTime() / 1000; @@ -99,16 +99,16 @@ router.get("/", (req, res, next) => { res.render("index", { user: req.user }); }); -router.get("/gifv/:file", async function (req, res, next) { +router.get("/gifv/:file", async (req, res, next) => { let url = `${req.protocol}://${req.get("host")}/uploads/${req.params.file}`; let width; let height; let nameAndExtension = extension("uploads/" + req.params.file); - if (nameAndExtension[1] == ".mp4") { + if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".mov" || nameAndExtension[1] == ".webm") { ffmpeg() .input("uploads/" + req.params.file) - .inputFormat("mp4") - .ffprobe(function(err, data) { + .inputFormat(nameAndExtension[1].substring(1)) + .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { if (err) return next(err); width = data.streams[0].width; height = data.streams[0].height; @@ -118,14 +118,14 @@ router.get("/gifv/:file", async function (req, res, next) { ffmpeg() .input("uploads/" + req.params.file) .inputFormat("gif") - .ffprobe(function(err, data) { + .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { if (err) return next(err); width = data.streams[0].width; height = data.streams[0].height; return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); }); } else { - let imageData = await imageProbe(fs.createReadStream("uploads/" + req.params.file)); + let imageData = await imageProbe(fs.createReadStream(`uploads/${req.params.file}`)); return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: imageData.width, height: imageData.height }); } }); @@ -139,8 +139,8 @@ router.post("/sharex", [checkAuth, upload.array("fileupload"), convert, handleUp return res.send(`${req.protocol}://${req.get("host")}/uploads/${req.files[0].filename}`); }); -router.post("/:id(\\d+)/delete", function(req, res, next) { - db.all("SELECT path FROM media WHERE id = ?", [ req.params.id ], function(err: Error, path: Array) { +router.post("/:id(\\d+)/delete", (req, res, next) => { + db.all("SELECT path FROM media WHERE id = ?", [ req.params.id ], (err: Error, path: Array) => { if (err) { return next(err); } fs.unlink(`uploads/${path[0].path}`, (err => { if (err) { diff --git a/app/routes/middleware.ts b/app/routes/middleware.ts index 89b5cf3..6b2a322 100644 --- a/app/routes/middleware.ts +++ b/app/routes/middleware.ts @@ -1,4 +1,3 @@ -import type {MediaRow, UserRow} from '../types'; import type {RequestHandler as Middleware, Router, Request, Response} from 'express'; import ffmpeg from "fluent-ffmpeg"; @@ -34,7 +33,7 @@ export const checkAuth: Middleware = (req: Request, res: Response, next: Functio } let shortKey = key.substr(0, 3) + "..."; - console.log("Authenicated user with key: " + shortKey); + console.log(`Authenicated user with key: ${shortKey}`); next(); } From bbc655b3f9d49afaa23315c28b95547f0567ffb8 Mon Sep 17 00:00:00 2001 From: waveringana Date: Mon, 5 Dec 2022 17:50:38 +0000 Subject: [PATCH 02/13] preliminary work for guest account support --- app/app.ts | 5 +++-- app/db.ts | 14 +++++--------- app/public/css/app.css | 12 ++++++++++-- app/public/js/index.js | 2 -- app/routes/adduser.ts | 30 ++++++++++++++++++++++++++++++ app/routes/auth.ts | 8 +++----- app/routes/index.ts | 30 ++++++++++++++---------------- app/routes/middleware.ts | 37 ++++++++++++++++++++++++------------- app/views/adduser.ejs | 37 +++++++++++++++++++++++++++++++++++++ app/views/index.ejs | 5 +++++ package.json | 2 +- 11 files changed, 132 insertions(+), 50 deletions(-) create mode 100644 app/routes/adduser.ts create mode 100644 app/views/adduser.ejs diff --git a/app/app.ts b/app/app.ts index 1fa2ff4..32d54f7 100644 --- a/app/app.ts +++ b/app/app.ts @@ -15,9 +15,9 @@ import path from "path"; import authRouter from "./routes/auth"; import indexRouter from "./routes/index"; +import adduserRouter from "./routes/adduser"; -import {createUser} from "./db"; -import db from "./db" +import {db, createUser} from "./db"; let app = express(); let server = http.createServer(app); @@ -122,6 +122,7 @@ app.use(passport.authenticate("session")); app.use("/", indexRouter); app.use("/", authRouter); +app.use("/", adduserRouter); app.use("/uploads", express.static("uploads")); diff --git a/app/db.ts b/app/db.ts index d7f8c13..09a348b 100644 --- a/app/db.ts +++ b/app/db.ts @@ -1,13 +1,11 @@ -import type {RequestHandler as Middleware} from 'express'; - -const sqlite3 = require("sqlite3"); -const mkdirp = require("mkdirp"); -const crypto = require("crypto"); +import sqlite3 from "sqlite3"; +import mkdirp from "mkdirp"; +import crypto from "crypto"; mkdirp.sync("./uploads"); mkdirp.sync("./var/db"); -let db = new sqlite3.Database("./var/db/media.db"); +export const db = new sqlite3.Database("./var/db/media.db"); export function createUser(username: string, password: string) { var salt = crypto.randomBytes(16); @@ -16,6 +14,4 @@ export function createUser(username: string, password: string) { crypto.pbkdf2Sync(password, salt, 310000, 32, "sha256"), salt ]); -} - -export default db; +} \ No newline at end of file diff --git a/app/public/css/app.css b/app/public/css/app.css index f871b6d..f7deb68 100644 --- a/app/public/css/app.css +++ b/app/public/css/app.css @@ -41,7 +41,7 @@ /* background image by Cole Bemis */ .nav .user { padding-left: 20px; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-user'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-user'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: center left; } @@ -49,7 +49,15 @@ /* background image by Cole Bemis */ .nav .logout { padding-left: 20px; - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-log-out'%3E%3Cpath d='M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4'%3E%3C/path%3E%3Cpolyline points='16 17 21 12 16 7'%3E%3C/polyline%3E%3Cline x1='21' y1='12' x2='9' y2='12'%3E%3C/line%3E%3C/svg%3E%0A"); + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-log-out'%3E%3Cpath d='M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4'%3E%3C/path%3E%3Cpolyline points='16 17 21 12 16 7'%3E%3C/polyline%3E%3Cline x1='21' y1='12' x2='9' y2='12'%3E%3C/line%3E%3C/svg%3E%0A"); + background-repeat: no-repeat; + background-position: center left; +} + +/* background image by Cole Bemis */ +.nav .adduser { + padding-left: 20px; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-user-plus'%3E%3Cpath d='M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='8.5' cy='7' r='4'%3E%3C/circle%3E%3Cline x1='20' y1='8' x2='20' y2='14'%3E%3C/line%3E%3Cline x1='23' y1='11' x2='17' y2='11'%3E%3C/line%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: center left; } diff --git a/app/public/js/index.js b/app/public/js/index.js index 6033f43..bb96da2 100644 --- a/app/public/js/index.js +++ b/app/public/js/index.js @@ -131,8 +131,6 @@ function uploadFile(file) { }); if (file == null || file == undefined) { - //file = reader.readAsDataURL(document.getElementById("fileupload").files[0]); - //file = reader.readAsDataURL(document.querySelector("#fileupload").files[0]); file = document.querySelector("#fileupload").files[0]; } diff --git a/app/routes/adduser.ts b/app/routes/adduser.ts new file mode 100644 index 0000000..b63276f --- /dev/null +++ b/app/routes/adduser.ts @@ -0,0 +1,30 @@ +import type {RequestHandler as Middleware, Router, Request, Response, NextFunction} from 'express'; +import express from "express"; + +import {db, createUser} from "../db"; + +const router: Router = express.Router(); + +const adminCheck: Middleware = (req: Request, res: Response, next: NextFunction) => { + //@ts-ignore + if (!req.user) + return res.status(403).send("You are not authorized to perform this action"); + else { + //@ts-ignore + if (req.user.username != "admin") + return res.status(403).send("You are not authorized to perform this action"); + next(); + } +} + +router.get("/adduser", adminCheck, (req: Request, res: Response, next: NextFunction) => { + res.locals.filter = null; + res.render("adduser", { user: req.user }); +}); + +router.post("/adduser", adminCheck, (req: Request, res: Response, next: NextFunction) => { + createUser(req.body.username, req.body.password); + res.redirect('/'); +}); + +export default router; \ No newline at end of file diff --git a/app/routes/auth.ts b/app/routes/auth.ts index 1356dd8..b6bb312 100644 --- a/app/routes/auth.ts +++ b/app/routes/auth.ts @@ -1,13 +1,11 @@ -import type {MediaRow, UserRow} from '../types'; -import type {RequestHandler as Middleware} from 'express'; +import type {UserRow} from '../types'; import crypto from "crypto"; import express from "express"; import passport from "passport"; +import {Strategy as LocalStrategy} from "passport-local"; -import { Strategy as LocalStrategy } from "passport-local"; - -import db from "../db"; +import {db} from "../db"; let router = express.Router(); diff --git a/app/routes/index.ts b/app/routes/index.ts index 7b49ba0..05cef1e 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -1,5 +1,4 @@ -import type {RequestHandler as Middleware, Router, Request, Response} from 'express'; -import types from 'multer'; +import type {RequestHandler as Middleware, Router, Request, Response, NextFunction} from 'express'; import multer from "multer"; import express from "express"; @@ -14,8 +13,8 @@ ffmpeg.setFfprobePath(ffprobepath.path); import fs from "fs"; -import db from "../db"; -import {checkAuth, convert, handleUpload} from "./middleware"; +import {db, createUser} from "../db"; +import {checkAuth, checkSharexAuth, createEmbedData, handleUpload} from "./middleware"; import { MediaRow } from '../types'; function extension(str: String){ @@ -89,13 +88,12 @@ const fetchMedia: Middleware = (req, res, next) => { let router = express.Router(); -router.get("/", (req, res, next) => { - // @ts-ignore, user is part of req header - if (!req.user) { return res.render("home"); } +router.get("/", (req: Request, res: Response, next: NextFunction) => { + if (!req.user) + return res.render("home") next(); -}, fetchMedia, (req, res) => { +}, fetchMedia, (req: Request, res: Response) => { res.locals.filter = null; - // @ts-ignore, user is part of req header res.render("index", { user: req.user }); }); @@ -103,10 +101,10 @@ router.get("/gifv/:file", async (req, res, next) => { let url = `${req.protocol}://${req.get("host")}/uploads/${req.params.file}`; let width; let height; - let nameAndExtension = extension("uploads/" + req.params.file); + let nameAndExtension = extension(`uploads/${req.params.file}`); if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".mov" || nameAndExtension[1] == ".webm") { ffmpeg() - .input("uploads/" + req.params.file) + .input(`uploads/${req.params.file}`) .inputFormat(nameAndExtension[1].substring(1)) .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { if (err) return next(err); @@ -116,7 +114,7 @@ router.get("/gifv/:file", async (req, res, next) => { }); } else if (nameAndExtension[1] == ".gif") { ffmpeg() - .input("uploads/" + req.params.file) + .input(`uploads/${req.params.file}`) .inputFormat("gif") .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { if (err) return next(err); @@ -130,16 +128,16 @@ router.get("/gifv/:file", async (req, res, next) => { } }); -router.post("/", [upload.array("fileupload"), convert, handleUpload], (req: Request, res: Response) => { - return res.redirect("/"); +router.post("/", [checkAuth, upload.array("fileupload"), createEmbedData, handleUpload], (req: Request, res: Response) => { + res.redirect("/") }); -router.post("/sharex", [checkAuth, upload.array("fileupload"), convert, handleUpload], (req: Request, res: Response) => { +router.post("/sharex", [checkSharexAuth, upload.array("fileupload"), createEmbedData, handleUpload], (req: Request, res: Response) => { // @ts-ignore return res.send(`${req.protocol}://${req.get("host")}/uploads/${req.files[0].filename}`); }); -router.post("/:id(\\d+)/delete", (req, res, next) => { +router.post("/:id(\\d+)/delete", [checkAuth], (req: Request, res: Response, next: NextFunction) => { db.all("SELECT path FROM media WHERE id = ?", [ req.params.id ], (err: Error, path: Array) => { if (err) { return next(err); } fs.unlink(`uploads/${path[0].path}`, (err => { diff --git a/app/routes/middleware.ts b/app/routes/middleware.ts index 6b2a322..f94278c 100644 --- a/app/routes/middleware.ts +++ b/app/routes/middleware.ts @@ -10,15 +10,21 @@ ffmpeg.setFfprobePath(ffprobepath.path); import fs from "fs"; import process from "process"; -import db from "../db"; +import {db} from "../db"; function extension(str: String){ let file = str.split("/").pop(); return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; } -//Checks ShareX key -export const checkAuth: Middleware = (req: Request, res: Response, next: Function) => { +export const checkAuth: Middleware = (req, res, next) => { + if (!req.user) { + return res.status(401); + } + next(); +} + +export const checkSharexAuth: Middleware = (req, res, next) => { let auth = process.env.EBAPI_KEY || process.env.EBPASS || "pleaseSetAPI_KEY"; let key = null; @@ -38,8 +44,8 @@ export const checkAuth: Middleware = (req: Request, res: Response, next: Functio next(); } -//Converts mp4 to gif and vice versa with ffmpeg -export const convert: Middleware = (req: Request, res: Response, next: Function) => { +//createEmbedDatas mp4 to gif and vice versa with ffmpeg +export const createEmbedData: Middleware = (req, res, next) => { for (let file in req.files) { // @ts-ignore let nameAndExtension = extension(req.files[file].originalname); @@ -58,13 +64,20 @@ export const convert: Middleware = (req: Request, res: Response, next: Function) if (err) return next(err); console.log(`oembed file created ${nameAndExtension[0]}${nameAndExtension[1]}.json`); }); - - /**if (nameAndExtension[1] == ".mp4") { + } + next(); +} + +export const convert: Middleware = (req, res, next) => { + for (let file in req.files) { + // @ts-ignore + let nameAndExtension = extension(req.files[file].originalname); + if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".mkv" || nameAndExtension[1] == ".avi" || nameAndExtension[1] == ".mov") { console.log("Converting " + nameAndExtension[0] + nameAndExtension[1] + " to gif"); console.log(nameAndExtension[0] + nameAndExtension[1]); ffmpeg() .input(`uploads/${nameAndExtension[0]}${nameAndExtension[1]}`) - .inputFormat("mp4") + .inputFormat(nameAndExtension[1].substring(1)) .outputFormat("gif") .output(`uploads/${nameAndExtension[0]}.gif`) .on("end", function() { @@ -90,13 +103,11 @@ export const convert: Middleware = (req: Request, res: Response, next: Function) console.log(`Uploaded to uploads/${nameAndExtension[0]}.mp4`); }) .run(); - }**/ + } } - - next(); } - -export const handleUpload: Middleware = (req: Request, res: Response, next: Function) => { + +export const handleUpload: Middleware = (req, res, next) => { if (!req.files || Object.keys(req.files).length === 0) { console.log("No files were uploaded"); return res.status(400).send("No files were uploaded."); diff --git a/app/views/adduser.ejs b/app/views/adduser.ejs new file mode 100644 index 0000000..751d024 --- /dev/null +++ b/app/views/adduser.ejs @@ -0,0 +1,37 @@ + + + + + + Embedder + + + + + + + + + +
+

Embedder

+

Add User

+
+
+ + +
+
+ + +
+ +
+
+
+ + + diff --git a/app/views/index.ejs b/app/views/index.ejs index cb2de8c..bde9c2a 100644 --- a/app/views/index.ejs +++ b/app/views/index.ejs @@ -27,6 +27,11 @@ return string.slice((string.lastIndexOf(".") - 2 >>> 0) + 2); + <% if (user.name == "admin" || user.username == "admin") { %> +
  • + +
  • + <% } %>
    diff --git a/package.json b/package.json index c5d10ee..612526a 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "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", - "dev": "tsc-node-dev --respawn --pretty --transpile-only index.ts" + "build": "npm run clean && npm run copy-files && npm run tsc" }, "dependencies": { "@ffmpeg-installer/ffmpeg": "^1.1.0", From d130b12418096a9f99bc743bb56c05492cedb8b6 Mon Sep 17 00:00:00 2001 From: waveringana Date: Tue, 6 Dec 2022 13:34:43 +0000 Subject: [PATCH 03/13] clean --- app/routes/adduser.ts | 1 - app/routes/auth.ts | 6 +----- app/routes/index.ts | 5 ++--- app/routes/middleware.ts | 22 +++++++++++----------- 4 files changed, 14 insertions(+), 20 deletions(-) diff --git a/app/routes/adduser.ts b/app/routes/adduser.ts index b63276f..07980ca 100644 --- a/app/routes/adduser.ts +++ b/app/routes/adduser.ts @@ -6,7 +6,6 @@ import {db, createUser} from "../db"; const router: Router = express.Router(); const adminCheck: Middleware = (req: Request, res: Response, next: NextFunction) => { - //@ts-ignore if (!req.user) return res.status(403).send("You are not authorized to perform this action"); else { diff --git a/app/routes/auth.ts b/app/routes/auth.ts index b6bb312..a377d36 100644 --- a/app/routes/auth.ts +++ b/app/routes/auth.ts @@ -34,12 +34,10 @@ passport.use(new LocalStrategy(function verify(username, password, cb) { }); })); -passport.serializeUser(function(user, cb) { +passport.serializeUser(function(user:any, cb) { process.nextTick(function() { cb(null, { - // @ts-ignore id: user.id, - // @ts-ignore username: user.username }); }); @@ -51,7 +49,6 @@ passport.deserializeUser(function(user, cb) { }); }); -// @ts-ignore router.get("/login", function(req, res) { res.render("login"); }); @@ -62,7 +59,6 @@ router.post("/login/password", passport.authenticate("local", { })); router.post("/logout", function(req, res, next) { - // @ts-ignore, logout is already initalized in app.js req.logout(function(err) { if (err) { return next(err); diff --git a/app/routes/index.ts b/app/routes/index.ts index 05cef1e..70968e4 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -132,9 +132,8 @@ router.post("/", [checkAuth, upload.array("fileupload"), createEmbedData, handle res.redirect("/") }); -router.post("/sharex", [checkSharexAuth, upload.array("fileupload"), createEmbedData, handleUpload], (req: Request, res: Response) => { - // @ts-ignore - return res.send(`${req.protocol}://${req.get("host")}/uploads/${req.files[0].filename}`); +router.post("/sharex", [checkSharexAuth, upload.single("fileupload"), createEmbedData, handleUpload], (req: Request, res: Response) => { + return res.send(`${req.protocol}://${req.get("host")}/uploads/${req.file.filename}`); }); router.post("/:id(\\d+)/delete", [checkAuth], (req: Request, res: Response, next: NextFunction) => { diff --git a/app/routes/middleware.ts b/app/routes/middleware.ts index f94278c..8dd945b 100644 --- a/app/routes/middleware.ts +++ b/app/routes/middleware.ts @@ -46,9 +46,9 @@ export const checkSharexAuth: Middleware = (req, res, next) => { //createEmbedDatas mp4 to gif and vice versa with ffmpeg export const createEmbedData: Middleware = (req, res, next) => { - for (let file in req.files) { - // @ts-ignore - let nameAndExtension = extension(req.files[file].originalname); + const files = req.files as Express.Multer.File[] + for (let file in files) { + let nameAndExtension = extension(files[file].originalname); let oembed = { type: "video", version: "1.0", @@ -69,9 +69,9 @@ export const createEmbedData: Middleware = (req, res, next) => { } export const convert: Middleware = (req, res, next) => { - for (let file in req.files) { - // @ts-ignore - let nameAndExtension = extension(req.files[file].originalname); + const files = req.files as Express.Multer.File[] + for (let file in files) { + let nameAndExtension = extension(files[file].originalname); if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".mkv" || nameAndExtension[1] == ".avi" || nameAndExtension[1] == ".mov") { console.log("Converting " + nameAndExtension[0] + nameAndExtension[1] + " to gif"); console.log(nameAndExtension[0] + nameAndExtension[1]); @@ -113,7 +113,9 @@ export const handleUpload: Middleware = (req, res, next) => { return res.status(400).send("No files were uploaded."); } - for (let file in req.files) { + const files = req.files as Express.Multer.File[] + + for (let file in files) { let currentdate = Date.now(); let expireDate: Date; if (req.body.expire) { @@ -122,14 +124,12 @@ export const handleUpload: Middleware = (req, res, next) => { console.log(expireDate); } else expireDate = null; - // @ts-ignore - db.run("INSERT INTO media (path, expire) VALUES (?, ?)", [req.files[file].filename, expireDate], function (err) { + db.run("INSERT INTO media (path, expire) VALUES (?, ?)", [files[file].filename, expireDate], function (err) { if (err) { console.log(err); return next(err); } - // @ts-ignore - console.log(`Uploaded ${req.files[file].filename} to database`); + console.log(`Uploaded ${files[file].filename} to database`); if (expireDate == null) console.log("It will not expire"); else if (expireDate != null || expireDate != undefined) From 5290f4e9606de38256c319ca992e9c18f0ff23e9 Mon Sep 17 00:00:00 2001 From: waveringana Date: Wed, 7 Dec 2022 04:28:18 +0000 Subject: [PATCH 04/13] admin can see every post; guest users see only own --- app/app.ts | 12 +- app/db.ts | 14 ++ app/lib.ts | 4 + app/multer.ts | 72 ++++++ app/public/css/app.css | 15 +- app/routes/auth.ts | 4 +- app/routes/index.ts | 96 ++----- app/routes/middleware.ts | 11 +- app/types.ts | 12 - app/views/index.ejs | 237 ++++++++++-------- cypress.config.js | 2 +- .../The Home Page -- logs out (failed).png | Bin 0 -> 106329 bytes ...X successfully uploads a file (failed).png | Bin 0 -> 97471 bytes 13 files changed, 266 insertions(+), 213 deletions(-) create mode 100644 app/lib.ts create mode 100644 app/multer.ts delete mode 100644 app/types.ts create mode 100644 cypress/screenshots/spec.cy.js/The Home Page -- logs out (failed).png create mode 100644 cypress/screenshots/spec.cy.js/The Upload Page -- ShareX successfully uploads a file (failed).png diff --git a/app/app.ts b/app/app.ts index 32d54f7..27cf1b8 100644 --- a/app/app.ts +++ b/app/app.ts @@ -1,5 +1,3 @@ -import type {MediaRow, UserRow} from './types'; - require("dotenv").config(); import express from "express"; @@ -17,7 +15,7 @@ import authRouter from "./routes/auth"; import indexRouter from "./routes/index"; import adduserRouter from "./routes/adduser"; -import {db, createUser} from "./db"; +import {db, createUser, MediaRow} from "./db"; let app = express(); let server = http.createServer(app); @@ -80,8 +78,14 @@ db.serialize(function() { db.run("CREATE TABLE IF NOT EXISTS media ( \ id INTEGER PRIMARY KEY, \ path TEXT NOT NULL, \ - expire INTEGER \ + expire INTEGER \, \ + username TEXT \ )"); + + db.run("ALTER TABLE media ADD COLUMN username TEXT", (err) => { + if(err) + return; + }); //TODO, version new DB, run this command when detecting old DB createUser("admin", process.env.EBPASS || "changeme"); }); diff --git a/app/db.ts b/app/db.ts index 09a348b..81284df 100644 --- a/app/db.ts +++ b/app/db.ts @@ -14,4 +14,18 @@ export function createUser(username: string, password: string) { crypto.pbkdf2Sync(password, salt, 310000, 32, "sha256"), salt ]); +} + +export interface MediaRow { + id? : Number, + path: String, + expire: Number, + username: String +} + +export interface UserRow { + id? : Number, + username: String, + hashed_password: any, + salt: any } \ No newline at end of file diff --git a/app/lib.ts b/app/lib.ts new file mode 100644 index 0000000..c6c7602 --- /dev/null +++ b/app/lib.ts @@ -0,0 +1,4 @@ +export function extension(str: String){ + let file = str.split("/").pop(); + return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; +} \ No newline at end of file diff --git a/app/multer.ts b/app/multer.ts new file mode 100644 index 0000000..4f2a0e0 --- /dev/null +++ b/app/multer.ts @@ -0,0 +1,72 @@ +import {Request} from 'express'; +import multer, {FileFilterCallback} from 'multer'; + +import {db, MediaRow} from './db' +import {extension} from './lib' + +export type DestinationCallback = (error: Error | null, destination: string) => void +export type FileNameCallback = (error: Error | null, filename: string) => void + +export const fileStorage = multer.diskStorage({ + destination: ( + request: Request, + file: Express.Multer.File, + callback: DestinationCallback + ): void => { + callback(null, __dirname + "/../uploads"); + }, + filename: ( + request: Request, + file: Express.Multer.File, + callback: FileNameCallback + ): void => { + let nameAndExtension = extension(file.originalname); + console.log(`Uploading ${file}`); + db.all("SELECT * FROM media WHERE path = ?", [nameAndExtension[0] + nameAndExtension[1]], (err: Error, exists: []) => { + if (err) { + console.log(err) + callback(err, null) + } + if (exists.length != 0) { + let suffix = new Date().getTime() / 1000; + + if (request.body.title == "" || request.body.title == null || request.body.title == undefined) { + callback(null, nameAndExtension[0] + "-" + suffix + nameAndExtension[1]); + } else { + callback(null, request.body.title + "-" + suffix + nameAndExtension[1]); + } + } else { + if (request.body.title == "" || request.body.title == null || request.body.title == undefined) { + callback(null, nameAndExtension[0] + nameAndExtension[1]); + } else { + callback(null, request.body.title + nameAndExtension[1]); + } + } + }); + } +}); + +export let allowedMimeTypes = [ + "image/png", + "image/jpg", + "image/jpeg", + "image/gif", + "image/webp", + "video/mp4", + "video/mov", + "video/webm", + "audio/mpeg", + "audio/ogg" +]; + +export const fileFilter = ( + request: Request, + file: Express.Multer.File, + callback: FileFilterCallback +): void => { + if (allowedMimeTypes.includes(file.mimetype)) { + callback(null, true) + } else { + callback(null, false) + } +} \ No newline at end of file diff --git a/app/public/css/app.css b/app/public/css/app.css index f7deb68..edbdcf0 100644 --- a/app/public/css/app.css +++ b/app/public/css/app.css @@ -39,7 +39,7 @@ } /* background image by Cole Bemis */ -.nav .user { +.user { padding-left: 20px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-user'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); background-repeat: no-repeat; @@ -47,7 +47,16 @@ } /* background image by Cole Bemis */ -.nav .logout { +.username { + padding-left: 20px; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-user'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: center left; + color: #73AD21; +} + +/* background image by Cole Bemis */ +.logout { padding-left: 20px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-log-out'%3E%3Cpath d='M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4'%3E%3C/path%3E%3Cpolyline points='16 17 21 12 16 7'%3E%3C/polyline%3E%3Cline x1='21' y1='12' x2='9' y2='12'%3E%3C/line%3E%3C/svg%3E%0A"); background-repeat: no-repeat; @@ -55,7 +64,7 @@ } /* background image by Cole Bemis */ -.nav .adduser { +.adduser { padding-left: 20px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-user-plus'%3E%3Cpath d='M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='8.5' cy='7' r='4'%3E%3C/circle%3E%3Cline x1='20' y1='8' x2='20' y2='14'%3E%3C/line%3E%3Cline x1='23' y1='11' x2='17' y2='11'%3E%3C/line%3E%3C/svg%3E"); background-repeat: no-repeat; diff --git a/app/routes/auth.ts b/app/routes/auth.ts index a377d36..ca31355 100644 --- a/app/routes/auth.ts +++ b/app/routes/auth.ts @@ -1,11 +1,9 @@ -import type {UserRow} from '../types'; - import crypto from "crypto"; import express from "express"; import passport from "passport"; import {Strategy as LocalStrategy} from "passport-local"; -import {db} from "../db"; +import {db, UserRow} from "../db"; let router = express.Router(); diff --git a/app/routes/index.ts b/app/routes/index.ts index 70968e4..5dc70c6 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -1,5 +1,4 @@ -import type {RequestHandler as Middleware, Router, Request, Response, NextFunction} from 'express'; - +import type {RequestHandler as Middleware, Request, Response, NextFunction} from 'express'; import multer from "multer"; import express from "express"; import ffmpeg from "fluent-ffmpeg"; @@ -13,70 +12,27 @@ ffmpeg.setFfprobePath(ffprobepath.path); import fs from "fs"; -import {db, createUser} from "../db"; +import {extension} from "../lib"; +import {db, MediaRow} from "../db"; +import {fileStorage, fileFilter} from "../multer"; import {checkAuth, checkSharexAuth, createEmbedData, handleUpload} from "./middleware"; -import { MediaRow } from '../types'; -function extension(str: String){ - let file = str.split("/").pop(); - return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; -} - -const storage = multer.diskStorage({ - destination: (req, file, cb) => { - cb(null, "uploads/"); - }, - filename : (req, file, cb) => { - let nameAndExtension = extension(file.originalname); - db.all("SELECT * FROM media WHERE path = ?", [nameAndExtension[0] + nameAndExtension[1]], (err: Error, exists: []) => { - if (exists.length != 0) { - let suffix = new Date().getTime() / 1000; - - if (req.body.title == "" || req.body.title == null || req.body.title == undefined) - cb(null, nameAndExtension[0] + "-" + suffix + nameAndExtension[1]); - else - cb(null, req.body.title + "-" + suffix + nameAndExtension[1]); - } else { - if (req.body.title == "" || req.body.title == null || req.body.title == undefined) - cb(null, nameAndExtension[0] + nameAndExtension[1]); - else - cb(null, req.body.title + nameAndExtension[1]); - } - }); - } -}); - -/**let allowedMimeTypes = [ - "image/png", - "image/jpg", - "image/jpeg", - "image/gif", - "image/webp", - "video/mp4", - "video/mov", - "video/webm", - "audio/mpeg", - "audio/ogg" -]; - -const fileFilter = function(req, file, cb) { - if (allowedMimeTypes.includes(file.mimetype)) { - cb(null, true); - } else { - cb(null, false); - } -};**/ - -let upload = multer({ storage: storage /**, fileFilter: fileFilter**/ }); //maybe make this a env variable? +let upload = multer({ storage: fileStorage /**, fileFilter: fileFilter**/ }); //maybe make this a env variable? const fetchMedia: Middleware = (req, res, next) => { - db.all("SELECT * FROM media", (err: Error, rows: []) => { + //@ts-ignore + let admin: boolean = req.user.username == "admin" ? true : false + //@ts-ignore + let query: string = admin == true ? "SELECT * FROM media" : `SELECT * FROM media WHERE username = '${req.user.username}'`; + + db.all(query, (err:Error, rows: []) => { if (err) return next(err); let files = rows.map((row: MediaRow)=> { return { id: row.id, path: row.path, expire: row.expire, + username: row.username, url: "/" + row.id }; }); @@ -102,26 +58,16 @@ router.get("/gifv/:file", async (req, res, next) => { let width; let height; let nameAndExtension = extension(`uploads/${req.params.file}`); - if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".mov" || nameAndExtension[1] == ".webm") { + if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".mov" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".gif") { ffmpeg() - .input(`uploads/${req.params.file}`) - .inputFormat(nameAndExtension[1].substring(1)) - .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { - if (err) return next(err); - width = data.streams[0].width; - height = data.streams[0].height; - return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); - }); - } else if (nameAndExtension[1] == ".gif") { - ffmpeg() - .input(`uploads/${req.params.file}`) - .inputFormat("gif") - .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { - if (err) return next(err); - width = data.streams[0].width; - height = data.streams[0].height; - return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); - }); + .input(`uploads/${req.params.file}`) + .inputFormat(nameAndExtension[1].substring(1)) + .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { + if (err) return next(err); + width = data.streams[0].width; + height = data.streams[0].height; + return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); + }); } else { let imageData = await imageProbe(fs.createReadStream(`uploads/${req.params.file}`)); return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: imageData.width, height: imageData.height }); diff --git a/app/routes/middleware.ts b/app/routes/middleware.ts index 8dd945b..941e084 100644 --- a/app/routes/middleware.ts +++ b/app/routes/middleware.ts @@ -11,11 +11,7 @@ import fs from "fs"; import process from "process"; import {db} from "../db"; - -function extension(str: String){ - let file = str.split("/").pop(); - return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; -} +import {extension} from "../lib"; export const checkAuth: Middleware = (req, res, next) => { if (!req.user) { @@ -120,11 +116,10 @@ export const handleUpload: Middleware = (req, res, next) => { let expireDate: Date; if (req.body.expire) { expireDate = new Date(currentdate + (req.body.expire * 24 * 60 * 60 * 1000)); - console.log(req.body.expire); - console.log(expireDate); } else expireDate = null; - db.run("INSERT INTO media (path, expire) VALUES (?, ?)", [files[file].filename, expireDate], function (err) { + //@ts-ignore + db.run("INSERT INTO media (path, expire, username) VALUES (?, ?, ?)", [files[file].filename, expireDate, req.user.username], function (err) { if (err) { console.log(err); return next(err); diff --git a/app/types.ts b/app/types.ts deleted file mode 100644 index f12215c..0000000 --- a/app/types.ts +++ /dev/null @@ -1,12 +0,0 @@ -export interface MediaRow { - id? : Number, - path: String, - expire: Number -} - -export interface UserRow { - id? : Number, - username: String, - hashed_password: any, - salt: any -} \ No newline at end of file diff --git a/app/views/index.ejs b/app/views/index.ejs index bde9c2a..73c2cd2 100644 --- a/app/views/index.ejs +++ b/app/views/index.ejs @@ -1,110 +1,133 @@ - - - - Embedder - - - - - - - -<% -function extension(string) { -return string.slice((string.lastIndexOf(".") - 2 >>> 0) + 2); -} -%> - - -
    - -
    -

    Embedder

    -
    -
    -

    Upload a file, copy paste, or drag n' drop into the dashed region

    - -

    -
    -
    -

    Select file expiration date:

    -

    Click the file to copy the url

    -
    -
    -
    - <% if (Count > 0) { %> -
    -
      - <% files.forEach(function(file) { %> -
    • -
      -
      - <% if (extension(file.path) == ".mp4" || extension(file.path) == ".mov" || extension(file.path) == "webp") { %> -
      - - -
      - <% } else if (extension(file.path) == ".gif") { %> -
      - - -
      - <% } else if (extension(file.path) == ".jpg" || extension(file.path) == ".jpeg" || extension(file.path) == ".png" || extension(file.path) == ".gif" || extension(file.path) == ".webp" ) { %> - - <% } else {%> -
      -

      <%=extension(file.path)%> file

      -
      - <% } %> - - - -
      -
      -
      -
      -
    • - <% }); %> -
    -
    - <% } %> -
    - - - + + + + Embedder + + + + + + + + <% + function extension(string) { + return string.slice((string.lastIndexOf(".") - 2 >>> 0) + 2); + } + %> + + +
    + +
    +

    Embedder

    +
    +
    +

    Upload a file, copy paste, or drag n' drop into the dashed region

    + +

    +
    +
    +

    + Select file expiration date: + +

    +

    Click the file to copy the url

    +
    +
    +
    + <% if (Count > 0) { %> +
    +
      + <% files.forEach(function(file) { %> +
    • +
      +
      + <% if (extension(file.path) == ".mp4" || extension(file.path) == ".mov" || extension(file.path) == "webp") { %> +
      + +
      + <% if(user.username == "admin" && file.username != "admin") { %> + <%= file.username %> +
      + <% } %> + Copy as GIFv +
      +
      + <% } else if (extension(file.path) == ".gif") { %> +
      + +
      + <% if(user.username == "admin" && file.username != "admin") { %> + <%= file.username %> +
      + <% } %> + Copy as GIFv +
      +
      + <% } else if (extension(file.path) == ".jpg" || extension(file.path) == ".jpeg" || extension(file.path) == ".png" || extension(file.path) == ".gif" || extension(file.path) == ".webp" ) { %> +
      + +
      + <% if(user.username == "admin" && file.username != "admin") { %> + <%= file.username %> + <% } %> +
      +
      + <% } else {%> +
      +

      <%=extension(file.path)%> file

      +
      + <% if(user.username == "admin" && file.username != "admin") { %> + <%= file.username %> + <% } %> +
      +
      + <% } %> + + + +
      +
      +
      +
      +
    • + <% }); %> +
    +
    + <% } %> +
    + + + diff --git a/cypress.config.js b/cypress.config.js index 00a2dac..6f67780 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -2,7 +2,7 @@ const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { - baseUrl: "http://localhost:3000", + baseUrl: "http://localhost:4000", }, chromeWebSecurity: false, "video": false diff --git a/cypress/screenshots/spec.cy.js/The Home Page -- logs out (failed).png b/cypress/screenshots/spec.cy.js/The Home Page -- logs out (failed).png new file mode 100644 index 0000000000000000000000000000000000000000..a4b62f6ecaca58120b80b8e869fd30745e417fd7 GIT binary patch literal 106329 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 literal 0 HcmV?d00001 diff --git a/cypress/screenshots/spec.cy.js/The Upload Page -- ShareX successfully uploads a file (failed).png b/cypress/screenshots/spec.cy.js/The Upload Page -- ShareX successfully uploads a file (failed).png new file mode 100644 index 0000000000000000000000000000000000000000..dfd60e039432db376c07b132b3a9658037ff910b GIT binary patch literal 97471 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

    kmzqtE@C^>b4V%kM?b-?@2z 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 F2>{|;)o}m- literal 0 HcmV?d00001 From 52b1aeea98d239ae34b789202f4109d30c5bcf4a Mon Sep 17 00:00:00 2001 From: waveringana Date: Wed, 7 Dec 2022 16:30:39 +0000 Subject: [PATCH 05/13] fix sharex --- app/app.ts | 2 +- app/routes/adduser.ts | 3 +- app/routes/auth.ts | 7 +- app/routes/index.ts | 10 ++- app/routes/middleware.ts | 68 +++++++++++------- app/{ => types}/db.ts | 10 ++- app/{ => types}/lib.ts | 14 ++++ app/{ => types}/multer.ts | 2 +- app/views/index.ejs | 8 +-- cypress.config.js | 5 +- .../The Home Page -- logs out (failed).png | Bin 106329 -> 0 bytes ...X successfully uploads a file (failed).png | Bin 97471 -> 0 bytes 12 files changed, 80 insertions(+), 49 deletions(-) rename app/{ => types}/db.ts (84%) rename app/{ => types}/lib.ts (50%) rename app/{ => types}/multer.ts (97%) delete mode 100644 cypress/screenshots/spec.cy.js/The Home Page -- logs out (failed).png delete mode 100644 cypress/screenshots/spec.cy.js/The Upload Page -- ShareX successfully uploads a file (failed).png diff --git a/app/app.ts b/app/app.ts index 27cf1b8..4d0b6b4 100644 --- a/app/app.ts +++ b/app/app.ts @@ -15,7 +15,7 @@ import authRouter from "./routes/auth"; import indexRouter from "./routes/index"; import adduserRouter from "./routes/adduser"; -import {db, createUser, MediaRow} from "./db"; +import {db, createUser, MediaRow} from "./types/db"; let app = express(); let server = http.createServer(app); diff --git a/app/routes/adduser.ts b/app/routes/adduser.ts index 07980ca..695eb6d 100644 --- a/app/routes/adduser.ts +++ b/app/routes/adduser.ts @@ -1,7 +1,7 @@ import type {RequestHandler as Middleware, Router, Request, Response, NextFunction} from 'express'; import express from "express"; -import {db, createUser} from "../db"; +import {db, createUser} from "../types/db"; const router: Router = express.Router(); @@ -9,7 +9,6 @@ const adminCheck: Middleware = (req: Request, res: Response, next: NextFunction) if (!req.user) return res.status(403).send("You are not authorized to perform this action"); else { - //@ts-ignore if (req.user.username != "admin") return res.status(403).send("You are not authorized to perform this action"); next(); diff --git a/app/routes/auth.ts b/app/routes/auth.ts index ca31355..e571b5a 100644 --- a/app/routes/auth.ts +++ b/app/routes/auth.ts @@ -3,7 +3,8 @@ import express from "express"; import passport from "passport"; import {Strategy as LocalStrategy} from "passport-local"; -import {db, UserRow} from "../db"; +import {User} from "../types/lib" +import {db, UserRow} from "../types/db"; let router = express.Router(); @@ -32,7 +33,7 @@ passport.use(new LocalStrategy(function verify(username, password, cb) { }); })); -passport.serializeUser(function(user:any, cb) { +passport.serializeUser(function(user:User, cb) { process.nextTick(function() { cb(null, { id: user.id, @@ -41,7 +42,7 @@ passport.serializeUser(function(user:any, cb) { }); }); -passport.deserializeUser(function(user, cb) { +passport.deserializeUser(function(user:User, cb) { process.nextTick(function() { return cb(null, user); }); diff --git a/app/routes/index.ts b/app/routes/index.ts index 5dc70c6..6fef961 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -12,17 +12,15 @@ ffmpeg.setFfprobePath(ffprobepath.path); import fs from "fs"; -import {extension} from "../lib"; -import {db, MediaRow} from "../db"; -import {fileStorage, fileFilter} from "../multer"; +import {extension} from "../types/lib"; +import {db, MediaRow} from "../types/db"; +import {fileStorage, fileFilter} from "../types/multer"; import {checkAuth, checkSharexAuth, createEmbedData, handleUpload} from "./middleware"; let upload = multer({ storage: fileStorage /**, fileFilter: fileFilter**/ }); //maybe make this a env variable? const fetchMedia: Middleware = (req, res, next) => { - //@ts-ignore let admin: boolean = req.user.username == "admin" ? true : false - //@ts-ignore let query: string = admin == true ? "SELECT * FROM media" : `SELECT * FROM media WHERE username = '${req.user.username}'`; db.all(query, (err:Error, rows: []) => { @@ -53,7 +51,7 @@ router.get("/", (req: Request, res: Response, next: NextFunction) => { res.render("index", { user: req.user }); }); -router.get("/gifv/:file", async (req, res, next) => { +router.get("/gifv/:file", async (req: Request, res: Response, next: NextFunction) => { let url = `${req.protocol}://${req.get("host")}/uploads/${req.params.file}`; let width; let height; diff --git a/app/routes/middleware.ts b/app/routes/middleware.ts index 941e084..f190c29 100644 --- a/app/routes/middleware.ts +++ b/app/routes/middleware.ts @@ -1,4 +1,4 @@ -import type {RequestHandler as Middleware, Router, Request, Response} from 'express'; +import type {RequestHandler as Middleware, Router, Request, Response, NextFunction} from 'express'; import ffmpeg from "fluent-ffmpeg"; import ffmpegpath from "@ffmpeg-installer/ffmpeg"; @@ -10,8 +10,8 @@ ffmpeg.setFfprobePath(ffprobepath.path); import fs from "fs"; import process from "process"; -import {db} from "../db"; -import {extension} from "../lib"; +import {extension} from "../types/lib"; +import {db, MediaParams} from "../types/db"; export const checkAuth: Middleware = (req, res, next) => { if (!req.user) { @@ -70,7 +70,6 @@ export const convert: Middleware = (req, res, next) => { let nameAndExtension = extension(files[file].originalname); if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".mkv" || nameAndExtension[1] == ".avi" || nameAndExtension[1] == ".mov") { console.log("Converting " + nameAndExtension[0] + nameAndExtension[1] + " to gif"); - console.log(nameAndExtension[0] + nameAndExtension[1]); ffmpeg() .input(`uploads/${nameAndExtension[0]}${nameAndExtension[1]}`) .inputFormat(nameAndExtension[1].substring(1)) @@ -104,33 +103,48 @@ export const convert: Middleware = (req, res, next) => { } export const handleUpload: Middleware = (req, res, next) => { - if (!req.files || Object.keys(req.files).length === 0) { + if (!req.file && !req.files) { console.log("No files were uploaded"); return res.status(400).send("No files were uploaded."); } - - const files = req.files as Express.Multer.File[] - for (let file in files) { - let currentdate = Date.now(); - let expireDate: Date; - if (req.body.expire) { - expireDate = new Date(currentdate + (req.body.expire * 24 * 60 * 60 * 1000)); - } else - expireDate = null; - //@ts-ignore - db.run("INSERT INTO media (path, expire, username) VALUES (?, ?, ?)", [files[file].filename, expireDate, req.user.username], function (err) { - if (err) { - console.log(err); - return next(err); - } - console.log(`Uploaded ${files[file].filename} to database`); - if (expireDate == null) - console.log("It will not expire"); - else if (expireDate != null || expireDate != undefined) - console.log(`It will expire on ${expireDate}`); - }); - } + //Check if a single file was uploaded or multiple + const files = (req.files) ? req.files as Express.Multer.File[] : req.file; + //if no username was provided, we can presume that it is sharex + const username = (req.user) ? req.user.username : "sharex" + + let expireDate: Date; + if (req.body.expire) { + expireDate = new Date(Date.now() + (req.body.expire * 24 * 60 * 60 * 1000)); + } else + expireDate = null; + + if (files instanceof Array) { + for (let file in files) { + insertToDB(files[file].filename, expireDate, username, next); + } + } else + insertToDB(files.filename, expireDate, username, next); next(); +} + +function insertToDB (filename: String, expireDate: Date, username: String, next: NextFunction) { + let params: MediaParams = [ + filename, + expireDate, + username + ] + + db.run("INSERT INTO media (path, expire, username) VALUES (?, ?, ?)", params, function (err) { + if (err) { + console.log(err); + return next(err); + } + console.log(`Uploaded ${filename} to database`); + if (expireDate == null) + console.log("It will not expire"); + else if (expireDate != null || expireDate != undefined) + console.log(`It will expire on ${expireDate}`); + }); } \ No newline at end of file diff --git a/app/db.ts b/app/types/db.ts similarity index 84% rename from app/db.ts rename to app/types/db.ts index 81284df..e83e5b4 100644 --- a/app/db.ts +++ b/app/types/db.ts @@ -19,10 +19,16 @@ export function createUser(username: string, password: string) { export interface MediaRow { id? : Number, path: String, - expire: Number, - username: String + expire: Date, + username?: String } +export type MediaParams = [ + path: String, + expire: Date, + username?: String +] + export interface UserRow { id? : Number, username: String, diff --git a/app/lib.ts b/app/types/lib.ts similarity index 50% rename from app/lib.ts rename to app/types/lib.ts index c6c7602..14852b4 100644 --- a/app/lib.ts +++ b/app/types/lib.ts @@ -1,4 +1,18 @@ +declare global { + namespace Express { + interface User { + username: string; + id?: string; + } + } +} + export function extension(str: String){ let file = str.split("/").pop(); return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; +} + +export interface User { + username: string; + id?: string; } \ No newline at end of file diff --git a/app/multer.ts b/app/types/multer.ts similarity index 97% rename from app/multer.ts rename to app/types/multer.ts index 4f2a0e0..98c01ef 100644 --- a/app/multer.ts +++ b/app/types/multer.ts @@ -13,7 +13,7 @@ export const fileStorage = multer.diskStorage({ file: Express.Multer.File, callback: DestinationCallback ): void => { - callback(null, __dirname + "/../uploads"); + callback(null, __dirname + "/../../uploads"); }, filename: ( request: Request, diff --git a/app/views/index.ejs b/app/views/index.ejs index 73c2cd2..483bc49 100644 --- a/app/views/index.ejs +++ b/app/views/index.ejs @@ -95,20 +95,20 @@ <% } else if (extension(file.path) == ".jpg" || extension(file.path) == ".jpeg" || extension(file.path) == ".png" || extension(file.path) == ".gif" || extension(file.path) == ".webp" ) { %>
    + <% if(user.username == "admin" && file.username != "admin") { %>
    - <% if(user.username == "admin" && file.username != "admin") { %> <%= file.username %> - <% } %>
    + <% } %>
    <% } else {%>

    <%=extension(file.path)%> file

    + <% if(user.username == "admin" && file.username != "admin") { %>
    - <% if(user.username == "admin" && file.username != "admin") { %> <%= file.username %> - <% } %>
    + <% } %>
    <% } %> diff --git a/cypress.config.js b/cypress.config.js index 6f67780..8f3b625 100644 --- a/cypress.config.js +++ b/cypress.config.js @@ -2,8 +2,7 @@ const { defineConfig } = require("cypress"); module.exports = defineConfig({ e2e: { - baseUrl: "http://localhost:4000", + baseUrl: "http://localhost:3000", }, - chromeWebSecurity: false, - "video": false + chromeWebSecurity: false }); diff --git a/cypress/screenshots/spec.cy.js/The Home Page -- logs out (failed).png b/cypress/screenshots/spec.cy.js/The Home Page -- logs out (failed).png deleted file mode 100644 index a4b62f6ecaca58120b80b8e869fd30745e417fd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106329 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 diff --git a/cypress/screenshots/spec.cy.js/The Upload Page -- ShareX successfully uploads a file (failed).png b/cypress/screenshots/spec.cy.js/The Upload Page -- ShareX successfully uploads a file (failed).png deleted file mode 100644 index dfd60e039432db376c07b132b3a9658037ff910b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97471 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

    kmzqtE@C^>b4V%kM?b-?@2z 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 F2>{|;)o}m- From f83c5aa423ce9fa2050327fdc5415076e39271c6 Mon Sep 17 00:00:00 2001 From: waveringana Date: Fri, 9 Dec 2022 22:02:32 +0000 Subject: [PATCH 06/13] rework delete function --- app/routes/index.ts | 44 ++++++++++++++------------------------------ app/types/db.ts | 21 +++++++++++++++++++++ 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/app/routes/index.ts b/app/routes/index.ts index 6fef961..0bedb9f 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -13,7 +13,7 @@ ffmpeg.setFfprobePath(ffprobepath.path); import fs from "fs"; import {extension} from "../types/lib"; -import {db, MediaRow} from "../types/db"; +import {db, MediaRow, getPath, deleteId} from "../types/db"; import {fileStorage, fileFilter} from "../types/multer"; import {checkAuth, checkSharexAuth, createEmbedData, handleUpload} from "./middleware"; @@ -80,35 +80,19 @@ router.post("/sharex", [checkSharexAuth, upload.single("fileupload"), createEmbe return res.send(`${req.protocol}://${req.get("host")}/uploads/${req.file.filename}`); }); -router.post("/:id(\\d+)/delete", [checkAuth], (req: Request, res: Response, next: NextFunction) => { - db.all("SELECT path FROM media WHERE id = ?", [ req.params.id ], (err: Error, path: Array) => { - if (err) { return next(err); } - fs.unlink(`uploads/${path[0].path}`, (err => { - if (err) { - console.log(err); - if (err.errno == -4058) { //File just doesnt exist anymore - db.run("DELETE FROM media WHERE id = ?", [ - req.params.id - ], (err: Error) => { - if (err) { return next(err); } - return res.redirect("/"); - }); - } else { - console.log(err); - return res.redirect("/"); - } - } else { - console.log(`Deleted ${path}`); - //Callback Hell :D - db.run("DELETE FROM media WHERE id = ?", [ - req.params.id - ], (err: Error) => { - if (err) { return next(err); } - return res.redirect("/"); - }); - } - })); - }); +router.post("/:id(\\d+)/delete", [checkAuth], async (req: Request, res: Response, next: NextFunction) => { + const path: any = await getPath(req.params.id) + fs.unlink(`uploads/${path.path}`, async (err) => { + if (err && err.errno == -4058) { + await deleteId("media", req.params.id).then(()=> { + return res.redirect("/"); + }) + } else { + await deleteId("media", req.params.id).then(()=> { + return res.redirect("/"); + }) + } + }) }); export default router; \ No newline at end of file diff --git a/app/types/db.ts b/app/types/db.ts index e83e5b4..c216bde 100644 --- a/app/types/db.ts +++ b/app/types/db.ts @@ -1,6 +1,7 @@ import sqlite3 from "sqlite3"; import mkdirp from "mkdirp"; import crypto from "crypto"; +import { FileFilterCallback } from "multer"; mkdirp.sync("./uploads"); mkdirp.sync("./var/db"); @@ -16,6 +17,26 @@ export function createUser(username: string, password: string) { ]); } +export function getPath(id: number | string) { + return new Promise((resolve, reject) => { + let query: string = `SELECT path FROM media WHERE id = ?`; + db.get(query, [id], (err: Error, path: object) => { + if (err) {reject(err)} + resolve(path) + }); + }) +} + +export function deleteId(database: string, id: number | string) { + return new Promise((resolve, reject) => { + let query: string = `DELETE FROM ${database} WHERE id = ?` + db.run(query, [id], (err: Error) => { + if (err) {reject(err); return;} + resolve(null) + }) + }) +} + export interface MediaRow { id? : Number, path: String, From 135c7727234895c1d35f6d1a1df0a1a02706016a Mon Sep 17 00:00:00 2001 From: waveringana Date: Sat, 10 Dec 2022 19:09:27 +0000 Subject: [PATCH 07/13] fix spaces --- app/app.ts | 182 ++++++++++++++++----------------- app/routes/adduser.ts | 23 +++-- app/routes/auth.ts | 78 +++++++------- app/routes/index.ts | 105 ++++++++++--------- app/routes/middleware.ts | 216 +++++++++++++++++++-------------------- app/types/db.ts | 62 +++++------ app/types/lib.ts | 4 +- 7 files changed, 331 insertions(+), 339 deletions(-) diff --git a/app/app.ts b/app/app.ts index 4d0b6b4..2e03142 100644 --- a/app/app.ts +++ b/app/app.ts @@ -22,19 +22,19 @@ let server = http.createServer(app); let port = normalizePort(process.env.EBPORT || "3000"); function normalizePort(val: string) { - var port = parseInt(val, 10); + var port = parseInt(val, 10); - if (isNaN(port)) { - // named pipe - return val; - } + if (isNaN(port)) { + // named pipe + return val; + } - if (port >= 0) { - // port number - return port; - } + if (port >= 0) { + // port number + return port; + } - return false; + return false; } app.set("port", port); @@ -43,59 +43,59 @@ server.on("error", onError); server.on("listening", onListening); function onError(error: any) { - if (error.syscall !== "listen") { - throw error; - } + if (error.syscall !== "listen") { + throw error; + } - var bind = typeof port === "string" - ? "Pipe " + port - : "Port " + port; + var bind = typeof port === "string" + ? "Pipe " + port + : "Port " + port; - // handle specific listen errors with friendly messages - switch (error.code) { - case "EACCES": - console.error(bind + " requires elevated privileges"); - process.exit(1); - break; - case "EADDRINUSE": - console.error(bind + " is already in use"); - process.exit(1); - break; - default: - throw error; - } + // handle specific listen errors with friendly messages + switch (error.code) { + case "EACCES": + console.error(bind + " requires elevated privileges"); + process.exit(1); + break; + case "EADDRINUSE": + console.error(bind + " is already in use"); + process.exit(1); + break; + default: + throw error; + } } db.serialize(function() { - // create the database schema for the embedders app - db.run("CREATE TABLE IF NOT EXISTS users ( \ - id INTEGER PRIMARY KEY, \ - username TEXT UNIQUE, \ - hashed_password BLOB, \ - salt BLOB \ - )"); + // create the database schema for the embedders app + db.run("CREATE TABLE IF NOT EXISTS users ( \ + id INTEGER PRIMARY KEY, \ + username TEXT UNIQUE, \ + hashed_password BLOB, \ + salt BLOB \ + )"); - db.run("CREATE TABLE IF NOT EXISTS media ( \ - id INTEGER PRIMARY KEY, \ - path TEXT NOT NULL, \ - expire INTEGER \, \ - username TEXT \ - )"); + db.run("CREATE TABLE IF NOT EXISTS media ( \ + id INTEGER PRIMARY KEY, \ + path TEXT NOT NULL, \ + expire INTEGER \, \ + username TEXT \ + )"); - db.run("ALTER TABLE media ADD COLUMN username TEXT", (err) => { - if(err) - return; - }); //TODO, version new DB, run this command when detecting old DB + db.run("ALTER TABLE media ADD COLUMN username TEXT", (err) => { + if(err) + return; + }); //TODO, version new DB, run this command when detecting old DB - createUser("admin", process.env.EBPASS || "changeme"); + createUser("admin", process.env.EBPASS || "changeme"); }); function onListening() { - var addr = server.address(); - var bind = typeof addr === "string" - ? "pipe " + addr - : "port " + addr.port; - console.log("Listening on " + bind); + var addr = server.address(); + var bind = typeof addr === "string" + ? "pipe " + addr + : "port " + addr.port; + console.log("Listening on " + bind); } app.enable("trust proxy"); @@ -106,21 +106,21 @@ app.set("view engine", "ejs"); app.use(express.json()); app.use(express.urlencoded({ - extended: false + extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, "public"))); app.use(express.static(path.join(__dirname, "public"))); app.use(session({ - secret: process.env.EBSECRET || "pleasechangeme", - resave: false, - saveUninitialized: false, - // @ts-ignore - store: new SQLiteStore({ - db: "sessions.db", - dir: "./var/db" - }) + secret: process.env.EBSECRET || "pleasechangeme", + resave: false, + saveUninitialized: false, + // @ts-ignore + store: new SQLiteStore({ + db: "sessions.db", + dir: "./var/db" + }) })); app.use(passport.authenticate("session")); @@ -131,38 +131,38 @@ app.use("/", adduserRouter); app.use("/uploads", express.static("uploads")); function prune () { - db.all("SELECT * FROM media", (err: Error, rows: []) => { - console.log("Uploaded files: " + rows.length); - console.log(rows); - }); + db.all("SELECT * FROM media", (err: Error, rows: []) => { + console.log("Uploaded files: " + rows.length); + console.log(rows); + }); - console.log("Vacuuming database..."); - db.run("VACUUM"); + console.log("Vacuuming database..."); + db.run("VACUUM"); - db.all("SELECT * FROM media WHERE expire < ?", [Date.now()], (err: Error, rows: []) => { - console.log("Expired rows: " + rows); - if (err) return console.error(err); - rows.forEach((row: MediaRow) => { - console.log(`Deleting ${row.path}`); - fs.unlink(`uploads/${row.path}`, (err) => { - if (err) { - if(err.errno == -4058) { - console.log("File already deleted"); - db.all("DELETE FROM media WHERE path = ?", [row.path], (err: Error) => { - if (err) return console.error(err); - }); - } else { - console.error(err); - } - } else { - db.all("DELETE FROM media WHERE path = ?", [row.path], (err: Error) => { - if (err) return console.error(err); - }); - } - }); - console.log(`Deleted ${row.path}`); - }); - }); + db.all("SELECT * FROM media WHERE expire < ?", [Date.now()], (err: Error, rows: []) => { + console.log("Expired rows: " + rows); + if (err) return console.error(err); + rows.forEach((row: MediaRow) => { + console.log(`Deleting ${row.path}`); + fs.unlink(`uploads/${row.path}`, (err) => { + if (err) { + if(err.errno == -4058) { + console.log("File already deleted"); + db.all("DELETE FROM media WHERE path = ?", [row.path], (err: Error) => { + if (err) return console.error(err); + }); + } else { + console.error(err); + } + } else { + db.all("DELETE FROM media WHERE path = ?", [row.path], (err: Error) => { + if (err) return console.error(err); + }); + } + }); + console.log(`Deleted ${row.path}`); + }); + }); } setInterval(prune, 1000 * 60); //prune every minute \ No newline at end of file diff --git a/app/routes/adduser.ts b/app/routes/adduser.ts index 695eb6d..044c38a 100644 --- a/app/routes/adduser.ts +++ b/app/routes/adduser.ts @@ -6,23 +6,24 @@ import {db, createUser} from "../types/db"; const router: Router = express.Router(); const adminCheck: Middleware = (req: Request, res: Response, next: NextFunction) => { - if (!req.user) - return res.status(403).send("You are not authorized to perform this action"); - else { - if (req.user.username != "admin") - return res.status(403).send("You are not authorized to perform this action"); - next(); - } + if (!req.user) + return res.status(403).send("You are not authorized to perform this action"); + else { + if (req.user.username != "admin") + return res.status(403).send("You are not authorized to perform this action"); + } + + next(); } router.get("/adduser", adminCheck, (req: Request, res: Response, next: NextFunction) => { - res.locals.filter = null; - res.render("adduser", { user: req.user }); + res.locals.filter = null; + res.render("adduser", { user: req.user }); }); router.post("/adduser", adminCheck, (req: Request, res: Response, next: NextFunction) => { - createUser(req.body.username, req.body.password); - res.redirect('/'); + createUser(req.body.username, req.body.password); + res.redirect('/'); }); export default router; \ No newline at end of file diff --git a/app/routes/auth.ts b/app/routes/auth.ts index e571b5a..37c0b56 100644 --- a/app/routes/auth.ts +++ b/app/routes/auth.ts @@ -9,61 +9,61 @@ import {db, UserRow} from "../types/db"; let router = express.Router(); passport.use(new LocalStrategy(function verify(username, password, cb) { - db.get("SELECT * FROM users WHERE username = ?", [username], function(err: Error, row: UserRow) { - if (err) { - return cb(err); - } - if (!row) { - return cb(null, false, { - message: "Incorrect username or password." - }); - } + db.get("SELECT * FROM users WHERE username = ?", [username], function(err: Error, row: UserRow) { + if (err) { + return cb(err); + } + if (!row) { + return cb(null, false, { + message: "Incorrect username or password." + }); + } - crypto.pbkdf2(password, row.salt, 310000, 32, "sha256", function(err, hashedPassword) { - if (err) { - return cb(err); - } - if (!crypto.timingSafeEqual(row.hashed_password, hashedPassword)) { - return cb(null, false, { - message: "Incorrect username or password." - }); - } - return cb(null, row); - }); - }); + crypto.pbkdf2(password, row.salt, 310000, 32, "sha256", function(err, hashedPassword) { + if (err) { + return cb(err); + } + if (!crypto.timingSafeEqual(row.hashed_password, hashedPassword)) { + return cb(null, false, { + message: "Incorrect username or password." + }); + } + return cb(null, row); + }); + }); })); passport.serializeUser(function(user:User, cb) { - process.nextTick(function() { - cb(null, { - id: user.id, - username: user.username - }); - }); + process.nextTick(function() { + cb(null, { + id: user.id, + username: user.username + }); + }); }); passport.deserializeUser(function(user:User, cb) { - process.nextTick(function() { - return cb(null, user); - }); + process.nextTick(function() { + return cb(null, user); + }); }); router.get("/login", function(req, res) { - res.render("login"); + res.render("login"); }); router.post("/login/password", passport.authenticate("local", { - successRedirect: "/", - failureRedirect: "/login" + successRedirect: "/", + failureRedirect: "/login" })); router.post("/logout", function(req, res, next) { - req.logout(function(err) { - if (err) { - return next(err); - } - res.redirect("/"); - }); + req.logout(function(err) { + if (err) { + return next(err); + } + res.redirect("/"); + }); }); export default router; diff --git a/app/routes/index.ts b/app/routes/index.ts index 0bedb9f..3cd1273 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -20,79 +20,78 @@ import {checkAuth, checkSharexAuth, createEmbedData, handleUpload} from "./middl let upload = multer({ storage: fileStorage /**, fileFilter: fileFilter**/ }); //maybe make this a env variable? const fetchMedia: Middleware = (req, res, next) => { - let admin: boolean = req.user.username == "admin" ? true : false - let query: string = admin == true ? "SELECT * FROM media" : `SELECT * FROM media WHERE username = '${req.user.username}'`; + let admin: boolean = req.user.username == "admin" ? true : false + let query: string = admin == true ? "SELECT * FROM media" : `SELECT * FROM media WHERE username = '${req.user.username}'`; - db.all(query, (err:Error, rows: []) => { - if (err) return next(err); - let files = rows.map((row: MediaRow)=> { - return { - id: row.id, - path: row.path, - expire: row.expire, - username: row.username, - url: "/" + row.id - }; - }); - res.locals.files = files.reverse(); //reverse so newest files appear first - res.locals.Count = files.length; - next(); - }); + db.all(query, (err:Error, rows: []) => { + if (err) return next(err); + let files = rows.map((row: MediaRow)=> { + return { + id: row.id, + path: row.path, + expire: row.expire, + username: row.username, + url: "/" + row.id + }; + }); + res.locals.files = files.reverse(); //reverse so newest files appear first + res.locals.Count = files.length; + next(); + }); } let router = express.Router(); router.get("/", (req: Request, res: Response, next: NextFunction) => { - if (!req.user) - return res.render("home") - next(); + if (!req.user) + return res.render("home") + next(); }, fetchMedia, (req: Request, res: Response) => { - res.locals.filter = null; - res.render("index", { user: req.user }); + res.locals.filter = null; + res.render("index", { user: req.user }); }); router.get("/gifv/:file", async (req: Request, res: Response, next: NextFunction) => { - let url = `${req.protocol}://${req.get("host")}/uploads/${req.params.file}`; - let width; let height; + let url = `${req.protocol}://${req.get("host")}/uploads/${req.params.file}`; + let width; let height; - let nameAndExtension = extension(`uploads/${req.params.file}`); - if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".mov" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".gif") { - ffmpeg() - .input(`uploads/${req.params.file}`) - .inputFormat(nameAndExtension[1].substring(1)) - .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { - if (err) return next(err); - width = data.streams[0].width; - height = data.streams[0].height; - return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); - }); - } else { - let imageData = await imageProbe(fs.createReadStream(`uploads/${req.params.file}`)); - return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: imageData.width, height: imageData.height }); - } + let nameAndExtension = extension(`uploads/${req.params.file}`); + if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".mov" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".gif") { + ffmpeg() + .input(`uploads/${req.params.file}`) + .inputFormat(nameAndExtension[1].substring(1)) + .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { + if (err) return next(err); + width = data.streams[0].width; + height = data.streams[0].height; + return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); + }); + } else { + let imageData = await imageProbe(fs.createReadStream(`uploads/${req.params.file}`)); + return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: imageData.width, height: imageData.height }); + } }); router.post("/", [checkAuth, upload.array("fileupload"), createEmbedData, handleUpload], (req: Request, res: Response) => { - res.redirect("/") + res.redirect("/") }); router.post("/sharex", [checkSharexAuth, upload.single("fileupload"), createEmbedData, handleUpload], (req: Request, res: Response) => { - return res.send(`${req.protocol}://${req.get("host")}/uploads/${req.file.filename}`); + return res.send(`${req.protocol}://${req.get("host")}/uploads/${req.file.filename}`); }); router.post("/:id(\\d+)/delete", [checkAuth], async (req: Request, res: Response, next: NextFunction) => { - const path: any = await getPath(req.params.id) - fs.unlink(`uploads/${path.path}`, async (err) => { - if (err && err.errno == -4058) { - await deleteId("media", req.params.id).then(()=> { - return res.redirect("/"); - }) - } else { - await deleteId("media", req.params.id).then(()=> { - return res.redirect("/"); - }) - } - }) + const path: any = await getPath(req.params.id) + fs.unlink(`uploads/${path.path}`, async (err) => { + if (err && err.errno == -4058) { + await deleteId("media", req.params.id).then(()=> { + return res.redirect("/"); + }) + } + await deleteId("media", req.params.id).then(()=> { + return res.redirect("/"); + }) + }) }); export default router; \ No newline at end of file diff --git a/app/routes/middleware.ts b/app/routes/middleware.ts index f190c29..55ffbc0 100644 --- a/app/routes/middleware.ts +++ b/app/routes/middleware.ts @@ -14,137 +14,129 @@ import {extension} from "../types/lib"; import {db, MediaParams} from "../types/db"; export const checkAuth: Middleware = (req, res, next) => { - if (!req.user) { - return res.status(401); - } - next(); + if (!req.user) { + return res.status(401); + } + next(); } export const checkSharexAuth: Middleware = (req, res, next) => { - let auth = process.env.EBAPI_KEY || process.env.EBPASS || "pleaseSetAPI_KEY"; - let key = null; + let auth = process.env.EBAPI_KEY || process.env.EBPASS || "pleaseSetAPI_KEY"; + let key = null; - if (req.headers["key"]) { - key = req.headers["key"]; - } else { - return res.status(400).send("{success: false, message: \"No key provided\", fix: \"Provide a key\"}"); - } + if (req.headers["key"]) { + key = req.headers["key"]; + } else { + return res.status(400).send("{success: false, message: \"No key provided\", fix: \"Provide a key\"}"); + } - if (auth != key) { - return res.status(401).send("{success: false, message: '\"'Invalid key\", fix: \"Provide a valid key\"}"); - } + if (auth != key) { + return res.status(401).send("{success: false, message: '\"'Invalid key\", fix: \"Provide a valid key\"}"); + } - let shortKey = key.substr(0, 3) + "..."; - console.log(`Authenicated user with key: ${shortKey}`); + let shortKey = key.substr(0, 3) + "..."; + console.log(`Authenicated user with key: ${shortKey}`); - next(); + next(); } - -//createEmbedDatas mp4 to gif and vice versa with ffmpeg + export const createEmbedData: Middleware = (req, res, next) => { - const files = req.files as Express.Multer.File[] - for (let file in files) { - let nameAndExtension = extension(files[file].originalname); - let oembed = { - type: "video", - version: "1.0", - provider_name: "embedder", - provider_url: "https://github.com/WaveringAna/embedder", - cache_age: 86400, - html: ``, - width: 640, - height: 360 - }; + const files = req.files as Express.Multer.File[] + for (let file in files) { + let nameAndExtension = extension(files[file].originalname); + let oembed = { + type: "video", + version: "1.0", + provider_name: "embedder", + provider_url: "https://github.com/WaveringAna/embedder", + cache_age: 86400, + html: ``, + width: 640, + height: 360 + }; - fs.writeFile(`uploads/oembed-${nameAndExtension[0]}${nameAndExtension[1]}.json`, JSON.stringify(oembed), function (err) { - if (err) return next(err); - console.log(`oembed file created ${nameAndExtension[0]}${nameAndExtension[1]}.json`); - }); - } - next(); + fs.writeFile(`uploads/oembed-${nameAndExtension[0]}${nameAndExtension[1]}.json`, JSON.stringify(oembed), function (err) { + if (err) return next(err); + console.log(`oembed file created ${nameAndExtension[0]}${nameAndExtension[1]}.json`); + }); + } + next(); } export const convert: Middleware = (req, res, next) => { - const files = req.files as Express.Multer.File[] - for (let file in files) { - let nameAndExtension = extension(files[file].originalname); - if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".mkv" || nameAndExtension[1] == ".avi" || nameAndExtension[1] == ".mov") { - console.log("Converting " + nameAndExtension[0] + nameAndExtension[1] + " to gif"); - ffmpeg() - .input(`uploads/${nameAndExtension[0]}${nameAndExtension[1]}`) - .inputFormat(nameAndExtension[1].substring(1)) - .outputFormat("gif") - .output(`uploads/${nameAndExtension[0]}.gif`) - .on("end", function() { - console.log("Conversion complete"); - console.log(`Uploaded to uploads/${nameAndExtension[0]}.gif`); - }) - .on("error", (e) => console.log(e)) - .run(); - } else if (nameAndExtension[1] == ".gif") { - console.log(`Converting ${nameAndExtension[0]}${nameAndExtension[1]} to mp4`); - ffmpeg(`uploads/${nameAndExtension[0]}${nameAndExtension[1]}`) - .inputFormat("gif") - .outputFormat("mp4") - .outputOptions([ - "-pix_fmt yuv420p", - "-c:v libx264", - "-movflags +faststart" - ]) - .noAudio() - .output(`uploads/${nameAndExtension[0]}.mp4`) - .on("end", function() { - console.log("Conversion complete"); - console.log(`Uploaded to uploads/${nameAndExtension[0]}.mp4`); - }) - .run(); - } - } + const files = req.files as Express.Multer.File[] + for (let file in files) { + let nameAndExtension = extension(files[file].originalname); + if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".mkv" || nameAndExtension[1] == ".avi" || nameAndExtension[1] == ".mov") { + console.log("Converting " + nameAndExtension[0] + nameAndExtension[1] + " to gif"); + ffmpeg() + .input(`uploads/${nameAndExtension[0]}${nameAndExtension[1]}`) + .inputFormat(nameAndExtension[1].substring(1)) + .outputFormat("gif") + .output(`uploads/${nameAndExtension[0]}.gif`) + .on("end", function() { + console.log("Conversion complete"); + console.log(`Uploaded to uploads/${nameAndExtension[0]}.gif`); + }) + .on("error", (e) => console.log(e)) + .run(); + } else if (nameAndExtension[1] == ".gif") { + console.log(`Converting ${nameAndExtension[0]}${nameAndExtension[1]} to mp4`); + ffmpeg(`uploads/${nameAndExtension[0]}${nameAndExtension[1]}`) + .inputFormat("gif") + .outputFormat("mp4") + .outputOptions([ + "-pix_fmt yuv420p", + "-c:v libx264", + "-movflags +faststart" + ]) + .noAudio() + .output(`uploads/${nameAndExtension[0]}.mp4`) + .on("end", function() { + console.log("Conversion complete"); + console.log(`Uploaded to uploads/${nameAndExtension[0]}.mp4`); + }) + .run(); + } + } } export const handleUpload: Middleware = (req, res, next) => { - if (!req.file && !req.files) { - console.log("No files were uploaded"); - return res.status(400).send("No files were uploaded."); - } + if (!req.file && !req.files) { + console.log("No files were uploaded"); + return res.status(400).send("No files were uploaded."); + } + + const files = (req.files) ? req.files as Express.Multer.File[] : req.file; //Check if a single file was uploaded or multiple + const username = (req.user) ? req.user.username : "sharex" //if no username was provided, we can presume that it is sharex + const expireDate: Date = (req.body.expire) ? new Date(Date.now() + (req.body.expire * 24 * 60 * 60 * 1000)) : null; - //Check if a single file was uploaded or multiple - const files = (req.files) ? req.files as Express.Multer.File[] : req.file; - //if no username was provided, we can presume that it is sharex - const username = (req.user) ? req.user.username : "sharex" - - let expireDate: Date; - if (req.body.expire) { - expireDate = new Date(Date.now() + (req.body.expire * 24 * 60 * 60 * 1000)); - } else - expireDate = null; + if (files instanceof Array) { + for (let file in files) { + insertToDB(files[file].filename, expireDate, username, next); + } + } else + insertToDB(files.filename, expireDate, username, next); - if (files instanceof Array) { - for (let file in files) { - insertToDB(files[file].filename, expireDate, username, next); - } - } else - insertToDB(files.filename, expireDate, username, next); - - next(); + next(); } function insertToDB (filename: String, expireDate: Date, username: String, next: NextFunction) { - let params: MediaParams = [ - filename, - expireDate, - username - ] - - db.run("INSERT INTO media (path, expire, username) VALUES (?, ?, ?)", params, function (err) { - if (err) { - console.log(err); - return next(err); - } - console.log(`Uploaded ${filename} to database`); - if (expireDate == null) - console.log("It will not expire"); - else if (expireDate != null || expireDate != undefined) - console.log(`It will expire on ${expireDate}`); - }); + let params: MediaParams = [ + filename, + expireDate, + username + ] + + db.run("INSERT INTO media (path, expire, username) VALUES (?, ?, ?)", params, function (err) { + if (err) { + console.log(err); + return next(err); + } + console.log(`Uploaded ${filename} to database`); + if (expireDate == null) + console.log("It will not expire"); + else if (expireDate != null || expireDate != undefined) + console.log(`It will expire on ${expireDate}`); + }); } \ No newline at end of file diff --git a/app/types/db.ts b/app/types/db.ts index c216bde..a6f981a 100644 --- a/app/types/db.ts +++ b/app/types/db.ts @@ -9,50 +9,50 @@ mkdirp.sync("./var/db"); export const db = new sqlite3.Database("./var/db/media.db"); export function createUser(username: string, password: string) { - var salt = crypto.randomBytes(16); - db.run("INSERT OR IGNORE INTO users (username, hashed_password, salt) VALUES (?, ?, ?)", [ - username, - crypto.pbkdf2Sync(password, salt, 310000, 32, "sha256"), - salt - ]); + var salt = crypto.randomBytes(16); + db.run("INSERT OR IGNORE INTO users (username, hashed_password, salt) VALUES (?, ?, ?)", [ + username, + crypto.pbkdf2Sync(password, salt, 310000, 32, "sha256"), + salt + ]); } export function getPath(id: number | string) { - return new Promise((resolve, reject) => { - let query: string = `SELECT path FROM media WHERE id = ?`; - db.get(query, [id], (err: Error, path: object) => { - if (err) {reject(err)} - resolve(path) - }); - }) + return new Promise((resolve, reject) => { + let query: string = `SELECT path FROM media WHERE id = ?`; + db.get(query, [id], (err: Error, path: object) => { + if (err) {reject(err)} + resolve(path) + }); + }) } export function deleteId(database: string, id: number | string) { - return new Promise((resolve, reject) => { - let query: string = `DELETE FROM ${database} WHERE id = ?` - db.run(query, [id], (err: Error) => { - if (err) {reject(err); return;} - resolve(null) - }) - }) + return new Promise((resolve, reject) => { + let query: string = `DELETE FROM ${database} WHERE id = ?` + db.run(query, [id], (err: Error) => { + if (err) {reject(err); return;} + resolve(null) + }) + }) } export interface MediaRow { - id? : Number, - path: String, - expire: Date, - username?: String + id? : Number, + path: String, + expire: Date, + username?: String } export type MediaParams = [ - path: String, - expire: Date, - username?: String + path: String, + expire: Date, + username?: String ] export interface UserRow { - id? : Number, - username: String, - hashed_password: any, - salt: any + id? : Number, + username: String, + hashed_password: any, + salt: any } \ No newline at end of file diff --git a/app/types/lib.ts b/app/types/lib.ts index 14852b4..70b0ebd 100644 --- a/app/types/lib.ts +++ b/app/types/lib.ts @@ -8,8 +8,8 @@ declare global { } export function extension(str: String){ - let file = str.split("/").pop(); - return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; + let file = str.split("/").pop(); + return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; } export interface User { From 0a0d9b9802251c53a2943e018e4627f9f43c1ff2 Mon Sep 17 00:00:00 2001 From: waveringana Date: Sun, 11 Dec 2022 06:20:48 +0000 Subject: [PATCH 08/13] cleaner prune function --- app/app.ts | 34 ++++++++++------------------------ app/routes/middleware.ts | 2 +- app/types/db.ts | 36 ++++++++++++++++++++++++++++-------- app/types/lib.ts | 2 +- 4 files changed, 40 insertions(+), 34 deletions(-) diff --git a/app/app.ts b/app/app.ts index 2e03142..fda47e7 100644 --- a/app/app.ts +++ b/app/app.ts @@ -15,7 +15,7 @@ import authRouter from "./routes/auth"; import indexRouter from "./routes/index"; import adduserRouter from "./routes/adduser"; -import {db, createUser, MediaRow} from "./types/db"; +import {db, expire, createUser, MediaRow} from "./types/db"; let app = express(); let server = http.createServer(app); @@ -130,7 +130,7 @@ app.use("/", adduserRouter); app.use("/uploads", express.static("uploads")); -function prune () { +async function prune () { db.all("SELECT * FROM media", (err: Error, rows: []) => { console.log("Uploaded files: " + rows.length); console.log(rows); @@ -139,30 +139,16 @@ function prune () { console.log("Vacuuming database..."); db.run("VACUUM"); - db.all("SELECT * FROM media WHERE expire < ?", [Date.now()], (err: Error, rows: []) => { - console.log("Expired rows: " + rows); - if (err) return console.error(err); - rows.forEach((row: MediaRow) => { - console.log(`Deleting ${row.path}`); - fs.unlink(`uploads/${row.path}`, (err) => { - if (err) { - if(err.errno == -4058) { - console.log("File already deleted"); - db.all("DELETE FROM media WHERE path = ?", [row.path], (err: Error) => { - if (err) return console.error(err); - }); - } else { - console.error(err); - } - } else { - db.all("DELETE FROM media WHERE path = ?", [row.path], (err: Error) => { - if (err) return console.error(err); - }); - } - }); - console.log(`Deleted ${row.path}`); + db.each("SELECT path FROM media WHERE expire < ?", [Date.now()], (err: Error, row: MediaRow) => { + console.log(`Expired row: ${row}`); + fs.unlink(`uploads/${row.path}`, (err) => { + if (err && err.errno == -4058) { + console.log("File already deleted"); + } }); }); + + await expire("media", "expire", Date.now()); } setInterval(prune, 1000 * 60); //prune every minute \ No newline at end of file diff --git a/app/routes/middleware.ts b/app/routes/middleware.ts index 55ffbc0..e3138d3 100644 --- a/app/routes/middleware.ts +++ b/app/routes/middleware.ts @@ -121,7 +121,7 @@ export const handleUpload: Middleware = (req, res, next) => { next(); } -function insertToDB (filename: String, expireDate: Date, username: String, next: NextFunction) { +function insertToDB (filename: string, expireDate: Date, username: string, next: NextFunction) { let params: MediaParams = [ filename, expireDate, diff --git a/app/types/db.ts b/app/types/db.ts index a6f981a..c477574 100644 --- a/app/types/db.ts +++ b/app/types/db.ts @@ -1,7 +1,6 @@ import sqlite3 from "sqlite3"; import mkdirp from "mkdirp"; import crypto from "crypto"; -import { FileFilterCallback } from "multer"; mkdirp.sync("./uploads"); mkdirp.sync("./var/db"); @@ -9,7 +8,8 @@ mkdirp.sync("./var/db"); export const db = new sqlite3.Database("./var/db/media.db"); export function createUser(username: string, password: string) { - var salt = crypto.randomBytes(16); + let salt = crypto.randomBytes(16); + db.run("INSERT OR IGNORE INTO users (username, hashed_password, salt) VALUES (?, ?, ?)", [ username, crypto.pbkdf2Sync(password, salt, 310000, 32, "sha256"), @@ -20,6 +20,7 @@ export function createUser(username: string, password: string) { export function getPath(id: number | string) { return new Promise((resolve, reject) => { let query: string = `SELECT path FROM media WHERE id = ?`; + db.get(query, [id], (err: Error, path: object) => { if (err) {reject(err)} resolve(path) @@ -30,6 +31,7 @@ export function getPath(id: number | string) { export function deleteId(database: string, id: number | string) { return new Promise((resolve, reject) => { let query: string = `DELETE FROM ${database} WHERE id = ?` + db.run(query, [id], (err: Error) => { if (err) {reject(err); return;} resolve(null) @@ -37,22 +39,40 @@ export function deleteId(database: string, id: number | string) { }) } +export function expire(database: string, column: string, expiration:number) { + return new Promise((resolve, reject) => { + let query: string = `SELECT * FROM ${database} WHERE ${column} < ?`; + + db.each(query, [expiration], async (err: Error, row: GenericRow) => { + await deleteId(database, row.id) + + resolve(null); + }); + }) +} + +export interface GenericRow { + id? : number | string, + username?: string + expire? :Date +} + export interface MediaRow { - id? : Number, - path: String, + id? : number | string, + path: string, expire: Date, - username?: String + username?: string } export type MediaParams = [ - path: String, + path: string, expire: Date, - username?: String + username?: string ] export interface UserRow { id? : Number, - username: String, + username: string, hashed_password: any, salt: any } \ No newline at end of file diff --git a/app/types/lib.ts b/app/types/lib.ts index 70b0ebd..9723274 100644 --- a/app/types/lib.ts +++ b/app/types/lib.ts @@ -7,7 +7,7 @@ declare global { } } -export function extension(str: String){ +export function extension(str: string){ let file = str.split("/").pop(); return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; } From 34e991f017b7421fbcab331dec096c548fab8fb5 Mon Sep 17 00:00:00 2001 From: waveringana Date: Sun, 11 Dec 2022 06:31:19 +0000 Subject: [PATCH 09/13] Add documentation to functions --- app/routes/adduser.ts | 2 +- app/routes/index.ts | 3 ++- app/routes/middleware.ts | 8 +++++--- app/types/db.ts | 8 ++++++++ app/types/lib.ts | 4 ++-- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/routes/adduser.ts b/app/routes/adduser.ts index 044c38a..64cee7c 100644 --- a/app/routes/adduser.ts +++ b/app/routes/adduser.ts @@ -4,7 +4,7 @@ import express from "express"; import {db, createUser} from "../types/db"; const router: Router = express.Router(); - +/**Middleware to check if a user is actually signed in */ const adminCheck: Middleware = (req: Request, res: Response, next: NextFunction) => { if (!req.user) return res.status(403).send("You are not authorized to perform this action"); diff --git a/app/routes/index.ts b/app/routes/index.ts index 3cd1273..6308897 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -18,9 +18,10 @@ import {fileStorage, fileFilter} from "../types/multer"; import {checkAuth, checkSharexAuth, createEmbedData, handleUpload} from "./middleware"; let upload = multer({ storage: fileStorage /**, fileFilter: fileFilter**/ }); //maybe make this a env variable? - +/**Middleware to grab media from media database */ const fetchMedia: Middleware = (req, res, next) => { let admin: boolean = req.user.username == "admin" ? true : false + /**Check if the user is an admin, if so, show all posts from all users */ let query: string = admin == true ? "SELECT * FROM media" : `SELECT * FROM media WHERE username = '${req.user.username}'`; db.all(query, (err:Error, rows: []) => { diff --git a/app/routes/middleware.ts b/app/routes/middleware.ts index e3138d3..9be3789 100644 --- a/app/routes/middleware.ts +++ b/app/routes/middleware.ts @@ -20,6 +20,7 @@ export const checkAuth: Middleware = (req, res, next) => { next(); } +/**Checks shareX auth key */ export const checkSharexAuth: Middleware = (req, res, next) => { let auth = process.env.EBAPI_KEY || process.env.EBPASS || "pleaseSetAPI_KEY"; let key = null; @@ -40,6 +41,7 @@ export const checkSharexAuth: Middleware = (req, res, next) => { next(); } +/**Creates oembed json file for embed metadata */ export const createEmbedData: Middleware = (req, res, next) => { const files = req.files as Express.Multer.File[] for (let file in files) { @@ -62,7 +64,7 @@ export const createEmbedData: Middleware = (req, res, next) => { } next(); } - +/** Converts video to gif and vice versa using ffmpeg */ export const convert: Middleware = (req, res, next) => { const files = req.files as Express.Multer.File[] for (let file in files) { @@ -100,7 +102,7 @@ export const convert: Middleware = (req, res, next) => { } } } - +/**Middleware for handling uploaded files. Inserts it into the database */ export const handleUpload: Middleware = (req, res, next) => { if (!req.file && !req.files) { console.log("No files were uploaded"); @@ -120,7 +122,7 @@ export const handleUpload: Middleware = (req, res, next) => { next(); } - +/**Inserts into media database */ function insertToDB (filename: string, expireDate: Date, username: string, next: NextFunction) { let params: MediaParams = [ filename, diff --git a/app/types/db.ts b/app/types/db.ts index c477574..b29d674 100644 --- a/app/types/db.ts +++ b/app/types/db.ts @@ -7,6 +7,7 @@ mkdirp.sync("./var/db"); export const db = new sqlite3.Database("./var/db/media.db"); +/**Inserts a new user to the database */ export function createUser(username: string, password: string) { let salt = crypto.randomBytes(16); @@ -17,6 +18,7 @@ export function createUser(username: string, password: string) { ]); } +/**Selects a path for a file given ID */ export function getPath(id: number | string) { return new Promise((resolve, reject) => { let query: string = `SELECT path FROM media WHERE id = ?`; @@ -28,6 +30,7 @@ export function getPath(id: number | string) { }) } +/**Deletes from database given an ID */ export function deleteId(database: string, id: number | string) { return new Promise((resolve, reject) => { let query: string = `DELETE FROM ${database} WHERE id = ?` @@ -39,6 +42,7 @@ export function deleteId(database: string, id: number | string) { }) } +/**Expires a database row given a Date in unix time */ export function expire(database: string, column: string, expiration:number) { return new Promise((resolve, reject) => { let query: string = `SELECT * FROM ${database} WHERE ${column} < ?`; @@ -51,12 +55,14 @@ export function expire(database: string, column: string, expiration:number) { }) } +/**A generic database row */ export interface GenericRow { id? : number | string, username?: string expire? :Date } +/**A row for the media database */ export interface MediaRow { id? : number | string, path: string, @@ -64,12 +70,14 @@ export interface MediaRow { username?: string } +/**Params type for doing work with media database */ export type MediaParams = [ path: string, expire: Date, username?: string ] +/**A row for the user database */ export interface UserRow { id? : Number, username: string, diff --git a/app/types/lib.ts b/app/types/lib.ts index 9723274..84fbe42 100644 --- a/app/types/lib.ts +++ b/app/types/lib.ts @@ -6,12 +6,12 @@ declare global { } } } - +/**Splits a file name into its name and then its extension */ export function extension(str: string){ let file = str.split("/").pop(); return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; } - +/**Type for user data */ export interface User { username: string; id?: string; From b217248293085e1977e105604b69507a9ffc3517 Mon Sep 17 00:00:00 2001 From: waveringana Date: Tue, 13 Dec 2022 17:41:31 +0000 Subject: [PATCH 10/13] linting --- .eslintrc.js | 39 + app/.eslintrc.json | 31 - app/app.ts | 48 +- app/routes/adduser.ts | 12 +- app/routes/auth.ts | 4 +- app/routes/index.ts | 53 +- app/routes/middleware.ts | 39 +- app/types/db.ts | 27 +- app/types/declarations/ffprobepath.d.ts | 1 + app/types/lib.ts | 3 +- app/types/multer.ts | 46 +- package-lock.json | 1327 ++++++++++++++++++----- package.json | 5 +- 13 files changed, 1229 insertions(+), 406 deletions(-) create mode 100644 .eslintrc.js delete mode 100644 app/.eslintrc.json create mode 100644 app/types/declarations/ffprobepath.d.ts diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..9bba566 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,39 @@ +module.exports = { + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended" + ], + "overrides": [ + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "indent": [ + "error", + 2 + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "double" + ], + "semi": [ + "error", + "always" + ] + } +}; diff --git a/app/.eslintrc.json b/app/.eslintrc.json deleted file mode 100644 index 8152ccd..0000000 --- a/app/.eslintrc.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "env": { - "node": true, - "commonjs": true, - "es2021": true - }, - "extends": "eslint:recommended", - "overrides": [ - ], - "parserOptions": { - "ecmaVersion": "latest" - }, - "rules": { - "indent": [ - "error", - "tab" - ], - "linebreak-style": [ - "error", - "unix" - ], - "quotes": [ - "error", - "double" - ], - "semi": [ - "error", - "always" - ] - } -} diff --git a/app/app.ts b/app/app.ts index fda47e7..88cca2c 100644 --- a/app/app.ts +++ b/app/app.ts @@ -1,4 +1,4 @@ -require("dotenv").config(); +import "dotenv"; import express from "express"; import passport from "passport"; @@ -17,20 +17,18 @@ import adduserRouter from "./routes/adduser"; import {db, expire, createUser, MediaRow} from "./types/db"; -let app = express(); -let server = http.createServer(app); -let port = normalizePort(process.env.EBPORT || "3000"); +const app = express(); +const server = http.createServer(app); +const port = normalizePort(process.env.EBPORT || "3000"); function normalizePort(val: string) { - var port = parseInt(val, 10); + const port = parseInt(val, 10); if (isNaN(port)) { - // named pipe return val; } if (port >= 0) { - // port number return port; } @@ -47,7 +45,7 @@ function onError(error: any) { throw error; } - var bind = typeof port === "string" + const bind = typeof port === "string" ? "Pipe " + port : "Port " + port; @@ -69,30 +67,33 @@ function onError(error: any) { db.serialize(function() { // create the database schema for the embedders app db.run("CREATE TABLE IF NOT EXISTS users ( \ - id INTEGER PRIMARY KEY, \ - username TEXT UNIQUE, \ - hashed_password BLOB, \ - salt BLOB \ - )"); + id INTEGER PRIMARY KEY, \ + username TEXT UNIQUE, \ + hashed_password BLOB, \ + salt BLOB \ + )"); db.run("CREATE TABLE IF NOT EXISTS media ( \ - id INTEGER PRIMARY KEY, \ - path TEXT NOT NULL, \ - expire INTEGER \, \ - username TEXT \ - )"); + id INTEGER PRIMARY KEY, \ + path TEXT NOT NULL, \ + expire INTEGER, \ + username TEXT \ + )"); db.run("ALTER TABLE media ADD COLUMN username TEXT", (err) => { - if(err) - return; + if(err) return; }); //TODO, version new DB, run this command when detecting old DB + + db.run("ALTER TABLE users ADD COLUMN username TEXT", (err) => { + if (err) return; + }); createUser("admin", process.env.EBPASS || "changeme"); }); function onListening() { - var addr = server.address(); - var bind = typeof addr === "string" + const addr = server.address(); + const bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port; console.log("Listening on " + bind); @@ -116,11 +117,10 @@ app.use(session({ secret: process.env.EBSECRET || "pleasechangeme", resave: false, saveUninitialized: false, - // @ts-ignore store: new SQLiteStore({ db: "sessions.db", dir: "./var/db" - }) + }) as session.Store })); app.use(passport.authenticate("session")); diff --git a/app/routes/adduser.ts b/app/routes/adduser.ts index 64cee7c..e9a32dd 100644 --- a/app/routes/adduser.ts +++ b/app/routes/adduser.ts @@ -1,7 +1,7 @@ -import type {RequestHandler as Middleware, Router, Request, Response, NextFunction} from 'express'; +import type {RequestHandler as Middleware, Router, Request, Response, NextFunction} from "express"; import express from "express"; -import {db, createUser} from "../types/db"; +import {createUser} from "../types/db"; const router: Router = express.Router(); /**Middleware to check if a user is actually signed in */ @@ -14,16 +14,16 @@ const adminCheck: Middleware = (req: Request, res: Response, next: NextFunction) } next(); -} +}; -router.get("/adduser", adminCheck, (req: Request, res: Response, next: NextFunction) => { +router.get("/adduser", adminCheck, (req: Request, res: Response) => { res.locals.filter = null; res.render("adduser", { user: req.user }); }); -router.post("/adduser", adminCheck, (req: Request, res: Response, next: NextFunction) => { +router.post("/adduser", adminCheck, (req: Request, res: Response) => { createUser(req.body.username, req.body.password); - res.redirect('/'); + res.redirect("/"); }); export default router; \ No newline at end of file diff --git a/app/routes/auth.ts b/app/routes/auth.ts index 37c0b56..9bee3cf 100644 --- a/app/routes/auth.ts +++ b/app/routes/auth.ts @@ -3,10 +3,10 @@ import express from "express"; import passport from "passport"; import {Strategy as LocalStrategy} from "passport-local"; -import {User} from "../types/lib" +import {User} from "../types/lib"; import {db, UserRow} from "../types/db"; -let router = express.Router(); +const router = express.Router(); passport.use(new LocalStrategy(function verify(username, password, cb) { db.get("SELECT * FROM users WHERE username = ?", [username], function(err: Error, row: UserRow) { diff --git a/app/routes/index.ts b/app/routes/index.ts index 6308897..b9063b5 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -1,10 +1,9 @@ -import type {RequestHandler as Middleware, Request, Response, NextFunction} from 'express'; +import type {RequestHandler as Middleware, Request, Response, NextFunction} from "express"; import multer from "multer"; import express from "express"; import ffmpeg from "fluent-ffmpeg"; import imageProbe from "probe-image-size"; import ffmpegpath from "@ffmpeg-installer/ffmpeg"; -// @ts-ignore import ffprobepath from "@ffprobe-installer/ffprobe"; ffmpeg.setFfmpegPath(ffmpegpath.path); @@ -14,19 +13,19 @@ import fs from "fs"; import {extension} from "../types/lib"; import {db, MediaRow, getPath, deleteId} from "../types/db"; -import {fileStorage, fileFilter} from "../types/multer"; +import {fileStorage} from "../types/multer"; import {checkAuth, checkSharexAuth, createEmbedData, handleUpload} from "./middleware"; -let upload = multer({ storage: fileStorage /**, fileFilter: fileFilter**/ }); //maybe make this a env variable? +const upload = multer({ storage: fileStorage /**, fileFilter: fileFilter**/ }); //maybe make this a env variable? /**Middleware to grab media from media database */ const fetchMedia: Middleware = (req, res, next) => { - let admin: boolean = req.user.username == "admin" ? true : false + const admin: boolean = req.user.username == "admin" ? true : false; /**Check if the user is an admin, if so, show all posts from all users */ - let query: string = admin == true ? "SELECT * FROM media" : `SELECT * FROM media WHERE username = '${req.user.username}'`; + const query: string = admin == true ? "SELECT * FROM media" : `SELECT * FROM media WHERE username = '${req.user.username}'`; db.all(query, (err:Error, rows: []) => { if (err) return next(err); - let files = rows.map((row: MediaRow)=> { + const files = rows.map((row: MediaRow)=> { return { id: row.id, path: row.path, @@ -39,13 +38,13 @@ const fetchMedia: Middleware = (req, res, next) => { res.locals.Count = files.length; next(); }); -} +}; -let router = express.Router(); +const router = express.Router(); router.get("/", (req: Request, res: Response, next: NextFunction) => { if (!req.user) - return res.render("home") + return res.render("home"); next(); }, fetchMedia, (req: Request, res: Response) => { res.locals.filter = null; @@ -53,46 +52,46 @@ router.get("/", (req: Request, res: Response, next: NextFunction) => { }); router.get("/gifv/:file", async (req: Request, res: Response, next: NextFunction) => { - let url = `${req.protocol}://${req.get("host")}/uploads/${req.params.file}`; + const url = `${req.protocol}://${req.get("host")}/uploads/${req.params.file}`; let width; let height; - let nameAndExtension = extension(`uploads/${req.params.file}`); + const nameAndExtension = extension(`uploads/${req.params.file}`); if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".mov" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".gif") { ffmpeg() - .input(`uploads/${req.params.file}`) - .inputFormat(nameAndExtension[1].substring(1)) - .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { - if (err) return next(err); - width = data.streams[0].width; - height = data.streams[0].height; - return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); - }); + .input(`uploads/${req.params.file}`) + .inputFormat(nameAndExtension[1].substring(1)) + .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { + if (err) return next(err); + width = data.streams[0].width; + height = data.streams[0].height; + return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); + }); } else { - let imageData = await imageProbe(fs.createReadStream(`uploads/${req.params.file}`)); + const imageData = await imageProbe(fs.createReadStream(`uploads/${req.params.file}`)); return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: imageData.width, height: imageData.height }); } }); router.post("/", [checkAuth, upload.array("fileupload"), createEmbedData, handleUpload], (req: Request, res: Response) => { - res.redirect("/") + res.redirect("/"); }); router.post("/sharex", [checkSharexAuth, upload.single("fileupload"), createEmbedData, handleUpload], (req: Request, res: Response) => { return res.send(`${req.protocol}://${req.get("host")}/uploads/${req.file.filename}`); }); -router.post("/:id(\\d+)/delete", [checkAuth], async (req: Request, res: Response, next: NextFunction) => { - const path: any = await getPath(req.params.id) +router.post("/:id(\\d+)/delete", [checkAuth], async (req: Request, res: Response) => { + const path: any = await getPath(req.params.id); fs.unlink(`uploads/${path.path}`, async (err) => { if (err && err.errno == -4058) { await deleteId("media", req.params.id).then(()=> { return res.redirect("/"); - }) + }); } await deleteId("media", req.params.id).then(()=> { return res.redirect("/"); - }) - }) + }); + }); }); export default router; \ No newline at end of file diff --git a/app/routes/middleware.ts b/app/routes/middleware.ts index 9be3789..65adabe 100644 --- a/app/routes/middleware.ts +++ b/app/routes/middleware.ts @@ -1,8 +1,7 @@ -import type {RequestHandler as Middleware, Router, Request, Response, NextFunction} from 'express'; +import type {RequestHandler as Middleware, NextFunction} from "express"; import ffmpeg from "fluent-ffmpeg"; import ffmpegpath from "@ffmpeg-installer/ffmpeg"; -// @ts-ignore import ffprobepath from "@ffprobe-installer/ffprobe"; ffmpeg.setFfmpegPath(ffmpegpath.path); ffmpeg.setFfprobePath(ffprobepath.path); @@ -18,11 +17,11 @@ export const checkAuth: Middleware = (req, res, next) => { return res.status(401); } next(); -} +}; /**Checks shareX auth key */ export const checkSharexAuth: Middleware = (req, res, next) => { - let auth = process.env.EBAPI_KEY || process.env.EBPASS || "pleaseSetAPI_KEY"; + const auth = process.env.EBAPI_KEY || process.env.EBPASS || "pleaseSetAPI_KEY"; let key = null; if (req.headers["key"]) { @@ -35,18 +34,18 @@ export const checkSharexAuth: Middleware = (req, res, next) => { return res.status(401).send("{success: false, message: '\"'Invalid key\", fix: \"Provide a valid key\"}"); } - let shortKey = key.substr(0, 3) + "..."; + const shortKey = key.substr(0, 3) + "..."; console.log(`Authenicated user with key: ${shortKey}`); next(); -} +}; /**Creates oembed json file for embed metadata */ export const createEmbedData: Middleware = (req, res, next) => { - const files = req.files as Express.Multer.File[] - for (let file in files) { - let nameAndExtension = extension(files[file].originalname); - let oembed = { + const files = req.files as Express.Multer.File[]; + for (const file in files) { + const nameAndExtension = extension(files[file].originalname); + const oembed = { type: "video", version: "1.0", provider_name: "embedder", @@ -63,12 +62,12 @@ export const createEmbedData: Middleware = (req, res, next) => { }); } next(); -} +}; /** Converts video to gif and vice versa using ffmpeg */ export const convert: Middleware = (req, res, next) => { - const files = req.files as Express.Multer.File[] - for (let file in files) { - let nameAndExtension = extension(files[file].originalname); + const files = req.files as Express.Multer.File[]; + for (const file in files) { + const nameAndExtension = extension(files[file].originalname); if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".mkv" || nameAndExtension[1] == ".avi" || nameAndExtension[1] == ".mov") { console.log("Converting " + nameAndExtension[0] + nameAndExtension[1] + " to gif"); ffmpeg() @@ -101,7 +100,7 @@ export const convert: Middleware = (req, res, next) => { .run(); } } -} +}; /**Middleware for handling uploaded files. Inserts it into the database */ export const handleUpload: Middleware = (req, res, next) => { if (!req.file && !req.files) { @@ -110,25 +109,25 @@ export const handleUpload: Middleware = (req, res, next) => { } const files = (req.files) ? req.files as Express.Multer.File[] : req.file; //Check if a single file was uploaded or multiple - const username = (req.user) ? req.user.username : "sharex" //if no username was provided, we can presume that it is sharex + const username = (req.user) ? req.user.username : "sharex"; //if no username was provided, we can presume that it is sharex const expireDate: Date = (req.body.expire) ? new Date(Date.now() + (req.body.expire * 24 * 60 * 60 * 1000)) : null; if (files instanceof Array) { - for (let file in files) { + for (const file in files) { insertToDB(files[file].filename, expireDate, username, next); } } else insertToDB(files.filename, expireDate, username, next); next(); -} +}; /**Inserts into media database */ function insertToDB (filename: string, expireDate: Date, username: string, next: NextFunction) { - let params: MediaParams = [ + const params: MediaParams = [ filename, expireDate, username - ] + ]; db.run("INSERT INTO media (path, expire, username) VALUES (?, ?, ?)", params, function (err) { if (err) { diff --git a/app/types/db.ts b/app/types/db.ts index b29d674..0b07c8d 100644 --- a/app/types/db.ts +++ b/app/types/db.ts @@ -9,7 +9,7 @@ export const db = new sqlite3.Database("./var/db/media.db"); /**Inserts a new user to the database */ export function createUser(username: string, password: string) { - let salt = crypto.randomBytes(16); + const salt = crypto.randomBytes(16); db.run("INSERT OR IGNORE INTO users (username, hashed_password, salt) VALUES (?, ?, ?)", [ username, @@ -21,38 +21,39 @@ export function createUser(username: string, password: string) { /**Selects a path for a file given ID */ export function getPath(id: number | string) { return new Promise((resolve, reject) => { - let query: string = `SELECT path FROM media WHERE id = ?`; + const query = "SELECT path FROM media WHERE id = ?"; db.get(query, [id], (err: Error, path: object) => { - if (err) {reject(err)} - resolve(path) + if (err) {reject(err);} + resolve(path); }); - }) + }); } /**Deletes from database given an ID */ export function deleteId(database: string, id: number | string) { return new Promise((resolve, reject) => { - let query: string = `DELETE FROM ${database} WHERE id = ?` + const query = `DELETE FROM ${database} WHERE id = ?`; db.run(query, [id], (err: Error) => { if (err) {reject(err); return;} - resolve(null) - }) - }) + resolve(null); + }); + }); } /**Expires a database row given a Date in unix time */ export function expire(database: string, column: string, expiration:number) { return new Promise((resolve, reject) => { - let query: string = `SELECT * FROM ${database} WHERE ${column} < ?`; + const query = `SELECT * FROM ${database} WHERE ${column} < ?`; db.each(query, [expiration], async (err: Error, row: GenericRow) => { - await deleteId(database, row.id) + if (err) reject(err); + await deleteId(database, row.id); resolve(null); }); - }) + }); } /**A generic database row */ @@ -79,7 +80,7 @@ export type MediaParams = [ /**A row for the user database */ export interface UserRow { - id? : Number, + id? : number, username: string, hashed_password: any, salt: any diff --git a/app/types/declarations/ffprobepath.d.ts b/app/types/declarations/ffprobepath.d.ts new file mode 100644 index 0000000..7ffa7c5 --- /dev/null +++ b/app/types/declarations/ffprobepath.d.ts @@ -0,0 +1 @@ +declare module "@ffprobe-installer/ffprobe"; \ No newline at end of file diff --git a/app/types/lib.ts b/app/types/lib.ts index 84fbe42..d619ab6 100644 --- a/app/types/lib.ts +++ b/app/types/lib.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-namespace */ declare global { namespace Express { interface User { @@ -8,7 +9,7 @@ declare global { } /**Splits a file name into its name and then its extension */ export function extension(str: string){ - let file = str.split("/").pop(); + const file = str.split("/").pop(); return [file.substr(0,file.lastIndexOf(".")),file.substr(file.lastIndexOf("."),file.length).toLowerCase()]; } /**Type for user data */ diff --git a/app/types/multer.ts b/app/types/multer.ts index 98c01ef..64f4568 100644 --- a/app/types/multer.ts +++ b/app/types/multer.ts @@ -1,8 +1,8 @@ -import {Request} from 'express'; -import multer, {FileFilterCallback} from 'multer'; +import {Request} from "express"; +import multer, {FileFilterCallback} from "multer"; -import {db, MediaRow} from './db' -import {extension} from './lib' +import {db, MediaRow} from "./db"; +import {extension} from "./lib"; export type DestinationCallback = (error: Error | null, destination: string) => void export type FileNameCallback = (error: Error | null, filename: string) => void @@ -20,15 +20,15 @@ export const fileStorage = multer.diskStorage({ file: Express.Multer.File, callback: FileNameCallback ): void => { - let nameAndExtension = extension(file.originalname); + const nameAndExtension = extension(file.originalname); console.log(`Uploading ${file}`); db.all("SELECT * FROM media WHERE path = ?", [nameAndExtension[0] + nameAndExtension[1]], (err: Error, exists: []) => { if (err) { - console.log(err) - callback(err, null) + console.log(err); + callback(err, null); } if (exists.length != 0) { - let suffix = new Date().getTime() / 1000; + const suffix = new Date().getTime() / 1000; if (request.body.title == "" || request.body.title == null || request.body.title == undefined) { callback(null, nameAndExtension[0] + "-" + suffix + nameAndExtension[1]); @@ -46,27 +46,27 @@ export const fileStorage = multer.diskStorage({ } }); -export let allowedMimeTypes = [ - "image/png", - "image/jpg", - "image/jpeg", - "image/gif", - "image/webp", - "video/mp4", - "video/mov", - "video/webm", - "audio/mpeg", - "audio/ogg" +export const allowedMimeTypes = [ + "image/png", + "image/jpg", + "image/jpeg", + "image/gif", + "image/webp", + "video/mp4", + "video/mov", + "video/webm", + "audio/mpeg", + "audio/ogg" ]; - + export const fileFilter = ( request: Request, file: Express.Multer.File, callback: FileFilterCallback ): void => { if (allowedMimeTypes.includes(file.mimetype)) { - callback(null, true) + callback(null, true); } else { - callback(null, false) + callback(null, false); } -} \ No newline at end of file +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e071c71..f129fd9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,7 @@ "cookie-parser": "~1.4.4", "dotenv": "^8.6.0", "ejs": "^3.1.8", - "express": "~4.16.1", + "express": "^4.18.2", "express-session": "^1.17.3", "fluent-ffmpeg": "^2.1.2", "http-errors": "~1.6.3", @@ -40,7 +40,8 @@ "@types/passport": "^1.0.11", "@types/passport-local": "^1.0.34", "@types/probe-image-size": "^7.2.0", - "@typescript-eslint/parser": "^5.45.0", + "@typescript-eslint/eslint-plugin": "^5.46.1", + "@typescript-eslint/parser": "^5.46.1", "copyfiles": "^2.4.1", "cypress": "^11.1.0", "cypress-file-upload": "^5.0.8", @@ -694,6 +695,12 @@ "@types/node": "*" } }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -785,6 +792,12 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", @@ -829,15 +842,71 @@ "@types/node": "*" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.45.0.tgz", - "integrity": "sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz", + "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.45.0", - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/type-utils": "5.46.1", + "@typescript-eslint/utils": "5.46.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz", + "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", "debug": "^4.3.4" }, "engines": { @@ -880,13 +949,13 @@ "dev": true }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz", - "integrity": "sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz", + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/visitor-keys": "5.45.0" + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -896,10 +965,60 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz", + "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/utils": "5.46.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "node_modules/@typescript-eslint/types": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.45.0.tgz", - "integrity": "sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz", + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -910,13 +1029,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz", - "integrity": "sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz", + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/visitor-keys": "5.45.0", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -959,13 +1078,61 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz", - "integrity": "sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==", + "node_modules/@typescript-eslint/utils": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz", + "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.45.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz", + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.46.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1377,6 +1544,84 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/body-parser/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1447,6 +1692,14 @@ "node": ">=10.16.0" } }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -1485,6 +1738,18 @@ "node": ">=6" } }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1761,13 +2026,35 @@ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, "engines": { "node": ">= 0.6" } }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -2022,9 +2309,13 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } }, "node_modules/detect-libc": { "version": "2.0.1", @@ -2446,38 +2737,39 @@ } }, "node_modules/express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "accepts": "~1.3.5", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, @@ -2538,67 +2830,88 @@ } ] }, - "node_modules/express/node_modules/body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", - "dependencies": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "engines": { "node": ">= 0.6" } }, - "node_modules/express/node_modules/iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/express/node_modules/raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "node_modules/express/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.8" } }, + "node_modules/express/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/express/node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/express/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -2797,22 +3110,30 @@ } }, "node_modules/finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -2958,8 +3279,7 @@ "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "node_modules/gauge": { "version": "3.0.2", @@ -2989,6 +3309,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -3119,7 +3452,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "dependencies": { "function-bind": "^1.1.1" }, @@ -3135,6 +3467,17 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -3884,11 +4227,14 @@ } }, "node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" + }, + "engines": { + "node": ">=4" } }, "node_modules/mime-db": { @@ -4076,6 +4422,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/needle": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", @@ -4296,10 +4648,18 @@ "node": ">=0.10.0" } }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -4645,9 +5005,10 @@ } }, "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, "engines": { "node": ">=0.6" } @@ -4688,6 +5049,61 @@ "node": ">= 0.6" } }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/raw-body/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -4883,37 +5299,83 @@ } }, "node_modules/send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { "node": ">= 0.8.0" @@ -4950,6 +5412,19 @@ "node": ">=8" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -5337,6 +5812,14 @@ "node": ">=8.0" } }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -6319,6 +6802,12 @@ "@types/node": "*" } }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -6410,6 +6899,12 @@ "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", @@ -6454,15 +6949,49 @@ "@types/node": "*" } }, - "@typescript-eslint/parser": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.45.0.tgz", - "integrity": "sha512-brvs/WSM4fKUmF5Ot/gEve6qYiCMjm6w4HkHPfS6ZNmxTS0m0iNN4yOChImaCkqc1hRwFGqUyanMXuGal6oyyQ==", + "@typescript-eslint/eslint-plugin": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.46.1.tgz", + "integrity": "sha512-YpzNv3aayRBwjs4J3oz65eVLXc9xx0PDbIRisHj+dYhvBn02MjYOD96P8YGiWEIFBrojaUjxvkaUpakD82phsA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.45.0", - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/type-utils": "5.46.1", + "@typescript-eslint/utils": "5.46.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.46.1.tgz", + "integrity": "sha512-RelQ5cGypPh4ySAtfIMBzBGyrNerQcmfA1oJvPj5f+H4jI59rl9xxpn4bonC0tQvUKOEN7eGBFWxFLK3Xepneg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", "debug": "^4.3.4" }, "dependencies": { @@ -6484,29 +7013,58 @@ } }, "@typescript-eslint/scope-manager": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.45.0.tgz", - "integrity": "sha512-noDMjr87Arp/PuVrtvN3dXiJstQR1+XlQ4R1EvzG+NMgXi8CuMCXpb8JqNtFHKceVSQ985BZhfRdowJzbv4yKw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.46.1.tgz", + "integrity": "sha512-iOChVivo4jpwUdrJZyXSMrEIM/PvsbbDOX1y3UCKjSgWn+W89skxWaYXACQfxmIGhPVpRWK/VWPYc+bad6smIA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/visitor-keys": "5.45.0" + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.46.1.tgz", + "integrity": "sha512-V/zMyfI+jDmL1ADxfDxjZ0EMbtiVqj8LUGPAGyBkXXStWmCUErMpW873zEHsyguWCuq2iN4BrlWUkmuVj84yng==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.46.1", + "@typescript-eslint/utils": "5.46.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "@typescript-eslint/types": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.45.0.tgz", - "integrity": "sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.46.1.tgz", + "integrity": "sha512-Z5pvlCaZgU+93ryiYUwGwLl9AQVB/PQ1TsJ9NZ/gHzZjN7g9IAn6RSDkpCV8hqTwAiaj6fmCcKSQeBPlIpW28w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.0.tgz", - "integrity": "sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.46.1.tgz", + "integrity": "sha512-j9W4t67QiNp90kh5Nbr1w92wzt+toiIsaVPnEblB2Ih2U9fqBTyqV9T3pYWZBRt6QoMh/zVWP59EpuCjc4VRBg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.45.0", - "@typescript-eslint/visitor-keys": "5.45.0", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/visitor-keys": "5.46.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6531,13 +7089,47 @@ } } }, - "@typescript-eslint/visitor-keys": { - "version": "5.45.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.0.tgz", - "integrity": "sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==", + "@typescript-eslint/utils": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.46.1.tgz", + "integrity": "sha512-RBdBAGv3oEpFojaCYT4Ghn4775pdjvwfDOfQ2P6qzNVgQOVrnSPe5/Pb88kv7xzYQjoio0eKHKB9GJ16ieSxvA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.45.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.46.1", + "@typescript-eslint/types": "5.46.1", + "@typescript-eslint/typescript-estree": "5.46.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.46.1.tgz", + "integrity": "sha512-jczZ9noovXwy59KjRTk1OftT78pwygdcmCuBf8yMoWt/8O8l+6x2LSEze0E4TeepXK4MezW3zGSyoDRZK7Y9cg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.46.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -6829,6 +7421,67 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -6876,6 +7529,11 @@ "streamsearch": "^1.1.0" } }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, "cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", @@ -6908,6 +7566,15 @@ "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -7118,9 +7785,19 @@ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } }, "content-type": { "version": "1.0.4", @@ -7325,9 +8002,9 @@ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, "detect-libc": { "version": "2.0.1", @@ -7648,87 +8325,92 @@ } }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "requires": { - "accepts": "~1.3.5", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "1.2.0", "fresh": "0.5.2", + "http-errors": "2.0.0", "merge-descriptors": "1.0.1", "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" + "side-channel": "^1.0.4" } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -7927,17 +8609,24 @@ } }, "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", "unpipe": "~1.0.0" + }, + "dependencies": { + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "find-up": { @@ -8047,8 +8736,7 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "gauge": { "version": "3.0.2", @@ -8072,6 +8760,16 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, "get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -8169,7 +8867,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -8179,6 +8876,11 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -8740,9 +9442,9 @@ } }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { "version": "1.52.0", @@ -8881,6 +9583,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "needle": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", @@ -9057,10 +9765,15 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "requires": { "ee-first": "1.1.1" } @@ -9315,9 +10028,10 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true }, "queue-microtask": { "version": "1.2.3", @@ -9335,6 +10049,51 @@ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -9470,34 +10229,73 @@ } }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.18.0" } }, "set-blocking": { @@ -9525,6 +10323,16 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -9812,6 +10620,11 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", diff --git a/package.json b/package.json index 612526a..5cbfe62 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "cookie-parser": "~1.4.4", "dotenv": "^8.6.0", "ejs": "^3.1.8", - "express": "~4.16.1", + "express": "^4.18.2", "express-session": "^1.17.3", "fluent-ffmpeg": "^2.1.2", "http-errors": "~1.6.3", @@ -59,7 +59,8 @@ "@types/passport": "^1.0.11", "@types/passport-local": "^1.0.34", "@types/probe-image-size": "^7.2.0", - "@typescript-eslint/parser": "^5.45.0", + "@typescript-eslint/eslint-plugin": "^5.46.1", + "@typescript-eslint/parser": "^5.46.1", "copyfiles": "^2.4.1", "cypress": "^11.1.0", "cypress-file-upload": "^5.0.8", From 119ea245979864739d2eb41bf0f095c89f983590 Mon Sep 17 00:00:00 2001 From: waveringana Date: Tue, 13 Dec 2022 18:38:28 +0000 Subject: [PATCH 11/13] DB versioning --- app/app.ts | 54 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/app/app.ts b/app/app.ts index 88cca2c..73bbe38 100644 --- a/app/app.ts +++ b/app/app.ts @@ -1,3 +1,5 @@ +const version = 1.9; + import "dotenv"; import express from "express"; @@ -65,11 +67,37 @@ function onError(error: any) { } db.serialize(function() { + // Check if there is an existing DB or not + // Check if the database is empty + db.get("SELECT COUNT(*) as count FROM sqlite_master WHERE type='table'", function(err, row) { + if (row.count === 0) createDatabase; + }); + + //Update old databases, Current version is 2 + 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"); + //updateDatabase(); + } else { + //Old database is version 1 without username support for images and expire support for users + //Because ver 1 does not have user_version set, we can safely assume that it is ver 1 + updateDatabase(1, 2); + } + }); + + createUser("admin", process.env.EBPASS || "changeme"); +}); + +function createDatabase(version: number){ // create the database schema for the embedders app + console.log("Creating database"); + db.run("CREATE TABLE IF NOT EXISTS users ( \ id INTEGER PRIMARY KEY, \ username TEXT UNIQUE, \ hashed_password BLOB, \ + expire INTEGER, \ salt BLOB \ )"); @@ -80,22 +108,32 @@ db.serialize(function() { username TEXT \ )"); - db.run("ALTER TABLE media ADD COLUMN username TEXT", (err) => { - if(err) return; - }); //TODO, version new DB, run this command when detecting old DB + db.run(`PRAGMA user_version = ${version}`); +} - db.run("ALTER TABLE users ADD COLUMN username TEXT", (err) => { - if (err) return; - }); +/**Updates old Database schema to new */ +function updateDatabase(oldVersion: number, newVersion: number){ + if (oldVersion == 1) { + console.log(`Updating database from ${oldVersion} to ${newVersion}`); + db.run("PRAGMA user_version = 2", (err) => { + if(err) return; + }); + db.run("ALTER TABLE media ADD COLUMN username TEXT", (err) => { + if(err) return; + }); - createUser("admin", process.env.EBPASS || "changeme"); -}); + db.run("ALTER TABLE users ADD COLUMN expire TEXT", (err) => { + if(err) return; + }); + } +} function onListening() { const addr = server.address(); const bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port; + console.log("Embedder version: " + version); console.log("Listening on " + bind); } From 8cfb867499b3f88623b93dd2b3c31db90f5aa677 Mon Sep 17 00:00:00 2001 From: waveringana Date: Tue, 13 Dec 2022 19:51:36 +0000 Subject: [PATCH 12/13] fix --- app/app.ts | 62 +++++++++---------------------------------------- app/types/db.ts | 56 +++++++++++++++++++++++++++++++++++++++----- 2 files changed, 61 insertions(+), 57 deletions(-) diff --git a/app/app.ts b/app/app.ts index 73bbe38..74d914a 100644 --- a/app/app.ts +++ b/app/app.ts @@ -17,7 +17,8 @@ import authRouter from "./routes/auth"; import indexRouter from "./routes/index"; import adduserRouter from "./routes/adduser"; -import {db, expire, createUser, MediaRow} from "./types/db"; +import {db, expire, createDatabase, updateDatabase, MediaRow} from "./types/db"; +import e from "express"; const app = express(); const server = http.createServer(app); @@ -66,66 +67,25 @@ function onError(error: any) { } } -db.serialize(function() { - // Check if there is an existing DB or not - // Check if the database is empty - db.get("SELECT COUNT(*) as count FROM sqlite_master WHERE type='table'", function(err, row) { - if (row.count === 0) createDatabase; - }); - //Update old databases, Current version is 2 +// Check if there is an existing DB or not +// Old database is version 1 without username support for images and expire support for users +// Because ver 1 does not have user_version set, we can safely assume that it is ver 1 +db.get("SELECT * FROM sqlite_master WHERE name ='users' and type='table'", async (err, row) => { + if (!row) createDatabase(2); + else updateDBfrom1to2(); +}); + +function updateDBfrom1to2 () { 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"); //updateDatabase(); } else { - //Old database is version 1 without username support for images and expire support for users - //Because ver 1 does not have user_version set, we can safely assume that it is ver 1 updateDatabase(1, 2); } }); - - createUser("admin", process.env.EBPASS || "changeme"); -}); - -function createDatabase(version: number){ - // create the database schema for the embedders app - console.log("Creating database"); - - db.run("CREATE TABLE IF NOT EXISTS users ( \ - id INTEGER PRIMARY KEY, \ - username TEXT UNIQUE, \ - hashed_password BLOB, \ - expire INTEGER, \ - salt BLOB \ - )"); - - db.run("CREATE TABLE IF NOT EXISTS media ( \ - id INTEGER PRIMARY KEY, \ - path TEXT NOT NULL, \ - expire INTEGER, \ - username TEXT \ - )"); - - db.run(`PRAGMA user_version = ${version}`); -} - -/**Updates old Database schema to new */ -function updateDatabase(oldVersion: number, newVersion: number){ - if (oldVersion == 1) { - console.log(`Updating database from ${oldVersion} to ${newVersion}`); - db.run("PRAGMA user_version = 2", (err) => { - if(err) return; - }); - db.run("ALTER TABLE media ADD COLUMN username TEXT", (err) => { - if(err) return; - }); - - db.run("ALTER TABLE users ADD COLUMN expire TEXT", (err) => { - if(err) return; - }); - } } function onListening() { diff --git a/app/types/db.ts b/app/types/db.ts index 0b07c8d..87fd102 100644 --- a/app/types/db.ts +++ b/app/types/db.ts @@ -7,15 +7,59 @@ mkdirp.sync("./var/db"); export const db = new sqlite3.Database("./var/db/media.db"); +export function createDatabase(version: number){ + // create the database schema for the embedders app + console.log("Creating database"); + + db.run("CREATE TABLE IF NOT EXISTS users ( \ + id INTEGER PRIMARY KEY, \ + username TEXT UNIQUE, \ + hashed_password BLOB, \ + expire INTEGER, \ + salt BLOB \ + )", () => createUser("admin", process.env.EBPASS || "changeme")); + + db.run("CREATE TABLE IF NOT EXISTS media ( \ + id INTEGER PRIMARY KEY, \ + path TEXT NOT NULL, \ + expire INTEGER, \ + username TEXT \ + )"); + + db.run(`PRAGMA user_version = ${version}`); +} + +/**Updates old Database schema to new */ +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) => { + if(err) return; + }); + db.run("ALTER TABLE media ADD COLUMN username TEXT", (err) => { + if(err) return; + }); + + db.run("ALTER TABLE users ADD COLUMN expire TEXT", (err) => { + if(err) return; + }); + } +} + /**Inserts a new user to the database */ export function createUser(username: string, password: string) { - const salt = crypto.randomBytes(16); + return new Promise((resolve, reject) => { + console.log(`Creating user ${username}`); + const salt = crypto.randomBytes(16); + + db.run("INSERT OR IGNORE INTO users (username, hashed_password, salt) VALUES (?, ?, ?)", [ + username, + crypto.pbkdf2Sync(password, salt, 310000, 32, "sha256"), + salt + ]); - db.run("INSERT OR IGNORE INTO users (username, hashed_password, salt) VALUES (?, ?, ?)", [ - username, - crypto.pbkdf2Sync(password, salt, 310000, 32, "sha256"), - salt - ]); + resolve(null); + }); } /**Selects a path for a file given ID */ From 7d3d0dfd525fb65a2dcfcd3b63eac0ef7b9cbf1f Mon Sep 17 00:00:00 2001 From: waveringana Date: Thu, 15 Dec 2022 04:03:15 +0000 Subject: [PATCH 13/13] fix variable name --- app/app.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/app/app.ts b/app/app.ts index 74d914a..4672266 100644 --- a/app/app.ts +++ b/app/app.ts @@ -18,7 +18,6 @@ import indexRouter from "./routes/index"; import adduserRouter from "./routes/adduser"; import {db, expire, createDatabase, updateDatabase, MediaRow} from "./types/db"; -import e from "express"; const app = express(); const server = http.createServer(app); @@ -68,21 +67,21 @@ function onError(error: any) { } -// Check if there is an existing DB or not -// Old database is version 1 without username support for images and expire support for users -// Because ver 1 does not have user_version set, we can safely assume that it is ver 1 +// 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); - else updateDBfrom1to2(); + else checkVersion(); }); -function updateDBfrom1to2 () { +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"); - //updateDatabase(); + //no future releases yet, and else statement handles version 1 + //updateDatabase(version, 2); } else { + // Because ver 1 does not have user_version set, we can safely assume that it is ver 1 updateDatabase(1, 2); } });