itvote.c: use 307 redirect to avoid additional voting through refresh - vote - simple cgi voting system for web and gopher Err mx1.adamsgaard.dk 70 hgit clone git://src.adamsgaard.dk/vote URL:git://src.adamsgaard.dk/vote mx1.adamsgaard.dk 70 1Log /src/vote/log.gph mx1.adamsgaard.dk 70 1Files /src/vote/files.gph mx1.adamsgaard.dk 70 1Refs /src/vote/refs.gph mx1.adamsgaard.dk 70 1README /src/vote/file/README.gph mx1.adamsgaard.dk 70 1LICENSE /src/vote/file/LICENSE.gph mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1commit 6cf52771bc127fbf083ca9badeeac6dba89d65fb /src/vote/commit/6cf52771bc127fbf083ca9badeeac6dba89d65fb.gph mx1.adamsgaard.dk 70 1parent 0b3501599120c01cca8c2e8532fcd31e781f48ec /src/vote/commit/0b3501599120c01cca8c2e8532fcd31e781f48ec.gph mx1.adamsgaard.dk 70 hAuthor: Anders Damsgaard URL:mailto:anders@adamsgaard.dk mx1.adamsgaard.dk 70 iDate: Mon, 28 Sep 2020 14:47:37 +0200 Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 ivote.c: use 307 redirect to avoid additional voting through refresh Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 iDiffstat: Err mx1.adamsgaard.dk 70 i M vote.c | 32 ++++++++++++++++++++++--------- Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i1 file changed, 23 insertions(+), 9 deletions(-) Err mx1.adamsgaard.dk 70 i--- Err mx1.adamsgaard.dk 70 1diff --git a/vote.c b/vote.c /src/vote/file/vote.c.gph mx1.adamsgaard.dk 70 it@@ -25,6 +25,10 @@ void Err mx1.adamsgaard.dk 70 i http_status(int statuscode) Err mx1.adamsgaard.dk 70 i { Err mx1.adamsgaard.dk 70 i switch(statuscode) { Err mx1.adamsgaard.dk 70 i+ case 307: Err mx1.adamsgaard.dk 70 i+ printf("Status: 307 Temporary Redirect\r\n"); Err mx1.adamsgaard.dk 70 i+ printf("Location: /vote?poll=%s&choice=0\r\n\r\n", poll); Err mx1.adamsgaard.dk 70 i+ break; Err mx1.adamsgaard.dk 70 i case 401: Err mx1.adamsgaard.dk 70 i printf("Status: 401 Bad Request\r\n\r\n"); Err mx1.adamsgaard.dk 70 i break; Err mx1.adamsgaard.dk 70 it@@ -402,28 +406,38 @@ main() Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i- print_html_head(); Err mx1.adamsgaard.dk 70 i- Err mx1.adamsgaard.dk 70 i parse_query(); Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i if (*create) { Err mx1.adamsgaard.dk 70 i- if (create_poll_file(poll, question, options) == 0) Err mx1.adamsgaard.dk 70 i+ if (create_poll_file(poll, question, options) == 0) { Err mx1.adamsgaard.dk 70 i+ print_html_head(); Err mx1.adamsgaard.dk 70 i show_poll(poll, 0); Err mx1.adamsgaard.dk 70 i+ print_html_foot(); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i } else if (*poll) { Err mx1.adamsgaard.dk 70 i if (*choice) { Err mx1.adamsgaard.dk 70 i- c = strtonum(choice, 1, 256, &errstr); Err mx1.adamsgaard.dk 70 i+ c = strtonum(choice, 0, 256, &errstr); Err mx1.adamsgaard.dk 70 i if (errstr != NULL) Err mx1.adamsgaard.dk 70 i errx(1, "could not parse choice: %s, %s", errstr, choice); Err mx1.adamsgaard.dk 70 i- increment_option(poll, c); Err mx1.adamsgaard.dk 70 i- show_poll(poll, 0); Err mx1.adamsgaard.dk 70 i- } else Err mx1.adamsgaard.dk 70 i+ if (c > 0) { Err mx1.adamsgaard.dk 70 i+ increment_option(poll, c); Err mx1.adamsgaard.dk 70 i+ http_status(307); Err mx1.adamsgaard.dk 70 i+ } else { Err mx1.adamsgaard.dk 70 i+ print_html_head(); Err mx1.adamsgaard.dk 70 i+ show_poll(poll, 0); Err mx1.adamsgaard.dk 70 i+ print_html_foot(); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i+ } else { Err mx1.adamsgaard.dk 70 i+ print_html_head(); Err mx1.adamsgaard.dk 70 i show_poll(poll, 1); Err mx1.adamsgaard.dk 70 i+ print_html_foot(); Err mx1.adamsgaard.dk 70 i+ } Err mx1.adamsgaard.dk 70 i } else { Err mx1.adamsgaard.dk 70 i+ print_html_head(); Err mx1.adamsgaard.dk 70 i list_polls(); Err mx1.adamsgaard.dk 70 i print_poll_create_form(); Err mx1.adamsgaard.dk 70 i+ print_html_foot(); Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 i Err mx1.adamsgaard.dk 70 i- print_html_foot(); Err mx1.adamsgaard.dk 70 i- Err mx1.adamsgaard.dk 70 i return 0; Err mx1.adamsgaard.dk 70 i } Err mx1.adamsgaard.dk 70 .