decline users

This commit is contained in:
Leah 2025-01-10 19:17:30 +01:00
parent 2d3589e4aa
commit 6e25bd9c5e
8 changed files with 35 additions and 5 deletions

View file

@ -61,6 +61,7 @@ export class CreateSystemUserService {
isLocked: true, isLocked: true,
isExplorable: false, isExplorable: false,
isBot: true, isBot: true,
approved: true,
}).then(x => transactionalEntityManager.findOneByOrFail(MiUser, x.identifiers[0])); }).then(x => transactionalEntityManager.findOneByOrFail(MiUser, x.identifiers[0]));
await transactionalEntityManager.insert(MiUserKeypair, { await transactionalEntityManager.insert(MiUserKeypair, {

View file

@ -93,6 +93,9 @@ export class ImportFollowingProcessorService {
// skip myself // skip myself
if (target.id === job.data.user.id) return; 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.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 }]); this.queueService.createFollowJob([{ from: user, to: { id: target.id }, silent: true, withReplies: job.data.withReplies }]);

View file

@ -684,6 +684,7 @@ export class ActivityPubServerService {
usernameLower: request.params.user.toLowerCase(), usernameLower: request.params.user.toLowerCase(),
host: IsNull(), host: IsNull(),
isSuspended: false, isSuspended: false,
approved: true,
}); });
return await this.userInfo(request, reply, user); return await this.userInfo(request, reply, user);

View file

@ -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_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_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_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_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_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 }; 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_showUsers,
$admin_suspendUser, $admin_suspendUser,
$admin_approveUser, $admin_approveUser,
$admin_declineUser,
$admin_unsuspendUser, $admin_unsuspendUser,
$admin_updateMeta, $admin_updateMeta,
$admin_updateUserName, $admin_updateUserName,

View file

@ -63,7 +63,11 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
await this.usedUsernamesRepository.delete({ username: user.username }); 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', { this.moderationLogService.log(me, 'decline', {
userId: user.id, userId: user.id,

View file

@ -35,6 +35,12 @@ export const meta = {
id: 'fcd2eef9-a9b2-4c4f-8624-038099e90aa5', 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: { followeeIsYourself: {
message: 'Followee is yourself.', message: 'Followee is yourself.',
code: 'FOLLOWEE_IS_YOURSELF', code: 'FOLLOWEE_IS_YOURSELF',
@ -101,15 +107,25 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
} }
// Get followee // Get followee
const followee = await this.getterService.getUser(ps.userId).catch(err => { let followee;
if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser); 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; throw err;
}); }
if ( me.isBot && followee.isBot ) { if ( me.isBot && followee.isBot ) {
throw new ApiError(meta.errors.followingAnotherBot); throw new ApiError(meta.errors.followingAnotherBot);
} }
const isLocalUser = followee.uri == null;
if (!followee.approved && isLocalUser) {
throw new ApiError(meta.errors.unapprovedUser);
}
try { try {
await this.userFollowingService.follow(follower, followee, { withReplies: ps.withReplies }); await this.userFollowingService.follow(follower, followee, { withReplies: ps.withReplies });
} catch (e) { } catch (e) {

View file

@ -113,5 +113,6 @@ onUnmounted(() => {
border: solid 0.5px var(--divider); border: solid 0.5px var(--divider);
pointer-events: none; pointer-events: none;
transform-origin: center center; transform-origin: center center;
backdrop-filter: blur(10px);
} }
</style> </style>

View file

@ -45,7 +45,9 @@ const pagination = {
function deleted(id: string) { function deleted(id: string) {
if (paginationComponent.value) { if (paginationComponent.value) {
paginationComponent.value.items.delete(id); paginationComponent.value.items = paginationComponent.value.items.filter(
(item: any) => item.id !== id
);
} }
} }