mirror of
https://git.checksum.fail/alec/slon.git
synced 2025-12-08 12:09:55 +02:00
Slon/Modules/ActivityPub: Use atomUri as idempotency key for Create status requests
This commit is contained in:
@@ -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)
|
U8* @slon_activitypub_strip_double_quotes(U8* str)
|
||||||
{
|
{
|
||||||
while (str[0] == '"')
|
while (str[0] == '"')
|
||||||
@@ -725,6 +741,13 @@ U0 @slon_activitypub_users_inbox(SlonHttpSession* session, U8* user)
|
|||||||
return;
|
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* remote_account = @slon_activitypub_get_account_for_remote_actor(session);
|
||||||
|
|
||||||
JsonObject* new_status = Json.CreateObject();
|
JsonObject* new_status = Json.CreateObject();
|
||||||
|
|||||||
Reference in New Issue
Block a user