moth/packages/mcp/src/claim.cgi.c

83 lines
1.5 KiB
C

#include <stdlib.h>
#include <ctype.h>
#include "common.h"
int
main(int argc, char *argv[])
{
char team[TEAM_MAX] = {0};
char token[TOKEN_MAX] = {0};
if (-1 == cgi_init(argv)) {
return 0;
}
/* Read in team and token */
while (1) {
size_t len;
char key[20];
len = cgi_item(key, sizeof(key));
if (0 == len) break;
switch (key[0]) {
case 't':
cgi_item(team, sizeof(team));
break;
case 'k':
cgi_item(token, sizeof(token));
break;
}
}
if (! team_exists(team)) {
cgi_page("No such team", "");
}
/* Any weird characters in token name? */
{
char *p;
if ('\0' == token[0]) {
cgi_page("Invalid token", "");
}
for (p = token; *p; p += 1) {
if ((! isalnum(*p)) &&
(*p != '-') &&
(*p != ':')) {
cgi_page("Invalid token", "");
}
}
}
/* Does the token exist? */
if (! fgrepx(token, state_path("tokens.db"))) {
cgi_page("Token does not exist", "");
}
/* Award points */
{
char category[40];
int i;
/* Pull category name out of the token */
for (i = 0; token[i] != ':'; i += 1) {
category[i] = token[i];
}
category[i] = '\0';
{
char line[200];
my_snprintf(line, sizeof(line),
"%s %s", team, token);
award_and_log_uniquely(team, category, 1,
state_path("claim.db"), line);
}
}
cgi_page("Point awarded", "<!-- success -->");
return 0;
}