From 410b9ad6bcde756e5cdf13f55711199027dfc7a6 Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Sun, 12 May 2019 09:37:00 +0900 Subject: Fix: ピン留め投稿の表示順がおかしい (#4906) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix: syuilo#4904 * fix comment --- src/server/activitypub/featured.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/server') diff --git a/src/server/activitypub/featured.ts b/src/server/activitypub/featured.ts index 86ec1000c7..dae72f16b6 100644 --- a/src/server/activitypub/featured.ts +++ b/src/server/activitypub/featured.ts @@ -21,7 +21,10 @@ export default async (ctx: Router.IRouterContext) => { return; } - const pinings = await UserNotePinings.find({ userId: user.id }); + const pinings = await UserNotePinings.find({ + where: { userId: user.id }, + order: { id: 'DESC' } + }); const pinnedNotes = await Promise.all(pinings.map(pining => Notes.findOne(pining.noteId).then(ensure))); -- cgit v1.2.3-freya From 342e48ed77a54dbbaad86fe0a8c7962d70df7607 Mon Sep 17 00:00:00 2001 From: MeiMei <30769358+mei23@users.noreply.github.com> Date: Tue, 14 May 2019 02:50:23 +0900 Subject: Fix meta tags (#4918) --- src/client/app/admin/views/federation.vue | 2 +- src/client/app/common/views/components/forkit.vue | 2 +- src/client/app/common/views/components/integrations.integration.vue | 2 +- src/client/app/common/views/components/messaging-room.message.vue | 2 +- src/client/app/common/views/components/mfm.ts | 2 ++ src/client/app/common/views/components/nav.vue | 4 ++-- src/client/app/common/views/components/settings/2fa.vue | 2 +- src/client/app/common/views/components/settings/integration.vue | 6 +++--- src/client/app/common/views/components/settings/theme.vue | 2 +- src/client/app/common/views/components/url-preview.vue | 2 +- src/client/app/common/views/components/url.vue | 4 ++-- src/client/app/common/views/deck/deck.note-column.vue | 2 +- src/client/app/common/views/deck/deck.user-column.vue | 2 +- src/client/app/common/views/widgets/rss.vue | 2 +- src/client/app/desktop/views/components/note-detail.vue | 2 +- src/client/app/desktop/views/components/note.vue | 2 +- src/client/app/desktop/views/home/user/index.vue | 2 +- src/client/app/mobile/views/components/media-video.vue | 1 + src/client/app/mobile/views/components/note-detail.vue | 2 +- src/client/app/mobile/views/components/note.vue | 2 +- src/client/app/mobile/views/pages/user/index.vue | 2 +- src/docs/article.pug | 2 +- src/server/web/views/note.pug | 3 +++ src/server/web/views/user.pug | 3 +++ 24 files changed, 33 insertions(+), 24 deletions(-) (limited to 'src/server') diff --git a/src/client/app/admin/views/federation.vue b/src/client/app/admin/views/federation.vue index 6b09a3c28e..25400393b9 100644 --- a/src/client/app/admin/views/federation.vue +++ b/src/client/app/admin/views/federation.vue @@ -130,7 +130,7 @@ {{ $t('status') }}
- {{ instance.host }} + {{ instance.host }} {{ instance.notesCount | number }} {{ instance.usersCount | number }} {{ instance.followingCount | number }} diff --git a/src/client/app/common/views/components/forkit.vue b/src/client/app/common/views/components/forkit.vue index 5629c5ac24..d652b846a4 100644 --- a/src/client/app/common/views/components/forkit.vue +++ b/src/client/app/common/views/components/forkit.vue @@ -1,5 +1,5 @@ diff --git a/src/client/app/common/views/components/messaging-room.message.vue b/src/client/app/common/views/components/messaging-room.message.vue index 256ea760b3..908533e0cc 100644 --- a/src/client/app/common/views/components/messaging-room.message.vue +++ b/src/client/app/common/views/components/messaging-room.message.vue @@ -9,7 +9,7 @@
- +

{{ message.file.name }}

diff --git a/src/client/app/common/views/components/mfm.ts b/src/client/app/common/views/components/mfm.ts index 78734200a7..9459172881 100644 --- a/src/client/app/common/views/components/mfm.ts +++ b/src/client/app/common/views/components/mfm.ts @@ -174,6 +174,7 @@ export default Vue.component('misskey-flavored-markdown', { key: Math.random(), props: { url: token.node.props.url, + rel: 'nofollow noopener', target: '_blank' }, attrs: { @@ -187,6 +188,7 @@ export default Vue.component('misskey-flavored-markdown', { attrs: { class: 'link', href: token.node.props.url, + rel: 'nofollow noopener', target: '_blank', title: token.node.props.url, style: 'color:var(--mfmLink);' diff --git a/src/client/app/common/views/components/nav.vue b/src/client/app/common/views/components/nav.vue index a8f9bb9289..9d4e7091b5 100644 --- a/src/client/app/common/views/components/nav.vue +++ b/src/client/app/common/views/components/nav.vue @@ -2,9 +2,9 @@
{{ $t('about') }} - {{ $t('repository') }} + {{ $t('repository') }} - {{ $t('feedback') }} + {{ $t('feedback') }} {{ $t('develop') }} diff --git a/src/client/app/common/views/components/settings/2fa.vue b/src/client/app/common/views/components/settings/2fa.vue index 07a1493151..6e8d19d83a 100644 --- a/src/client/app/common/views/components/settings/2fa.vue +++ b/src/client/app/common/views/components/settings/2fa.vue @@ -9,7 +9,7 @@
    -
  1. {{ $t('authenticator') }}{{ $t('howtoinstall') }}
  2. +
  3. {{ $t('authenticator') }}{{ $t('howtoinstall') }}
  4. {{ $t('scan') }}
  5. {{ $t('done') }}
    {{ $t('token') }} diff --git a/src/client/app/common/views/components/settings/integration.vue b/src/client/app/common/views/components/settings/integration.vue index 8ac0c134c0..71ad8b4509 100644 --- a/src/client/app/common/views/components/settings/integration.vue +++ b/src/client/app/common/views/components/settings/integration.vue @@ -4,21 +4,21 @@
    Twitter
    -

    {{ $t('connected-to') }}: @{{ $store.state.i.twitter.screenName }}

    +

    {{ $t('connected-to') }}: @{{ $store.state.i.twitter.screenName }}

    {{ $t('disconnect') }} {{ $t('connect') }}
    Discord
    -

    {{ $t('connected-to') }}: @{{ $store.state.i.discord.username }}#{{ $store.state.i.discord.discriminator }}

    +

    {{ $t('connected-to') }}: @{{ $store.state.i.discord.username }}#{{ $store.state.i.discord.discriminator }}

    {{ $t('disconnect') }} {{ $t('connect') }}
    GitHub
    -

    {{ $t('connected-to') }}: @{{ $store.state.i.github.login }}

    +

    {{ $t('connected-to') }}: @{{ $store.state.i.github.login }}

    {{ $t('disconnect') }} {{ $t('connect') }}
    diff --git a/src/client/app/common/views/components/settings/theme.vue b/src/client/app/common/views/components/settings/theme.vue index b1f7b2bc49..3e6b9133cd 100644 --- a/src/client/app/common/views/components/settings/theme.vue +++ b/src/client/app/common/views/components/settings/theme.vue @@ -45,7 +45,7 @@ - {{ $t('find-more-theme') }} + {{ $t('find-more-theme') }}
    {{ $t('create-a-theme') }} diff --git a/src/client/app/common/views/components/url-preview.vue b/src/client/app/common/views/components/url-preview.vue index af5f3e4ebc..9ca4497ad8 100644 --- a/src/client/app/common/views/components/url-preview.vue +++ b/src/client/app/common/views/components/url-preview.vue @@ -9,7 +9,7 @@
- +
diff --git a/src/client/app/common/views/components/url.vue b/src/client/app/common/views/components/url.vue index 2daf79cba6..faf439814d 100644 --- a/src/client/app/common/views/components/url.vue +++ b/src/client/app/common/views/components/url.vue @@ -1,5 +1,5 @@

{{ $t('@.user-suspended') }}

-
+

{{ $t('@.is-remote-user') }}{{ $t('@.view-on-remote') }}

diff --git a/src/docs/article.pug b/src/docs/article.pug index 38494fec6c..48f501d406 100644 --- a/src/docs/article.pug +++ b/src/docs/article.pug @@ -6,4 +6,4 @@ block main block footer p = i18n('docs.edit-this-page-on-github') - a(href=src target="_blank")= i18n('docs.edit-this-page-on-github-link') + a(href=src rel="noopener" target="_blank")= i18n('docs.edit-this-page-on-github-link') diff --git a/src/server/web/views/note.pug b/src/server/web/views/note.pug index 983c731a04..0580e959f7 100644 --- a/src/server/web/views/note.pug +++ b/src/server/web/views/note.pug @@ -26,6 +26,9 @@ block meta meta(name='twitter:card' content='summary') // todo + if user.host + meta(name='robots' content='noindex') + if user.twitter meta(name='twitter:creator' content=`@${user.twitter.screenName}`) diff --git a/src/server/web/views/user.pug b/src/server/web/views/user.pug index bff98ba80f..9b257afb7b 100644 --- a/src/server/web/views/user.pug +++ b/src/server/web/views/user.pug @@ -24,6 +24,9 @@ block meta meta(name='twitter:card' content='summary') + if user.host + meta(name='robots' content='noindex') + if profile.twitter meta(name='twitter:creator' content=`@${profile.twitter.screenName}`) -- cgit v1.2.3-freya From 7c03d37caa3107c4e21f60563a6f19979d0a509b Mon Sep 17 00:00:00 2001 From: tamaina Date: Tue, 14 May 2019 02:57:04 +0900 Subject: Add ToSUrl, repositoryUrl, feedbackUrl (#4921) * Add ToSUrl, repositoryUrl, feedbackUrl * modify nodeinfo --- CONTRIBUTING.md | 10 +++++++ locales/ja-JP.yml | 8 ++++++ migration/1557761316509-AddSomeUrls.ts | 16 +++++++++++ src/client/app/admin/views/instance.vue | 12 +++++++++ src/client/app/common/views/components/nav.vue | 17 ++++++++++-- src/client/app/common/views/components/signup.vue | 10 +++++-- src/models/entities/meta.ts | 20 ++++++++++++++ src/server/api/endpoints/admin/update-meta.ts | 33 +++++++++++++++++++++++ src/server/api/endpoints/meta.ts | 3 +++ src/server/nodeinfo.ts | 6 +++++ 10 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 migration/1557761316509-AddSomeUrls.ts (limited to 'src/server') diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index edc6244d39..c0c72c4704 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -197,3 +197,13 @@ const user = await Users.findOne(userId).then(ensure); // } // の糖衣構文のような扱いです ``` + +### Migration作成方法 +コードの変更をした後、`ormconfig.json`(書き方はCONTRIBUTING.mdを参照)を用意し、 + +``` +npm i -g ts-node +ts-node ./node_modules/typeorm/cli.js migration:generate -n 変更の名前 +``` + +作成されたスクリプトは不必要な変更を含むため除去してください。 diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 14b8daad48..c3bb4f7756 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -508,6 +508,7 @@ common/views/components/nav.vue: repository: "リポジトリ" develop: "開発者" feedback: "フィードバック" + tos: "利用規約" common/views/components/note-menu.vue: mention: "メンション" @@ -628,6 +629,8 @@ common/views/components/signup.vue: password-matched: "確認されました" password-not-matched: "一致していません" recaptcha: "認証" + agree-to: "{0}に同意します。" + tos: "利用規約" create: "アカウント作成" some-error: "何らかの原因によりアカウントの作成に失敗しました。再度お試しください。" @@ -1215,10 +1218,15 @@ admin/views/instance.vue: instance-name: "インスタンス名" instance-description: "インスタンスの紹介" host: "ホスト" + icon-url: "アイコンURL" + logo-url: "ロゴURL" banner-url: "バナー画像URL" error-image-url: "エラー画像URL" languages: "インスタンスの対象言語" languages-desc: "スペースで区切って複数設定できます。" + tos-url: "利用規約URL" + repository-url: "リポジトリURL" + feedback-url: "フィードバックURL" maintainer-config: "管理者情報" maintainer-name: "管理者名" maintainer-email: "管理者の連絡先" diff --git a/migration/1557761316509-AddSomeUrls.ts b/migration/1557761316509-AddSomeUrls.ts new file mode 100644 index 0000000000..a0a2c7970a --- /dev/null +++ b/migration/1557761316509-AddSomeUrls.ts @@ -0,0 +1,16 @@ +import {MigrationInterface, QueryRunner} from "typeorm"; + +export class AddSomeUrls1557761316509 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "meta" ADD "ToSUrl" character varying(512)`); + await queryRunner.query(`ALTER TABLE "meta" ADD "repositoryUrl" character varying(512) NOT NULL DEFAULT 'https://github.com/syuilo/misskey'`); + await queryRunner.query(`ALTER TABLE "meta" ADD "feedbackUrl" character varying(512) DEFAULT 'https://github.com/syuilo/misskey/issues/new'`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "feedbackUrl"`); + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "repositoryUrl"`); + await queryRunner.query(`ALTER TABLE "meta" DROP COLUMN "ToSUrl"`); + } +} diff --git a/src/client/app/admin/views/instance.vue b/src/client/app/admin/views/instance.vue index d81edc8fe6..3bbe6579d3 100644 --- a/src/client/app/admin/views/instance.vue +++ b/src/client/app/admin/views/instance.vue @@ -10,6 +10,9 @@ {{ $t('logo-url') }} {{ $t('banner-url') }} {{ $t('error-image-url') }} + {{ $t('tos-url') }} + {{ $t('repository-url') }} + {{ $t('feedback-url') }} {{ $t('languages') }}
@@ -156,6 +159,9 @@ export default Vue.extend({ host: toUnicode(host), maintainerName: null, maintainerEmail: null, + ToSUrl: null, + repositoryUrl: "https://github.com/syuilo/misskey", + feedbackUrl: null, disableRegistration: false, disableLocalTimeline: false, disableGlobalTimeline: false, @@ -207,6 +213,9 @@ export default Vue.extend({ this.$root.getMeta(true).then(meta => { this.maintainerName = meta.maintainerName; this.maintainerEmail = meta.maintainerEmail; + this.ToSUrl = meta.ToSUrl; + this.repositoryUrl = meta.repositoryUrl; + this.feedbackUrl = meta.feedbackUrl; this.disableRegistration = meta.disableRegistration; this.disableLocalTimeline = meta.disableLocalTimeline; this.disableGlobalTimeline = meta.disableGlobalTimeline; @@ -268,6 +277,9 @@ export default Vue.extend({ this.$root.api('admin/update-meta', { maintainerName: this.maintainerName, maintainerEmail: this.maintainerEmail, + ToSUrl: this.ToSUrl, + repositoryUrl: this.repositoryUrl, + feedbackUrl: this.feedbackUrl, disableRegistration: this.disableRegistration, disableLocalTimeline: this.disableLocalTimeline, disableGlobalTimeline: this.disableGlobalTimeline, diff --git a/src/client/app/common/views/components/nav.vue b/src/client/app/common/views/components/nav.vue index 9d4e7091b5..da26fd1b8e 100644 --- a/src/client/app/common/views/components/nav.vue +++ b/src/client/app/common/views/components/nav.vue @@ -1,12 +1,16 @@ @@ -21,8 +25,17 @@ export default Vue.extend({ return { aboutUrl: `/docs/${lang}/about`, repositoryUrl: 'https://github.com/syuilo/misskey', - feedbackUrl: 'https://github.com/syuilo/misskey/issues/new' + feedbackUrl: 'https://github.com/syuilo/misskey/issues/new', + ToSUrl: null } + }, + + mounted() { + this.$root.getMeta(true).then(meta => { + this.repositoryUrl = meta.repositoryUrl; + this.feedbackUrl = meta.feedbackUrl; + this.ToSUrl = meta.ToSUrl; + }) } }); diff --git a/src/client/app/common/views/components/signup.vue b/src/client/app/common/views/components/signup.vue index 9b1df79771..bf8e5d25b8 100644 --- a/src/client/app/common/views/components/signup.vue +++ b/src/client/app/common/views/components/signup.vue @@ -37,8 +37,13 @@

{{ $t('password-not-matched') }}

+ + + {{ $t('tos') }} + +
- {{ $t('create') }} + {{ $t('create') }} @@ -64,7 +69,8 @@ export default Vue.extend({ usernameState: null, passwordStrength: '', passwordRetypeState: null, - meta: null + meta: {}, + ToSAgreement: false } }, diff --git a/src/models/entities/meta.ts b/src/models/entities/meta.ts index 2c36b8333f..c3797a9ed6 100644 --- a/src/models/entities/meta.ts +++ b/src/models/entities/meta.ts @@ -268,4 +268,24 @@ export class Meta { nullable: true }) public discordClientSecret: string | null; + + @Column('varchar', { + length: 512, + nullable: true + }) + public ToSUrl: string | null; + + @Column('varchar', { + length: 512, + default: 'https://github.com/syuilo/misskey', + nullable: false + }) + public repositoryUrl: string; + + @Column('varchar', { + length: 512, + default: 'https://github.com/syuilo/misskey/issues/new', + nullable: true + }) + public feedbackUrl: string | null; } diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts index 8a2019fcc1..e34840e907 100644 --- a/src/server/api/endpoints/admin/update-meta.ts +++ b/src/server/api/endpoints/admin/update-meta.ts @@ -330,6 +330,27 @@ export const meta = { 'ja-JP': 'ServiceWorkerのVAPIDキーペアの秘密鍵' } }, + + ToSUrl: { + validator: $.optional.nullable.str, + desc: { + 'ja-JP': '利用規約のURL' + } + }, + + repositoryUrl: { + validator: $.optional.str, + desc: { + 'ja-JP': 'リポジトリのURL' + } + }, + + feedbackUrl: { + validator: $.optional.str, + desc: { + 'ja-JP': 'フィードバックのURL' + } + } } }; @@ -516,6 +537,18 @@ export default define(meta, async (ps) => { set.swPrivateKey = ps.swPrivateKey; } + if (ps.ToSUrl !== undefined) { + set.ToSUrl = ps.ToSUrl; + } + + if (ps.repositoryUrl !== undefined) { + set.repositoryUrl = ps.repositoryUrl; + } + + if (ps.feedbackUrl !== undefined) { + set.feedbackUrl = ps.feedbackUrl; + } + await getConnection().transaction(async transactionalEntityManager => { const meta = await transactionalEntityManager.findOne(Meta, { order: { diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts index 5667e7fbb4..e29edae266 100644 --- a/src/server/api/endpoints/meta.ts +++ b/src/server/api/endpoints/meta.ts @@ -106,6 +106,9 @@ export default define(meta, async (ps, me) => { uri: config.url, description: instance.description, langs: instance.langs, + ToSUrl: instance.ToSUrl, + repositoryUrl: instance.repositoryUrl, + feedbackUrl: instance.feedbackUrl, secure: config.https != null, machine: os.hostname(), diff --git a/src/server/nodeinfo.ts b/src/server/nodeinfo.ts index d3ad90fab5..da1e4e7b5e 100644 --- a/src/server/nodeinfo.ts +++ b/src/server/nodeinfo.ts @@ -26,6 +26,9 @@ const nodeinfo2 = async () => { maintainerName, maintainerEmail, langs, + ToSUrl, + repositoryUrl, + feedbackUrl, announcements, disableRegistration, disableLocalTimeline, @@ -77,6 +80,9 @@ const nodeinfo2 = async () => { email: maintainerEmail }, langs, + ToSUrl, + repositoryUrl, + feedbackUrl, announcements, disableRegistration, disableLocalTimeline, -- cgit v1.2.3-freya From f9f574532e3a6baca7e04190c78600c5b334aaa0 Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 14 May 2019 20:49:09 +0900 Subject: インスタンスブロックを設定できるように MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/ja-JP.yml | 2 ++ src/client/app/admin/views/federation.vue | 36 ++++++++++++++++++++++++--- src/server/api/endpoints/admin/update-meta.ts | 11 ++++++++ src/server/api/endpoints/meta.ts | 1 + 4 files changed, 47 insertions(+), 3 deletions(-) (limited to 'src/server') diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index c3bb4f7756..9390af40a9 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1486,6 +1486,8 @@ admin/views/federation.vue: chart-spans: hour: "1時間ごと" day: "1日ごと" + blocked-hosts: "ブロック" + blocked-hosts-info: "ブロックしたいホストを改行で区切って記述します。" desktop/views/pages/welcome.vue: about: "詳しく..." diff --git a/src/client/app/admin/views/federation.vue b/src/client/app/admin/views/federation.vue index 25400393b9..4d0b4b7c77 100644 --- a/src/client/app/admin/views/federation.vue +++ b/src/client/app/admin/views/federation.vue @@ -54,7 +54,6 @@ {{ $t('latest-request-received-at') }} - {{ $t('block') }} {{ $t('marked-as-closed') }}
{{ $t('charts') }} @@ -142,6 +141,16 @@ {{ $t('result-is-truncated', { n: limit }) }}
+ + + +
+ + + + {{ $t('save') }} +
+
@@ -149,7 +158,7 @@ import Vue from 'vue'; import i18n from '../../i18n'; import { faPaperPlane } from '@fortawesome/free-regular-svg-icons'; -import { faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faTrafficLight, faInbox } from '@fortawesome/free-solid-svg-icons'; +import { faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faTrafficLight, faInbox } from '@fortawesome/free-solid-svg-icons'; import ApexCharts from 'apexcharts'; import * as tinycolor from 'tinycolor2'; @@ -176,7 +185,8 @@ export default Vue.extend({ chartSrc: 'requests', chartSpan: 'hour', chartInstance: null, - faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faPaperPlane, faTrafficLight, faInbox + blockedHosts: '', + faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faPaperPlane, faTrafficLight, faInbox }; }, @@ -246,6 +256,10 @@ export default Vue.extend({ mounted() { this.fetchInstances(); + + this.$root.getMeta().then(meta => { + this.blockedHosts = meta.blockedHosts.join('\n'); + }); }, beforeDestroy() { @@ -477,6 +491,22 @@ export default Vue.extend({ }] }; }, + + saveBlockedHosts() { + this.$root.api('admin/update-meta', { + blockedHosts: this.blockedHosts.split('\n') + }).then(() => { + this.$root.dialog({ + type: 'success', + text: this.$t('saved') + }); + }).catch(e => { + this.$root.dialog({ + type: 'error', + text: e + }); + }); + } } }); diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts index e34840e907..e4f2e86aaa 100644 --- a/src/server/api/endpoints/admin/update-meta.ts +++ b/src/server/api/endpoints/admin/update-meta.ts @@ -70,6 +70,13 @@ export const meta = { } }, + blockedHosts: { + validator: $.optional.nullable.arr($.str), + desc: { + 'ja-JP': 'ブロックするホスト' + } + }, + mascotImageUrl: { validator: $.optional.nullable.str, desc: { @@ -389,6 +396,10 @@ export default define(meta, async (ps) => { set.hiddenTags = ps.hiddenTags; } + if (Array.isArray(ps.blockedHosts)) { + set.blockedHosts = ps.blockedHosts; + } + if (ps.mascotImageUrl !== undefined) { set.mascotImageUrl = ps.mascotImageUrl; } diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts index e29edae266..1bd88a1e6d 100644 --- a/src/server/api/endpoints/meta.ts +++ b/src/server/api/endpoints/meta.ts @@ -165,6 +165,7 @@ export default define(meta, async (ps, me) => { response.useStarForReactionFallback = instance.useStarForReactionFallback; response.pinnedUsers = instance.pinnedUsers; response.hiddenTags = instance.hiddenTags; + response.blockedHosts = instance.blockedHosts; response.recaptchaSecretKey = instance.recaptchaSecretKey; response.proxyAccount = instance.proxyAccount; response.twitterConsumerKey = instance.twitterConsumerKey; -- cgit v1.2.3-freya From b779ff08e0aeb95b879972b7dc26bc81a81e627c Mon Sep 17 00:00:00 2001 From: syuilo Date: Tue, 14 May 2019 21:08:35 +0900 Subject: 特定のインスタンスのファイルをすべて削除できるように MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- locales/ja-JP.yml | 1 + src/client/app/admin/views/federation.vue | 19 +++++++++++++-- .../endpoints/admin/federation/delete-all-files.ts | 27 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 src/server/api/endpoints/admin/federation/delete-all-files.ts (limited to 'src/server') diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 7068e7c3ed..ed0da44d68 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -1441,6 +1441,7 @@ admin/views/federation.vue: latest-request-received-at: "直近のリクエスト受信" remove-all-following: "フォローを全解除" remove-all-following-info: "{host}からのフォローをすべて解除します。そのインスタンスがもう存在しなくなった場合などに実行してください。" + delete-all-files: "ファイルをすべて削除" block: "ブロック" marked-as-closed: "閉鎖されているとマーク" lookup: "照会" diff --git a/src/client/app/admin/views/federation.vue b/src/client/app/admin/views/federation.vue index 4d0b4b7c77..8b7719069c 100644 --- a/src/client/app/admin/views/federation.vue +++ b/src/client/app/admin/views/federation.vue @@ -78,6 +78,10 @@
+
+ {{ $t('delete-all-files') }} + {{ $t('delete-all-files') }} +
{{ $t('remove-all-following') }} {{ $t('remove-all-following') }} @@ -158,7 +162,7 @@ import Vue from 'vue'; import i18n from '../../i18n'; import { faPaperPlane } from '@fortawesome/free-regular-svg-icons'; -import { faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faTrafficLight, faInbox } from '@fortawesome/free-solid-svg-icons'; +import { faTrashAlt, faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faTrafficLight, faInbox } from '@fortawesome/free-solid-svg-icons'; import ApexCharts from 'apexcharts'; import * as tinycolor from 'tinycolor2'; @@ -186,7 +190,7 @@ export default Vue.extend({ chartSpan: 'hour', chartInstance: null, blockedHosts: '', - faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faPaperPlane, faTrafficLight, faInbox + faTrashAlt, faBan, faGlobe, faTerminal, faSearch, faMinusCircle, faServer, faCrosshairs, faEnvelopeOpenText, faUsers, faCaretDown, faCaretUp, faPaperPlane, faTrafficLight, faInbox }; }, @@ -307,6 +311,17 @@ export default Vue.extend({ }); }, + deleteAllFiles() { + this.$root.api('admin/federation/delete-all-files', { + host: this.instance.host + }).then(() => { + this.$root.dialog({ + type: 'success', + splash: true + }); + }); + }, + updateInstance() { this.$root.api('admin/federation/update-instance', { host: this.instance.host, diff --git a/src/server/api/endpoints/admin/federation/delete-all-files.ts b/src/server/api/endpoints/admin/federation/delete-all-files.ts new file mode 100644 index 0000000000..befb362264 --- /dev/null +++ b/src/server/api/endpoints/admin/federation/delete-all-files.ts @@ -0,0 +1,27 @@ +import $ from 'cafy'; +import define from '../../../define'; +import del from '../../../../../services/drive/delete-file'; +import { DriveFiles } from '../../../../../models'; + +export const meta = { + tags: ['admin'], + + requireCredential: true, + requireModerator: true, + + params: { + host: { + validator: $.str + } + } +}; + +export default define(meta, async (ps, me) => { + const files = await DriveFiles.find({ + userHost: ps.host + }); + + for (const file of files) { + del(file); + } +}); -- cgit v1.2.3-freya