Account approval #17
8 changed files with 35 additions and 5 deletions
|
@ -61,6 +61,7 @@ export class CreateSystemUserService {
|
|||
isLocked: true,
|
||||
isExplorable: false,
|
||||
isBot: true,
|
||||
approved: true,
|
||||
}).then(x => transactionalEntityManager.findOneByOrFail(MiUser, x.identifiers[0]));
|
||||
|
||||
await transactionalEntityManager.insert(MiUserKeypair, {
|
||||
|
|
|
@ -93,6 +93,9 @@ export class ImportFollowingProcessorService {
|
|||
// skip myself
|
||||
if (target.id === job.data.user.id) return;
|
||||
|
||||
// skip follows to not approved accounts
|
||||
if (!target.approved) return;
|
||||
|
||||
this.logger.info(`Follow ${target.id} ${job.data.withReplies ? 'with replies' : 'without replies'} ...`);
|
||||
|
||||
this.queueService.createFollowJob([{ from: user, to: { id: target.id }, silent: true, withReplies: job.data.withReplies }]);
|
||||
|
|
|
@ -684,6 +684,7 @@ export class ActivityPubServerService {
|
|||
usernameLower: request.params.user.toLowerCase(),
|
||||
host: IsNull(),
|
||||
isSuspended: false,
|
||||
approved: true,
|
||||
});
|
||||
|
||||
return await this.userInfo(request, reply, user);
|
||||
|
|
|
@ -480,6 +480,7 @@ const $admin_showUser: Provider = { provide: 'ep:admin/show-user', useClass: ep_
|
|||
const $admin_showUsers: Provider = { provide: 'ep:admin/show-users', useClass: ep___admin_showUsers.default };
|
||||
const $admin_suspendUser: Provider = { provide: 'ep:admin/suspend-user', useClass: ep___admin_suspendUser.default };
|
||||
const $admin_approveUser: Provider = { provide: 'ep:admin/approve-user', useClass: ep___admin_approveUser.default };
|
||||
const $admin_declineUser: Provider = { provide: 'ep:admin/decline-user', useClass: ep___admin_declineUser.default };
|
||||
const $admin_unsuspendUser: Provider = { provide: 'ep:admin/unsuspend-user', useClass: ep___admin_unsuspendUser.default };
|
||||
const $admin_updateMeta: Provider = { provide: 'ep:admin/update-meta', useClass: ep___admin_updateMeta.default };
|
||||
const $admin_updateUserName: Provider = { provide: 'ep:admin/update-user-name', useClass: ep___admin_updateUserName.default };
|
||||
|
@ -880,6 +881,7 @@ const $reversi_verify: Provider = { provide: 'ep:reversi/verify', useClass: ep__
|
|||
$admin_showUsers,
|
||||
$admin_suspendUser,
|
||||
$admin_approveUser,
|
||||
$admin_declineUser,
|
||||
$admin_unsuspendUser,
|
||||
$admin_updateMeta,
|
||||
$admin_updateUserName,
|
||||
|
|
|
@ -63,7 +63,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
|||
|
||||
await this.usedUsernamesRepository.delete({ username: user.username });
|
||||
|
||||
await this.deleteAccountService.deleteAccount(user, false, me);
|
||||
|
||||
//Actually delete it since the last function doesnt actually delete the account
|
||||
//Note: Before approval these accounts wont federate so this is totally fine.
|
||||
await this.usersRepository.delete(user.id);
|
||||
|
||||
|
||||
this.moderationLogService.log(me, 'decline', {
|
||||
userId: user.id,
|
||||
|
|
|
@ -35,6 +35,12 @@ export const meta = {
|
|||
id: 'fcd2eef9-a9b2-4c4f-8624-038099e90aa5',
|
||||
},
|
||||
|
||||
unapprovedUser: {
|
||||
message: 'The user has not been approved yet.',
|
||||
code: 'UNAPPROVED_USER',
|
||||
id: '8d66f136-b3e1-48fd-92c4-30ecfd7fdb7a',
|
||||
},
|
||||
|
||||
followeeIsYourself: {
|
||||
message: 'Followee is yourself.',
|
||||
code: 'FOLLOWEE_IS_YOURSELF',
|
||||
|
@ -101,15 +107,25 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
|||
}
|
||||
|
||||
// Get followee
|
||||
const followee = await this.getterService.getUser(ps.userId).catch(err => {
|
||||
if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser);
|
||||
let followee;
|
||||
try {
|
||||
followee = await this.getterService.getUser(ps.userId);
|
||||
} catch (err) {
|
||||
if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') {
|
||||
throw new ApiError(meta.errors.noSuchUser);
|
||||
}
|
||||
throw err;
|
||||
});
|
||||
}
|
||||
|
||||
if ( me.isBot && followee.isBot ) {
|
||||
throw new ApiError(meta.errors.followingAnotherBot);
|
||||
}
|
||||
|
||||
const isLocalUser = followee.uri == null;
|
||||
if (!followee.approved && isLocalUser) {
|
||||
throw new ApiError(meta.errors.unapprovedUser);
|
||||
}
|
||||
|
||||
try {
|
||||
await this.userFollowingService.follow(follower, followee, { withReplies: ps.withReplies });
|
||||
} catch (e) {
|
||||
|
|
|
@ -113,5 +113,6 @@ onUnmounted(() => {
|
|||
border: solid 0.5px var(--divider);
|
||||
pointer-events: none;
|
||||
transform-origin: center center;
|
||||
backdrop-filter: blur(10px);
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -45,7 +45,9 @@ const pagination = {
|
|||
|
||||
function deleted(id: string) {
|
||||
if (paginationComponent.value) {
|
||||
paginationComponent.value.items.delete(id);
|
||||
paginationComponent.value.items = paginationComponent.value.items.filter(
|
||||
(item: any) => item.id !== id
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue