Mercurial > paster
annotate page-new.c @ 81:1ffe2f5a8500
pasterd: use HTML files to allow themes
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 17 Mar 2023 07:56:01 +0100 |
parents | 52029a52a385 |
children | 0a29424e4486 |
rev | line source |
---|---|
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * page-new.c -- page /new |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
72
1a98bc0daa49
misc: update copyright years
David Demelier <markand@malikania.fr>
parents:
64
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
74
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
5 * |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
74
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
9 * |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <assert.h> |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <string.h> |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
21 #include <stdlib.h> |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include "database.h" |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include "page-new.h" |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
25 #include "page-status.h" |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include "page.h" |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
27 #include "paste.h" |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include "util.h" |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
30 #define TITLE "paster -- create a new paste" |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
32 enum { |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
33 KEYWORD_TITLE, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
34 KEYWORD_AUTHOR, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
35 KEYWORD_LANGUAGES, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
36 KEYWORD_DURATIONS, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
37 KEYWORD_CODE |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
38 }; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
39 |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
40 struct page { |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
41 struct kreq *req; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
42 struct ktemplate template; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
43 const struct paste *paste; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
44 }; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
45 |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
46 static const char * const keywords[] = { |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
47 [KEYWORD_TITLE] = "title", |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
48 [KEYWORD_AUTHOR] = "author", |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
49 [KEYWORD_LANGUAGES] = "languages", |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
50 [KEYWORD_DURATIONS] = "durations", |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
51 [KEYWORD_CODE] = "code" |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
52 }; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
53 |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 static long long int |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 duration(const char *val) |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 { |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
75
diff
changeset
|
57 for (size_t i = 0; i < durationsz; ++i) |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 if (strcmp(val, durations[i].title) == 0) |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 return durations[i].secs; |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
61 /* Default to day. */ |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
62 return 60 * 60 * 24; |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 } |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
65 static int |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
66 format(size_t kw, void *data) |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
67 { |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
68 struct page *page = data; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
69 struct khtmlreq html; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
70 |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
71 khtml_open(&html, page->req, KHTML_PRETTY); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
72 |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
73 switch (kw) { |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
74 case KEYWORD_TITLE: |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
75 if (page->paste) |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
76 khtml_printf(&html, page->paste->title); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
77 break; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
78 case KEYWORD_AUTHOR: |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
79 if (page->paste) |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
80 khtml_printf(&html, page->paste->author); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
81 break; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
82 case KEYWORD_LANGUAGES: |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
83 for (size_t i = 0; i < languagesz; ++i) { |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
84 if (page->paste && strcmp(page->paste->language, languages[i]) == 0) |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
85 khtml_attr(&html, KELEM_OPTION, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
86 KATTR_VALUE, languages[i], |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
87 KATTR_SELECTED, "selected", |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
88 KATTR__MAX |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
89 ); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
90 else |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
91 khtml_attr(&html, KELEM_OPTION, KATTR_VALUE, languages[i], KATTR__MAX); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
92 khtml_printf(&html, "%s", languages[i]); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
93 khtml_closeelem(&html, 1); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
94 } |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
95 break; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
96 case KEYWORD_DURATIONS: |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
97 for (size_t i = 0; i < durationsz; ++i) { |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
98 khtml_attr(&html, KELEM_OPTION, KATTR_VALUE, durations[i].title, KATTR__MAX); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
99 khtml_printf(&html, "%s", durations[i].title); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
100 khtml_closeelem(&html, 1); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
101 } |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
102 break; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
103 case KEYWORD_CODE: |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
104 if (page->paste) |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
105 khtml_puts(&html, page->paste->code); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
106 break; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
107 default: |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
108 break; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
109 } |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
110 |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
111 khtml_close(&html); |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
112 |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
113 return 1; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
114 } |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
115 |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 static void |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 get(struct kreq *r) |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 { |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 page_new_render(r, NULL); |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 } |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 static void |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
123 post(struct kreq *req) |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 { |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
125 struct paste paste; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
126 const char *key, *val, *scheme; |
61
a93f4e3313e9
misc: add a raw option in POST data
David Demelier <markand@malikania.fr>
parents:
60
diff
changeset
|
127 int raw = 0; |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
129 paste_init(&paste); |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
131 // TODO: add verification support. |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
132 for (size_t i = 0; i < req->fieldsz; ++i) { |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
133 key = req->fields[i].key; |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
134 val = req->fields[i].val; |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
135 |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
136 if (strcmp(key, "title") == 0 && strlen(val)) |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
137 replace(&paste.title, val); |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
138 else if (strcmp(key, "author") == 0 && strlen(val)) |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
139 replace(&paste.author, val); |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 else if (strcmp(key, "language") == 0) |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
141 replace(&paste.language, val); |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 else if (strcmp(key, "duration") == 0) |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
143 paste.duration = duration(val); |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 else if (strcmp(key, "code") == 0) |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
145 replace(&paste.code, val); |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
146 else if (strcmp(key, "visible") == 0) |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
147 paste.visible = strcmp(val, "on") == 0; |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
148 else if (strcmp(key, "raw") == 0) |
61
a93f4e3313e9
misc: add a raw option in POST data
David Demelier <markand@malikania.fr>
parents:
60
diff
changeset
|
149 raw = strcmp(val, "on") == 0; |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 } |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
152 if (database_insert(&paste) < 0) |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
153 page_status(req, KHTTP_500); |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 else { |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
155 scheme = req->scheme == KSCHEME_HTTP ? "http" : "https"; |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
156 |
61
a93f4e3313e9
misc: add a raw option in POST data
David Demelier <markand@malikania.fr>
parents:
60
diff
changeset
|
157 if (raw) { |
a93f4e3313e9
misc: add a raw option in POST data
David Demelier <markand@malikania.fr>
parents:
60
diff
changeset
|
158 /* For CLI users (e.g. paster) just print the location. */ |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
159 khttp_head(req, kresps[KRESP_STATUS], "%s", khttps[KHTTP_201]); |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
160 khttp_body(req); |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
161 khttp_printf(req, "%s://%s/paste/%s\n", scheme, req->host, paste.id); |
61
a93f4e3313e9
misc: add a raw option in POST data
David Demelier <markand@malikania.fr>
parents:
60
diff
changeset
|
162 } else { |
a93f4e3313e9
misc: add a raw option in POST data
David Demelier <markand@malikania.fr>
parents:
60
diff
changeset
|
163 /* Otherwise, redirect to paste details. */ |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
164 khttp_head(req, kresps[KRESP_STATUS], "%s", khttps[KHTTP_302]); |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
165 khttp_head(req, kresps[KRESP_LOCATION], "/paste/%s", paste.id); |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
166 khttp_body(req); |
61
a93f4e3313e9
misc: add a raw option in POST data
David Demelier <markand@malikania.fr>
parents:
60
diff
changeset
|
167 } |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
168 |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
169 khttp_free(req); |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 } |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
172 paste_finish(&paste); |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 } |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 void |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
176 page_new_render(struct kreq *req, const struct paste *paste) |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 { |
74
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
178 assert(req); |
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
179 |
79
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
180 struct page self = { |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
181 .req = req, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
182 .template = { |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
183 .cb = format, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
184 .arg = &self, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
185 .key = keywords, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
186 .keysz = NELEM(keywords) |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
187 }, |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
188 .paste = paste |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
189 }; |
52029a52a385
pasterd: revert using ktemplate
David Demelier <markand@malikania.fr>
parents:
78
diff
changeset
|
190 |
81
1ffe2f5a8500
pasterd: use HTML files to allow themes
David Demelier <markand@malikania.fr>
parents:
79
diff
changeset
|
191 page(req, KHTTP_200, TITLE, "new.html", &self.template); |
74
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
192 } |
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
193 |
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
194 void |
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
195 page_new(struct kreq *req) |
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
196 { |
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
197 assert(req); |
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
198 |
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
199 switch (req->method) { |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 case KMETHOD_GET: |
74
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
201 get(req); |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 break; |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 case KMETHOD_POST: |
74
67b3d13a5035
pasterd: make own HTML code for good
David Demelier <markand@malikania.fr>
parents:
72
diff
changeset
|
204 post(req); |
51
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 break; |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 default: |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 break; |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 } |
07b6887d3557
pasterd: split into individual pages
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 } |