tvote.c: allow creating polls from query - vote - simple cgi voting system for web and gopher | |
git clone git://src.adamsgaard.dk/vote | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 3089fdd4c6326fa81bef1daa7b401513eaed785e | |
parent 4cb97e229cbb0d54d85e3960e3d7c4daa53a429e | |
Author: Anders Damsgaard | |
Date: Sun, 27 Sep 2020 13:37:30 +0200 vote.c: allow creating polls from query Diffstat: M vote.c | 62 ++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 5 deletions(-) --- | |
diff --git a/vote.c b/vote.c | |
t@@ -2,10 +2,12 @@ #include |
Error: Could not create poll
"); + puts("Poll '%s' already exists
", name); + return -1; } else { - if (!(fp = fopen(fname, "w"))) { http_status(404); exit(1); t@@ -152,6 +170,7 @@ create_poll_file(const char *name, const char *question, const char *options) fclose(fp); } } + return 0; } void t@@ -178,6 +197,13 @@ show_poll(const char *poll_name) } void +list_polls() +{ + /* something with fts_open, fts_read */ + puts("listing polls"); +} + +void parse_query() { char *query, *p; t@@ -185,12 +211,34 @@ parse_query() if (!(query = getenv("QUERY_STRING"))) query = ""; + if ((p = getparam(query, "create"))) { + if (decodeparam(create, sizeof(create), p) == -1) { + http_status(401); + exit(1); + } + } + if ((p = getparam(query, "poll"))) { if (decodeparam(poll, sizeof(poll), p) == -1) { http_status(401); exit(1); } } + + if ((p = getparam(query, "question"))) { + if (decodeparam(question, sizeof(question), p) == -1) { + http_status(401); + exit(1); + } + } + + if ((p = getparam(query, "options"))) { + if (decodeparam(options, sizeof(options), p) == -1) { + http_status(401); + exit(1); + } + } + } int t@@ -218,10 +266,14 @@ main() print_html_head(); parse_query(); - if (*poll) - show_poll(poll); - create_poll_file("test poll2", "What is your favorite color?", "Red\nGreen\nBlue"); + if (*create) { + if (create_poll_file(poll, question, options) == 0) + show_poll(poll); + } else if (*poll) + show_poll(poll); + else + list_polls(); print_html_foot();