Mercurial > sci
annotate scid/page-projects.c @ 85:cf49ab595e2e default tip @
sciworkerd: avoid spawning several tasks
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 09 Mar 2023 10:43:48 +0100 |
parents | 71cd8447e3a4 |
children |
rev | line source |
---|---|
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
58
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
2 * page-projects.c -- page /projects[/<name>] route |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
80
71cd8447e3a4
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
58
diff
changeset
|
4 * Copyright (c) 2021-2023 David Demelier <markand@malikania.fr> |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
58
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
19 #include <assert.h> |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
20 #include <stdlib.h> |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <string.h> |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include "db.h" |
58
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
24 #include "page-workers.h" |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include "pageutil.h" |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include "theme.h" |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include "util.h" |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 static void |
58
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
30 get_one(struct kreq *r) |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 { |
58
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
32 json_t *project; |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
33 char *body; |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 |
58
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
35 if (!(project = db_project_find(r->path))) |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
36 pageutil_status(r, KHTTP_404); |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
37 else { |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
38 body = theme_render("onPageProject", project); |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
39 pageutil_render(r, KHTTP_200, KMIME_TEXT_HTML, body); |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
40 free(body); |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 } |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 } |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 static void |
58
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
45 get_all(struct kreq *r) |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 { |
58
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
47 json_t *projects; |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
48 char *body; |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
58
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
50 if (!(projects = db_project_list())) |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
51 pageutil_status(r, KHTTP_500); |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
52 else { |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
53 body = theme_render("onPageProjects", util_json_pack("{so}", |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
54 "projects", projects |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
55 )); |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
56 pageutil_render(r, KHTTP_200, KMIME_TEXT_HTML, body); |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
57 free(body); |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
58 } |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
59 } |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
60 |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
61 static void |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
62 get(struct kreq *r) |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
63 { |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
64 if (strlen(r->path) > 0) |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
65 get_one(r); |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
66 else |
7a4112eec15b
scid: add /projects page
David Demelier <markand@malikania.fr>
parents:
44
diff
changeset
|
67 get_all(r); |
44
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 } |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 void |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 page_projects(struct kreq *r) |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 { |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 (void)r; |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 switch (r->method) { |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 case KMETHOD_GET: |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 get(r); |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 break; |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 default: |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 pageutil_status(r, KHTTP_400); |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 break; |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 } |
576f4b1ec79f
scid: implement API authentication
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 } |