// check if authentication is required bool CWebserverRequest::Authenticate(void) { if (!cfg.MustAuthenticate) return true; if (CheckAuth()) return true; SocketWriteLn("HTTP/1.0 401 Unauthorized"); SocketWriteLn("WWW-Authenticate: Basic realm=\"dbox\"\r\n"); if (Method != M_HEAD) SocketWriteLn("Access denied."); return false; }
//------------------------------------------------------------------------- bool CWebserverRequest::Authenticate() // check if authentication is required { if(Parent->MustAuthenticate) { if(!CheckAuth()) { // dprintf("Authenticate\n"); SocketWriteLn("HTTP/1.0 401 Unauthorized"); SocketWriteLn("WWW-Authenticate: Basic realm=\"dbox\"\r\n"); if (Method != M_HEAD) { SocketWriteLn("Access denied."); } return false; } else { // dprintf("Zugriff ok\n"); return true; } } else return true; }
//------------------------------------------------------------------------- void CWebserverRequest::SendHTMLFooter() { SocketWriteLn("</body></html>"); }
//------------------------------------------------------------------------- void CWebserverRequest::SendHTMLHeader(string Titel) { SocketWriteLn("<html>\n<head><title>" + Titel + "</title><link rel=\"stylesheet\" type=\"text/css\" href=\"../global.css\">"); SocketWriteLn("<meta http-equiv=\"cache-control\" content=\"no-cache\">"); SocketWriteLn("<meta http-equiv=\"expires\" content=\"0\"></head>\n<body>"); }
//------------------------------------------------------------------------- bool CWebserverRequest::ParseRequest() { int ende; if(rawbuffer_len > 0 ) { if((ende = rawbuffer.find_first_of('\n')) == 0) { aprintf("ParseRequest: End of line not found\n"); Send500Error(); return false; } string zeile1 = rawbuffer.substr(0,ende-1); if(ParseFirstLine(zeile1)) { unsigned int i; for(i = 0; ((rawbuffer[i] != '\n') || (rawbuffer[i+2] != '\n')) && (i < rawbuffer.length());i++); int headerende = i; // dprintf("headerende: %d buffer_len: %d\n",headerende,rawbuffer_len); if(headerende == 0) { aprintf("ParseRequest: no headers found\n"); Send500Error(); return false; } string header = rawbuffer.substr(ende+1,headerende - ende - 2); ParseHeader(header); Host = HeaderList["Host"]; if(Method == M_POST) // TODO: Und testen ob content = formdata { string t = "multipart/form-data; boundary="; if(HeaderList["Content-Type"].compare(0,t.length(),t) == 0) { SocketWriteLn("Sorry, momentan broken\n"); /*Boundary = "--" + HeaderList["Content-Type"].substr(t.length(),HeaderList["Content-Type"].length() - t.length()); dprintf("Boundary: '%s'\n",Boundary.c_str()); if((headerende + 3) < rawbuffer_len) ParseBoundaries(rawbuffer.substr(headerende + 3,rawbuffer_len - (headerende + 3))); HandleUpload();*/ } else if(HeaderList["Content-Type"].compare("application/x-www-form-urlencoded") == 0) { dprintf("Form Daten in Parameter String\n"); if((headerende + 3) < rawbuffer_len) { string params = rawbuffer.substr(headerende + 3,rawbuffer_len - (headerende + 3)); if(params[params.length()-1] == '\n') params.substr(0,params.length() -2); ParseParams(params); } } dprintf("Method Post !\n"); } /* if(Method == M_POST) // TODO: Und testen ob content = formdata { if( (ende + 3) < rawbuffer + rawbuffer_len) { // Parent->Debug("Post Parameter vorhanden\n"); anfang = ende + 3; Param_String = string(anfang,rawbuffer + rawbuffer_len - anfang); dprintf("Post Param_String: %s\n",Param_String.c_str()); ParseParams(Param_String); } if(HeaderList->GetIndex("Content-Type") != -1) { dprintf("Content-Type: %s\n",HeaderList->GetValue(HeaderList->GetIndex("Content-Type"))); if(strcasecmp("application/x-www-form-urlencoded",HeaderList->GetValue(HeaderList->GetIndex("Content-Type"))) == 0) dprintf("Form Daten in Parameter String\n"); if(strstr(HeaderList->GetValue(HeaderList->GetIndex("Content-Type")),"multipart/form-data") != 0) { char * boundary; boundary = strstr(HeaderList->GetValue(HeaderList->GetIndex("Content-Type")),"boundary="); if(boundary) { boundary += strlen("boundary="); dprintf("boundary : %s\n",boundary); Upload = new TUpload(this); Upload->Boundary = new TString(boundary); Boundary = new TString(boundary); dprintf("Form Daten in Parameter String und Datei upload\nBoundary: %ld\n",Boundary); } } } } */ return true; } else { SocketWrite("HTTP/1.0 501 Not implemented\r\n"); SocketWrite("Content-Type: text/plain\r\n\r\n"); SocketWrite("501 : Request-Method not implemented.\n"); HttpStatus = 501; // dprintf("501 : Request-Method not implemented.\n"); return false; } } return false; }