mirror of
https://github.com/versia-pub/server.git
synced 2026-03-13 22:09:16 +01:00
Fix media code, clean up old types
This commit is contained in:
parent
852efaea50
commit
0e4d6b401c
34 changed files with 137 additions and 1204 deletions
|
|
@ -3,12 +3,16 @@ import { userRelations, userToAPI } from "~database/entities/User";
|
|||
import { apiRoute, applyConfig } from "@api";
|
||||
import { sanitize } from "isomorphic-dompurify";
|
||||
import { sanitizeHtml } from "@sanitization";
|
||||
import { uploadFile } from "~classes/media";
|
||||
import ISO6391 from "iso-639-1";
|
||||
import { parseEmojis } from "~database/entities/Emoji";
|
||||
import { client } from "~database/datasource";
|
||||
import type { APISource } from "~types/entities/source";
|
||||
import { convertTextToHtml } from "@formatting";
|
||||
import { MediaBackendType } from "media-manager";
|
||||
import type { MediaBackend } from "media-manager";
|
||||
import { LocalMediaBackend } from "~packages/media-manager/backends/local";
|
||||
import { S3MediaBackend } from "~packages/media-manager/backends/s3";
|
||||
import { getUrl } from "~database/entities/Attachment";
|
||||
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["PATCH"],
|
||||
|
|
@ -69,6 +73,20 @@ export default apiRoute<{
|
|||
};
|
||||
}
|
||||
|
||||
let mediaManager: MediaBackend;
|
||||
|
||||
switch (config.media.backend as MediaBackendType) {
|
||||
case MediaBackendType.LOCAL:
|
||||
mediaManager = new LocalMediaBackend(config);
|
||||
break;
|
||||
case MediaBackendType.S3:
|
||||
mediaManager = new S3MediaBackend(config);
|
||||
break;
|
||||
default:
|
||||
// TODO: Replace with logger
|
||||
throw new Error("Invalid media backend");
|
||||
}
|
||||
|
||||
if (display_name) {
|
||||
// Check if within allowed display name lengths
|
||||
if (
|
||||
|
|
@ -167,9 +185,9 @@ export default apiRoute<{
|
|||
);
|
||||
}
|
||||
|
||||
const hash = await uploadFile(avatar, config);
|
||||
const { uploadedFile } = await mediaManager.addFile(avatar);
|
||||
|
||||
user.avatar = hash || "";
|
||||
user.avatar = getUrl(uploadedFile.name, config);
|
||||
}
|
||||
|
||||
if (header) {
|
||||
|
|
@ -181,9 +199,9 @@ export default apiRoute<{
|
|||
);
|
||||
}
|
||||
|
||||
const hash = await uploadFile(header, config);
|
||||
const { uploadedFile } = await mediaManager.addFile(header);
|
||||
|
||||
user.header = hash || "";
|
||||
user.header = getUrl(uploadedFile.name, config);
|
||||
}
|
||||
|
||||
if (locked) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
import { apiRoute, applyConfig } from "@api";
|
||||
import { errorResponse, jsonResponse } from "@response";
|
||||
import { client } from "~database/datasource";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
import { uploadFile } from "~classes/media";
|
||||
import { attachmentToAPI, getUrl } from "~database/entities/Attachment";
|
||||
import type { MediaBackend } from "media-manager";
|
||||
import { MediaBackendType } from "media-manager";
|
||||
import { LocalMediaBackend } from "~packages/media-manager/backends/local";
|
||||
import { S3MediaBackend } from "~packages/media-manager/backends/s3";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["GET", "PUT"],
|
||||
ratelimits: {
|
||||
max: 10,
|
||||
|
|
@ -61,13 +63,23 @@ export default apiRoute<{
|
|||
|
||||
let thumbnailUrl = attachment.thumbnail_url;
|
||||
|
||||
if (thumbnail) {
|
||||
const hash = await uploadFile(
|
||||
thumbnail as unknown as File,
|
||||
config
|
||||
);
|
||||
let mediaManager: MediaBackend;
|
||||
|
||||
thumbnailUrl = hash ? getUrl(hash, config) : "";
|
||||
switch (config.media.backend as MediaBackendType) {
|
||||
case MediaBackendType.LOCAL:
|
||||
mediaManager = new LocalMediaBackend(config);
|
||||
break;
|
||||
case MediaBackendType.S3:
|
||||
mediaManager = new S3MediaBackend(config);
|
||||
break;
|
||||
default:
|
||||
// TODO: Replace with logger
|
||||
throw new Error("Invalid media backend");
|
||||
}
|
||||
|
||||
if (thumbnail) {
|
||||
const { uploadedFile } = await mediaManager.addFile(thumbnail);
|
||||
thumbnailUrl = getUrl(uploadedFile.name, config);
|
||||
}
|
||||
|
||||
const descriptionText = description || attachment.description;
|
||||
|
|
|
|||
|
|
@ -2,12 +2,14 @@ import { apiRoute, applyConfig } from "@api";
|
|||
import { errorResponse, jsonResponse } from "@response";
|
||||
import { client } from "~database/datasource";
|
||||
import { encode } from "blurhash";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
import sharp from "sharp";
|
||||
import { uploadFile } from "~classes/media";
|
||||
import { attachmentToAPI, getUrl } from "~database/entities/Attachment";
|
||||
import { MediaBackendType } from "media-manager";
|
||||
import type { MediaBackend } from "media-manager";
|
||||
import { LocalMediaBackend } from "~packages/media-manager/backends/local";
|
||||
import { S3MediaBackend } from "~packages/media-manager/backends/s3";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["POST"],
|
||||
ratelimits: {
|
||||
max: 10,
|
||||
|
|
@ -88,16 +90,30 @@ export default apiRoute<{
|
|||
|
||||
let url = "";
|
||||
|
||||
const hash = await uploadFile(file, config);
|
||||
let mediaManager: MediaBackend;
|
||||
|
||||
url = hash ? getUrl(hash, config) : "";
|
||||
switch (config.media.backend as MediaBackendType) {
|
||||
case MediaBackendType.LOCAL:
|
||||
mediaManager = new LocalMediaBackend(config);
|
||||
break;
|
||||
case MediaBackendType.S3:
|
||||
mediaManager = new S3MediaBackend(config);
|
||||
break;
|
||||
default:
|
||||
// TODO: Replace with logger
|
||||
throw new Error("Invalid media backend");
|
||||
}
|
||||
|
||||
const { uploadedFile } = await mediaManager.addFile(file);
|
||||
|
||||
url = getUrl(uploadedFile.name, config);
|
||||
|
||||
let thumbnailUrl = "";
|
||||
|
||||
if (thumbnail) {
|
||||
const hash = await uploadFile(thumbnail as unknown as File, config);
|
||||
const { uploadedFile } = await mediaManager.addFile(thumbnail);
|
||||
|
||||
thumbnailUrl = hash ? getUrl(hash, config) : "";
|
||||
thumbnailUrl = getUrl(uploadedFile.name, config);
|
||||
}
|
||||
|
||||
const newAttachment = await client.attachment.create({
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@ import { apiRoute, applyConfig } from "@api";
|
|||
import { errorResponse, jsonResponse } from "@response";
|
||||
import { client } from "~database/datasource";
|
||||
import { userRelations, userToAPI } from "~database/entities/User";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["DELETE"],
|
||||
ratelimits: {
|
||||
max: 10,
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@ import { apiRoute, applyConfig } from "@api";
|
|||
import { errorResponse, jsonResponse } from "@response";
|
||||
import { client } from "~database/datasource";
|
||||
import { userRelations, userToAPI } from "~database/entities/User";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["DELETE"],
|
||||
ratelimits: {
|
||||
max: 10,
|
||||
|
|
|
|||
|
|
@ -7,9 +7,8 @@ import {
|
|||
statusAndUserRelations,
|
||||
statusToAPI,
|
||||
} from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["GET"],
|
||||
ratelimits: {
|
||||
max: 8,
|
||||
|
|
|
|||
|
|
@ -8,10 +8,9 @@ import {
|
|||
statusAndUserRelations,
|
||||
statusToAPI,
|
||||
} from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
import type { APIStatus } from "~types/entities/status";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["POST"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -6,9 +6,8 @@ import {
|
|||
statusAndUserRelations,
|
||||
} from "~database/entities/Status";
|
||||
import { userRelations, userToAPI } from "~database/entities/User";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["GET"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -9,9 +9,8 @@ import {
|
|||
statusAndUserRelations,
|
||||
statusToAPI,
|
||||
} from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["GET", "DELETE", "PUT"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -3,9 +3,8 @@ import { apiRoute, applyConfig } from "@api";
|
|||
import { errorResponse, jsonResponse } from "@response";
|
||||
import { client } from "~database/datasource";
|
||||
import { statusAndUserRelations, statusToAPI } from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["POST"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -8,9 +8,8 @@ import {
|
|||
statusToAPI,
|
||||
} from "~database/entities/Status";
|
||||
import { type UserWithRelations } from "~database/entities/User";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["POST"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -6,9 +6,8 @@ import {
|
|||
statusAndUserRelations,
|
||||
} from "~database/entities/Status";
|
||||
import { userRelations, userToAPI } from "~database/entities/User";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["GET"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -5,9 +5,8 @@ import {
|
|||
isViewableByUser,
|
||||
statusAndUserRelations,
|
||||
} from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["GET"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -8,10 +8,9 @@ import {
|
|||
statusAndUserRelations,
|
||||
statusToAPI,
|
||||
} from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
import type { APIStatus } from "~types/entities/status";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["POST"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@ import { apiRoute, applyConfig } from "@api";
|
|||
import { errorResponse, jsonResponse } from "@response";
|
||||
import { client } from "~database/datasource";
|
||||
import { statusAndUserRelations, statusToAPI } from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["POST"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -6,10 +6,9 @@ import {
|
|||
statusAndUserRelations,
|
||||
statusToAPI,
|
||||
} from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
import type { APIStatus } from "~types/entities/status";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["POST"],
|
||||
ratelimits: {
|
||||
max: 100,
|
||||
|
|
|
|||
|
|
@ -11,9 +11,8 @@ import {
|
|||
statusToAPI,
|
||||
} from "~database/entities/Status";
|
||||
import type { UserWithRelations } from "~database/entities/User";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["POST"],
|
||||
ratelimits: {
|
||||
max: 300,
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@ import { apiRoute, applyConfig } from "@api";
|
|||
import { errorResponse, jsonResponse } from "@response";
|
||||
import { client } from "~database/datasource";
|
||||
import { statusAndUserRelations, statusToAPI } from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["GET"],
|
||||
ratelimits: {
|
||||
max: 200,
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@ import { apiRoute, applyConfig } from "@api";
|
|||
import { errorResponse, jsonResponse } from "@response";
|
||||
import { client } from "~database/datasource";
|
||||
import { statusAndUserRelations, statusToAPI } from "~database/entities/Status";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["GET"],
|
||||
ratelimits: {
|
||||
max: 200,
|
||||
|
|
|
|||
|
|
@ -2,12 +2,14 @@ import { apiRoute, applyConfig } from "@api";
|
|||
import { errorResponse, jsonResponse } from "@response";
|
||||
import { client } from "~database/datasource";
|
||||
import { encode } from "blurhash";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
import sharp from "sharp";
|
||||
import { uploadFile } from "~classes/media";
|
||||
import { attachmentToAPI, getUrl } from "~database/entities/Attachment";
|
||||
import type { MediaBackend } from "media-manager";
|
||||
import { MediaBackendType } from "media-manager";
|
||||
import { LocalMediaBackend } from "~packages/media-manager/backends/local";
|
||||
import { S3MediaBackend } from "~packages/media-manager/backends/s3";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["POST"],
|
||||
ratelimits: {
|
||||
max: 10,
|
||||
|
|
@ -88,18 +90,32 @@ export default apiRoute<{
|
|||
|
||||
let url = "";
|
||||
|
||||
if (isImage) {
|
||||
const hash = await uploadFile(file, config);
|
||||
let mediaManager: MediaBackend;
|
||||
|
||||
url = hash ? getUrl(hash, config) : "";
|
||||
switch (config.media.backend as MediaBackendType) {
|
||||
case MediaBackendType.LOCAL:
|
||||
mediaManager = new LocalMediaBackend(config);
|
||||
break;
|
||||
case MediaBackendType.S3:
|
||||
mediaManager = new S3MediaBackend(config);
|
||||
break;
|
||||
default:
|
||||
// TODO: Replace with logger
|
||||
throw new Error("Invalid media backend");
|
||||
}
|
||||
|
||||
if (isImage) {
|
||||
const { uploadedFile } = await mediaManager.addFile(file);
|
||||
|
||||
url = getUrl(uploadedFile.name, config);
|
||||
}
|
||||
|
||||
let thumbnailUrl = "";
|
||||
|
||||
if (thumbnail) {
|
||||
const hash = await uploadFile(thumbnail as unknown as File, config);
|
||||
const { uploadedFile } = await mediaManager.addFile(thumbnail);
|
||||
|
||||
thumbnailUrl = hash ? getUrl(hash, config) : "";
|
||||
thumbnailUrl = getUrl(uploadedFile.name, config);
|
||||
}
|
||||
|
||||
const newAttachment = await client.attachment.create({
|
||||
|
|
|
|||
|
|
@ -4,9 +4,8 @@ import { errorResponse, jsonResponse } from "@response";
|
|||
import { client } from "~database/datasource";
|
||||
import { statusAndUserRelations, statusToAPI } from "~database/entities/Status";
|
||||
import { userRelations, userToAPI } from "~database/entities/User";
|
||||
import type { APIRouteMeta } from "~types/api";
|
||||
|
||||
export const meta: APIRouteMeta = applyConfig({
|
||||
export const meta = applyConfig({
|
||||
allowedMethods: ["GET"],
|
||||
ratelimits: {
|
||||
max: 10,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue