]> code.citadel.org Git - citadel.git/blobdiff - webcit/webcit.c
* shuffle arround the whole room stuff. we now have:
[citadel.git] / webcit / webcit.c
index e88ebf0063a72ecf8782189dfd368cf4d6442067..0396cd408ed6c021b91907b86c1887c7d597dcd1 100644 (file)
@@ -47,20 +47,37 @@ void tmplput_HANDLER_DISPLAYNAME(StrBuf *Target, WCTemplputParams *TP)
        if (WCC->Hdr->HR.Handler != NULL)
                StrBufAppendTemplate(Target, TP, WCC->Hdr->HR.Handler->DisplayName, 0);
 }
+
+void tmplput_HOST_DISPLAYNAME(StrBuf *Target, WCTemplputParams *TP) 
+{
+       wcsession *WCC = WC;
+       StrBufAppendTemplate(Target, TP, WCC->Hdr->HR.http_host, 0);
+}
+
 /*
  * web-printing funcion. uses our vsnprintf wrapper
  */
+#ifdef UBER_VERBOSE_DEBUGGING
+void wcc_printf(const char *FILE, const char *FUNCTION, long LINE, const char *format,...)
+#else
 void wc_printf(const char *format,...)
+#endif
 {
        wcsession *WCC = WC;
        va_list arg_ptr;
 
        if (WCC->WBuf == NULL)
                WCC->WBuf = NewStrBuf();
+#ifdef UBER_VERBOSE_DEBUGGING
+       StrBufAppendPrintf(WCC->WBuf, "\n%s:%s:%d[", FILE, FUNCTION, LINE);
+#endif
 
        va_start(arg_ptr, format);
        StrBufVAppendPrintf(WCC->WBuf, format, arg_ptr);
        va_end(arg_ptr);
+#ifdef UBER_VERBOSE_DEBUGGING
+       StrBufAppendPrintf(WCC->WBuf, "]\n");
+#endif
 }
 
 /*
@@ -195,9 +212,7 @@ void output_headers(        int do_httpheaders,     /* 1 = output HTTP headers
                }
 
                if (do_room_banner == 1) {
-                       wc_printf("<div id=\"banner\">\n");
-                       embed_room_banner(NULL, navbar_default);
-                       wc_printf("</div>\n");
+                       tmplput_roombanner(NULL, NULL);
                }
        }
 
@@ -463,8 +478,9 @@ void seconds_since_last_gexp(void)
 
 
 
-void ReadPostData(void)
+int ReadPostData(void)
 {
+       int rc;
        int body_start = 0;
        wcsession *WCC = WC;
        StrBuf *content = NULL;
@@ -484,9 +500,12 @@ void ReadPostData(void)
        body_start = StrLength(content);
 
        /** Read the entire input data at once. */
-       client_read_to(WCC->Hdr, content, 
-                      WCC->Hdr->HR.ContentLength,
-                      SLEEPING);
+       rc = client_read_to(WCC->Hdr, content, 
+                           WCC->Hdr->HR.ContentLength,
+                           SLEEPING);
+       if (rc < 0)
+               return rc;
+               
        
        if (!strncasecmp(ChrPtr(WCC->Hdr->HR.ContentType), "application/x-www-form-urlencoded", 33)) {
                StrBufCutLeft(content, body_start);
@@ -507,6 +526,7 @@ void ReadPostData(void)
                content = NULL;
        }
        FreeStrBuf(&content);
+       return 1;
 }
 
 
@@ -588,24 +608,24 @@ void session_loop(void)
         * so we can use them to reconnect a timed out session if we have to.
         */
        wcsession *WCC;
-
-       
-       Buf = NewStrBuf();
-
+      
        WCC= WC;
-
        WCC->upload_length = 0;
        WCC->upload = NULL;
        WCC->is_mobile = 0;
-       WCC->trailing_javascript = NewStrBuf();
        WCC->Hdr->nWildfireHeaders = 0;
        if (WCC->Hdr->HR.Handler != NULL)
                Flags = WCC->Hdr->HR.Handler->Flags; /* so we can temporarily add our own... */
 
        if (WCC->Hdr->HR.ContentLength > 0) {
-               ReadPostData();
+               if (ReadPostData() < 0) {
+                       return;
+               }
        }
 
