コード例 #1
0
ファイル: main.cpp プロジェクト: apronchenkov/dwiki
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;
		}
}
コード例 #2
0
ファイル: wiki.c プロジェクト: OpenedHand/didiwiki
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);

}
コード例 #3
0
ファイル: main.cpp プロジェクト: apronchenkov/dwiki
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());
		}
}
コード例 #4
0
    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)
{