summaryrefslogtreecommitdiff
path: root/packages/backend/src/services
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2022-05-28 01:31:23 +0900
committertamaina <tamaina@hotmail.co.jp>2022-05-28 01:31:23 +0900
commitfa99d9c6fee3a7d6f72e254e0aa55972cd6538fb (patch)
tree43d941bbacc9cfaa911fc785fce0b34af4ef6fcc /packages/backend/src/services
parentMerge branch 'develop' into pizzax-indexeddb (diff)
parentfix(docs): correct information for drive upload (#8736) (diff)
downloadmisskey-fa99d9c6fee3a7d6f72e254e0aa55972cd6538fb.tar.gz
misskey-fa99d9c6fee3a7d6f72e254e0aa55972cd6538fb.tar.bz2
misskey-fa99d9c6fee3a7d6f72e254e0aa55972cd6538fb.zip
Merge branch 'develop' into pizzax-indexeddb
Diffstat (limited to 'packages/backend/src/services')
-rw-r--r--packages/backend/src/services/drive/generate-video-thumbnail.ts55
-rw-r--r--packages/backend/src/services/drive/upload-from-url.ts25
-rw-r--r--packages/backend/src/services/fetch-instance-metadata.ts14
-rw-r--r--packages/backend/src/services/note/create.ts2
-rw-r--r--packages/backend/src/services/note/reaction/create.ts5
5 files changed, 44 insertions, 57 deletions
diff --git a/packages/backend/src/services/drive/generate-video-thumbnail.ts b/packages/backend/src/services/drive/generate-video-thumbnail.ts
index da93bc97c7..ca12ab8d3d 100644
--- a/packages/backend/src/services/drive/generate-video-thumbnail.ts
+++ b/packages/backend/src/services/drive/generate-video-thumbnail.ts
@@ -1,38 +1,31 @@
import * as fs from 'node:fs';
-import * as tmp from 'tmp';
+import * as path from 'node:path';
+import { createTemp } from '@/misc/create-temp.js';
import { IImage, convertToJpeg } from './image-processor.js';
-import * as FFmpeg from 'fluent-ffmpeg';
+import FFmpeg from 'fluent-ffmpeg';
-export async function GenerateVideoThumbnail(path: string): Promise<IImage> {
- const [outDir, cleanup] = await new Promise<[string, any]>((res, rej) => {
- tmp.dir((e, path, cleanup) => {
- if (e) return rej(e);
- res([path, cleanup]);
- });
- });
+export async function GenerateVideoThumbnail(source: string): Promise<IImage> {
+ const [file, cleanup] = await createTemp();
+ const parsed = path.parse(file);
- await new Promise((res, rej) => {
- FFmpeg({
- source: path,
- })
- .on('end', res)
- .on('error', rej)
- .screenshot({
- folder: outDir,
- filename: 'output.png',
- count: 1,
- timestamps: ['5%'],
+ try {
+ await new Promise((res, rej) => {
+ FFmpeg({
+ source,
+ })
+ .on('end', res)
+ .on('error', rej)
+ .screenshot({
+ folder: parsed.dir,
+ filename: parsed.base,
+ count: 1,
+ timestamps: ['5%'],
+ });
});
- });
-
- const outPath = `${outDir}/output.png`;
-
- // JPEGに変換 (Webpでもいいが、MastodonはWebpをサポートせず表示できなくなる)
- const thumbnail = await convertToJpeg(outPath, 498, 280);
-
- // cleanup
- await fs.promises.unlink(outPath);
- cleanup();
- return thumbnail;
+ // JPEGに変換 (Webpでもいいが、MastodonはWebpをサポートせず表示できなくなる)
+ return await convertToJpeg(498, 280);
+ } finally {
+ cleanup();
+ }
}
diff --git a/packages/backend/src/services/drive/upload-from-url.ts b/packages/backend/src/services/drive/upload-from-url.ts
index 79b1b8c2e1..001fc49ee4 100644
--- a/packages/backend/src/services/drive/upload-from-url.ts
+++ b/packages/backend/src/services/drive/upload-from-url.ts
@@ -45,29 +45,20 @@ export async function uploadFromUrl({
// Create temp file
const [path, cleanup] = await createTemp();
- // write content at URL to temp file
- await downloadUrl(url, path);
-
- let driveFile: DriveFile;
- let error;
-
try {
- driveFile = await addFile({ user, path, name, comment, folderId, force, isLink, url, uri, sensitive });
+ // write content at URL to temp file
+ await downloadUrl(url, path);
+
+ const driveFile = await addFile({ user, path, name, comment, folderId, force, isLink, url, uri, sensitive });
logger.succ(`Got: ${driveFile.id}`);
+ return driveFile!;
} catch (e) {
- error = e;
logger.error(`Failed to create drive file: ${e}`, {
url: url,
e: e,
});
- }
-
- // clean-up
- cleanup();
-
- if (error) {
- throw error;
- } else {
- return driveFile!;
+ throw e;
+ } finally {
+ cleanup();
}
}
diff --git a/packages/backend/src/services/fetch-instance-metadata.ts b/packages/backend/src/services/fetch-instance-metadata.ts
index d5294c5fe8..029c388dc2 100644
--- a/packages/backend/src/services/fetch-instance-metadata.ts
+++ b/packages/backend/src/services/fetch-instance-metadata.ts
@@ -1,5 +1,6 @@
import { DOMWindow, JSDOM } from 'jsdom';
import fetch from 'node-fetch';
+import tinycolor from 'tinycolor2';
import { getJson, getHtml, getAgentByUrl } from '@/misc/fetch.js';
import { Instance } from '@/models/entities/instance.js';
import { Instances } from '@/models/index.js';
@@ -208,16 +209,11 @@ async function fetchIconUrl(instance: Instance, doc: DOMWindow['document'] | nul
}
async function getThemeColor(doc: DOMWindow['document'] | null, manifest: Record<string, any> | null): Promise<string | null> {
- if (doc) {
- const themeColor = doc.querySelector('meta[name="theme-color"]')?.getAttribute('content');
+ const themeColor = doc?.querySelector('meta[name="theme-color"]')?.getAttribute('content') || manifest?.theme_color;
- if (themeColor) {
- return themeColor;
- }
- }
-
- if (manifest) {
- return manifest.theme_color;
+ if (themeColor) {
+ const color = new tinycolor(themeColor);
+ if (color.isValid()) return color.toHexString();
}
return null;
diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts
index f14bc2059b..ceb5e8cc71 100644
--- a/packages/backend/src/services/note/create.ts
+++ b/packages/backend/src/services/note/create.ts
@@ -187,6 +187,8 @@ export default async (user: { id: User['id']; username: User['username']; host:
if (data.text) {
data.text = data.text.trim();
+ } else {
+ data.text = null;
}
let tags = data.apHashtags;
diff --git a/packages/backend/src/services/note/reaction/create.ts b/packages/backend/src/services/note/reaction/create.ts
index 5a0948bca9..83d302826a 100644
--- a/packages/backend/src/services/note/reaction/create.ts
+++ b/packages/backend/src/services/note/reaction/create.ts
@@ -27,6 +27,11 @@ export default async (user: { id: User['id']; host: User['host']; }, note: Note,
}
}
+ // check visibility
+ if (!await Notes.isVisibleForMe(note, user.id)) {
+ throw new IdentifiableError('68e9d2d1-48bf-42c2-b90a-b20e09fd3d48', 'Note not accessible for you.');
+ }
+
// TODO: cache
reaction = await toDbReaction(reaction, user.host);