feat: UPLOADER_ASSUME_MIMETYPES (#337)

This commit is contained in:
diced 2023-03-24 17:57:56 -07:00
parent fdc7901eff
commit 556aafaad3
No known key found for this signature in database
GPG key ID: 370BD1BA142842D1
4 changed files with 27 additions and 2 deletions

View file

@ -54,6 +54,7 @@ export interface ConfigUploader {
disabled_extensions: string[];
format_date: string;
default_expiration: string;
assume_mimetypes: boolean;
}
export interface ConfigUrls {

View file

@ -93,6 +93,7 @@ export default function readConfig() {
map('UPLOADER_DISABLED_EXTENSIONS', 'array', 'uploader.disabled_extensions'),
map('UPLOADER_FORMAT_DATE', 'string', 'uploader.format_date'),
map('UPLOADER_DEFAULT_EXPIRATION', 'string', 'uploader.default_expiration'),
map('UPLOADER_ASSUME_MIMETYPES', 'boolean', 'uploader.assume_mimetypes'),
map('URLS_ROUTE', 'string', 'urls.route'),
map('URLS_LENGTH', 'number', 'urls.length'),

View file

@ -92,6 +92,7 @@ const validator = s.object({
disabled_extensions: s.string.array.default([]),
format_date: s.string.default('YYYY-MM-DD_HH:mm:ss'),
default_expiration: s.string.optional.default(null),
assume_mimetypes: s.boolean.default(false),
})
.default({
default_format: 'RANDOM',
@ -103,6 +104,7 @@ const validator = s.object({
disabled_extensions: [],
format_date: 'YYYY-MM-DD_HH:mm:ss',
default_expiration: null,
assume_mimetypes: false,
}),
urls: s
.object({

View file

@ -6,6 +6,7 @@ import { sendUpload } from 'lib/discord';
import formatFileName, { NameFormat, NameFormats } from 'lib/format';
import Logger from 'lib/logger';
import { NextApiReq, NextApiRes, withZipline } from 'lib/middleware/withZipline';
import { guess } from 'lib/mimes';
import prisma from 'lib/prisma';
import { createInvisImage, hashPassword } from 'lib/util';
import { parseExpiry } from 'lib/utils/client';
@ -36,7 +37,14 @@ async function handler(req: NextApiReq, res: NextApiRes) {
});
});
const response: { files: string[]; expiresAt?: Date; removed_gps?: boolean } = { files: [] };
const response: {
files: string[];
expiresAt?: Date;
removed_gps?: boolean;
assumed_mimetype?: string | boolean;
} = {
files: [],
};
const expiresAt = req.headers['expires-at'] as string;
let expiry: Date;
@ -249,12 +257,25 @@ async function handler(req: NextApiReq, res: NextApiRes) {
password = await hashPassword(req.headers.password as string);
}
let mimetype = file.mimetype;
if (file.mimetype === 'application/octet-stream' && zconfig.uploader.assume_mimetypes) {
const ext = file.originalname.split('.').pop();
const mime = await guess(ext);
if (!mime) response.assumed_mimetype = false;
else {
response.assumed_mimetype = mime;
mimetype = mime;
}
}
const compressionUsed = imageCompressionPercent && file.mimetype.startsWith('image/');
let invis: InvisibleFile;
const fileUpload = await prisma.file.create({
data: {
name: `${fileName}${compressionUsed ? '.jpg' : `${ext ? '.' : ''}${ext}`}`,
mimetype: req.headers.uploadtext ? 'text/plain' : compressionUsed ? 'image/jpeg' : file.mimetype,
mimetype: req.headers.uploadtext ? 'text/plain' : compressionUsed ? 'image/jpeg' : mimetype,
userId: user.id,
embed: !!req.headers.embed,
password,