summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortamaina <tamaina@hotmail.co.jp>2019-05-14 02:57:04 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2019-05-14 02:57:04 +0900
commit7c03d37caa3107c4e21f60563a6f19979d0a509b (patch)
treee3861d7d057c5458091df9739fb1e5d11b6d1e16
parentFix: user menu (#4845) (#4920) (diff)
downloadsharkey-7c03d37caa3107c4e21f60563a6f19979d0a509b.tar.gz
sharkey-7c03d37caa3107c4e21f60563a6f19979d0a509b.tar.bz2
sharkey-7c03d37caa3107c4e21f60563a6f19979d0a509b.zip
Add ToSUrl, repositoryUrl, feedbackUrl (#4921)
* Add ToSUrl, repositoryUrl, feedbackUrl * modify nodeinfo
-rw-r--r--CONTRIBUTING.md10
-rw-r--r--locales/ja-JP.yml8
-rw-r--r--migration/1557761316509-AddSomeUrls.ts16
-rw-r--r--src/client/app/admin/views/instance.vue12
-rw-r--r--src/client/app/common/views/components/nav.vue17
-rw-r--r--src/client/app/common/views/components/signup.vue10
-rw-r--r--src/models/entities/meta.ts20
-rw-r--r--src/server/api/endpoints/admin/update-meta.ts33
-rw-r--r--src/server/api/endpoints/meta.ts3
-rw-r--r--src/server/nodeinfo.ts6
10 files changed, 131 insertions, 4 deletions
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<any> {
+ 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<any> {
+ 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 @@
<ui-input v-model="mascotImageUrl"><template #icon><fa icon="link"/></template>{{ $t('logo-url') }}</ui-input>
<ui-input v-model="bannerUrl"><template #icon><fa icon="link"/></template>{{ $t('banner-url') }}</ui-input>
<ui-input v-model="errorImageUrl"><template #icon><fa icon="link"/></template>{{ $t('error-image-url') }}</ui-input>
+ <ui-input v-model="ToSUrl"><template #icon><fa icon="link"/></template>{{ $t('tos-url') }}</ui-input>
+ <ui-input v-model="repositoryUrl"><template #icon><fa icon="link"/></template>{{ $t('repository-url') }}</ui-input>
+ <ui-input v-model="feedbackUrl"><template #icon><fa icon="link"/></template>{{ $t('feedback-url') }}</ui-input>
<ui-input v-model="languages"><template #icon><fa icon="language"/></template>{{ $t('languages') }}<template #desc>{{ $t('languages-desc') }}</template></ui-input>
</section>
<section class="fit-bottom">
@@ -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 @@
<template>
<span class="mk-nav">
<a :href="aboutUrl">{{ $t('about') }}</a>
+ <template v-if="ToSUrl !== null">
+ <i>・</i>
+ <a :href="ToSUrl" target="_blank">{{ $t('tos') }}</a>
+ </template>
<i>・</i>
<a :href="repositoryUrl" rel="noopener" target="_blank">{{ $t('repository') }}</a>
<i>・</i>
<a :href="feedbackUrl" rel="noopener" target="_blank">{{ $t('feedback') }}</a>
<i>・</i>
- <a href="/dev">{{ $t('develop') }}</a>
+ <a href="/dev" target="_blank">{{ $t('develop') }}</a>
</span>
</template>
@@ -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;
+ })
}
});
</script>
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 @@
<p v-if="passwordRetypeState == 'not-match'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> {{ $t('password-not-matched') }}</p>
</template>
</ui-input>
+ <ui-switch v-model="ToSAgreement" v-if="meta.ToSUrl">
+ <i18n path="agree-to">
+ <a :href="meta.ToSUrl" target="_blank">{{ $t('tos') }}</a>
+ </i18n>
+ </ui-switch>
<div v-if="meta.enableRecaptcha" class="g-recaptcha" :data-sitekey="meta.recaptchaSiteKey" style="margin: 16px 0;"></div>
- <ui-button type="submit">{{ $t('create') }}</ui-button>
+ <ui-button type="submit" :disabled="!(meta.ToSUrl ? ToSAgreement : true)">{{ $t('create') }}</ui-button>
</template>
</form>
</template>
@@ -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,