diff options
author | default <nobody@localhost> | 2024-01-23 16:21:48 +0100 |
---|---|---|
committer | default <nobody@localhost> | 2024-01-23 16:21:48 +0100 |
commit | 8f34c2e740f169d5f5202af9086222cdd56c7993 (patch) | |
tree | 9debbe2d53288331162f5c895d3feaeca8f662a0 /mastoapi.c | |
parent | f5031ede27307614a1c167575287ebb70e95e4f9 (diff) |
mastoapi: added /v1/statuses put support (note edit).
Diffstat (limited to 'mastoapi.c')
-rw-r--r-- | mastoapi.c | 48 |
1 files changed, 46 insertions, 2 deletions
@@ -2534,8 +2534,6 @@ int mastoapi_put_handler(const xs_dict *req, const char *q_path, if (!xs_startswith(q_path, "/api/v1/") && !xs_startswith(q_path, "/api/v2/")) return 0; - srv_debug(1, xs_fmt("mastoapi_post_handler %s", q_path)); - int status = 404; xs *args = NULL; char *i_ctype = xs_dict_get(req, "content-type"); @@ -2583,11 +2581,57 @@ int mastoapi_put_handler(const xs_dict *req, const char *q_path, else status = 401; } + else + if (xs_startswith(cmd, "/v1/statuses")) { + if (logged_in) { + xs *l = xs_split(cmd, "/"); + const char *mid = xs_list_get(l, 3); + + if (!xs_is_null(mid)) { + const char *md5 = MID_TO_MD5(mid); + xs *rsp = NULL; + xs *msg = NULL; + + if (valid_status(timeline_get_by_md5(&snac, md5, &msg))) { + const char *content = xs_dict_get(args, "status"); + xs *atls = xs_list_new(); + const char *f_content = not_really_markdown(content, &atls); + + /* replace fields with new content */ + msg = xs_dict_set(msg, "sourceContent", content); + msg = xs_dict_set(msg, "content", f_content); + + xs *updated = xs_str_utctime(0, ISO_DATE_SPEC); + msg = xs_dict_set(msg, "updated", updated); + + /* overwrite object, not updating the indexes */ + object_add_ow(xs_dict_get(msg, "id"), msg); + + /* update message */ + xs *c_msg = msg_update(&snac, msg); + + enqueue_message(&snac, c_msg); + + rsp = mastoapi_status(&snac, msg); + } + + if (rsp != NULL) { + *body = xs_json_dumps(rsp, 4); + *ctype = "application/json"; + status = 200; + } + } + } + else + status = 401; + } /* user cleanup */ if (logged_in) user_free(&snac); + srv_debug(1, xs_fmt("mastoapi_put_handler %s %d", q_path, status)); + return status; } |