diff --git a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
index 3567585cb8..e0d23331b8 100644
--- a/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
+++ b/src/client/app/desktop/views/pages/admin/admin.dashboard.vue
@@ -11,6 +11,10 @@
@@ -28,6 +32,7 @@ export default Vue.extend({
data() {
return {
stats: null,
+ disableRegistration: false,
inviteCode: null,
connection: null,
connectionId: null
@@ -37,6 +42,10 @@ export default Vue.extend({
this.connection = (this as any).os.streams.serverStatsStream.getConnection();
this.connectionId = (this as any).os.streams.serverStatsStream.use();
+ (this as any).os.getMeta().then(meta => {
+ this.disableRegistration = meta.disableRegistration;
+ });
+
(this as any).api('stats').then(stats => {
this.stats = stats;
});
@@ -49,6 +58,11 @@ export default Vue.extend({
(this as any).api('admin/invite').then(x => {
this.inviteCode = x.code;
});
+ },
+ updateMeta() {
+ (this as any).api('admin/update-meta', {
+ disableRegistration: this.disableRegistration
+ });
}
}
});
diff --git a/src/server/api/endpoints/admin/update-meta.ts b/src/server/api/endpoints/admin/update-meta.ts
new file mode 100644
index 0000000000..bfcab9d6a6
--- /dev/null
+++ b/src/server/api/endpoints/admin/update-meta.ts
@@ -0,0 +1,37 @@
+import $ from 'cafy';
+import Meta from '../../../../models/meta';
+import getParams from '../../get-params';
+
+export const meta = {
+ desc: {
+ ja: 'インスタンスの設定を更新します。'
+ },
+
+ requireCredential: true,
+ requireAdmin: true,
+
+ params: {
+ disableRegistration: $.bool.optional.nullable.note({
+ desc: {
+ ja: '招待制か否か'
+ }
+ }),
+ }
+};
+
+export default (params: any) => new Promise(async (res, rej) => {
+ const [ps, psErr] = getParams(meta, params);
+ if (psErr) return rej(psErr);
+
+ const set = {} as any;
+
+ if (ps.disableRegistration === true || ps.disableRegistration === false) {
+ set.disableRegistration = ps.disableRegistration;
+ }
+
+ await Meta.update({}, {
+ $set: set
+ }, { upsert: true });
+
+ res();
+});