[backend/federation] Handle activities based on derived activity type instead of their type property
This commit is contained in:
parent
23e7630ca6
commit
fe871bf130
2 changed files with 9 additions and 10 deletions
|
@ -31,39 +31,39 @@ public class ActivityHandlerService(
|
||||||
|
|
||||||
//TODO: validate inboxUserId
|
//TODO: validate inboxUserId
|
||||||
|
|
||||||
switch (activity.Type) {
|
switch (activity) {
|
||||||
case ASActivity.Types.Create: {
|
case ASCreate: {
|
||||||
//TODO: implement the rest
|
//TODO: implement the rest
|
||||||
if (activity.Object is not ASNote note)
|
if (activity.Object is not ASNote note)
|
||||||
throw GracefulException.UnprocessableEntity("Create activity object is invalid");
|
throw GracefulException.UnprocessableEntity("Create activity object is invalid");
|
||||||
await noteSvc.ProcessNoteAsync(note, activity.Actor);
|
await noteSvc.ProcessNoteAsync(note, activity.Actor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case ASActivity.Types.Follow: {
|
case ASFollow: {
|
||||||
if (activity.Object is not { } obj)
|
if (activity.Object is not { } obj)
|
||||||
throw GracefulException.UnprocessableEntity("Follow activity object is invalid");
|
throw GracefulException.UnprocessableEntity("Follow activity object is invalid");
|
||||||
await FollowAsync(obj, activity.Actor, activity.Id);
|
await FollowAsync(obj, activity.Actor, activity.Id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case ASActivity.Types.Unfollow: {
|
case ASUnfollow: {
|
||||||
if (activity.Object is not { } obj)
|
if (activity.Object is not { } obj)
|
||||||
throw GracefulException.UnprocessableEntity("Unfollow activity object is invalid");
|
throw GracefulException.UnprocessableEntity("Unfollow activity object is invalid");
|
||||||
await UnfollowAsync(obj, activity.Actor);
|
await UnfollowAsync(obj, activity.Actor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case ASActivity.Types.Accept: {
|
case ASAccept: {
|
||||||
if (activity.Object is not { } obj)
|
if (activity.Object is not { } obj)
|
||||||
throw GracefulException.UnprocessableEntity("Accept activity object is invalid");
|
throw GracefulException.UnprocessableEntity("Accept activity object is invalid");
|
||||||
await AcceptAsync(obj, activity.Actor);
|
await AcceptAsync(obj, activity.Actor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case ASActivity.Types.Reject: {
|
case ASReject: {
|
||||||
if (activity.Object is not { } obj)
|
if (activity.Object is not { } obj)
|
||||||
throw GracefulException.UnprocessableEntity("Reject activity object is invalid");
|
throw GracefulException.UnprocessableEntity("Reject activity object is invalid");
|
||||||
await RejectAsync(obj, activity.Actor);
|
await RejectAsync(obj, activity.Actor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case ASActivity.Types.Undo: {
|
case ASUndo: {
|
||||||
//TODO: implement the rest
|
//TODO: implement the rest
|
||||||
if (activity.Object is not ASActivity { Type: ASActivity.Types.Follow, Object: not null } undoActivity)
|
if (activity.Object is not ASActivity { Type: ASActivity.Types.Follow, Object: not null } undoActivity)
|
||||||
throw new NotImplementedException("Unsupported undo operation");
|
throw new NotImplementedException("Unsupported undo operation");
|
||||||
|
|
|
@ -11,10 +11,9 @@ public class ActivityRenderer(IOptions<Config.InstanceSection> config, UserRende
|
||||||
private string GenerateActivityId() =>
|
private string GenerateActivityId() =>
|
||||||
$"https://{config.Value.WebDomain}/activities/{Guid.NewGuid().ToString().ToLowerInvariant()}";
|
$"https://{config.Value.WebDomain}/activities/{Guid.NewGuid().ToString().ToLowerInvariant()}";
|
||||||
|
|
||||||
public static ASActivity RenderCreate(ASObject obj, ASObject actor) {
|
public static ASCreate RenderCreate(ASObject obj, ASObject actor) {
|
||||||
return new ASActivity {
|
return new ASCreate {
|
||||||
Id = $"{obj.Id}#Create",
|
Id = $"{obj.Id}#Create",
|
||||||
Type = ASActivity.Types.Create,
|
|
||||||
Actor = new ASActor { Id = actor.Id },
|
Actor = new ASActor { Id = actor.Id },
|
||||||
Object = obj
|
Object = obj
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue