From 168de3c31674048856399faf549fcadbe7b4bf02 Mon Sep 17 00:00:00 2001 From: syuilo Date: Thu, 9 May 2019 23:27:34 +0900 Subject: Resolve #4870 --- src/server/api/endpoints/admin/show-users.ts | 2 -- src/server/api/endpoints/admin/unverify-user.ts | 38 ------------------------- src/server/api/endpoints/admin/verify-user.ts | 38 ------------------------- 3 files changed, 78 deletions(-) delete mode 100644 src/server/api/endpoints/admin/unverify-user.ts delete mode 100644 src/server/api/endpoints/admin/verify-user.ts (limited to 'src/server/api/endpoints/admin') diff --git a/src/server/api/endpoints/admin/show-users.ts b/src/server/api/endpoints/admin/show-users.ts index 97760ae797..8733d87a38 100644 --- a/src/server/api/endpoints/admin/show-users.ts +++ b/src/server/api/endpoints/admin/show-users.ts @@ -36,7 +36,6 @@ export const meta = { 'admin', 'moderator', 'adminOrModerator', - 'verified', 'silenced', 'suspended', ]), @@ -61,7 +60,6 @@ export default define(meta, async (ps, me) => { case 'admin': query.where('user.isAdmin = TRUE'); break; case 'moderator': query.where('user.isModerator = TRUE'); break; case 'adminOrModerator': query.where('user.isAdmin = TRUE OR isModerator = TRUE'); break; - case 'verified': query.where('user.isVerified = TRUE'); break; case 'alive': query.where('user.updatedAt > :date', { date: new Date(Date.now() - 1000 * 60 * 60 * 24 * 5) }); break; case 'silenced': query.where('user.isSilenced = TRUE'); break; case 'suspended': query.where('user.isSuspended = TRUE'); break; diff --git a/src/server/api/endpoints/admin/unverify-user.ts b/src/server/api/endpoints/admin/unverify-user.ts deleted file mode 100644 index b215dbf10d..0000000000 --- a/src/server/api/endpoints/admin/unverify-user.ts +++ /dev/null @@ -1,38 +0,0 @@ -import $ from 'cafy'; -import { ID } from '../../../../misc/cafy-id'; -import define from '../../define'; -import { Users } from '../../../../models'; - -export const meta = { - desc: { - 'ja-JP': '指定したユーザーの公式アカウントを解除します。', - 'en-US': 'Mark a user as unverified.' - }, - - tags: ['admin'], - - requireCredential: true, - requireModerator: true, - - params: { - userId: { - validator: $.type(ID), - desc: { - 'ja-JP': '対象のユーザーID', - 'en-US': 'The user ID which you want to unverify' - } - }, - } -}; - -export default define(meta, async (ps) => { - const user = await Users.findOne(ps.userId as string); - - if (user == null) { - throw new Error('user not found'); - } - - await Users.update(user.id, { - isVerified: false - }); -}); diff --git a/src/server/api/endpoints/admin/verify-user.ts b/src/server/api/endpoints/admin/verify-user.ts deleted file mode 100644 index c1b447a92b..0000000000 --- a/src/server/api/endpoints/admin/verify-user.ts +++ /dev/null @@ -1,38 +0,0 @@ -import $ from 'cafy'; -import { ID } from '../../../../misc/cafy-id'; -import define from '../../define'; -import { Users } from '../../../../models'; - -export const meta = { - desc: { - 'ja-JP': '指定したユーザーを公式アカウントにします。', - 'en-US': 'Mark a user as verified.' - }, - - tags: ['admin'], - - requireCredential: true, - requireModerator: true, - - params: { - userId: { - validator: $.type(ID), - desc: { - 'ja-JP': '対象のユーザーID', - 'en-US': 'The user ID which you want to verify' - } - }, - } -}; - -export default define(meta, async (ps) => { - const user = await Users.findOne(ps.userId as string); - - if (user == null) { - throw new Error('user not found'); - } - - await Users.update(user.id, { - isVerified: true - }); -}); -- cgit v1.2.3-freya 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 --- locales/ja-JP.yml | 3 ++- migration/1557476068003-PinnedUsers.ts | 13 +++++++++++ src/client/app/admin/views/instance.vue | 13 ++++++++++- src/client/app/common/views/pages/explore.vue | 4 ++++ src/models/entities/meta.ts | 5 ++++ src/server/api/endpoints/admin/update-meta.ts | 11 +++++++++ src/server/api/endpoints/meta.ts | 1 + src/server/api/endpoints/pinned-users.ts | 33 +++++++++++++++++++++++++++ 8 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 migration/1557476068003-PinnedUsers.ts create mode 100644 src/server/api/endpoints/pinned-users.ts (limited to 'src/server/api/endpoints/admin') diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index f1cfec046a..14b8daad48 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -338,6 +338,7 @@ auth/views/index.vue: sign-in: "サインインしてください" common/views/pages/explore.vue: + pinned-users: "ピン留めされたユーザー" popular-users: "人気のユーザー" recently-updated-users: "最近投稿したユーザー" recently-registered-users: "新規ユーザー" @@ -1262,7 +1263,7 @@ admin/views/instance.vue: invite: "招待" save: "保存" saved: "保存しました" - user-recommendation-config: "おすすめユーザー" + pinned-users: "ピン留めユーザー" email-config: "メールサーバーの設定" email-config-info: "メールアドレス確認やパスワードリセットの際に使われます。" enable-email: "メール配信を有効にする" diff --git a/migration/1557476068003-PinnedUsers.ts b/migration/1557476068003-PinnedUsers.ts new file mode 100644 index 0000000000..4e7222aafc --- /dev/null +++ b/migration/1557476068003-PinnedUsers.ts @@ -0,0 +1,13 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class PinnedUsers1557476068003 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "meta" ADD "pinnedUsers" character varying(256) array NOT NULL DEFAULT '{}'::varchar[]`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "pinnedUsers"`); + } + +} diff --git a/src/client/app/admin/views/instance.vue b/src/client/app/admin/views/instance.vue index cca4e5f669..d81edc8fe6 100644 --- a/src/client/app/admin/views/instance.vue +++ b/src/client/app/admin/views/instance.vue @@ -82,6 +82,14 @@ + + +
+ + {{ $t('save') }} +
+
+
@@ -190,6 +198,7 @@ export default Vue.extend({ enableServiceWorker: false, swPublicKey: null, swPrivateKey: null, + pinnedUsers: [], faHeadset, faShieldAlt, faGhost, faUserPlus, farEnvelope, faBolt }; }, @@ -239,6 +248,7 @@ export default Vue.extend({ this.enableServiceWorker = meta.enableServiceWorker; this.swPublicKey = meta.swPublickey; this.swPrivateKey = meta.swPrivateKey; + this.pinnedUsers = meta.pinnedUsers.join('\n'); }); }, @@ -297,7 +307,8 @@ export default Vue.extend({ smtpPass: this.smtpAuth ? this.smtpPass : '', enableServiceWorker: this.enableServiceWorker, swPublicKey: this.swPublicKey, - swPrivateKey: this.swPrivateKey + swPrivateKey: this.swPrivateKey, + pinnedUsers: this.pinnedUsers.split('\n') }).then(() => { this.$root.dialog({ type: 'success', diff --git a/src/client/app/common/views/pages/explore.vue b/src/client/app/common/views/pages/explore.vue index 107603d69e..d0e98035f8 100644 --- a/src/client/app/common/views/pages/explore.vue +++ b/src/client/app/common/views/pages/explore.vue @@ -26,6 +26,9 @@