Files
slon/Slon/Modules/Webfinger.HC

39 lines
1.8 KiB
HolyC
Raw Normal View History

2025-02-16 15:21:19 -05:00
U0 @slon_webfinger(SlonHttpSession* session)
{
SLON_SCRATCH_BUFFER_AND_REQUEST_JSON
U8* resource = request_json->@("resource");
StrPrint(scratch_buffer, "@%s", db->o("instance")->@("uri"));
if (resource && String.BeginsWith("acct:", resource) && String.EndsWith(scratch_buffer, resource)) {
resource = StrFind(":", resource) + 1;
StrFind("@", resource)[0] = NULL;
if (db->o("actors")->@(resource)) {
2025-03-09 19:39:44 -04:00
JsonObject* webfinger_object = Json.CreateObject(slon_mem_task);
2025-02-16 15:21:19 -05:00
StrPrint(scratch_buffer, "acct:%s@%s", resource, db->o("instance")->@("uri"));
webfinger_object->set("subject", scratch_buffer, JSON_STRING);
2025-03-09 19:39:44 -04:00
JsonArray* aliases = Json.CreateArray(slon_mem_task);
2025-02-16 15:21:19 -05:00
StrPrint(scratch_buffer, "https://%s/@%s", db->o("instance")->@("uri"), resource);
2025-03-09 19:39:44 -04:00
aliases->append(scratch_buffer, JSON_STRING);
2025-02-16 15:21:19 -05:00
StrPrint(scratch_buffer, "https://%s/users/%s", db->o("instance")->@("uri"), resource);
2025-03-09 19:39:44 -04:00
aliases->append(scratch_buffer, JSON_STRING);
2025-02-16 15:21:19 -05:00
webfinger_object->set("aliases", aliases, JSON_ARRAY);
2025-03-09 19:39:44 -04:00
JsonArray* links = Json.CreateArray(slon_mem_task);
JsonObject* link_object = Json.CreateObject(slon_mem_task);
2025-02-16 15:21:19 -05:00
link_object->set("rel", "self", JSON_STRING);
link_object->set("type", "application/activity+json", JSON_STRING);
StrPrint(scratch_buffer, "https://%s/users/%s", db->o("instance")->@("uri"), resource);
link_object->set("href", scratch_buffer, JSON_STRING);
2025-03-09 19:39:44 -04:00
links->append(link_object);
2025-02-16 15:21:19 -05:00
webfinger_object->set("links", links, JSON_ARRAY);
session->send(webfinger_object);
2025-02-16 15:21:19 -05:00
} else {
session->status(404);
2025-02-16 15:21:19 -05:00
}
} else {
session->status(400);
2025-02-16 15:21:19 -05:00
}
}