Account approval #17

Merged
ashten merged 10 commits from feature/approval into main 2025-01-11 20:54:22 +00:00
8 changed files with 35 additions and 5 deletions
Showing only changes of commit 6e25bd9c5e - Show all commits

View file

@ -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, {

View file

@ -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 }]);

View file

@ -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);

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_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,

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.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,

View file

@ -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) {

View file

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

View file

@ -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
);
}
}