Reworking the enter message and attach dialogs
[citadel.git] / webcit / paramhandling.c
index c656734410b6a8a12683b6351891c3fe62cfdfa1..8b36c277e39d2463049a6ddb35a276e19a7da85f 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * parse urlparts and post data
  */
 
@@ -55,20 +53,33 @@ void ParseURLParams(StrBuf *url)
                        free(u);
                        continue;
                }
-
-               Put(WCC->Hdr->urlstrings, u->url_key, keylen, u, free_url);
-               len = bptr - aptr;
-               u->url_data = NewStrBufPlain(aptr, len);
-               StrBufUnescape(u->url_data, 1);
-            
-               up = bptr;
-               ++up;
+               
+               if (strncmp(u->url_key, "__", 2) != 0)
+               {
+                       Put(WCC->Hdr->urlstrings, u->url_key, keylen, u, free_url);
+                       len = bptr - aptr;
+                       u->url_data = NewStrBufPlain(aptr, len);
+                       StrBufUnescape(u->url_data, 1);
 #ifdef DEBUG_URLSTRINGS
-               lprintf(9, "%s = [%ld]  %s\n", 
-                       u->url_key, 
-                       StrLength(u->url_data), 
-                       ChrPtr(u->url_data)); 
+                       lprintf(9, "%s = [%ld]  %s\n", 
+                               u->url_key, 
+                               StrLength(u->url_data), 
+                               ChrPtr(u->url_data)); 
 #endif
+               }
+               else {
+                       len = bptr - aptr;
+                       u->url_data = NewStrBufPlain(aptr, len);
+                       StrBufUnescape(u->url_data, 1);
+                       lprintf(1, "REJECTED because of __ is internal only: %s = [%ld]  %s\n", 
+                               u->url_key, 
+                               StrLength(u->url_data), 
+                               ChrPtr(u->url_data)); 
+                       
+                       free_url(u);
+               }
+               up = bptr;
+               ++up;
        }
 }
 
@@ -294,8 +305,10 @@ void upload_handler(char *name, char *filename, char *partnum, char *disp,
 {
        wcsession *WCC = WC;
        urlcontent *u;
+       long keylen;
+
 #ifdef DEBUG_URLSTRINGS
-       lprintf(9, "upload_handler() name=%s, type=%s, len=%d\n", name, cbtype, length);
+       lprintf(9, "\033[31mupload_handler() name=%s, type=%s, len=%d\033[0m\n", name, cbtype, length);
 #endif
        if (WCC->Hdr->urlstrings == NULL)
                WCC->Hdr->urlstrings = NewHash(1, NULL);
@@ -304,10 +317,21 @@ void upload_handler(char *name, char *filename, char *partnum, char *disp,
        if ( (length > 0) && (IsEmptyStr(cbtype)) ) {
                u = (urlcontent *) malloc(sizeof(urlcontent));
                
-               safestrncpy(u->url_key, name, sizeof(u->url_key));
+               keylen = safestrncpy(u->url_key, name, sizeof(u->url_key));
                u->url_data = NewStrBufPlain(content, length);
                
-               Put(WCC->Hdr->urlstrings, u->url_key, strlen(u->url_key), u, free_url);
+               if (strncmp(u->url_key, "__", 2) != 0)
+               {
+                       Put(WCC->Hdr->urlstrings, u->url_key, keylen, u, free_url);
+               }
+               else {
+                       lprintf(1, "REJECTED because of __ is internal only: %s = [%ld]  %s\n", 
+                               u->url_key, 
+                               StrLength(u->url_data), 
+                               ChrPtr(u->url_data)); 
+                       
+                       free_url(u);
+               }
 #ifdef DEBUG_URLSTRINGS
                lprintf(9, "Key: <%s> len: [%ld] Data: <%s>\n", 
                        u->url_key, 
@@ -316,13 +340,15 @@ void upload_handler(char *name, char *filename, char *partnum, char *disp,
 #endif
        }
 
-       /** Uploaded files */
+       /* Uploaded files */
        if ( (length > 0) && (!IsEmptyStr(cbtype)) ) {
                WCC->upload = NewStrBufPlain(content, length);
                WCC->upload_length = length;
                WCC->upload_filename = NewStrBufPlain(filename, -1);
-               safestrncpy(WCC->upload_content_type, cbtype,
-                           sizeof(WC->upload_content_type));
+               safestrncpy(WCC->upload_content_type, cbtype, sizeof(WC->upload_content_type));
+#ifdef DEBUG_URLSTRINGS
+               lprintf(9, "File: <%s> len: [%ld]\n", filename, length);
+#endif
                
        }
 
@@ -377,6 +403,18 @@ void tmplput_bstr(StrBuf *Target, WCTemplputParams *TP)
                StrBufAppendTemplate(Target, TP, Buf, 1);
 }
 
+
+void tmplput_bstrforward(StrBuf *Target, WCTemplputParams *TP)
+{
+       const StrBuf *Buf = SBstr(TKEY(0));
+       if (Buf != NULL) {
+               StrBufAppendBufPlain(Target, HKEY("?"), 0);             
+               StrBufAppendBufPlain(Target, TKEY(0), 0);
+               StrBufAppendBufPlain(Target, HKEY("="), 0);             
+               StrBufAppendTemplate(Target, TP, Buf, 1);
+       }
+}
+
 void diagnostics(void)
 {
        output_headers(1, 1, 1, 0, 0, 0);
@@ -437,6 +475,7 @@ InitModule_PARAMHANDLING
 
        RegisterConditional(HKEY("COND:BSTR"), 1, ConditionalBstr, CTX_NONE);
        RegisterNamespace("BSTR", 1, 2, tmplput_bstr, NULL, CTX_NONE);
+       RegisterNamespace("BSTR:FORWARD", 1, 2, tmplput_bstrforward, NULL, CTX_NONE);
        RegisterNamespace("URLPART", 1, 2, tmplput_url_part, NULL, CTX_NONE);
 }