]> code.citadel.org Git - citadel.git/blobdiff - webcit/context_loop.c
* shuffle auth arround...
[citadel.git] / webcit / context_loop.c
index db6fd289a5afce695f9413237901a664de60e45b..2c7d5183d673ff5e20a7737b0820628d4c19a783 100644 (file)
@@ -265,11 +265,12 @@ int ReadHttpSubject(ParsedHttpHdrs *Hdr, StrBuf *Line, StrBuf *Buf)
        if (Args == NULL) /* whe're not that picky about params... TODO: this will spoil '&' in filenames.*/
                Args = strchr(ChrPtr(Hdr->ReqLine), '&');
        if (Args != NULL) {
+               Args ++; /* skip the ? */
                Hdr->PlainArgs = NewStrBufPlain(
                        Args, 
                        StrLength(Hdr->ReqLine) -
                        (Args - ChrPtr(Hdr->ReqLine)));
-               StrBufCutAt(Hdr->ReqLine, 0, Args);
+               StrBufCutAt(Hdr->ReqLine, 0, Args - 1);
        } /* don't parse them yet, maybe we don't even care... */
        
        /* now lookup what we are going to do with this... */
@@ -282,7 +283,11 @@ int ReadHttpSubject(ParsedHttpHdrs *Hdr, StrBuf *Line, StrBuf *Buf)
                Hdr->Handler = (WebcitHandler*) vHandler;
                if (Hdr->Handler == NULL)
                        break;
-               /* are we about to ignore some prefix like webcit/ ? */
+               /*
+                * If the request is prefixed by "/webcit" then chop that off.  This
+                * allows a front end web server to forward all /webcit requests to us
+                * while still using the same web server port for other things.
+                */
                if ((Hdr->Handler->Flags & URLNAMESPACE) == 0)
                        break;
        } while (1);
@@ -361,6 +366,7 @@ int ReadHTTPRequset (ParsedHttpHdrs *Hdr)
                                pch ++;
                        StrBufCutLeft(Line, pch - pchs);
                        StrBufAppendBuf(LastLine, Line, 0);
+
                        FreeStrBuf(&Line);
                        continue;
                }
@@ -435,28 +441,12 @@ void context_loop(int *sock)
 /*
        if (isbogus)
                StrBufPlain(ReqLine, HKEY("/404"));
+TODO    HKEY("/static/nocookies.html?force_close_session=yes"));
 */
 
 /*     dbg_PrintHash(HTTPHeaders, nix, NULL);  */
 
 
-///HttpHeaderHandler
-
-
-
-
-
-       /*
-        * If the request is prefixed by "/webcit" then chop that off.  This
-        * allows a front end web server to forward all /webcit requests to us
-        * while still using the same web server port for other things.
-        * /
-       if (!isbogus &&
-           (StrLength(ReqLine) >= 8) && 
-           (strstr(ChrPtr(ReqLine), "/webcit/")) ) {
-               StrBufCutLeft(ReqLine, 7);
-       }
-
        /* Begin parsing the request. * /
 #ifdef TECH_PREVIEW
        if ((strncmp(ChrPtr(ReqLine), "/sslg", 5) != 0) &&
@@ -555,29 +545,23 @@ void context_loop(int *sock)
 
        session_attach_modules(TheSession);
        session_loop();                         /* do transaction */
-       session_detach_modules(TheSession);
 
-       TheSession->Hdr = NULL;
-       pthread_mutex_unlock(&TheSession->SessionMutex);        /* unbind */
-/* TODO
 
-       FreeStrBuf(&c_username);
-       FreeStrBuf(&c_password);
-       FreeStrBuf(&c_roomname);
-       FreeStrBuf(&c_httpauth_user);
-       FreeStrBuf(&c_httpauth_pass);
-*/
-       /* Free the request buffer */
-       ///DeleteHash(&HTTPHeaders);
-       ///FreeStrBuf(&ReqLine);
-       
        /* How long did this transaction take? */
        gettimeofday(&tx_finish, NULL);
        
-       lprintf(9, "Transaction completed in %ld.%06ld seconds.\n",
+       lprintf(9, "Transaction [%s] completed in %ld.%06ld seconds.\n",
+               ChrPtr(Hdr.this_page),
                ((tx_finish.tv_sec*1000000 + tx_finish.tv_usec) - (tx_start.tv_sec*1000000 + tx_start.tv_usec)) / 1000000,
                ((tx_finish.tv_sec*1000000 + tx_finish.tv_usec) - (tx_start.tv_sec*1000000 + tx_start.tv_usec)) % 1000000
        );
+
+       session_detach_modules(TheSession);
+
+       TheSession->Hdr = NULL;
+       pthread_mutex_unlock(&TheSession->SessionMutex);        /* unbind */
+
+       http_destroy_modules(&Hdr);
 }
 
 void tmplput_nonce(StrBuf *Target, WCTemplputParams *TP)
@@ -597,66 +581,6 @@ void tmplput_current_room(StrBuf *Target, WCTemplputParams *TP)
        StrBufAppendTemplate(Target, TP, WC->wc_roomname, 0); 
 }
 
