Преглед изворни кода

mastoapi: added /v1/statuses put support (note edit).

default пре 2 година
родитељ
комит
8f34c2e740
1 измењених фајлова са 46 додато и 2 уклоњено
  1. 46 2
      mastoapi.c

+ 46 - 2
mastoapi.c

@@ -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;
 }