Everyone who designed CalDAV deserves torture and ultra-violent death.
authorArt Cancro <ajc@citadel.org>
Fri, 29 Mar 2024 00:04:52 +0000 (17:04 -0700)
committerArt Cancro <ajc@citadel.org>
Fri, 29 Mar 2024 00:04:52 +0000 (17:04 -0700)
webcit-ng/server/caldav_reports.c
webcit-ng/server/request.c

index 49d1fe8d03f4ca7a07d892e7a5864f337cdaa10b..95ccb538f090135661b586d69a7652e0461b7f64 100644 (file)
@@ -463,6 +463,8 @@ void caldav_report(struct http_transaction *h, struct ctdlsession *c) {
                return;
        }
 
+       syslog(LOG_DEBUG, "\033[31mREPORT QUERY: %s\033[0m", h->request_body);
+
        XML_SetElementHandler(xp, caldav_xml_start, caldav_xml_end);
        XML_SetCharacterDataHandler(xp, caldav_xml_chardata);
        XML_SetUserData(xp, &crp);
@@ -484,8 +486,8 @@ void caldav_report(struct http_transaction *h, struct ctdlsession *c) {
        syslog(LOG_DEBUG, "CalDAV REPORT type is: %d", crp.report_type);
        StrBuf *ReportOut = NewStrBuf();
        StrBufAppendPrintf(ReportOut,
-               "<?xml version=\"1.0\" encoding=\"utf-8\"?><D:multistatus xmlns:D=\"DAV:\" xmlns:C=\"%s\">",
-               CALDAV
+               "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+               "<D:multistatus xmlns:D=\"DAV:\" xmlns:C=\"urn:ietf:params:xml:ns:caldav\">"
        );
 
        // RFC4791 7.8 "calendar-query" REPORT - Client will send a lot of search criteria.
@@ -505,8 +507,11 @@ void caldav_report(struct http_transaction *h, struct ctdlsession *c) {
                                syslog(LOG_DEBUG, "Evaluating message \033[33m%ld\033[0m...", m);
                                if (caldav_apply_filters(cal, crp.filters, 0)) {
                                        syslog(LOG_DEBUG, "Message %ld \033[32mQUALIFIES\033[0m", m);
+
                                        // FIXME need to populate the Href instead of NULL
-                                       cal_multiget_out(m, NULL, one_item, ReportOut);
+                                       StrBuf *FIXME = NewStrBufPlain(HKEY("https://FIX.ME.COM/WOW/EEK"));
+                                       cal_multiget_out(m, FIXME, one_item, ReportOut);
+
                                }
                                else {
                                        syslog(LOG_DEBUG, "Message %ld \033[31mDOES NOT QUALIFY\033[0m", m);
index bd1b3253888e1f8d96968c41d842daf51ea05915..ee08578dc6671df64434b1320b9df548bbe7929c 100644 (file)
@@ -94,6 +94,18 @@ void perform_request(struct http_transaction *h) {
                return;
        }
 
+       // CalDAV discovery
+       if (!strncasecmp(h->url, HKEY("/.well-known/caldav"))) {
+               http_redirect(h, "/ctdl/r/calendar");
+               return;
+       }
+
+       // CardDAV discovery
+       if (!strncasecmp(h->url, HKEY("/.well-known/carddav"))) {
+               http_redirect(h, "/ctdl/r/contacts");
+               return;
+       }
+
        // Legacy URL patterns (/readnew?gotoroom=xxx&start_reading_at=yyy) ...
        // Direct room name (/my%20blog) ...