Mercurial > sci
diff page-api-script.c @ 2:5fa3d2f479b2
sci: initial upload support
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 10 Jun 2021 10:39:21 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/page-api-script.c Thu Jun 10 10:39:21 2021 +0200 @@ -0,0 +1,56 @@ +#include <sys/types.h> +#include <assert.h> +#include <stdarg.h> +#include <stdint.h> + +#include <kcgi.h> +#include <jansson.h> + +#include "config.h" +#include "page.h" +#include "req.h" +#include "util.h" + +static void +content(struct kreq *r, const char *code) +{ + json_t *doc; + + doc = json_object(); + json_object_set(doc, "code", json_string(code)); + khttp_puts(r, json_dumps(doc, JSON_COMPACT)); + json_decref(doc); +} + +static void +get(struct kreq *r) +{ + struct req req; + char script[SCI_MSG_MAX]; + const char *project = util_basename(r->path); + + if ((req = req_script_get(project, script, sizeof (script))).status) + page(r, NULL, KHTTP_500, KMIME_APP_JSON, NULL); + else { + khttp_head(r, kresps[KRESP_CONTENT_TYPE], "%s", kmimetypes[KMIME_APP_JSON]); + khttp_head(r, kresps[KRESP_STATUS], "%s", khttps[KHTTP_200]); + khttp_body(r); + content(r, script); + khttp_free(r); + } +} + +void +page_api_v1_script(struct kreq *r) +{ + assert(r); + + switch (r->method) { + case KMETHOD_GET: + get(r); + break; + default: + page(r, NULL, KHTTP_400, KMIME_APP_JSON, NULL); + break; + } +}