diff --git a/src/attachments.c b/src/attachments.c index d1fcb21..fb5a14e 100644 --- a/src/attachments.c +++ b/src/attachments.c @@ -18,6 +18,7 @@ #include #include +#include "base_page.h" #include "helpers.h" #include "easprintf.h" #include "attachments.h" @@ -196,3 +197,35 @@ char* construct_attachments(struct session* ssn, free(elements); return att_view; } + +void api_attachment_create(struct session* ssn, mastodont_t* api, char** data) +{ + struct mstdnt_storage *att_storage = NULL; + struct mstdnt_attachment* attachments = NULL; + char* string; + char** media_ids = NULL; + + cJSON* root = cJSON_CreateObject(); + + // TODO If multiple attachments are submitted, this uploads all of them. + // I don't think we want that, but it's just a minor issue and won't happen on TreebirdFE. + try_upload_media(&att_storage, ssn, api, &attachments, &media_ids); + + if (media_ids) + cJSON_AddStringToObject(root, "id", media_ids[0]); + + if (media_ids) + { + string = cJSON_Print(root); + send_result(NULL, "application/json", string, 0); + free(string); + } + else + send_result(NULL, "application/json", "{\"status\":\"Couldn't\"}", 0); + + // Cleanup media stuff + cleanup_media_storages(ssn, att_storage); + cleanup_media_ids(ssn, media_ids); + free(attachments); + cJSON_Delete(root); +} diff --git a/src/attachments.h b/src/attachments.h index be8ddf1..22f5da3 100644 --- a/src/attachments.h +++ b/src/attachments.h @@ -34,5 +34,6 @@ void cleanup_media_storages(struct session* ssn, struct mstdnt_storage* storage) void cleanup_media_ids(struct session* ssn, char** media_ids); char* construct_attachment(struct session* ssn, mstdnt_bool sensitive, struct mstdnt_attachment* att, size_t* str_size); char* construct_attachments(struct session* ssn, mstdnt_bool sensitive, struct mstdnt_attachment* atts, size_t atts_len, size_t* str_size); +void api_attachment_create(struct session* ssn, mastodont_t* api, char** data); #endif // ATTACHMENTS_H diff --git a/src/main.c b/src/main.c index 4151dc3..3aba978 100644 --- a/src/main.c +++ b/src/main.c @@ -111,7 +111,8 @@ int main(void) { "/chats_embed/:", content_chat_embed }, // API { "/treebird_api/v1/notifications", api_notifications }, - { "/treebird_api/v1/interact", api_status_interact } + { "/treebird_api/v1/interact", api_status_interact }, + { "/treebird_api/v1/attachment", api_attachment_create }, }; while (FCGI_Accept() >= 0)