Enumerate attachments in JSON message output
authorArt Cancro <ajc@citadel.org>
Wed, 2 Aug 2023 02:40:55 +0000 (17:40 -0900)
committerArt Cancro <ajc@citadel.org>
Wed, 2 Aug 2023 02:40:55 +0000 (17:40 -0900)
webcit-ng/server/forum_view.c

index 737fa955e5717e65fe14e7aff00206c8c61b7bb1..09ee7800f047ba7d1d74528c72ee98fb0fca92ef 100644 (file)
@@ -54,7 +54,9 @@ void json_render_one_message(struct http_transaction *h, struct ctdlsession *c,
                return;
        }
 
-       JsonValue *j = NewJsonObject(HKEY("message"));
+       JsonValue *attachments = NULL;
+
+       JsonValue *j = NewJsonObject(HKEY(""));
        JsonObjectAppend(j, NewJsonNumber(HKEY("msgnum"), msgnum));
 
        while ((ctdl_readline(c, buf, sizeof(buf)) >= 0) && (strcmp(buf, "text")) && (strcmp(buf, "000"))) {
@@ -88,11 +90,37 @@ void json_render_one_message(struct http_transaction *h, struct ctdlsession *c,
                else if (!strncasecmp(buf, "cccc=", 5)) {
                        JsonObjectAppend(j, json_tokenize_recipients(HKEY("cccc"), &buf[5]));
                }
+               else if (!strncasecmp(buf, "part=", 5)) {
+                       if (attachments == NULL) {
+                               attachments = NewJsonArray(HKEY("part"));
+                       }
+                       JsonValue *part = NewJsonObject(HKEY(""));
+                       char tokbuf[1024];
+                       extract_token(tokbuf, &buf[5], 0, '|', sizeof tokbuf);
+                       JsonObjectAppend(part, NewJsonPlainString(HKEY("name"), tokbuf, -1));
+                       extract_token(tokbuf, &buf[5], 1, '|', sizeof tokbuf);
+                       JsonObjectAppend(part, NewJsonPlainString(HKEY("filename"), tokbuf, -1));
+                       extract_token(tokbuf, &buf[5], 2, '|', sizeof tokbuf);
+                       JsonObjectAppend(part, NewJsonPlainString(HKEY("partnum"), tokbuf, -1));
+                       extract_token(tokbuf, &buf[5], 3, '|', sizeof tokbuf);
+                       JsonObjectAppend(part, NewJsonPlainString(HKEY("disp"), tokbuf, -1));
+                       extract_token(tokbuf, &buf[5], 4, '|', sizeof tokbuf);
+                       JsonObjectAppend(part, NewJsonPlainString(HKEY("type"), tokbuf, -1));
+                       JsonObjectAppend(part, NewJsonNumber(HKEY("len"), extract_long(&buf[5], 5)));
+                       extract_token(tokbuf, &buf[5], 6, '|', sizeof tokbuf);
+                       JsonObjectAppend(part, NewJsonPlainString(HKEY("id"), tokbuf, -1));
+                       extract_token(tokbuf, &buf[5], 7, '|', sizeof tokbuf);
+                       JsonObjectAppend(part, NewJsonPlainString(HKEY("charset"), tokbuf, -1));
+                       JsonArrayAppend(attachments, part);
+               }
                else {
-                       syslog(LOG_DEBUG, "unhandled header: %s", buf);
+                       // unhandled header
                }
        }
        JsonObjectAppend(j, NewJsonNumber(HKEY("locl"), message_originated_locally));
+       if (attachments != NULL) {
+               JsonObjectAppend(j, attachments);
+       }
 
        if (!strcmp(buf, "text")) {
                while ((ctdl_readline(c, buf, sizeof(buf)) >= 0) && (strcmp(buf, "")) && (strcmp(buf, "000"))) {