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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }