Fixed 267U.pre2
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
import { InternalStorage } from "./internal-storage.js";
|
||||
import { DriveFiles, Users } from "../../models/index.js";
|
||||
import { driveChart, perUserDriveChart, instanceChart } from "../chart/index.js";
|
||||
import { createDeleteObjectStorageFileJob } from "../../queue/index.js";
|
||||
import { fetchMeta } from "../../misc/fetch-meta.js";
|
||||
import { getS3 } from "./s3.js";
|
||||
import { v4 as uuid } from "uuid";
|
||||
import { DeleteObjectCommand } from "@aws-sdk/client-s3";
|
||||
export async function deleteFile(file, isExpired = false) {
|
||||
if (file.storedInternal) {
|
||||
InternalStorage.del(file.accessKey);
|
||||
if (file.thumbnailUrl) {
|
||||
InternalStorage.del(file.thumbnailAccessKey);
|
||||
}
|
||||
if (file.webpublicUrl) {
|
||||
InternalStorage.del(file.webpublicAccessKey);
|
||||
}
|
||||
} else if (!file.isLink) {
|
||||
createDeleteObjectStorageFileJob(file.accessKey);
|
||||
if (file.thumbnailUrl) {
|
||||
createDeleteObjectStorageFileJob(file.thumbnailAccessKey);
|
||||
}
|
||||
if (file.webpublicUrl) {
|
||||
createDeleteObjectStorageFileJob(file.webpublicAccessKey);
|
||||
}
|
||||
}
|
||||
postProcess(file, isExpired);
|
||||
}
|
||||
export async function deleteFileSync(file, isExpired = false) {
|
||||
if (file.storedInternal) {
|
||||
InternalStorage.del(file.accessKey);
|
||||
if (file.thumbnailUrl) {
|
||||
InternalStorage.del(file.thumbnailAccessKey);
|
||||
}
|
||||
if (file.webpublicUrl) {
|
||||
InternalStorage.del(file.webpublicAccessKey);
|
||||
}
|
||||
} else if (!file.isLink) {
|
||||
const promises = [];
|
||||
promises.push(deleteObjectStorageFile(file.accessKey));
|
||||
if (file.thumbnailUrl) {
|
||||
promises.push(deleteObjectStorageFile(file.thumbnailAccessKey));
|
||||
}
|
||||
if (file.webpublicUrl) {
|
||||
promises.push(deleteObjectStorageFile(file.webpublicAccessKey));
|
||||
}
|
||||
await Promise.all(promises);
|
||||
}
|
||||
postProcess(file, isExpired);
|
||||
}
|
||||
async function postProcess(file, isExpired = false) {
|
||||
// リモートファイル期限切れ削除後は直リンクにする
|
||||
if (isExpired && file.userHost !== null && file.uri != null) {
|
||||
DriveFiles.update(file.id, {
|
||||
isLink: true,
|
||||
url: file.uri,
|
||||
thumbnailUrl: null,
|
||||
webpublicUrl: null,
|
||||
storedInternal: false,
|
||||
// ローカルプロキシ用
|
||||
accessKey: uuid(),
|
||||
thumbnailAccessKey: `thumbnail-${uuid()}`,
|
||||
webpublicAccessKey: `webpublic-${uuid()}`
|
||||
});
|
||||
Users.update({
|
||||
avatarId: file.id
|
||||
}, {
|
||||
avatarUrl: file.uri
|
||||
});
|
||||
Users.update({
|
||||
bannerId: file.id
|
||||
}, {
|
||||
bannerUrl: file.uri
|
||||
});
|
||||
} else {
|
||||
DriveFiles.delete(file.id);
|
||||
}
|
||||
// 統計を更新
|
||||
driveChart.update(file, false);
|
||||
perUserDriveChart.update(file, false);
|
||||
if (file.userHost !== null) {
|
||||
instanceChart.updateDrive(file, false);
|
||||
}
|
||||
}
|
||||
export async function deleteObjectStorageFile(key) {
|
||||
const meta = await fetchMeta();
|
||||
const s3 = getS3(meta);
|
||||
await s3.send(new DeleteObjectCommand({
|
||||
Bucket: meta.objectStorageBucket,
|
||||
Key: key
|
||||
}));
|
||||
}
|
||||
Reference in New Issue
Block a user