* added: class HTMLFilter

files: htmlfilter.h htmlfilter.cpp
         this is an html filter used to make the html output looking better
         this is a very lightweight filter
         (without using any dynamic memory - some memory is allocated only at the beginning - in ctors)
         this filter has O(n) complexity over the whole html string
* added: antyspamming method
         if the POST request is sent too fast after the GET
         it is treated as a spam
         only for no logged users and only in 'emacs' and 'createthread' functions
       


git-svn-id: svn://ttmath.org/publicrep/cmslu/trunk@534 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2009-12-09 00:42:40 +00:00
parent 9241fddb1e
commit 717eb526fb
32 changed files with 1356 additions and 198 deletions

View File

@@ -266,6 +266,18 @@ void Request::CheckMethod()
}
bool Request::AllPostVarEmpty()
{
PostTable::iterator i;
for(i=post_table.begin() ; i!=post_table.end() ; ++i)
if( !i->second.empty() )
return false;
return true;
}
void Request::ReadParameters()
{
GetParser get_parser(env_request_uri, get_table);
@@ -330,11 +342,8 @@ void Request::SendSessionCookie()
}
void Request::SendAll()
void Request::SendHeaders(bool compressing)
{
SendSessionCookie();
if( !redirect_to.empty() )
{
FCGX_PutS("Status: 301 Moved Permanently\r\n", out);
@@ -348,43 +357,69 @@ void Request::SendAll()
FCGX_PutS("Content-Type: Text/Html\r\n", out);
}
bool compressing = data.compression && !browser_msie && accept_encoding_parser.AcceptDeflate();
if( compressing )
FCGX_PutS("Content-Encoding: deflate\r\n", out);
FCGX_PutS(headers.str().c_str(), out);
FCGX_PutS("\r\n", out);
}
if( !redirect_to.empty() )
// if there is a redirect we do not send a content
return;
//
const std::string & source = page.str();
if( compressing )
{
compress.CompressAndPut(source.c_str(), source.length(), out);
}
else
{
FCGX_PutS(source.c_str(), out);
}
void Request::AddDebugInfo()
{
const std::string & d = debug.str();
if( !d.empty() )
{
FCGX_PutS("\n<!--\n", out);
FCGX_PutS(d.c_str(), out);
FCGX_PutS("\n-->\n", out);
page << "\n<!--\n";
page << d;
page << "\n-->\n";
}
}
void Request::SendPage(bool compressing)
{
const std::string & source_ref = page.str();
const std::string * source = &source_ref;
if( data.html_filter )
{
html_filter.TrimWhite(true);
html_filter.BreakLongLines(true);
html_filter.InsertTabs(2);
html_filter.Filter(*source, clean_html);
source = &clean_html;
}
if( compressing )
compress.CompressAndPut(source->c_str(), source->length(), out);
else
FCGX_PutS(source->c_str(), out);
}
void Request::SendAll()
{
bool compressing = data.compression && !browser_msie && accept_encoding_parser.AcceptDeflate();
SendSessionCookie();
SendHeaders(compressing);
if( !redirect_to.empty() )
// if there is a redirect we do not send a content
return;
// adding debug info if exists
AddDebugInfo();
// sending content
SendPage(compressing);
}