+       Buf = NewStrBuf();
+       WCC->trailing_javascript = NewStrBuf();
+
        /* If there are variables in the URL, we must grab them now */
        if (WCC->Hdr->PlainArgs != NULL)
                ParseURLParams(WCC->Hdr->PlainArgs);
@@ -643,10 +663,12 @@ void session_loop(void)
            && (StrLength(WCC->Hdr->c_username) > 0)
            && (StrLength(WCC->Hdr->c_password) > 0))
        {
+               long Status;
+
                FlushStrBuf(Buf);
                serv_printf("USER %s", ChrPtr(WCC->Hdr->c_username));
                StrBuf_ServGetln(Buf);
-               if (GetServerStatus(Buf, NULL) == 3) {
+               if (GetServerStatus(Buf, &Status) == 3) {
                        serv_printf("PASS %s", ChrPtr(WCC->Hdr->c_password));
                        StrBuf_ServGetln(Buf);
                        if (GetServerStatus(Buf, NULL) == 2) {
@@ -660,6 +682,9 @@ void session_loop(void)
                                goto SKIP_ALL_THIS_CRAP;
                        }
                }
+               else if (Status == 541) {
+                       WCC->logged_in = 1;
+               }
        }
 
        xhttp = (WCC->Hdr->HR.eReqType != eGET) &&
@@ -699,7 +724,7 @@ void session_loop(void)
 
        if (WCC->Hdr->HR.Handler != NULL) {
                if (!WCC->logged_in && ((WCC->Hdr->HR.Handler->Flags & ANONYMOUS) == 0)) {
-                       display_login(NULL);
+                       display_login();
                }
                else {
 /*
@@ -723,7 +748,7 @@ void session_loop(void)
                        if (xhttp)
                                authorization_required();
                        else 
-                               display_login(NULL);
+                               display_login();
                }
                /*
                 * Toplevel dav requests? or just a flat browser request? 
@@ -754,6 +779,21 @@ void sleeeeeeeeeep(int seconds)
        select(0, NULL, NULL, NULL, &tv);
 }
 
+int Conditional_IS_HTTPS(StrBuf *Target, WCTemplputParams *TP)
+{
+       return is_https != 0;
+}
+
+void AppendImportantMessage(const char *pch, long len)
+{
+       wcsession *WCC = WC;
+
+       if (StrLength(WCC->ImportantMsg) > 0) {
+               StrBufAppendBufPlain(WCC->ImportantMsg, HKEY("\n"), 0);
+       }
+               
+       StrBufAppendBufPlain(WCC->ImportantMsg, pch, len, 0);
+}
 
 int ConditionalImportantMesage(StrBuf *Target, WCTemplputParams *TP)
 {
@@ -812,12 +852,15 @@ InitModule_WEBCIT
        WebcitAddUrlHandler(HKEY("401"), "", 0, authorization_required, ANONYMOUS|COOKIEUNNEEDED);
        RegisterConditional(HKEY("COND:IMPMSG"), 0, ConditionalImportantMesage, CTX_NONE);
        RegisterConditional(HKEY("COND:REST:DEPTH"), 0, Conditional_REST_DEPTH, CTX_NONE);
+       RegisterConditional(HKEY("COND:IS_HTTPS"), 0, Conditional_IS_HTTPS, CTX_NONE);
 
        RegisterNamespace("CSSLOCAL", 0, 0, tmplput_csslocal, NULL, CTX_NONE);
        RegisterNamespace("IMPORTANTMESSAGE", 0, 0, tmplput_importantmessage, NULL, CTX_NONE);
        RegisterNamespace("TRAILING_JAVASCRIPT", 0, 0, tmplput_trailing_javascript, NULL, CTX_NONE);
        RegisterNamespace("URL:DISPLAYNAME", 0, 1, tmplput_HANDLER_DISPLAYNAME, NULL, CTX_NONE);
+       RegisterNamespace("URL:HOSTNAME", 0, 1, tmplput_HOST_DISPLAYNAME, NULL, CTX_NONE);
 
+       
        snprintf(dir, SIZ, "%s/webcit.css", static_local_dir);
        if (!access(dir, R_OK)) {
                lprintf(9, "Using local Stylesheet [%s]\n", dir);