From: Art Cancro Date: Wed, 2 Aug 2023 02:40:55 +0000 (-0900) Subject: Enumerate attachments in JSON message output X-Git-Tag: v989~111 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=18d79b96e0ba87b567759daef88f01cac92b0309;p=citadel.git Enumerate attachments in JSON message output --- diff --git a/webcit-ng/server/forum_view.c b/webcit-ng/server/forum_view.c index 737fa955e..09ee7800f 100644 --- a/webcit-ng/server/forum_view.c +++ b/webcit-ng/server/forum_view.c @@ -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"))) {