feat: UPLOADER_ASSUME_MIMETYPES (#337)
This commit is contained in:
parent
fdc7901eff
commit
556aafaad3
4 changed files with 27 additions and 2 deletions
|
@ -54,6 +54,7 @@ export interface ConfigUploader {
|
|||
disabled_extensions: string[];
|
||||
format_date: string;
|
||||
default_expiration: string;
|
||||
assume_mimetypes: boolean;
|
||||
}
|
||||
|
||||
export interface ConfigUrls {
|
||||
|
|
|
@ -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'),
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue