summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-11-07 01:12:26 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-11-07 01:12:26 +0900
commit06b66f020916eb73919c64278e07fe51d80ecc3e (patch)
tree509b104d665d6d862d891449c04b4ab692a5f83a /src
parentghostの設定をDBに保存するように (diff)
downloadmisskey-06b66f020916eb73919c64278e07fe51d80ecc3e.tar.gz
misskey-06b66f020916eb73919c64278e07fe51d80ecc3e.tar.bz2
misskey-06b66f020916eb73919c64278e07fe51d80ecc3e.zip
メンテナ情報をDBに保存するように
Diffstat (limited to 'src')
-rw-r--r--src/client/app/admin/views/instance.vue11
-rw-r--r--src/client/app/common/views/components/signup.vue2
-rw-r--r--src/client/app/common/views/widgets/donation.vue2
-rw-r--r--src/client/app/common/views/widgets/server.info.vue2
-rw-r--r--src/client/app/desktop/views/components/settings.vue2
-rw-r--r--src/client/app/desktop/views/pages/welcome.vue2
-rw-r--r--src/client/app/mobile/views/pages/welcome.vue2
-rw-r--r--src/config/types.ts18
-rw-r--r--src/models/meta.ts29
-rw-r--r--src/push-sw.ts2
-rw-r--r--src/server/api/endpoints/admin/update-meta.ts24
-rw-r--r--src/server/api/endpoints/meta.ts2
-rw-r--r--src/server/api/mastodon/index.ts2
13 files changed, 74 insertions, 26 deletions
diff --git a/src/client/app/admin/views/instance.vue b/src/client/app/admin/views/instance.vue
index 5acb493332..c92326aa07 100644
--- a/src/client/app/admin/views/instance.vue
+++ b/src/client/app/admin/views/instance.vue
@@ -7,6 +7,11 @@
<ui-textarea v-model="description">%i18n:@instance-description%</ui-textarea>
<ui-input v-model="bannerUrl"><i slot="icon"><fa icon="link"/></i>%i18n:@banner-url%</ui-input>
</section>
+ <section class="fit-bottom">
+ <header><fa icon="headset"/> %i18n:@maintainer-config%</header>
+ <ui-input v-model="maintainerName">%i18n:@maintainer-name%</ui-input>
+ <ui-input v-model="maintainerEmail">%i18n:@maintainer-email%</ui-input>
+ </section>
<section class="fit-top fit-bottom">
<ui-input v-model="maxNoteTextLength">%i18n:@max-note-text-length%</ui-input>
</section>
@@ -56,6 +61,8 @@ import Vue from "vue";
export default Vue.extend({
data() {
return {
+ maintainerName: null,
+ maintainerEmail: null,
disableRegistration: false,
disableLocalTimeline: false,
bannerUrl: null,
@@ -75,6 +82,8 @@ export default Vue.extend({
created() {
(this as any).os.getMeta().then(meta => {
+ this.maintainerName = meta.maintainer.name;
+ this.maintainerEmail = meta.maintainer.email;
this.bannerUrl = meta.bannerUrl;
this.name = meta.name;
this.description = meta.description;
@@ -103,6 +112,8 @@ export default Vue.extend({
updateMeta() {
(this as any).api('admin/update-meta', {
+ maintainerName: this.maintainerName,
+ maintainerEmail: this.maintainerEmail,
disableRegistration: this.disableRegistration,
disableLocalTimeline: this.disableLocalTimeline,
bannerUrl: this.bannerUrl,
diff --git a/src/client/app/common/views/components/signup.vue b/src/client/app/common/views/components/signup.vue
index 91a09e14fb..d743202c27 100644
--- a/src/client/app/common/views/components/signup.vue
+++ b/src/client/app/common/views/components/signup.vue
@@ -4,7 +4,7 @@
<ui-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required styl="fill">
<span>%i18n:@invitation-code%</span>
<span slot="prefix"><fa icon="id-card-alt"/></span>
- <p slot="desc" v-html="'%i18n:@invitation-info%'.replace('{}', meta.maintainer.url)"></p>
+ <p slot="desc" v-html="'%i18n:@invitation-info%'.replace('{}', 'mailto:' + meta.maintainer.email)"></p>
</ui-input>
<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername" styl="fill">
<span>%i18n:@username%</span>
diff --git a/src/client/app/common/views/widgets/donation.vue b/src/client/app/common/views/widgets/donation.vue
index 4ef1557f97..3321b768e1 100644
--- a/src/client/app/common/views/widgets/donation.vue
+++ b/src/client/app/common/views/widgets/donation.vue
@@ -5,7 +5,7 @@
<h1><fa icon="heart"/>%i18n:@title%</h1>
<p v-if="meta">
{{ '%i18n:@text%'.substr(0, '%i18n:@text%'.indexOf('{')) }}
- <a :href="meta.maintainer.url">{{ meta.maintainer.name }}</a>
+ <a :href="'mailto:' + meta.maintainer.email">{{ meta.maintainer.name }}</a>
{{ '%i18n:@text%'.substr('%i18n:@text%'.indexOf('}') + 1) }}
</p>
</article>
diff --git a/src/client/app/common/views/widgets/server.info.vue b/src/client/app/common/views/widgets/server.info.vue
index d243629506..3cb1748128 100644
--- a/src/client/app/common/views/widgets/server.info.vue
+++ b/src/client/app/common/views/widgets/server.info.vue
@@ -1,6 +1,6 @@
<template>
<div class="info">
- <p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
+ <p>Maintainer: <b><a :href="'mailto:' + meta.maintainer.email" target="_blank">{{ meta.maintainer.name }}</a></b></p>
<p>Machine: {{ meta.machine }}</p>
<p>Node: {{ meta.node }}</p>
</div>
diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue
index 6aa047d015..95965e245c 100644
--- a/src/client/app/desktop/views/components/settings.vue
+++ b/src/client/app/desktop/views/components/settings.vue
@@ -247,7 +247,7 @@
<ui-card class="other" v-show="page == 'other'">
<div slot="title"><fa icon="info-circle"/> %i18n:@about%</div>
<section>
- <p v-if="meta">%i18n:@operator%: <i><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></i></p>
+ <p v-if="meta">%i18n:@operator%: <i><a :href="'mailto:' + meta.maintainer.email" target="_blank">{{ meta.maintainer.name }}</a></i></p>
</section>
</ui-card>
diff --git a/src/client/app/desktop/views/pages/welcome.vue b/src/client/app/desktop/views/pages/welcome.vue
index fbb20f4057..8825e518d7 100644
--- a/src/client/app/desktop/views/pages/welcome.vue
+++ b/src/client/app/desktop/views/pages/welcome.vue
@@ -87,7 +87,7 @@
<div>
<div v-if="meta" class="body">
<p>Version: <b>{{ meta.version }}</b></p>
- <p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
+ <p>Maintainer: <b><a :href="'mailto:' + meta.maintainer.email" target="_blank">{{ meta.maintainer.name }}</a></b></p>
</div>
</div>
</div>
diff --git a/src/client/app/mobile/views/pages/welcome.vue b/src/client/app/mobile/views/pages/welcome.vue
index 4babc47a7a..c235cac690 100644
--- a/src/client/app/mobile/views/pages/welcome.vue
+++ b/src/client/app/mobile/views/pages/welcome.vue
@@ -62,7 +62,7 @@
</article>
<div class="info" v-if="meta">
<p>Version: <b>{{ meta.version }}</b></p>
- <p>Maintainer: <b><a :href="meta.maintainer.url" target="_blank">{{ meta.maintainer.name }}</a></b></p>
+ <p>Maintainer: <b><a :href="'mailto:' + meta.maintainer.email" target="_blank">{{ meta.maintainer.name }}</a></b></p>
</div>
<footer>
<small>{{ copyright }}</small>
diff --git a/src/config/types.ts b/src/config/types.ts
index 1e44c4061e..fb7d652ef1 100644
--- a/src/config/types.ts
+++ b/src/config/types.ts
@@ -2,22 +2,8 @@
* ユーザーが設定する必要のある情報
*/
export type Source = {
- /**
- * メンテナ情報
- */
- maintainer: {
- /**
- * メンテナの名前
- */
- name: string;
- /**
- * メンテナの連絡先(URLかmailto形式のURL)
- */
- url: string;
- email?: string;
- repository_url?: string;
- feedback_url?: string;
- };
+ repository_url?: string;
+ feedback_url?: string;
languages?: string[];
url: string;
port: number;
diff --git a/src/models/meta.ts b/src/models/meta.ts
index 5d03d94181..8d3a917dfb 100644
--- a/src/models/meta.ts
+++ b/src/models/meta.ts
@@ -88,17 +88,46 @@ if ((config as any).ghost) {
}
});
}
+if ((config as any).maintainer) {
+ Meta.findOne({}).then(m => {
+ if (m != null && m.maintainer == null) {
+ Meta.update({}, {
+ $set: {
+ maintainer: (config as any).maintainer
+ }
+ });
+ }
+ });
+}
export type IMeta = {
name?: string;
description?: string;
+
+ /**
+ * メンテナ情報
+ */
+ maintainer: {
+ /**
+ * メンテナの名前
+ */
+ name: string;
+
+ /**
+ * メンテナの連絡先
+ */
+ email?: string;
+ };
+
broadcasts?: any[];
+
stats?: {
notesCount: number;
originalNotesCount: number;
usersCount: number;
originalUsersCount: number;
};
+
disableRegistration?: boolean;
disableLocalTimeline?: boolean;
hidedTags?: string[];
diff --git a/src/push-sw.ts b/src/push-sw.ts
index cfed5f03cd..d30965f800 100644
--- a/src/push-sw.ts
+++ b/src/push-sw.ts
@@ -6,7 +6,7 @@ import config from './config';
if (config.sw) {
// アプリケーションの連絡先と、サーバーサイドの鍵ペアの情報を登録
push.setVapidDetails(
- config.maintainer.url,
+ config.url,
config.sw.public_key,
config.sw.private_key);
}
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
index f541409274..bcfa420ed8 100644
--- a/src/server/api/endpoints/admin/update-meta.ts
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -114,7 +114,21 @@ export const meta = {
proxyAccount: {
validator: $.str.optional.nullable,
desc: {
- 'ja-JP': 'Proxy account username'
+ 'ja-JP': 'プロキシアカウントのユーザー名'
+ }
+ },
+
+ maintainerName: {
+ validator: $.str.optional,
+ desc: {
+ 'ja-JP': 'インスタンスの管理者名'
+ }
+ },
+
+ maintainerEmail: {
+ validator: $.str.optional.nullable,
+ desc: {
+ 'ja-JP': 'インスタンス管理者の連絡先メールアドレス'
}
}
}
@@ -183,6 +197,14 @@ export default define(meta, (ps) => new Promise(async (res, rej) => {
set.proxyAccount = ps.proxyAccount;
}
+ if (ps.maintainerName !== undefined) {
+ set['maintainer.name'] = ps.maintainerName;
+ }
+
+ if (ps.maintainerEmail !== undefined) {
+ set['maintainer.email'] = ps.maintainerEmail;
+ }
+
await Meta.update({}, {
$set: set
}, { upsert: true });
diff --git a/src/server/api/endpoints/meta.ts b/src/server/api/endpoints/meta.ts
index 03d2d9c6eb..ae07b944c2 100644
--- a/src/server/api/endpoints/meta.ts
+++ b/src/server/api/endpoints/meta.ts
@@ -36,7 +36,7 @@ export default define(meta, (ps, me) => new Promise(async (res, rej) => {
});
const response: any = {
- maintainer: config.maintainer,
+ maintainer: instance.maintainer,
version: pkg.version,
clientVersion: client.version,
diff --git a/src/server/api/mastodon/index.ts b/src/server/api/mastodon/index.ts
index 98e9c20be1..0e9203aa5a 100644
--- a/src/server/api/mastodon/index.ts
+++ b/src/server/api/mastodon/index.ts
@@ -48,7 +48,7 @@ router.get('/v1/instance', async ctx => { // TODO: This is a temporary implement
uri: config.hostname,
title: meta.name || 'Misskey',
description: meta.description || '',
- email: config.maintainer.email || config.maintainer.url.startsWith('mailto:') ? config.maintainer.url.slice(7) : '',
+ email: meta.maintainer.email,
version: `0.0.0:compatible:misskey:${pkg.version}`, // TODO: How to tell about that this is an api for compatibility?
thumbnail: meta.bannerUrl,
/*