Mercurial > paster
annotate http.c @ 8:0f1d65d5ea89
pasterd: bring visibility into /fork
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 05 Feb 2020 14:16:00 +0100 |
parents | 39defd15564e |
children | e8f61741aaec |
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 */ |
8
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
109 "private", /* /fork only */ |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
110 "languages" |
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 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
113 static const char *languages[] = { |
7 | 114 "nohighlight", |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
115 "1c", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
116 "abnf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
117 "accesslog", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
118 "actionscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
119 "ada", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
120 "apache", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
121 "applescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
122 "arduino", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
123 "armasm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
124 "asciidoc", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
125 "aspectj", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
126 "autohotkey", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
127 "autoit", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
128 "avrasm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
129 "awk", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
130 "axapta", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
131 "bash", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
132 "basic", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
133 "bnf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
134 "brainfuck", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
135 "cal", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
136 "capnproto", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
137 "ceylon", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
138 "clean", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
139 "clojure", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
140 "clojure-repl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
141 "cmake", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
142 "coffeescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
143 "coq", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
144 "cos", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
145 "cpp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
146 "crmsh", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
147 "crystal", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
148 "cs", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
149 "csp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
150 "css", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
151 "dart", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
152 "delphi", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
153 "diff", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
154 "django", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
155 "d", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
156 "dns", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
157 "dockerfile", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
158 "dos", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
159 "dsconfig", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
160 "dts", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
161 "dust", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
162 "ebnf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
163 "elixir", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
164 "elm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
165 "erb", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
166 "erlang", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
167 "erlang-repl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
168 "excel", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
169 "fix", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
170 "flix", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
171 "fortran", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
172 "fsharp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
173 "gams", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
174 "gauss", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
175 "gcode", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
176 "gherkin", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
177 "glsl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
178 "go", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
179 "golo", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
180 "gradle", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
181 "groovy", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
182 "haml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
183 "handlebars", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
184 "haskell", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
185 "haxe", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
186 "hsp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
187 "htmlbars", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
188 "http", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
189 "hy", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
190 "inform7", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
191 "ini", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
192 "irpf90", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
193 "java", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
194 "javascript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
195 "jboss-cli", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
196 "json", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
197 "julia", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
198 "julia-repl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
199 "kotlin", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
200 "lasso", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
201 "ldif", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
202 "leaf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
203 "less", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
204 "lisp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
205 "livecodeserver", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
206 "livescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
207 "llvm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
208 "lsl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
209 "lua", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
210 "makefile", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
211 "markdown", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
212 "mathematica", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
213 "matlab", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
214 "maxima", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
215 "mel", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
216 "mercury", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
217 "mipsasm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
218 "mizar", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
219 "mojolicious", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
220 "monkey", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
221 "moonscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
222 "n1ql", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
223 "nginx", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
224 "nimrod", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
225 "nix", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
226 "nsis", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
227 "objectivec", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
228 "ocaml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
229 "openscad", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
230 "oxygene", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
231 "parser3", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
232 "perl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
233 "pf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
234 "php", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
235 "pony", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
236 "powershell", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
237 "processing", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
238 "profile", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
239 "prolog", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
240 "protobuf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
241 "puppet", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
242 "purebasic", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
243 "python", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
244 "q", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
245 "qml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
246 "rib", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
247 "r", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
248 "roboconf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
249 "routeros", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
250 "rsl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
251 "ruby", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
252 "ruleslanguage", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
253 "rust", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
254 "scala", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
255 "scheme", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
256 "scilab", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
257 "scss", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
258 "shell", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
259 "smali", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
260 "smalltalk", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
261 "sml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
262 "sqf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
263 "sql", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
264 "stan", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
265 "stata", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
266 "step21", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
267 "stylus", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
268 "subunit", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
269 "swift", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
270 "taggerscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
271 "tap", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
272 "tcl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
273 "tex", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
274 "thrift", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
275 "tp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
276 "twig", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
277 "typescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
278 "vala", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
279 "vbnet", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
280 "vbscript-html", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
281 "vbscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
282 "verilog", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
283 "vhdl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
284 "vim", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
285 "x86asm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
286 "xl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
287 "xml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
288 "xquery", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
289 "yaml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
290 "zephir", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
291 NULL |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
292 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
293 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 static const char * |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 template(const char *filename) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 /* Build path to the template file. */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 static char path[PATH_MAX]; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 snprintf(path, sizeof (path), "%s/%s", config.themedir, filename); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 return path; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
305 static long long int |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
306 duration(const char *val) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
307 { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
308 if (strcmp(val, "hour") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
309 return PASTE_HOUR; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
310 if (strcmp(val, "day") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
311 return PASTE_DAY; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
312 if (strcmp(val, "week") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
313 return PASTE_WEEK; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
314 if (strcmp(val, "month") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
315 return PASTE_MONTH; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
316 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
317 /* Default to month. */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
318 return PASTE_MONTH; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
319 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
320 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 static int |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 tmpl_paste(size_t index, void *arg) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 struct tmpl_paste *data = arg; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 struct paste *paste = &data->paste; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 switch (index) { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 case 0: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 khttp_puts(data->req, paste->uuid); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 case 1: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 khttp_puts(data->req, paste->title); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 case 2: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 khttp_puts(data->req, paste->author); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
336 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 case 3: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 khttp_puts(data->req, paste->language); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 case 4: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 khttp_puts(data->req, paste->code); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
342 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
343 case 5: |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
344 khttp_puts(data->req, bstrftime("%c", localtime(&paste->timestamp))); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
345 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
346 case 6: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
347 khttp_puts(data->req, bprintf("%s", paste->visible ? "Yes" : "No")); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
348 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 case 7: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
350 /* TODO: convert time left. */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 khttp_puts(data->req, "TODO"); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 default: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
354 break; |
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 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
357 return true; |
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 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
360 static int |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
361 tmpl_index_pastes(size_t index, void *arg) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
362 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
363 struct tmpl_index *data = arg; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
364 struct paste *paste = &data->pastes[data->current]; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
365 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
366 switch (index) { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
367 case 0: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
368 khttp_puts(data->req, paste->uuid); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
369 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
370 case 1: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
371 khttp_puts(data->req, paste->title); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
372 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
373 case 2: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
374 khttp_puts(data->req, paste->author); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
375 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
376 case 3: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
377 khttp_puts(data->req, paste->language); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
378 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
379 case 4: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
380 khttp_puts(data->req, bprintf("%d", paste->duration)); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
381 break; |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
382 case 5: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
383 khttp_puts(data->req, bstrftime("%c", localtime(&paste->timestamp))); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
384 break; |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
385 default: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
386 break; |
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 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
389 return true; |
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 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
392 static int |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
393 tmpl_index(size_t index, void *arg) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
394 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
395 /* No check, only one index. */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
396 struct tmpl_index *data = arg; |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
397 const struct ktemplate kt = { |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
398 .key = tmpl_index_pastes_keywords, |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
399 .keysz = 6, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
400 .arg = data, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
401 .cb = tmpl_index_pastes |
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 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
404 for (size_t i = 0; i < data->count; ++i) { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
405 khttp_template(data->req, &kt, template("index-paste.html")); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
406 data->current++; |
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 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
409 return true; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
410 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
411 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
412 static int |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
413 tmpl_new(size_t index, void *arg) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
414 { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
415 struct tmpl_paste *data = arg; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
416 struct paste *paste = &data->paste; |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
417 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
418 switch (index) { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
419 case 0: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
420 if (paste->title) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
421 khttp_puts(data->req, paste->title); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
422 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
423 case 1: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
424 if (paste->author) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
425 khttp_puts(data->req, paste->author); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
426 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
427 case 2: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
428 if (paste->code) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
429 khttp_puts(data->req, paste->code); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
430 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
431 case 3: |
8
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
432 /* Add checked attribute to combobox. */ |
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
433 if (!paste->visible) |
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
434 khttp_puts(data->req, "checked"); |
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
435 break;; |
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
436 case 4: |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
437 /* TODO: fragment? */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
438 for (const char **l = languages; *l != NULL; ++l) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
439 khttp_puts(data->req, |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
440 bprintf("<option value=\"%s\">%s</option>", *l, *l)); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
441 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
442 default: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
443 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
444 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
445 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
446 return true; |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
447 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
448 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
449 static void |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
450 page_header(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("header.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_footer(struct kreq *req) |
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_template(req, NULL, template("footer.html")); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
459 } |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
460 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
461 static void |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
462 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
|
463 { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
464 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
|
465 khttp_head(req, kresps[KRESP_STATUS], "%s", khttps[status]); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
466 khttp_body(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
467 page_header(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
468 khttp_template(req, tmpl, template(file)); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
469 page_footer(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
470 khttp_free(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
471 } |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
472 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
473 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
474 page_index_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
475 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
476 struct tmpl_index data = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
477 .req = req, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
478 .count = 10 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
479 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
480 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
481 if (!database_recents(data.pastes, &data.count)) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
482 page(req, NULL, KHTTP_500, "500.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
483 else { |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
484 struct ktemplate kt = { |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
485 .key = tmpl_index_keywords, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
486 .keysz = 1, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
487 .arg = &data, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
488 .cb = tmpl_index |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
489 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
490 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
491 page(req, &kt, KHTTP_200, "index.html"); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
492 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
493 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
494 for (size_t i = 0; i < data.count; ++i) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
495 paste_finish(&data.pastes[i]); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
496 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
497 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
498 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
499 page_index(struct kreq *req) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
500 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
501 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
502 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
503 page_index_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
504 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
505 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
506 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
507 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
508 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
509 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
510 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
511 static void |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
512 page_new_get(struct kreq *req) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
513 { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
514 struct tmpl_paste data = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
515 .req = req |
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 const struct ktemplate kt = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
518 .key = tmpl_new_keywords, |
8
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
519 .keysz = 5, |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
520 .cb = tmpl_new, |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
521 .arg = &data |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
522 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
523 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
524 page(req, &kt, KHTTP_200, "new.html"); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
525 } |
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 static void |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
528 page_new_post(struct kreq *req) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
529 { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
530 struct paste paste = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
531 .visible = true |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
532 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
533 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
534 for (size_t i = 0; i < req->fieldsz; ++i) { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
535 const char *key = req->fields[i].key; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
536 const char *val = req->fields[i].val; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
537 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
538 if (strcmp(key, "title") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
539 paste.title = estrdup(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
540 else if (strcmp(key, "author") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
541 paste.author = estrdup(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
542 else if (strcmp(key, "language") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
543 paste.language = estrdup(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
544 else if (strcmp(key, "duration") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
545 paste.duration = duration(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
546 else if (strcmp(key, "code") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
547 paste.code = estrdup(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
548 else if (strcmp(key, "private") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
549 paste.visible = strcmp(val, "on") != 0; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
550 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
551 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
552 if (!paste.title || !paste.author || !paste.language || !paste.code) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
553 page(req, NULL, KHTTP_400, "400.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
554 else { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
555 if (!database_insert(&paste)) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
556 page(req, NULL, KHTTP_500, "500.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
557 else { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
558 /* Redirect to paste details. */ |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
559 khttp_head(req, kresps[KRESP_STATUS], "%s", khttps[KHTTP_302]); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
560 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
|
561 khttp_body(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
562 khttp_free(req); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
563 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
564 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
565 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
566 paste_finish(&paste); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
567 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
568 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
569 static void |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
570 page_new(struct kreq *req) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
571 { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
572 switch (req->method) { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
573 case KMETHOD_GET: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
574 page_new_get(req); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
575 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
576 case KMETHOD_POST: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
577 page_new_post(req); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
578 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
579 default: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
580 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
581 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
582 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
583 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
584 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
585 page_fork_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
586 { |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
587 struct tmpl_paste data = { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
588 .req = req |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
589 }; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
590 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
591 if (!database_get(&data.paste, req->path)) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
592 page(req, NULL, KHTTP_404, "404.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
593 else { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
594 const struct ktemplate kt = { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
595 .key = tmpl_new_keywords, |
8
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
596 .keysz = 5, |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
597 .cb = tmpl_new, |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
598 .arg = &data |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
599 }; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
600 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
601 page(req, &kt, KHTTP_200, "new.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
602 paste_finish(&data.paste); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
603 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
604 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
605 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
606 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
607 page_fork(struct kreq *req) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
608 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
609 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
610 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
611 page_fork_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
612 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
613 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
614 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
615 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
616 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
617 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
618 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
619 static void |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
620 page_paste_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
621 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
622 struct tmpl_paste data = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
623 .req = req |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
624 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
625 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
626 if (!database_get(&data.paste, req->path)) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
627 page(req, NULL, KHTTP_404, "404.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
628 else { |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
629 const struct ktemplate kt = { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
630 .key = tmpl_paste_keywords, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
631 .keysz = 8, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
632 .cb = tmpl_paste, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
633 .arg = &data |
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 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
636 page(req, &kt, KHTTP_200, "paste.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
637 paste_finish(&data.paste); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
638 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
639 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
640 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
641 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
642 page_paste(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
643 { |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
644 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
645 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
646 page_paste_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
647 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
648 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
649 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
650 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
651 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
652 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
653 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
654 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
655 page_download_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
656 { |
3
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
657 struct paste paste; |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
658 |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
659 if (!database_get(&paste, req->path)) |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
660 page(req, NULL, KHTTP_404, "404.html"); |
3
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
661 else { |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
662 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
|
663 #if 0 |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
664 /* TODO: this seems to generated truncated files. */ |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
665 khttp_head(req, kresps[KRESP_CONTENT_LENGTH], "%zu", strlen(paste.code)); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
666 #endif |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
667 khttp_head(req, kresps[KRESP_CONNECTION], "keep-alive"); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
668 khttp_head(req, kresps[KRESP_CONTENT_DISPOSITION], |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
669 "attachment; filename=\"%s.%s\"", paste.uuid, paste.language); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
670 khttp_body(req); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
671 khttp_puts(req, paste.code); |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
672 khttp_free(req); |
3
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
673 paste_finish(&paste); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
674 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
675 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
676 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
677 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
678 page_download(struct kreq *req) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
679 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
680 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
681 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
682 page_download_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
683 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
684 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
685 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
686 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
687 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
688 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
689 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
690 static void |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
691 process(struct kreq *req) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
692 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
693 assert(req); |
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 handlers[req->page](req); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
696 } |
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 void |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
699 http_fcgi_run(void) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
700 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
701 struct kreq req; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
702 struct kfcgi *fcgi; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
703 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
704 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
|
705 return; |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
706 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
707 while (khttp_fcgi_parse(fcgi, &req) == KCGI_OK) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
708 process(&req); |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
709 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
710 khttp_fcgi_free(fcgi); |
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 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
713 void |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
714 http_cgi_run(void) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
715 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
716 struct kreq req; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
717 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
718 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
|
719 process(&req); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
720 } |