summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/api/endpoints')
-rw-r--r--src/server/api/endpoints/ap/show.ts10
-rw-r--r--src/server/api/endpoints/drive/files/update.ts11
-rw-r--r--src/server/api/endpoints/gallery/posts/create.ts3
-rw-r--r--src/server/api/endpoints/gallery/posts/update.ts3
-rw-r--r--src/server/api/endpoints/i/notifications.ts11
-rw-r--r--src/server/api/endpoints/notes/search-by-tag.ts35
6 files changed, 48 insertions, 25 deletions
diff --git a/src/server/api/endpoints/ap/show.ts b/src/server/api/endpoints/ap/show.ts
index 2ce11160e8..b4df1ad4d7 100644
--- a/src/server/api/endpoints/ap/show.ts
+++ b/src/server/api/endpoints/ap/show.ts
@@ -10,7 +10,7 @@ import { Users, Notes } from '../../../../models';
import { Note } from '../../../../models/entities/note';
import { User } from '../../../../models/entities/user';
import { fetchMeta } from '@/misc/fetch-meta';
-import { validActor, validPost } from '../../../../remote/activitypub/type';
+import { isActor, isPost, getApId } from '../../../../remote/activitypub/type';
export const meta = {
tags: ['federation'],
@@ -154,16 +154,16 @@ async function fetchAny(uri: string) {
}
// それでもみつからなければ新規であるため登録
- if (validActor.includes(object.type)) {
- const user = await createPerson(object.id);
+ if (isActor(object)) {
+ const user = await createPerson(getApId(object));
return {
type: 'User',
object: await Users.pack(user, null, { detail: true })
};
}
- if (validPost.includes(object.type)) {
- const note = await createNote(object.id, undefined, true);
+ if (isPost(object)) {
+ const note = await createNote(getApId(object), undefined, true);
return {
type: 'Note',
object: await Notes.pack(note!, null, { detail: true })
diff --git a/src/server/api/endpoints/drive/files/update.ts b/src/server/api/endpoints/drive/files/update.ts
index 6eda83967b..f740fea67e 100644
--- a/src/server/api/endpoints/drive/files/update.ts
+++ b/src/server/api/endpoints/drive/files/update.ts
@@ -49,6 +49,14 @@ export const meta = {
'ja-JP': 'このメディアが「閲覧注意」(NSFW)かどうか',
'en-US': 'Whether this media is NSFW'
}
+ },
+
+ comment: {
+ validator: $.optional.nullable.str,
+ default: undefined as any,
+ desc: {
+ 'ja-JP': 'コメント'
+ }
}
},
@@ -92,6 +100,8 @@ export default define(meta, async (ps, user) => {
if (ps.name) file.name = ps.name;
+ if (ps.comment !== undefined) file.comment = ps.comment;
+
if (ps.isSensitive !== undefined) file.isSensitive = ps.isSensitive;
if (ps.folderId !== undefined) {
@@ -113,6 +123,7 @@ export default define(meta, async (ps, user) => {
await DriveFiles.update(file.id, {
name: file.name,
+ comment: file.comment,
folderId: file.folderId,
isSensitive: file.isSensitive
});
diff --git a/src/server/api/endpoints/gallery/posts/create.ts b/src/server/api/endpoints/gallery/posts/create.ts
index d1ae68b126..ed24a45f88 100644
--- a/src/server/api/endpoints/gallery/posts/create.ts
+++ b/src/server/api/endpoints/gallery/posts/create.ts
@@ -6,6 +6,7 @@ import { DriveFiles, GalleryPosts } from '../../../../../models';
import { genId } from '../../../../../misc/gen-id';
import { GalleryPost } from '../../../../../models/entities/gallery-post';
import { ApiError } from '../../../error';
+import { DriveFile } from '@/models/entities/drive-file';
export const meta = {
tags: ['gallery'],
@@ -55,7 +56,7 @@ export default define(meta, async (ps, user) => {
id: fileId,
userId: user.id
})
- ))).filter(file => file != null);
+ ))).filter((file): file is DriveFile => file != null);
if (files.length === 0) {
throw new Error();
diff --git a/src/server/api/endpoints/gallery/posts/update.ts b/src/server/api/endpoints/gallery/posts/update.ts
index c8bb8d48c9..d9176ea407 100644
--- a/src/server/api/endpoints/gallery/posts/update.ts
+++ b/src/server/api/endpoints/gallery/posts/update.ts
@@ -5,6 +5,7 @@ import { ID } from '../../../../../misc/cafy-id';
import { DriveFiles, GalleryPosts } from '../../../../../models';
import { GalleryPost } from '../../../../../models/entities/gallery-post';
import { ApiError } from '../../../error';
+import { DriveFile } from '@/models/entities/drive-file';
export const meta = {
tags: ['gallery'],
@@ -58,7 +59,7 @@ export default define(meta, async (ps, user) => {
id: fileId,
userId: user.id
})
- ))).filter(file => file != null);
+ ))).filter((file): file is DriveFile => file != null);
if (files.length === 0) {
throw new Error();
diff --git a/src/server/api/endpoints/i/notifications.ts b/src/server/api/endpoints/i/notifications.ts
index b481fdba8f..a10dc09df3 100644
--- a/src/server/api/endpoints/i/notifications.ts
+++ b/src/server/api/endpoints/i/notifications.ts
@@ -5,6 +5,7 @@ import define from '../../define';
import { makePaginationQuery } from '../../common/make-pagination-query';
import { Notifications, Followings, Mutings, Users } from '../../../../models';
import { notificationTypes } from '../../../../types';
+import read from '@/services/note/read';
export const meta = {
desc: {
@@ -103,9 +104,9 @@ export default define(meta, async (ps, user) => {
query.setParameters(followingQuery.getParameters());
}
- if (ps.includeTypes?.length > 0) {
+ if (ps.includeTypes && ps.includeTypes.length > 0) {
query.andWhere(`notification.type IN (:...includeTypes)`, { includeTypes: ps.includeTypes });
- } else if (ps.excludeTypes?.length > 0) {
+ } else if (ps.excludeTypes && ps.excludeTypes.length > 0) {
query.andWhere(`notification.type NOT IN (:...excludeTypes)`, { excludeTypes: ps.excludeTypes });
}
@@ -116,5 +117,11 @@ export default define(meta, async (ps, user) => {
readNotification(user.id, notifications.map(x => x.id));
}
+ const notes = notifications.filter(notification => ['mention', 'reply', 'quote'].includes(notification.type)).map(notification => notification.note!);
+
+ if (notes.length > 0) {
+ read(user.id, notes);
+ }
+
return await Notifications.packMany(notifications, user.id);
});
diff --git a/src/server/api/endpoints/notes/search-by-tag.ts b/src/server/api/endpoints/notes/search-by-tag.ts
index 61f62dd5a6..463c5fff5a 100644
--- a/src/server/api/endpoints/notes/search-by-tag.ts
+++ b/src/server/api/endpoints/notes/search-by-tag.ts
@@ -104,22 +104,25 @@ export default define(meta, async (ps, me) => {
generateVisibilityQuery(query, me);
if (me) generateMutedUserQuery(query, me);
- if (ps.tag) {
- if (!safeForSql(ps.tag)) return;
- query.andWhere(`'{"${normalizeForSearch(ps.tag)}"}' <@ note.tags`);
- } else {
- let i = 0;
- query.andWhere(new Brackets(qb => {
- for (const tags of ps.query!) {
- qb.orWhere(new Brackets(qb => {
- for (const tag of tags) {
- if (!safeForSql(tag)) return;
- qb.andWhere(`'{"${normalizeForSearch(ps.tag)}"}' <@ note.tags`);
- i++;
- }
- }));
- }
- }));
+ try {
+ if (ps.tag) {
+ if (!safeForSql(ps.tag)) throw 'Injection';
+ query.andWhere(`'{"${normalizeForSearch(ps.tag)}"}' <@ note.tags`);
+ } else {
+ query.andWhere(new Brackets(qb => {
+ for (const tags of ps.query!) {
+ qb.orWhere(new Brackets(qb => {
+ for (const tag of tags) {
+ if (!safeForSql(tag)) throw 'Injection';
+ qb.andWhere(`'{"${normalizeForSearch(tag)}"}' <@ note.tags`);
+ }
+ }));
+ }
+ }));
+ }
+ } catch (e) {
+ if (e === 'Injection') return [];
+ throw e;
}
if (ps.reply != null) {