Mercurial > paster
annotate http.c @ 5:f455893bf0b0
pasterd: show dates in /
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 05 Feb 2020 13:15:55 +0100 |
parents | ca5b8abc2d44 |
children | 39defd15564e |
rev | line source |
---|---|
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * http.c -- HTTP parsing and rendering |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020 David Demelier <markand@malikania.fr> |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
5 * |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
9 * |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <sys/types.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #include <assert.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <limits.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <stdarg.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <stdint.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <stdio.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <stdlib.h> |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
26 #include <string.h> |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <unistd.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <kcgi.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 #include "config.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #include "database.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 #include "http.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #include "log.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 #include "paste.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 #include "util.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 static void page_index(struct kreq *); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 static void page_new(struct kreq *); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 static void page_fork(struct kreq *); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 static void page_paste(struct kreq *); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 static void page_download(struct kreq *); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 enum page { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 PAGE_INDEX, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 PAGE_NEW, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 PAGE_FORK, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 PAGE_PASTE, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 PAGE_DOWNLOAD, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 PAGE_LAST /* Not used. */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 static const char *pages[] = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 [PAGE_INDEX] = "", |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 [PAGE_NEW] = "new", |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 [PAGE_FORK] = "fork", |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 [PAGE_PASTE] = "paste", |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 [PAGE_DOWNLOAD] = "download", |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 static void (*handlers[])(struct kreq *req) = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 [PAGE_INDEX] = page_index, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 [PAGE_NEW] = page_new, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 [PAGE_FORK] = page_fork, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 [PAGE_PASTE] = page_paste, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 [PAGE_DOWNLOAD] = page_download |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 struct tmpl_index { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 struct kreq *req; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 struct paste pastes[10]; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 size_t count; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 size_t current; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 struct tmpl_paste { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 struct kreq *req; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 struct paste paste; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
81 static const char *tmpl_index_keywords[] = { |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
82 "pastes" |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
83 }; |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
84 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
85 static const char *tmpl_index_pastes_keywords[] = { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
86 "uuid", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
87 "name", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
88 "author", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
89 "language", |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
90 "expiration", |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
91 "date" |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
92 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
93 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
94 static const char *tmpl_paste_keywords[] = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
95 "uuid", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
96 "title", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
97 "author", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
98 "language", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
99 "code", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
100 "timestamp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
101 "visible", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
102 "duration" |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
103 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
104 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
105 static const char *tmpl_new_keywords[] = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
106 "title", /* /fork only */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
107 "author", /* /fork only */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
108 "code", /* /fork only */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
109 "languages" |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
110 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
111 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
112 static const char *languages[] = { |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
113 "nohighlight" |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
114 "1c", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
115 "abnf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
116 "accesslog", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
117 "actionscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
118 "ada", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
119 "apache", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
120 "applescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
121 "arduino", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
122 "armasm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
123 "asciidoc", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
124 "aspectj", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
125 "autohotkey", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
126 "autoit", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
127 "avrasm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
128 "awk", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
129 "axapta", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
130 "bash", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
131 "basic", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
132 "bnf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
133 "brainfuck", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
134 "cal", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
135 "capnproto", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
136 "ceylon", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
137 "clean", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
138 "clojure", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
139 "clojure-repl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
140 "cmake", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
141 "coffeescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
142 "coq", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
143 "cos", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
144 "cpp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
145 "crmsh", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
146 "crystal", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
147 "cs", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
148 "csp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
149 "css", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
150 "dart", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
151 "delphi", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
152 "diff", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
153 "django", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
154 "d", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
155 "dns", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
156 "dockerfile", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
157 "dos", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
158 "dsconfig", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
159 "dts", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
160 "dust", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
161 "ebnf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
162 "elixir", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
163 "elm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
164 "erb", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
165 "erlang", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
166 "erlang-repl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
167 "excel", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
168 "fix", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
169 "flix", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
170 "fortran", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
171 "fsharp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
172 "gams", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
173 "gauss", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
174 "gcode", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
175 "gherkin", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
176 "glsl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
177 "go", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
178 "golo", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
179 "gradle", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
180 "groovy", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
181 "haml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
182 "handlebars", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
183 "haskell", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
184 "haxe", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
185 "hsp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
186 "htmlbars", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
187 "http", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
188 "hy", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
189 "inform7", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
190 "ini", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
191 "irpf90", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
192 "java", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
193 "javascript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
194 "jboss-cli", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
195 "json", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
196 "julia", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
197 "julia-repl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
198 "kotlin", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
199 "lasso", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
200 "ldif", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
201 "leaf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
202 "less", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
203 "lisp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
204 "livecodeserver", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
205 "livescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
206 "llvm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
207 "lsl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
208 "lua", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
209 "makefile", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
210 "markdown", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
211 "mathematica", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
212 "matlab", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
213 "maxima", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
214 "mel", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
215 "mercury", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
216 "mipsasm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
217 "mizar", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
218 "mojolicious", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
219 "monkey", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
220 "moonscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
221 "n1ql", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
222 "nginx", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
223 "nimrod", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
224 "nix", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
225 "nsis", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
226 "objectivec", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
227 "ocaml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
228 "openscad", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
229 "oxygene", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
230 "parser3", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
231 "perl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
232 "pf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
233 "php", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
234 "pony", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
235 "powershell", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
236 "processing", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
237 "profile", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
238 "prolog", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
239 "protobuf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
240 "puppet", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
241 "purebasic", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
242 "python", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
243 "q", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
244 "qml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
245 "rib", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
246 "r", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
247 "roboconf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
248 "routeros", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
249 "rsl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
250 "ruby", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
251 "ruleslanguage", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
252 "rust", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
253 "scala", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
254 "scheme", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
255 "scilab", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
256 "scss", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
257 "shell", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
258 "smali", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
259 "smalltalk", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
260 "sml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
261 "sqf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
262 "sql", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
263 "stan", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
264 "stata", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
265 "step21", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
266 "stylus", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
267 "subunit", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
268 "swift", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
269 "taggerscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
270 "tap", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
271 "tcl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
272 "tex", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
273 "thrift", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
274 "tp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
275 "twig", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
276 "typescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
277 "vala", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
278 "vbnet", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
279 "vbscript-html", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
280 "vbscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
281 "verilog", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
282 "vhdl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
283 "vim", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
284 "x86asm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
285 "xl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
286 "xml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
287 "xquery", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
288 "yaml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
289 "zephir", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
290 NULL |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
291 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
292 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 static const char * |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 template(const char *filename) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 /* Build path to the template file. */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 static char path[PATH_MAX]; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 snprintf(path, sizeof (path), "%s/%s", config.themedir, filename); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 return path; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
304 static long long int |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
305 duration(const char *val) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
306 { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
307 if (strcmp(val, "hour") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
308 return PASTE_HOUR; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
309 if (strcmp(val, "day") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
310 return PASTE_DAY; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
311 if (strcmp(val, "week") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
312 return PASTE_WEEK; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
313 if (strcmp(val, "month") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
314 return PASTE_MONTH; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
315 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
316 /* Default to month. */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
317 return PASTE_MONTH; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
318 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
319 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 static int |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 tmpl_paste(size_t index, void *arg) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 struct tmpl_paste *data = arg; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 struct paste *paste = &data->paste; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 switch (index) { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 case 0: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 khttp_puts(data->req, paste->uuid); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 case 1: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 khttp_puts(data->req, paste->title); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 case 2: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 khttp_puts(data->req, paste->author); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
336 case 3: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 khttp_puts(data->req, paste->language); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 case 4: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 khttp_puts(data->req, paste->code); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
342 case 5: |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
343 khttp_puts(data->req, bstrftime("%c", localtime(&paste->timestamp))); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
344 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
345 case 6: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
346 khttp_puts(data->req, bprintf("%s", paste->visible ? "Yes" : "No")); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
347 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
348 case 7: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 /* TODO: convert time left. */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
350 khttp_puts(data->req, "TODO"); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 default: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
354 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
355 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
356 return true; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
357 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
358 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
359 static int |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
360 tmpl_index_pastes(size_t index, void *arg) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
361 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
362 struct tmpl_index *data = arg; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
363 struct paste *paste = &data->pastes[data->current]; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
364 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
365 switch (index) { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
366 case 0: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
367 khttp_puts(data->req, paste->uuid); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
368 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
369 case 1: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
370 khttp_puts(data->req, paste->title); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
371 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
372 case 2: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
373 khttp_puts(data->req, paste->author); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
374 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
375 case 3: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
376 khttp_puts(data->req, paste->language); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
377 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
378 case 4: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
379 khttp_puts(data->req, bprintf("%d", paste->duration)); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
380 break; |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
381 case 5: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
382 khttp_puts(data->req, bstrftime("%c", localtime(&paste->timestamp))); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
383 break; |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
384 default: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
385 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
386 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
387 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
388 return true; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
389 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
390 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
391 static int |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
392 tmpl_index(size_t index, void *arg) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
393 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
394 /* No check, only one index. */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
395 struct tmpl_index *data = arg; |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
396 const struct ktemplate kt = { |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
397 .key = tmpl_index_pastes_keywords, |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
398 .keysz = 6, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
399 .arg = data, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
400 .cb = tmpl_index_pastes |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
401 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
402 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
403 for (size_t i = 0; i < data->count; ++i) { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
404 khttp_template(data->req, &kt, template("index-paste.html")); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
405 data->current++; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
406 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
407 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
408 return true; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
409 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
410 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
411 static int |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
412 tmpl_new(size_t index, void *arg) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
413 { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
414 struct tmpl_paste *data = arg; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
415 struct paste *paste = &data->paste; |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
416 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
417 switch (index) { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
418 case 0: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
419 if (paste->title) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
420 khttp_puts(data->req, paste->title); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
421 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
422 case 1: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
423 if (paste->author) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
424 khttp_puts(data->req, paste->author); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
425 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
426 case 2: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
427 if (paste->code) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
428 khttp_puts(data->req, paste->code); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
429 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
430 case 3: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
431 /* TODO: fragment? */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
432 for (const char **l = languages; *l != NULL; ++l) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
433 khttp_puts(data->req, |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
434 bprintf("<option value=\"%s\">%s</option>", *l, *l)); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
435 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
436 default: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
437 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
438 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
439 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
440 return true; |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
441 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
442 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
443 static void |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
444 page_header(struct kreq *req) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
445 { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
446 khttp_template(req, NULL, template("header.html")); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
447 } |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
448 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
449 static void |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
450 page_footer(struct kreq *req) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
451 { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
452 khttp_template(req, NULL, template("footer.html")); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
453 } |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
454 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
455 static void |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
456 page(struct kreq *req, const struct ktemplate *tmpl, enum khttp status, const char *file) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
457 { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
458 khttp_head(req, kresps[KRESP_CONTENT_TYPE], "%s", kmimetypes[KMIME_TEXT_HTML]); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
459 khttp_head(req, kresps[KRESP_STATUS], "%s", khttps[status]); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
460 khttp_body(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
461 page_header(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
462 khttp_template(req, tmpl, template(file)); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
463 page_footer(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
464 khttp_free(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
465 } |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
466 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
467 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
468 page_index_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
469 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
470 struct tmpl_index data = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
471 .req = req, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
472 .count = 10 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
473 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
474 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
475 if (!database_recents(data.pastes, &data.count)) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
476 page(req, NULL, KHTTP_500, "500.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
477 else { |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
478 struct ktemplate kt = { |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
479 .key = tmpl_index_keywords, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
480 .keysz = 1, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
481 .arg = &data, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
482 .cb = tmpl_index |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
483 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
484 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
485 page(req, &kt, KHTTP_200, "index.html"); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
486 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
487 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
488 for (size_t i = 0; i < data.count; ++i) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
489 paste_finish(&data.pastes[i]); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
490 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
491 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
492 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
493 page_index(struct kreq *req) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
494 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
495 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
496 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
497 page_index_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
498 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
499 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
500 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
501 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
502 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
503 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
504 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
505 static void |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
506 page_new_get(struct kreq *req) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
507 { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
508 struct tmpl_paste data = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
509 .req = req |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
510 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
511 const struct ktemplate kt = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
512 .key = tmpl_new_keywords, |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
513 .keysz = 4, |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
514 .cb = tmpl_new, |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
515 .arg = &data |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
516 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
517 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
518 page(req, &kt, KHTTP_200, "new.html"); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
519 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
520 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
521 static void |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
522 page_new_post(struct kreq *req) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
523 { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
524 struct paste paste = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
525 .visible = true |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
526 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
527 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
528 for (size_t i = 0; i < req->fieldsz; ++i) { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
529 const char *key = req->fields[i].key; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
530 const char *val = req->fields[i].val; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
531 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
532 if (strcmp(key, "title") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
533 paste.title = estrdup(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
534 else if (strcmp(key, "author") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
535 paste.author = estrdup(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
536 else if (strcmp(key, "language") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
537 paste.language = estrdup(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
538 else if (strcmp(key, "duration") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
539 paste.duration = duration(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
540 else if (strcmp(key, "code") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
541 paste.code = estrdup(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
542 else if (strcmp(key, "private") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
543 paste.visible = strcmp(val, "on") != 0; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
544 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
545 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
546 if (!paste.title || !paste.author || !paste.language || !paste.code) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
547 page(req, NULL, KHTTP_400, "400.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
548 else { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
549 if (!database_insert(&paste)) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
550 page(req, NULL, KHTTP_500, "500.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
551 else { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
552 /* Redirect to paste details. */ |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
553 khttp_head(req, kresps[KRESP_STATUS], "%s", khttps[KHTTP_302]); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
554 khttp_head(req, kresps[KRESP_LOCATION], "/paste/%s", paste.uuid); |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
555 khttp_body(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
556 khttp_free(req); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
557 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
558 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
559 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
560 paste_finish(&paste); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
561 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
562 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
563 static void |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
564 page_new(struct kreq *req) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
565 { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
566 switch (req->method) { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
567 case KMETHOD_GET: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
568 page_new_get(req); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
569 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
570 case KMETHOD_POST: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
571 page_new_post(req); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
572 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
573 default: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
574 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
575 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
576 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
577 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
578 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
579 page_fork_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
580 { |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
581 struct tmpl_paste data = { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
582 .req = req |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
583 }; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
584 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
585 if (!database_get(&data.paste, req->path)) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
586 page(req, NULL, KHTTP_404, "404.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
587 else { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
588 const struct ktemplate kt = { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
589 .key = tmpl_new_keywords, |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
590 .keysz = 4, |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
591 .cb = tmpl_new, |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
592 .arg = &data |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
593 }; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
594 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
595 page(req, &kt, KHTTP_200, "new.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
596 paste_finish(&data.paste); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
597 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
598 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
599 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
600 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
601 page_fork(struct kreq *req) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
602 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
603 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
604 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
605 page_fork_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
606 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
607 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
608 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
609 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
610 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
611 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
612 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
613 static void |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
614 page_paste_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
615 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
616 struct tmpl_paste data = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
617 .req = req |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
618 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
619 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
620 if (!database_get(&data.paste, req->path)) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
621 page(req, NULL, KHTTP_404, "404.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
622 else { |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
623 const struct ktemplate kt = { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
624 .key = tmpl_paste_keywords, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
625 .keysz = 8, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
626 .cb = tmpl_paste, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
627 .arg = &data |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
628 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
629 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
630 page(req, &kt, KHTTP_200, "paste.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
631 paste_finish(&data.paste); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
632 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
633 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
634 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
635 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
636 page_paste(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
637 { |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
638 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
639 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
640 page_paste_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
641 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
642 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
643 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
644 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
645 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
646 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
647 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
648 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
649 page_download_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
650 { |
3
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
651 struct paste paste; |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
652 |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
653 if (!database_get(&paste, req->path)) |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
654 page(req, NULL, KHTTP_404, "404.html"); |
3
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
655 else { |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
656 khttp_head(req, kresps[KRESP_CONTENT_TYPE], "%s", kmimetypes[KMIME_APP_OCTET_STREAM]); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
657 #if 0 |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
658 /* TODO: this seems to generated truncated files. */ |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
659 khttp_head(req, kresps[KRESP_CONTENT_LENGTH], "%zu", strlen(paste.code)); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
660 #endif |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
661 khttp_head(req, kresps[KRESP_CONNECTION], "keep-alive"); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
662 khttp_head(req, kresps[KRESP_CONTENT_DISPOSITION], |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
663 "attachment; filename=\"%s.%s\"", paste.uuid, paste.language); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
664 khttp_body(req); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
665 khttp_puts(req, paste.code); |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
666 khttp_free(req); |
3
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
667 paste_finish(&paste); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
668 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
669 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
670 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
671 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
672 page_download(struct kreq *req) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
673 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
674 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
675 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
676 page_download_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
677 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
678 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
679 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
680 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
681 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
682 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
683 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
684 static void |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
685 process(struct kreq *req) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
686 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
687 assert(req); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
688 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
689 handlers[req->page](req); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
690 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
691 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
692 void |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
693 http_fcgi_run(void) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
694 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
695 struct kreq req; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
696 struct kfcgi *fcgi; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
697 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
698 if (khttp_fcgi_init(&fcgi, NULL, 0, pages, PAGE_LAST, 0) != KCGI_OK) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
699 return; |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
700 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
701 while (khttp_fcgi_parse(fcgi, &req) == KCGI_OK) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
702 process(&req); |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
703 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
704 khttp_fcgi_free(fcgi); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
705 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
706 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
707 void |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
708 http_cgi_run(void) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
709 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
710 struct kreq req; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
711 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
712 if (khttp_parse(&req, NULL, 0, pages, PAGE_LAST, 0) == KCGI_OK) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
713 process(&req); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
714 } |