[backend/federation] Process incoming user deletes

This commit is contained in:
Laura Hausmann 2024-02-19 00:14:30 +01:00
parent 7a7f6cb527
commit 72d13c19d8
No known key found for this signature in database
GPG key ID: D044E84C5BE01605
2 changed files with 25 additions and 4 deletions

View file

@ -78,8 +78,8 @@ public class ActivityHandlerService(
if (activity.Actor.Id != actor.Id) if (activity.Actor.Id != actor.Id)
throw GracefulException.UnprocessableEntity("Refusing to delete user: actor doesn't match"); throw GracefulException.UnprocessableEntity("Refusing to delete user: actor doesn't match");
//TODO: handle user deletes await userSvc.DeleteUserAsync(actor);
throw new NotImplementedException("User deletes aren't supported yet"); return;
} }
if (activity.Object is not ASTombstone tombstone) if (activity.Object is not ASTombstone tombstone)
@ -95,8 +95,7 @@ public class ActivityHandlerService(
if (tombstone.Id != activity.Actor.Id) if (tombstone.Id != activity.Actor.Id)
throw GracefulException.UnprocessableEntity("Refusing to delete user: actor doesn't match"); throw GracefulException.UnprocessableEntity("Refusing to delete user: actor doesn't match");
//TODO: handle user deletes await userSvc.DeleteUserAsync(activity.Actor);
throw new NotImplementedException("User deletes aren't supported yet");
} }
logger.LogDebug("Delete activity object {id} is unknown, skipping", tombstone.Id); logger.LogDebug("Delete activity object {id} is unknown, skipping", tombstone.Id);

View file

@ -317,4 +317,26 @@ public class UserService(
await db.SaveChangesAsync(); await db.SaveChangesAsync();
return key; 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);
}
} }