-
-void Header_HandleCookie(StrBuf *Line, ParsedHttpHdrs *hdr)
-{
-       hdr->RawCookie = Line;
-       if (hdr->DontNeedAuth)
-               return;
-/*
-       c_username = NewStrBuf();
-       c_password = NewStrBuf();
-       c_roomname = NewStrBuf();
-       safestrncpy(c_httpauth_string, "", sizeof c_httpauth_string);
-       c_httpauth_user = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_USER));
-       c_httpauth_pass = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_PASS));
-*/
-       cookie_to_stuff(Line, &hdr->desired_session,
-                       hdr->c_username,
-                       hdr->c_password,
-                       hdr->c_roomname);
-       hdr->got_cookie = 1;
-}
-
-
-       /*
-        * Browser-based sessions use cookies for session authentication
-        * /
-       if (!isbogus &&
-           GetHash(HTTPHeaders, HKEY("COOKIE"), &vLine) && 
-           (vLine != NULL)) {
-               cookie_to_stuff(vLine, &desired_session,
-                               NULL, NULL, NULL);
-               got_cookie = 1;
-       }
-       */
-       /*
-        * GroupDAV-based sessions use HTTP authentication
-        */
-/*
-       if (!isbogus &&
-           GetHash(HTTPHeaders, HKEY("AUTHORIZATION"), &vLine) && 
-           (vLine != NULL)) {
-               Line = (StrBuf*)vLine;
-               if (strncasecmp(ChrPtr(Line), "Basic", 5) == 0) {
-                       StrBufCutLeft(Line, 6);
-                       CtdlDecodeBase64(httpauth_string, ChrPtr(Line), StrLength(Line));
-                       extract_token(httpauth_user, httpauth_string, 0, ':', sizeof httpauth_user);
-                       extract_token(httpauth_pass, httpauth_string, 1, ':', sizeof httpauth_pass);
-               }
-               else 
-                       lprintf(1, "Authentication scheme not supported! [%s]\n", ChrPtr(Line));
-       }
-
-*/
-void Header_HandleAuth(StrBuf *Line, ParsedHttpHdrs *hdr)
-{
-       const char *Pos = NULL;
-       StrBufDecodeBase64(Line);
-       StrBufExtract_NextToken(hdr->c_username, Line, &Pos, ':');
-       StrBufExtract_NextToken(hdr->c_password, Line, &Pos, ':');
-}
-
 void Header_HandleContentLength(StrBuf *Line, ParsedHttpHdrs *hdr)
 {
        hdr->ContentLength = StrToi(Line);
@@ -722,31 +646,6 @@ void Header_HandleAcceptEncoding(StrBuf *Line, ParsedHttpHdrs *hdr)
                hdr->gzip_ok = 1;
        }
 }
-
-/*
-{
-       c_username = NewStrBuf();
-       c_password = NewStrBuf();
-       c_roomname = NewStrBuf();
-       safestrncpy(c_httpauth_string, "", sizeof c_httpauth_string);
-       c_httpauth_user = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_USER));
-       c_httpauth_pass = NewStrBufPlain(HKEY(DEFAULT_HTTPAUTH_PASS));
-}
-*/
-       /* *
-        * These are the URL's which may be executed without a
-        * session cookie already set.  If it's not one of these,
-        * force the session to close because cookies are
-        * probably disabled on the client browser.
-        * /
-       else if ( (StrLength(ReqLine) > 1 )
-               && (strncasecmp(ChrPtr(ReqLine), "/404", 4))
-               && (Hdr.got_cookie == 0)) {
-               StrBufPlain(ReqLine, 
-                           HKEY("/static/nocookies.html"
-                                "?force_close_session=yes"));
-       }
-*/
 const char *ReqStrs[eNONE] = {
        "GET",
        "POST",
@@ -825,8 +724,6 @@ void
 InitModule_CONTEXT
 (void)
 {
-       RegisterHeaderHandler(HKEY("COOKIE"), Header_HandleCookie);
-       RegisterHeaderHandler(HKEY("AUTHORIZATION"), Header_HandleAuth);
        RegisterHeaderHandler(HKEY("CONTENT-LENGTH"), Header_HandleContentLength);
        RegisterHeaderHandler(HKEY("CONTENT-TYPE"), Header_HandleContentType);
        RegisterHeaderHandler(HKEY("USER-AGENT"), Header_HandleUserAgent);
@@ -844,7 +741,19 @@ InitModule_CONTEXT
 
        WebcitAddUrlHandler(HKEY("blank"), blank_page, ANONYMOUS|BOGUS);
 
-       WebcitAddUrlHandler(HKEY("blank"), blank_page, URLNAMESPACE);
+       WebcitAddUrlHandler(HKEY("webcit"), blank_page, URLNAMESPACE);
 }
-//FreeStrBuf(&WCC->this_page);
        
+
+
+void 
+HttpDestroyModule_CONTEXT
+(ParsedHttpHdrs *httpreq)
+{
+       FreeStrBuf(&httpreq->ReqLine);
+       FreeStrBuf(&httpreq->ReadBuf);
+       FreeStrBuf(&httpreq->PlainArgs);
+       FreeStrBuf(&httpreq->this_page);
+       DeleteHash(&httpreq->HTTPHeaders);
+
+}