Skip to content

Commit

Permalink
アカウント削除を無効化できるように
Browse files Browse the repository at this point in the history
Feat: Option of disable account deletion
  • Loading branch information
atsu1125 committed Oct 11, 2022
1 parent 8c1379c commit 65f9c2f
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 0 deletions.
1 change: 1 addition & 0 deletions locales/en-US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1438,6 +1438,7 @@ admin/views/instance.vue:
proxy-account-warn: "You must make an account having this username before this action."
max-note-text-length: "Maximum numbers of post characters"
disable-registration: "Disable new user registration"
disable-deletion: "Disable account deletion"
disable-local-timeline: "Disable the Local Timeline"
disable-global-timeline: "Disable global timeline"
showReplayInPublicTimeline: "Show replay in public timelines"
Expand Down
1 change: 1 addition & 0 deletions locales/ja-JP.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1590,6 +1590,7 @@ admin/views/instance.vue:
proxy-account-warn: "アカウントは自動で作られないため、そのユーザー名のアカウントを予め作成しておく必要があります。"
max-note-text-length: "投稿の最大文字数"
disable-registration: "ユーザー登録の受付を停止する"
disable-deletion: "アカウント削除を無効にする"
disable-local-timeline: "ローカルタイムラインを無効にする"
disable-global-timeline: "グローバルタイムラインを無効にする"
showReplayInPublicTimeline: "公開タイムラインにリプライを表示する"
Expand Down
4 changes: 4 additions & 0 deletions src/client/app/admin/views/instance.vue
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
</section>
<section>
<ui-switch v-model="disableRegistration">{{ $t('disable-registration') }}</ui-switch>
<ui-switch v-model="disableDeletion">{{ $t('disable-deletion') }}</ui-switch>
<ui-switch v-model="disableLocalTimeline">{{ $t('disable-local-timeline') }}</ui-switch>
<ui-switch v-model="disableGlobalTimeline">{{ $t('disable-global-timeline') }}</ui-switch>
<ui-switch v-model="showReplayInPublicTimeline">{{ $t('showReplayInPublicTimeline') }}</ui-switch>
Expand Down Expand Up @@ -148,6 +149,7 @@ export default Vue.extend({
maintainerName: null,
maintainerEmail: null,
disableRegistration: false,
disableDeletion: false,
disableLocalTimeline: false,
disableGlobalTimeline: false,
showReplayInPublicTimeline: false,
Expand Down Expand Up @@ -196,6 +198,7 @@ export default Vue.extend({
this.maintainerName = meta.maintainer.name;
this.maintainerEmail = meta.maintainer.email;
this.disableRegistration = meta.disableRegistration;
this.disableDeletion = meta.disableDeletion;
this.disableLocalTimeline = meta.disableLocalTimeline;
this.disableGlobalTimeline = meta.disableGlobalTimeline;
this.showReplayInPublicTimeline = meta.showReplayInPublicTimeline;
Expand Down Expand Up @@ -287,6 +290,7 @@ export default Vue.extend({
maintainerName: this.maintainerName,
maintainerEmail: this.maintainerEmail,
disableRegistration: this.disableRegistration,
disableDeletion: this.disableDeletion,
disableLocalTimeline: this.disableLocalTimeline,
disableGlobalTimeline: this.disableGlobalTimeline,
showReplayInPublicTimeline: this.showReplayInPublicTimeline,
Expand Down
2 changes: 2 additions & 0 deletions src/misc/build-meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export async function buildMeta(instance: IMeta, detail = true) {

announcements: instance.announcements || [],
disableRegistration: instance.disableRegistration,
disableDeletion: instance.disableDeletion,
disableLocalTimeline: instance.disableLocalTimeline,
disableGlobalTimeline: instance.disableGlobalTimeline,
showReplayInPublicTimeline: instance.showReplayInPublicTimeline,
Expand Down Expand Up @@ -78,6 +79,7 @@ export async function buildMeta(instance: IMeta, detail = true) {
if (detail) {
response.features = {
registration: !instance.disableRegistration,
deletion: !instance.disableDeletion,
localTimeLine: !instance.disableLocalTimeline,
globalTimeLine: !instance.disableGlobalTimeline,
elasticsearch: false,
Expand Down
1 change: 1 addition & 0 deletions src/models/meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ export type IMeta = {
};

disableRegistration?: boolean;
disableDeletion?: boolean;
disableLocalTimeline?: boolean;
disableGlobalTimeline?: boolean;
showReplayInPublicTimeline?: boolean;
Expand Down
5 changes: 5 additions & 0 deletions src/server/api/endpoints/admin/meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ export const meta = {
type: 'boolean',
description: 'Whether disabled open registration.',
},
disableDeletion: {
type: 'boolean',
description: 'Whether disabled account deletion.',
},
disableLocalTimeline: {
type: 'boolean',
description: 'Whether disabled LTL and STL.',
Expand Down Expand Up @@ -103,6 +107,7 @@ export default define(meta, async (ps, me) => {

announcements: instance.announcements || [],
disableRegistration: instance.disableRegistration,
disableDeletion: instance.disableDeletion,
disableLocalTimeline: instance.disableLocalTimeline,
disableGlobalTimeline: instance.disableGlobalTimeline,
showReplayInPublicTimeline: instance.showReplayInPublicTimeline,
Expand Down
11 changes: 11 additions & 0 deletions src/server/api/endpoints/admin/update-meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@ export const meta = {
}
},

disableDeletion: {
validator: $.optional.nullable.bool,
desc: {
'ja-JP': 'アカウント削除を無効にするか否か'
}
},

disableLocalTimeline: {
validator: $.optional.nullable.bool,
desc: {
Expand Down Expand Up @@ -329,6 +336,10 @@ export default define(meta, async (ps) => {
set.disableRegistration = ps.disableRegistration;
}

if (typeof ps.disableDeletion === 'boolean') {
set.disableDeletion = ps.disableDeletion;
}

if (typeof ps.disableLocalTimeline === 'boolean') {
set.disableLocalTimeline = ps.disableLocalTimeline;
}
Expand Down
13 changes: 13 additions & 0 deletions src/server/api/endpoints/i/delete-account.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import Signin from '../../../../models/signin';
import { doPostSuspend } from '../../../../services/suspend-user';
import { publishTerminate } from '../../../../services/server-event';
import { ApiError } from '../../error';
import fetchMeta from '../../../../misc/fetch-meta';

export const meta = {
requireCredential: true,
Expand All @@ -33,6 +34,18 @@ export default define(meta, async (ps, user) => {
// Compare password
const same = await bcrypt.compare(ps.password, user.password);

const instance = await fetchMeta();

const accessDenied = {
message: 'Access denied.',
code: 'ACCESS_DENIED',
id: '56f35758-7dd5-468b-8439-5d6fb8ec9b8e'
};

if (instance && instance.disableDeletion) {
throw new ApiError(accessDenied, { reason: 'Account Deletion is disabled.' });
}

if (!same) {
throw new ApiError(meta.errors.incorrectPassword);
}
Expand Down
4 changes: 4 additions & 0 deletions src/server/api/endpoints/meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ export const meta = {
type: 'boolean',
description: 'Whether disabled open registration.',
},
disableDeletion: {
type: 'boolean',
description: 'Whether disabled account deletion.',
},
disableLocalTimeline: {
type: 'boolean',
description: 'Whether disabled LTL and STL.',
Expand Down
1 change: 1 addition & 0 deletions src/server/nodeinfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ const nodeinfo2 = async () => {
relayActor: relayActor ? `${config.url}/users/${relayActor._id}` : null,
relays: relayedHosts,
disableRegistration: meta.disableRegistration,
disableDeletion: meta.disableDeletion,
disableLocalTimeline: meta.disableLocalTimeline,
disableGlobalTimeline: meta.disableGlobalTimeline,
enableRecaptcha: meta.enableRecaptcha,
Expand Down

0 comments on commit 65f9c2f

Please sign in to comment.