void build() { const char * request_method = cgi_request::get_request_method(); if( !strcmp("GET", request_method) || !strcmp("POST", request_method) || !strcmp("PUT", request_method) ) { if( NULL != cgi_request::get_param_string("new") ) { handler_new(); return; } const char * t_path_info = cgi_request::get_path_info(); if( NULL == t_path_info || strlen(t_path_info) <= 1 ) { handler_redirect_homepage(); return; } const char * tmp = util_htmlize(t_path_info, strlen(t_path_info)); if( NULL == tmp ) throw std::bad_alloc(); ByteString_t path_info; try { path_info.append(tmp); } catch(...) { delete [] tmp; throw; } delete [] tmp; if( strlen("/favicon.ico") == path_info.length() && !memcmp("/favicon.ico", path_info.array(), path_info.length()) ) { handler_favicon(); return; } if( strlen("/styles") == path_info.length() &&!memcmp("/styles", path_info.array(), path_info.length()) ) { handler_styles(); return; } if( NULL != cgi_request::get_param_string("edit") ) { handler_edit(path_info); return; } handler_page(path_info); return; } else { cgi_responde::set_status( cgi_responde::status_501_not_implemented ); cgi_responde::set_content_type( mime_text_plain ); cgi_responde::append( cgi_responde::status_501_not_implemented ); return; } }
void wiki_show_page(HttpResponse *res, char *wikitext, char *page) { char *html_clean_wikitext = NULL; http_response_printf_alloc_buffer(res, strlen(wikitext)*2); wiki_show_header(res, page, TRUE); html_clean_wikitext = util_htmlize(wikitext, strlen(wikitext)); wiki_print_data_as_html(res, html_clean_wikitext); wiki_show_footer(res); http_response_send(res); exit(0); }
void handler_edit(const ByteString_t & _path_info) { const cgi_request::RequestParam_t * pedit = cgi_request::get_param_string("edit"); ByteString_t name(_path_info.array() + 1, _path_info.length() - 1); name.append('\0'); // @@ if( NULL == pedit->value ) { ByteString_t wiki; wiki_storage->get(name.array(), &wiki); build_header(_path_info); build_editpage(_path_info, wiki); build_footer(); } else { char * tmp = util_htmlize(pedit->value, pedit->value_size); if( NULL == tmp ) throw std::bad_alloc(); ByteString_t wiki; try { wiki.append(tmp); } catch(...) { delete [] tmp; throw; } delete [] tmp; name.resize(name.length() - 1); // @@ wiki_storage->set(name.array(), &wiki); add_changes(name); ByteString_t t; t.append( server_url ).append( script_name ).append( cgi_request::get_path_info() ).append( '\0' ); cgi_responde::set_status(cgi_responde::status_302_found); cgi_responde::set_location(t.array()); } }
http_response_send(res); exit(0); } int wiki_show_page(HttpResponse *res, char *wikitext, char *page, int autorized) { int private; char *html_clean_wikitext = NULL; http_response_printf_alloc_buffer(res, strlen(wikitext)*2); wiki_show_header(res, page, TRUE, autorized); html_clean_wikitext = util_htmlize(wikitext, strlen(wikitext)); private=wiki_print_data_as_html(res, html_clean_wikitext, autorized, page); wiki_show_footer(res); http_response_send(res); exit(private); } void wiki_show_edit_page(HttpResponse *res, char *wikitext, char *page, int preview, int autorized) {