annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 #include <sys/types.h>
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 #include <assert.h>
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 #include <stdarg.h>
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 #include <stdint.h>
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
5
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 #include <kcgi.h>
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 #include <jansson.h>
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
8
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 #include "config.h"
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 #include "page.h"
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 #include "req.h"
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 #include "util.h"
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
13
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 static void
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 content(struct kreq *r, const char *code)
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 {
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 json_t *doc;
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 doc = json_object();
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
20 json_object_set(doc, "code", json_string(code));
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 khttp_puts(r, json_dumps(doc, JSON_COMPACT));
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 json_decref(doc);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 }
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
24
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 static void
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 get(struct kreq *r)
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 {
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 struct req req;
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 char script[SCI_MSG_MAX];
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 const char *project = util_basename(r->path);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 if ((req = req_script_get(project, script, sizeof (script))).status)
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 page(r, NULL, KHTTP_500, KMIME_APP_JSON, NULL);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 else {
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 khttp_head(r, kresps[KRESP_CONTENT_TYPE], "%s", kmimetypes[KMIME_APP_JSON]);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 khttp_head(r, kresps[KRESP_STATUS], "%s", khttps[KHTTP_200]);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 khttp_body(r);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 content(r, script);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 khttp_free(r);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 }
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
41 }
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
42
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
43 void
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 page_api_v1_script(struct kreq *r)
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 {
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 assert(r);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 switch (r->method) {
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 case KMETHOD_GET:
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 get(r);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 break;
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 default:
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 page(r, NULL, KHTTP_400, KMIME_APP_JSON, NULL);
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 break;
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 }
5fa3d2f479b2 sci: initial upload support
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 }