fix sharex

This commit is contained in:
waveringana 2022-12-07 16:30:39 +00:00
parent 5290f4e960
commit 52b1aeea98
12 changed files with 80 additions and 49 deletions

37
app/types/db.ts Normal file
View file

@ -0,0 +1,37 @@
import sqlite3 from "sqlite3";
import mkdirp from "mkdirp";
import crypto from "crypto";
mkdirp.sync("./uploads");
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
]);
}
export interface MediaRow {
id? : Number,
path: String,
expire: Date,
username?: String
}
export type MediaParams = [
path: String,
expire: Date,
username?: String
]
export interface UserRow {
id? : Number,
username: String,
hashed_password: any,
salt: any
}

18
app/types/lib.ts Normal file
View file

@ -0,0 +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;
}

72
app/types/multer.ts Normal file
View file

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