🔊 Proper error handling in activitypub inbox
This commit is contained in:
@@ -71,30 +71,39 @@ public class ActivityPubActivityHandler(
|
|||||||
logger.LogInformation("Signature verified successfully. Handling {Type} from {ActorUri}",
|
logger.LogInformation("Signature verified successfully. Handling {Type} from {ActorUri}",
|
||||||
activityType, actorUri);
|
activityType, actorUri);
|
||||||
|
|
||||||
switch (activityType)
|
try
|
||||||
{
|
{
|
||||||
case "Follow":
|
switch (activityType)
|
||||||
return await HandleFollowAsync(actorUri, activity);
|
{
|
||||||
case "Accept":
|
case "Follow":
|
||||||
return await HandleAcceptAsync(actorUri, activity);
|
return await HandleFollowAsync(actorUri, activity);
|
||||||
case "Reject":
|
case "Accept":
|
||||||
return await HandleRejectAsync(actorUri, activity);
|
return await HandleAcceptAsync(actorUri, activity);
|
||||||
case "Undo":
|
case "Reject":
|
||||||
return await HandleUndoAsync(actorUri, activity);
|
return await HandleRejectAsync(actorUri, activity);
|
||||||
case "Create":
|
case "Undo":
|
||||||
return await HandleCreateAsync(actorUri, activity);
|
return await HandleUndoAsync(actorUri, activity);
|
||||||
case "Like":
|
case "Create":
|
||||||
return await HandleLikeAsync(actorUri, activity);
|
return await HandleCreateAsync(actorUri, activity);
|
||||||
case "Announce":
|
case "Like":
|
||||||
return await HandleAnnounceAsync(actorUri, activity);
|
return await HandleLikeAsync(actorUri, activity);
|
||||||
case "Delete":
|
case "Announce":
|
||||||
return await HandleDeleteAsync(actorUri, activity);
|
return await HandleAnnounceAsync(actorUri, activity);
|
||||||
case "Update":
|
case "Delete":
|
||||||
return await HandleUpdateAsync(actorUri, activity);
|
return await HandleDeleteAsync(actorUri, activity);
|
||||||
default:
|
case "Update":
|
||||||
logger.LogWarning("Unsupported activity type: {Type}. Full activity: {Activity}",
|
return await HandleUpdateAsync(actorUri, activity);
|
||||||
activityType, JsonSerializer.Serialize(activity));
|
default:
|
||||||
return false;
|
logger.LogWarning("Unsupported activity type: {Type}. Full activity: {Activity}",
|
||||||
|
activityType, JsonSerializer.Serialize(activity));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvalidOperationException err)
|
||||||
|
{
|
||||||
|
logger.LogError("Failed to handle activity: {Type}, due to {Message}. Full activity: {Activity}",
|
||||||
|
activityType, err.Message, JsonSerializer.Serialize(activity));
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -252,8 +261,6 @@ public class ActivityPubActivityHandler(
|
|||||||
private async Task<bool> HandleUndoAsync(string actorUri, Dictionary<string, object> activity)
|
private async Task<bool> HandleUndoAsync(string actorUri, Dictionary<string, object> activity)
|
||||||
{
|
{
|
||||||
var objectValue = activity.GetValueOrDefault("object");
|
var objectValue = activity.GetValueOrDefault("object");
|
||||||
if (objectValue == null)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (objectValue is not Dictionary<string, object> objectDict) return false;
|
if (objectValue is not Dictionary<string, object> objectDict) return false;
|
||||||
var objectType = objectDict.GetValueOrDefault("type")?.ToString();
|
var objectType = objectDict.GetValueOrDefault("type")?.ToString();
|
||||||
@@ -262,7 +269,7 @@ public class ActivityPubActivityHandler(
|
|||||||
"Follow" => await UndoFollowAsync(actorUri, objectDict.GetValueOrDefault("object")?.ToString()),
|
"Follow" => await UndoFollowAsync(actorUri, objectDict.GetValueOrDefault("object")?.ToString()),
|
||||||
"Like" => await UndoLikeAsync(actorUri, objectDict.GetValueOrDefault("object")?.ToString()),
|
"Like" => await UndoLikeAsync(actorUri, objectDict.GetValueOrDefault("object")?.ToString()),
|
||||||
"Announce" => await UndoAnnounceAsync(actorUri, objectDict.GetValueOrDefault("object")?.ToString()),
|
"Announce" => await UndoAnnounceAsync(actorUri, objectDict.GetValueOrDefault("object")?.ToString()),
|
||||||
_ => false
|
_ => throw new InvalidOperationException($"Unhandled undo operation for {objectType}")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user