Mercurial > sci
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 |
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 } |