[backend/federation] Process incoming user deletes
This commit is contained in:
parent
7a7f6cb527
commit
72d13c19d8
2 changed files with 25 additions and 4 deletions
|
@ -78,8 +78,8 @@ public class ActivityHandlerService(
|
|||
if (activity.Actor.Id != actor.Id)
|
||||
throw GracefulException.UnprocessableEntity("Refusing to delete user: actor doesn't match");
|
||||
|
||||
//TODO: handle user deletes
|
||||
throw new NotImplementedException("User deletes aren't supported yet");
|
||||
await userSvc.DeleteUserAsync(actor);
|
||||
return;
|
||||
}
|
||||
|
||||
if (activity.Object is not ASTombstone tombstone)
|
||||
|
@ -95,8 +95,7 @@ public class ActivityHandlerService(
|
|||
if (tombstone.Id != activity.Actor.Id)
|
||||
throw GracefulException.UnprocessableEntity("Refusing to delete user: actor doesn't match");
|
||||
|
||||
//TODO: handle user deletes
|
||||
throw new NotImplementedException("User deletes aren't supported yet");
|
||||
await userSvc.DeleteUserAsync(activity.Actor);
|
||||
}
|
||||
|
||||
logger.LogDebug("Delete activity object {id} is unknown, skipping", tombstone.Id);
|
||||
|
|
|
@ -317,4 +317,26 @@ public class UserService(
|
|||
await db.SaveChangesAsync();
|
||||
return key;
|
||||
}
|
||||
|
||||
public async Task DeleteUserAsync(ASActor actor)
|
||||
{
|
||||
var user = await db.Users
|
||||
.Include(user => user.Avatar)
|
||||
.Include(user => user.Banner)
|
||||
.FirstOrDefaultAsync(p => p.Uri == actor.Id && p.Host != null);
|
||||
|
||||
if (user == null)
|
||||
{
|
||||
logger.LogDebug("User {uri} is unknown, skipping delete task", actor.Id);
|
||||
return;
|
||||
}
|
||||
|
||||
db.Remove(user);
|
||||
await db.SaveChangesAsync();
|
||||
|
||||
if (user.Avatar != null)
|
||||
await driveSvc.RemoveFile(user.Avatar);
|
||||
if (user.Banner != null)
|
||||
await driveSvc.RemoveFile(user.Banner);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue