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