Slon/Modules/ActivityPub: Use atomUri as idempotency key for Create status requests

This commit is contained in:
Alec Murphy 2025-02-23 09:25:03 -05:00
parent 6ee0f037f6
commit c44f5b482e

View file

@ -1,3 +1,19 @@
Bool @slon_activitypub_status_exists(JsonArray* statuses, U8* uri)
{
if (!statuses || !uri) {
return FALSE;
}
JsonObject* status = NULL;
I64 i;
for (i = 0; i < statuses->length; i++) {
status = statuses->@(i);
if (!StrICmp(uri, status->@("uri"))) {
return TRUE;
}
}
return FALSE;
}
U8* @slon_activitypub_strip_double_quotes(U8* str)
{
while (str[0] == '"')
@ -725,6 +741,13 @@ U0 @slon_activitypub_users_inbox(SlonHttpSession* session, U8* user)
return;
}
if (db->o("timelines")->o("home")->a(account->@("id"))) {
if (@slon_activitypub_status_exists(db->o("timelines")->o("home")->a(account->@("id")), request_json->o("object")->@("atomUri"))) {
session->status(200);
return;
}
}
JsonObject* remote_account = @slon_activitypub_get_account_for_remote_actor(session);
JsonObject* new_status = Json.CreateObject();