upd: let mod/admin prompt for id verification

This commit is contained in:
Marie 2024-09-13 23:36:31 +02:00
parent c33f474620
commit 63368deab9
No known key found for this signature in database
GPG key ID: 7ADF6C9CD9A28555
17 changed files with 205 additions and 14 deletions

View file

@ -97,6 +97,7 @@ import * as ep___admin_systemWebhook_delete from './endpoints/admin/system-webho
import * as ep___admin_systemWebhook_list from './endpoints/admin/system-webhook/list.js';
import * as ep___admin_systemWebhook_show from './endpoints/admin/system-webhook/show.js';
import * as ep___admin_systemWebhook_update from './endpoints/admin/system-webhook/update.js';
import * as ep___admin_prompt_id_check from './endpoints/admin/prompt-id-check.js';
import * as ep___announcements from './endpoints/announcements.js';
import * as ep___announcements_show from './endpoints/announcements/show.js';
import * as ep___antennas_create from './endpoints/antennas/create.js';
@ -494,6 +495,7 @@ const $admin_systemWebhook_delete: Provider = { provide: 'ep:admin/system-webhoo
const $admin_systemWebhook_list: Provider = { provide: 'ep:admin/system-webhook/list', useClass: ep___admin_systemWebhook_list.default };
const $admin_systemWebhook_show: Provider = { provide: 'ep:admin/system-webhook/show', useClass: ep___admin_systemWebhook_show.default };
const $admin_systemWebhook_update: Provider = { provide: 'ep:admin/system-webhook/update', useClass: ep___admin_systemWebhook_update.default };
const $admin_prompt_id_check: Provider = { provide: 'ep:admin/prompt-id-check', useClass: ep___admin_prompt_id_check.default };
const $announcements: Provider = { provide: 'ep:announcements', useClass: ep___announcements.default };
const $announcements_show: Provider = { provide: 'ep:announcements/show', useClass: ep___announcements_show.default };
const $antennas_create: Provider = { provide: 'ep:antennas/create', useClass: ep___antennas_create.default };
@ -895,6 +897,7 @@ const $stripe_createVerifySession: Provider = { provide: 'ep:stripe/create-verif
$admin_systemWebhook_list,
$admin_systemWebhook_show,
$admin_systemWebhook_update,
$admin_prompt_id_check,
$announcements,
$announcements_show,
$antennas_create,
@ -1290,6 +1293,7 @@ const $stripe_createVerifySession: Provider = { provide: 'ep:stripe/create-verif
$admin_systemWebhook_list,
$admin_systemWebhook_show,
$admin_systemWebhook_update,
$admin_prompt_id_check,
$announcements,
$announcements_show,
$antennas_create,

View file

@ -103,6 +103,7 @@ import * as ep___admin_systemWebhook_delete from './endpoints/admin/system-webho
import * as ep___admin_systemWebhook_list from './endpoints/admin/system-webhook/list.js';
import * as ep___admin_systemWebhook_show from './endpoints/admin/system-webhook/show.js';
import * as ep___admin_systemWebhook_update from './endpoints/admin/system-webhook/update.js';
import * as ep___admin_prompt_id_check from './endpoints/admin/prompt-id-check.js';
import * as ep___announcements from './endpoints/announcements.js';
import * as ep___announcements_show from './endpoints/announcements/show.js';
import * as ep___antennas_create from './endpoints/antennas/create.js';
@ -484,6 +485,7 @@ const eps = [
['admin/update-meta', ep___admin_updateMeta],
['admin/delete-account', ep___admin_deleteAccount],
['admin/update-user-note', ep___admin_updateUserNote],
['admin/prompt-id-check', ep___admin_prompt_id_check],
['admin/roles/create', ep___admin_roles_create],
['admin/roles/delete', ep___admin_roles_delete],
['admin/roles/list', ep___admin_roles_list],

View file

@ -0,0 +1,52 @@
/*
* SPDX-FileCopyrightText: marie and other Sharkey contributors
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { UsersRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
import { RoleService } from '@/core/RoleService.js';
export const meta = {
tags: ['admin'],
requireCredential: true,
requireModerator: true,
kind: 'write:admin:prompt-id-check-user',
} as const;
export const paramDef = {
type: 'object',
properties: {
userId: { type: 'string', format: 'misskey:id' },
},
required: ['userId'],
} as const;
@Injectable()
export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
constructor(
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
private roleService: RoleService,
) {
super(meta, paramDef, async (ps, me) => {
const user = await this.usersRepository.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');
}
if (await this.roleService.isModerator(user)) {
throw new Error('cannot prompt on moderator account');
}
await this.usersRepository.update(user.id, {
idCheckRequired: true,
});
});
}
}

View file

@ -172,6 +172,14 @@ export const meta = {
},
},
},
idVerified: {
type: 'boolean',
optional: false, nullable: false,
},
idCheckRequired: {
type: 'boolean',
optional: false, nullable: false,
},
},
},
} as const;
@ -253,6 +261,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
expiresAt: a.expiresAt ? a.expiresAt.toISOString() : null,
roleId: a.roleId,
})),
idVerified: user.idVerified,
idCheckRequired: user.idCheckRequired,
};
});
}

View file

@ -10,6 +10,7 @@ import type { UsersRepository } from '@/models/_.js';
import { DI } from '@/di-symbols.js';
import Stripe from 'stripe';
import type { Config } from '@/config.js';
import ms from 'ms';
export const meta = {
tags: ['account'],
@ -22,6 +23,11 @@ export const meta = {
optional: false, nullable: false,
},
limit: {
duration: ms('1hour'),
max: 5,
},
errors: {
userIsDeleted: {
message: 'User is deleted.',