From 8e6da3a0d9f2f6dbd8f1009e1accdb4e4ebae169 Mon Sep 17 00:00:00 2001 From: syuilo Date: Fri, 10 May 2019 17:30:28 +0900 Subject: インスタンス運営者がピン留めユーザーを設定できるように MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Related #4892 --- src/server/api/endpoints/admin/update-meta.ts | 11 +++++++++ src/server/api/endpoints/meta.ts | 1 + src/server/api/endpoints/pinned-users.ts | 33 +++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100644 src/server/api/endpoints/pinned-users.ts (limited to 'src/server/api/endpoints') diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts index 1f5dd5364f..8a2019fcc1 100644 --- a/src/server/api/endpoints/admin/update-meta.ts +++ b/src/server/api/endpoints/admin/update-meta.ts @@ -56,6 +56,13 @@ export const meta = { } }, + pinnedUsers: { + validator: $.optional.nullable.arr($.str), + desc: { + 'ja-JP': 'ピン留めユーザー' + } + }, + hiddenTags: { validator: $.optional.nullable.arr($.str), desc: { @@ -353,6 +360,10 @@ export default define(meta, async (ps) => { set.useStarForReactionFallback = ps.useStarForReactionFallback; } + if (Array.isArray(ps.pinnedUsers)) { + set.pinnedUsers = ps.pinnedUsers; + } + if (Array.isArray(ps.hiddenTags)) { set.hiddenTags = ps.hiddenTags; } diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts index 793eb5a204..5667e7fbb4 100644 --- a/src/server/api/endpoints/meta.ts +++ b/src/server/api/endpoints/meta.ts @@ -160,6 +160,7 @@ export default define(meta, async (ps, me) => { if (me && (me.isAdmin || me.isModerator)) { response.useStarForReactionFallback = instance.useStarForReactionFallback; + response.pinnedUsers = instance.pinnedUsers; response.hiddenTags = instance.hiddenTags; response.recaptchaSecretKey = instance.recaptchaSecretKey; response.proxyAccount = instance.proxyAccount; diff --git a/src/server/api/endpoints/pinned-users.ts b/src/server/api/endpoints/pinned-users.ts new file mode 100644 index 0000000000..de0e17a2ec --- /dev/null +++ b/src/server/api/endpoints/pinned-users.ts @@ -0,0 +1,33 @@ +import define from '../define'; +import { Users } from '../../../models'; +import { types, bool } from '../../../misc/schema'; +import { fetchMeta } from '../../../misc/fetch-meta'; +import parseAcct from '../../../misc/acct/parse'; +import { User } from '../../../models/entities/user'; + +export const meta = { + tags: ['users'], + + requireCredential: false, + + params: { + }, + + res: { + type: types.array, + optional: bool.false, nullable: bool.false, + items: { + type: types.object, + optional: bool.false, nullable: bool.false, + ref: 'User', + } + }, +}; + +export default define(meta, async (ps, me) => { + const meta = await fetchMeta(); + + const users = await Promise.all(meta.pinnedUsers.map(acct => Users.findOne(parseAcct(acct)))); + + return await Users.packMany(users.filter(x => x !== undefined) as User[], me, { detail: true }); +}); -- cgit v1.2.3-freya