Mercurial > paster
annotate http.c @ 21:21c103c33ac9
pasterd: improve verbosity, closes #2472
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 06 Feb 2020 20:10:00 +0100 |
parents | 29033b4fe558 |
children | 8d274b012d28 |
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> |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
20 #include <sys/stat.h> |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <assert.h> |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
22 #include <ctype.h> |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <limits.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <stdarg.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <stdint.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 #include <stdio.h> |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <stdlib.h> |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
28 #include <string.h> |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 #include <unistd.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 <kcgi.h> |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
32 #include <kcgihtml.h> |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #include "config.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 #include "database.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 #include "http.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #include "log.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 #include "paste.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 #include "util.h" |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 static void page_index(struct kreq *); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 static void page_new(struct kreq *); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 static void page_fork(struct kreq *); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 static void page_paste(struct kreq *); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 static void page_download(struct kreq *); |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
46 static void page_static(struct kreq *); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 enum page { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 PAGE_INDEX, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 PAGE_NEW, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 PAGE_FORK, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 PAGE_PASTE, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 PAGE_DOWNLOAD, |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
54 PAGE_STATIC, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 PAGE_LAST /* Not used. */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 static const char *pages[] = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 [PAGE_INDEX] = "", |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 [PAGE_NEW] = "new", |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 [PAGE_FORK] = "fork", |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 [PAGE_PASTE] = "paste", |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 [PAGE_DOWNLOAD] = "download", |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
64 [PAGE_STATIC] = "static" |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 static void (*handlers[])(struct kreq *req) = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 [PAGE_INDEX] = page_index, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 [PAGE_NEW] = page_new, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 [PAGE_FORK] = page_fork, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 [PAGE_PASTE] = page_paste, |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
72 [PAGE_DOWNLOAD] = page_download, |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
73 [PAGE_STATIC] = page_static |
1
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_index { |
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 pastes[10]; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 size_t count; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 size_t current; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 struct tmpl_paste { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 struct kreq *req; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 struct paste paste; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
88 static const char *tmpl_index_keywords[] = { |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
89 "pastes" |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
90 }; |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
91 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
92 static const char *tmpl_index_pastes_keywords[] = { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
93 "uuid", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
94 "name", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
95 "author", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
96 "language", |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
97 "expiration", |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
98 "date" |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
99 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
100 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
101 static const char *tmpl_paste_keywords[] = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
102 "uuid", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
103 "title", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
104 "author", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
105 "language", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
106 "code", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
107 "timestamp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
108 "visible", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
109 "duration" |
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 *tmpl_new_keywords[] = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
113 "title", /* /fork only */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
114 "author", /* /fork only */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
115 "code", /* /fork only */ |
8
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
116 "private", /* /fork only */ |
10
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
117 "languages", |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
118 "durations" |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
119 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
120 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
121 static const char *languages[] = { |
7 | 122 "nohighlight", |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
123 "1c", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
124 "abnf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
125 "accesslog", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
126 "actionscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
127 "ada", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
128 "apache", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
129 "applescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
130 "arduino", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
131 "armasm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
132 "asciidoc", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
133 "aspectj", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
134 "autohotkey", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
135 "autoit", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
136 "avrasm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
137 "awk", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
138 "axapta", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
139 "bash", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
140 "basic", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
141 "bnf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
142 "brainfuck", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
143 "cal", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
144 "capnproto", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
145 "ceylon", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
146 "clean", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
147 "clojure", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
148 "clojure-repl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
149 "cmake", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
150 "coffeescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
151 "coq", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
152 "cos", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
153 "cpp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
154 "crmsh", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
155 "crystal", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
156 "cs", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
157 "csp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
158 "css", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
159 "dart", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
160 "delphi", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
161 "diff", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
162 "django", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
163 "d", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
164 "dns", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
165 "dockerfile", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
166 "dos", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
167 "dsconfig", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
168 "dts", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
169 "dust", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
170 "ebnf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
171 "elixir", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
172 "elm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
173 "erb", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
174 "erlang", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
175 "erlang-repl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
176 "excel", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
177 "fix", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
178 "flix", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
179 "fortran", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
180 "fsharp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
181 "gams", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
182 "gauss", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
183 "gcode", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
184 "gherkin", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
185 "glsl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
186 "go", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
187 "golo", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
188 "gradle", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
189 "groovy", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
190 "haml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
191 "handlebars", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
192 "haskell", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
193 "haxe", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
194 "hsp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
195 "htmlbars", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
196 "http", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
197 "hy", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
198 "inform7", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
199 "ini", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
200 "irpf90", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
201 "java", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
202 "javascript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
203 "jboss-cli", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
204 "json", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
205 "julia", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
206 "julia-repl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
207 "kotlin", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
208 "lasso", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
209 "ldif", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
210 "leaf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
211 "less", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
212 "lisp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
213 "livecodeserver", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
214 "livescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
215 "llvm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
216 "lsl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
217 "lua", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
218 "makefile", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
219 "markdown", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
220 "mathematica", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
221 "matlab", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
222 "maxima", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
223 "mel", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
224 "mercury", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
225 "mipsasm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
226 "mizar", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
227 "mojolicious", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
228 "monkey", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
229 "moonscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
230 "n1ql", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
231 "nginx", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
232 "nimrod", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
233 "nix", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
234 "nsis", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
235 "objectivec", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
236 "ocaml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
237 "openscad", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
238 "oxygene", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
239 "parser3", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
240 "perl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
241 "pf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
242 "php", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
243 "pony", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
244 "powershell", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
245 "processing", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
246 "profile", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
247 "prolog", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
248 "protobuf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
249 "puppet", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
250 "purebasic", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
251 "python", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
252 "q", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
253 "qml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
254 "rib", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
255 "r", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
256 "roboconf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
257 "routeros", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
258 "rsl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
259 "ruby", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
260 "ruleslanguage", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
261 "rust", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
262 "scala", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
263 "scheme", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
264 "scilab", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
265 "scss", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
266 "shell", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
267 "smali", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
268 "smalltalk", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
269 "sml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
270 "sqf", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
271 "sql", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
272 "stan", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
273 "stata", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
274 "step21", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
275 "stylus", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
276 "subunit", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
277 "swift", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
278 "taggerscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
279 "tap", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
280 "tcl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
281 "tex", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
282 "thrift", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
283 "tp", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
284 "twig", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
285 "typescript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
286 "vala", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
287 "vbnet", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
288 "vbscript-html", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
289 "vbscript", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
290 "verilog", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
291 "vhdl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
292 "vim", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
293 "x86asm", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
294 "xl", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
295 "xml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
296 "xquery", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
297 "yaml", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
298 "zephir", |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
299 NULL |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
300 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
301 |
10
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
302 static const struct { |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
303 const char *title; |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
304 long long int secs; |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
305 } durations[] = { |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
306 { "month", PASTE_MONTH }, |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
307 { "week", PASTE_WEEK }, |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
308 { "day", PASTE_DAY }, |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
309 { "hour", PASTE_HOUR }, |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
310 { NULL, -1 } |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
311 }; |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
312 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
313 static const char * |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 template(const char *filename) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 /* Build path to the template file. */ |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 static char path[PATH_MAX]; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
319 snprintf(path, sizeof (path), "%s/%s", config.themedir, filename); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 return path; |
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 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
324 static long long int |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
325 duration(const char *val) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
326 { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
327 if (strcmp(val, "hour") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
328 return PASTE_HOUR; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
329 if (strcmp(val, "day") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
330 return PASTE_DAY; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
331 if (strcmp(val, "week") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
332 return PASTE_WEEK; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
333 if (strcmp(val, "month") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
334 return PASTE_MONTH; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
335 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
336 /* Default to month. */ |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
337 return PASTE_MONTH; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
338 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
339 |
10
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
340 static const char * |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
341 ttl(time_t timestamp, long long int duration) |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
342 { |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
343 const time_t now = time(NULL); |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
344 const long long int left = duration - difftime(now, timestamp); |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
345 |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
346 if (left < PASTE_HOUR) |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
347 return bprintf("%lld minute(s)", left / 60); |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
348 if (left < PASTE_DAY) |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
349 return bprintf("%lld hour(s)", left / 3600); |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
350 |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
351 /* Other in days. */ |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
352 return bprintf("%lld day(s)", left / 86400); |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
353 } |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
354 |
9
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
355 static void |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
356 replace(char **dst, const char *s) |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
357 { |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
358 assert(dst); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
359 assert(s); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
360 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
361 /* Trim leading spaces. */ |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
362 while (*s && isspace(*s)) |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
363 s++; |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
364 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
365 if (*s) { |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
366 free(*dst); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
367 *dst = estrdup(s); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
368 } |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
369 } |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
370 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
371 static void |
9
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
372 render_languages(struct kreq *req, const struct paste *paste) |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
373 { |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
374 for (const char **l = languages; *l != NULL; ++l) { |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
375 const char *line; |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
376 |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
377 if (paste->language && strcmp(paste->language, *l) == 0) |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
378 line = bprintf("<option value=\"%s\" selected>%s</option>", *l, *l); |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
379 else |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
380 line = bprintf("<option value=\"%s\">%s</option>", *l, *l); |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
381 |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
382 khttp_puts(req, line); |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
383 } |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
384 } |
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
385 |
10
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
386 static void |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
387 render_durations(struct kreq *req, const struct paste *paste) |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
388 { |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
389 for (size_t i = 0; durations[i].title != NULL; ++i) { |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
390 const char *line; |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
391 |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
392 if (paste->duration == durations[i].secs) |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
393 line = bprintf("<option value=\"%s\" selected>%s</option>", |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
394 durations[i].title, durations[i].title); |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
395 else |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
396 line = bprintf("<option value=\"%s\">%s</option>", |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
397 durations[i].title, durations[i].title); |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
398 |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
399 khttp_puts(req, line); |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
400 } |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
401 } |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
402 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
403 static int |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
404 tmpl_paste(size_t index, void *arg) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
405 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
406 struct tmpl_paste *data = arg; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
407 struct paste *paste = &data->paste; |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
408 struct khtmlreq htmlreq; |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
409 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
410 khtml_open(&htmlreq, data->req, KHTML_PRETTY); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
411 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
412 switch (index) { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
413 case 0: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
414 khtml_puts(&htmlreq, paste->uuid); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
415 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
416 case 1: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
417 khtml_puts(&htmlreq, paste->title); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
418 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
419 case 2: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
420 khtml_puts(&htmlreq, paste->author); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
421 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
422 case 3: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
423 khtml_puts(&htmlreq, paste->language); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
424 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
425 case 4: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
426 khtml_puts(&htmlreq, paste->code); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
427 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
428 case 5: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
429 khtml_puts(&htmlreq, bstrftime("%c", localtime(&paste->timestamp))); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
430 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
431 case 6: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
432 khtml_puts(&htmlreq, bprintf("%s", paste->visible ? "Yes" : "No")); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
433 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
434 case 7: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
435 khtml_puts(&htmlreq, ttl(paste->timestamp, paste->duration)); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
436 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
437 default: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
438 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
439 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
440 |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
441 khtml_close(&htmlreq); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
442 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
443 return true; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
444 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
445 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
446 static int |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
447 tmpl_index_pastes(size_t index, void *arg) |
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 struct tmpl_index *data = arg; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
450 struct paste *paste = &data->pastes[data->current]; |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
451 struct khtmlreq htmlreq; |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
452 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
453 khtml_open(&htmlreq, data->req, KHTML_PRETTY); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
454 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
455 switch (index) { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
456 case 0: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
457 khtml_puts(&htmlreq, paste->uuid); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
458 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
459 case 1: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
460 khtml_puts(&htmlreq, paste->title); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
461 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
462 case 2: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
463 khtml_puts(&htmlreq, paste->author); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
464 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
465 case 3: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
466 khtml_puts(&htmlreq, paste->language); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
467 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
468 case 4: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
469 khtml_puts(&htmlreq, ttl(paste->timestamp, paste->duration)); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
470 break; |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
471 case 5: |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
472 khtml_puts(&htmlreq, bstrftime("%c", localtime(&paste->timestamp))); |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
473 break; |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
474 default: |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
475 break; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
476 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
477 |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
478 khtml_close(&htmlreq); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
479 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
480 return true; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
481 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
482 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
483 static int |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
484 tmpl_index(size_t index, void *arg) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
485 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
486 /* No check, only one index. */ |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
487 (void)index; |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
488 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
489 struct tmpl_index *data = arg; |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
490 const struct ktemplate kt = { |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
491 .key = tmpl_index_pastes_keywords, |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
492 .keysz = 6, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
493 .arg = data, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
494 .cb = tmpl_index_pastes |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
495 }; |
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 for (size_t i = 0; i < data->count; ++i) { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
498 khttp_template(data->req, &kt, template("index-paste.html")); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
499 data->current++; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
500 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
501 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
502 return true; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
503 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
504 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
505 static int |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
506 tmpl_new(size_t index, void *arg) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
507 { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
508 struct tmpl_paste *data = arg; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
509 struct paste *paste = &data->paste; |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
510 struct khtmlreq htmlreq; |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
511 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
512 khtml_open(&htmlreq, data->req, KHTML_PRETTY); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
513 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
514 switch (index) { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
515 case 0: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
516 if (paste->title) |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
517 khtml_puts(&htmlreq, paste->title); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
518 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
519 case 1: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
520 if (paste->author) |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
521 khtml_puts(&htmlreq, paste->author); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
522 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
523 case 2: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
524 if (paste->code) |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
525 khtml_puts(&htmlreq, paste->code); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
526 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
527 case 3: |
8
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
528 /* Add checked attribute to combobox. */ |
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
529 if (!paste->visible) |
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
530 khttp_puts(data->req, "checked"); |
9
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
531 break; |
8
0f1d65d5ea89
pasterd: bring visibility into /fork
David Demelier <markand@malikania.fr>
parents:
7
diff
changeset
|
532 case 4: |
9
e8f61741aaec
pasterd: bring language into /fork
David Demelier <markand@malikania.fr>
parents:
8
diff
changeset
|
533 render_languages(data->req, paste); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
534 break; |
10
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
535 case 5: |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
536 render_durations(data->req, paste); |
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
537 break; |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
538 default: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
539 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
540 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
541 |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
542 khtml_close(&htmlreq); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
543 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
544 return true; |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
545 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
546 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
547 static void |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
548 page_header(struct kreq *req) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
549 { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
550 khttp_template(req, NULL, template("header.html")); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
551 } |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
552 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
553 static void |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
554 page_footer(struct kreq *req) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
555 { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
556 khttp_template(req, NULL, template("footer.html")); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
557 } |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
558 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
559 static void |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
560 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
|
561 { |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
562 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
|
563 khttp_head(req, kresps[KRESP_STATUS], "%s", khttps[status]); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
564 khttp_body(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
565 page_header(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
566 khttp_template(req, tmpl, template(file)); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
567 page_footer(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
568 khttp_free(req); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
569 } |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
570 |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
571 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
572 page_index_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
573 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
574 struct tmpl_index data = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
575 .req = req, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
576 .count = 10 |
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 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
579 if (!database_recents(data.pastes, &data.count)) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
580 page(req, NULL, KHTTP_500, "500.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
581 else { |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
582 struct ktemplate kt = { |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
583 .key = tmpl_index_keywords, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
584 .keysz = 1, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
585 .arg = &data, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
586 .cb = tmpl_index |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
587 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
588 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
589 page(req, &kt, KHTTP_200, "index.html"); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
590 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
591 |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
592 for (size_t i = 0; i < data.count; ++i) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
593 paste_finish(&data.pastes[i]); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
594 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
595 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
596 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
597 page_index(struct kreq *req) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
598 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
599 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
600 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
601 page_index_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
602 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
603 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
604 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
605 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
606 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
607 } |
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 static void |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
610 page_new_get(struct kreq *req) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
611 { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
612 struct tmpl_paste data = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
613 .req = req |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
614 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
615 const struct ktemplate kt = { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
616 .key = tmpl_new_keywords, |
10
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
617 .keysz = 6, |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
618 .cb = tmpl_new, |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
619 .arg = &data |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
620 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
621 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
622 page(req, &kt, KHTTP_200, "new.html"); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
623 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
624 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
625 static void |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
626 page_new_post(struct kreq *req) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
627 { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
628 struct paste paste = { |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
629 .author = estrdup("Anonymous"), |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
630 .title = estrdup("Untitled"), |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
631 .language = estrdup("nohighlight"), |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
632 .visible = true |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
633 }; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
634 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
635 for (size_t i = 0; i < req->fieldsz; ++i) { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
636 const char *key = req->fields[i].key; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
637 const char *val = req->fields[i].val; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
638 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
639 if (strcmp(key, "title") == 0) |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
640 replace(&paste.title, val); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
641 else if (strcmp(key, "author") == 0) |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
642 replace(&paste.author, val); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
643 else if (strcmp(key, "language") == 0) |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
644 replace(&paste.language, val); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
645 else if (strcmp(key, "duration") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
646 paste.duration = duration(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
647 else if (strcmp(key, "code") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
648 paste.code = estrdup(val); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
649 else if (strcmp(key, "private") == 0) |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
650 paste.visible = strcmp(val, "on") != 0; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
651 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
652 |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
653 if (!database_insert(&paste)) |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
654 page(req, NULL, KHTTP_500, "500.html"); |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
655 else { |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
656 /* Redirect to paste details. */ |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
657 khttp_head(req, kresps[KRESP_STATUS], "%s", khttps[KHTTP_302]); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
658 khttp_head(req, kresps[KRESP_LOCATION], "/paste/%s", paste.uuid); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
659 khttp_body(req); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
660 khttp_free(req); |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
661 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
662 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
663 paste_finish(&paste); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
664 } |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
665 |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
666 static void |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
667 page_new(struct kreq *req) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
668 { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
669 switch (req->method) { |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
670 case KMETHOD_GET: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
671 page_new_get(req); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
672 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
673 case KMETHOD_POST: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
674 page_new_post(req); |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
675 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
676 default: |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
677 break; |
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
678 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
679 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
680 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
681 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
682 page_fork_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
683 { |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
684 struct tmpl_paste data = { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
685 .req = req |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
686 }; |
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 if (!database_get(&data.paste, req->path)) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
689 page(req, NULL, KHTTP_404, "404.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
690 else { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
691 const struct ktemplate kt = { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
692 .key = tmpl_new_keywords, |
10
75cfe3795de3
pasterd: improve time left on index
David Demelier <markand@malikania.fr>
parents:
9
diff
changeset
|
693 .keysz = 6, |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
694 .cb = tmpl_new, |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
695 .arg = &data |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
696 }; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
697 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
698 page(req, &kt, KHTTP_200, "new.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
699 paste_finish(&data.paste); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
700 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
701 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
702 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
703 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
704 page_fork(struct kreq *req) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
705 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
706 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
707 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
708 page_fork_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
709 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
710 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
711 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
712 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
713 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
714 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
715 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
716 static void |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
717 page_paste_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
718 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
719 struct tmpl_paste data = { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
720 .req = req |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
721 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
722 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
723 if (!database_get(&data.paste, req->path)) |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
724 page(req, NULL, KHTTP_404, "404.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
725 else { |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
726 const struct ktemplate kt = { |
2
65607ae124b1
pasterd: implement /new
David Demelier <markand@malikania.fr>
parents:
1
diff
changeset
|
727 .key = tmpl_paste_keywords, |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
728 .keysz = 8, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
729 .cb = tmpl_paste, |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
730 .arg = &data |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
731 }; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
732 |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
733 page(req, &kt, KHTTP_200, "paste.html"); |
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
734 paste_finish(&data.paste); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
735 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
736 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
737 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
738 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
739 page_paste(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
740 { |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
741 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
742 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
743 page_paste_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
744 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
745 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
746 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
747 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
748 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
749 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
750 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
751 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
752 page_download_get(struct kreq *req) |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
753 { |
3
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
754 struct paste paste; |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
755 |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
756 if (!database_get(&paste, req->path)) |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
757 page(req, NULL, KHTTP_404, "404.html"); |
3
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
758 else { |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
759 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
|
760 #if 0 |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
761 /* TODO: this seems to generated truncated files. */ |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
762 khttp_head(req, kresps[KRESP_CONTENT_LENGTH], "%zu", strlen(paste.code)); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
763 #endif |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
764 khttp_head(req, kresps[KRESP_CONNECTION], "keep-alive"); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
765 khttp_head(req, kresps[KRESP_CONTENT_DISPOSITION], |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
766 "attachment; filename=\"%s.%s\"", paste.uuid, paste.language); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
767 khttp_body(req); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
768 khttp_puts(req, paste.code); |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
769 khttp_free(req); |
3
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
770 paste_finish(&paste); |
80d67d8dbfb2
pasterd: implement /download
David Demelier <markand@malikania.fr>
parents:
2
diff
changeset
|
771 } |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
772 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
773 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
774 static void |
5
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
775 page_download(struct kreq *req) |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
776 { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
777 switch (req->method) { |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
778 case KMETHOD_GET: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
779 page_download_get(req); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
780 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
781 default: |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
782 page(req, NULL, KHTTP_400, "400.html"); |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
783 break; |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
784 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
785 } |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
786 |
f455893bf0b0
pasterd: show dates in /
David Demelier <markand@malikania.fr>
parents:
4
diff
changeset
|
787 static void |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
788 page_static_get(struct kreq *req) |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
789 { |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
790 struct stat st; |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
791 char path[PATH_MAX]; |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
792 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
793 snprintf(path, sizeof (path), "%s%s", config.themedir, req->fullpath); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
794 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
795 if (stat(path, &st) < 0) |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
796 page(req, NULL, KHTTP_404, "404.html"); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
797 else { |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
798 khttp_head(req, kresps[KRESP_STATUS], "%s", khttps[KHTTP_200]); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
799 khttp_head(req, kresps[KRESP_CONTENT_TYPE], "%s", kmimetypes[req->mime]); |
16
29033b4fe558
pasterd: use default values and fix Content-Length
David Demelier <markand@malikania.fr>
parents:
12
diff
changeset
|
800 khttp_head(req, kresps[KRESP_CONTENT_LENGTH], |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
801 "%llu", (unsigned long long)(st.st_size)); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
802 khttp_body(req); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
803 khttp_template(req, NULL, path); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
804 khttp_free(req); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
805 } |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
806 } |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
807 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
808 static void |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
809 page_static(struct kreq *req) |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
810 { |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
811 switch (req->method) { |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
812 case KMETHOD_GET: |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
813 page_static_get(req); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
814 break; |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
815 default: |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
816 page(req, NULL, KHTTP_400, "400.html"); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
817 break; |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
818 } |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
819 } |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
820 |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
821 static void |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
822 process(struct kreq *req) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
823 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
824 assert(req); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
825 |
21
21c103c33ac9
pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents:
16
diff
changeset
|
826 log_debug("http: accessing page '%s'", req->path); |
21c103c33ac9
pasterd: improve verbosity, closes #2472
David Demelier <markand@malikania.fr>
parents:
16
diff
changeset
|
827 |
12
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
828 if (req->page == PAGE_LAST) |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
829 page(req, NULL, KHTTP_404, "404.html"); |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
830 else |
93f0440d452e
pasterd: add siimple theme
David Demelier <markand@malikania.fr>
parents:
10
diff
changeset
|
831 handlers[req->page](req); |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
832 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
833 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
834 void |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
835 http_fcgi_run(void) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
836 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
837 struct kreq req; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
838 struct kfcgi *fcgi; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
839 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
840 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
|
841 return; |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
842 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
843 while (khttp_fcgi_parse(fcgi, &req) == KCGI_OK) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
844 process(&req); |
4
ca5b8abc2d44
pasterd: refactor a bit
David Demelier <markand@malikania.fr>
parents:
3
diff
changeset
|
845 |
1
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
846 khttp_fcgi_free(fcgi); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
847 } |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
848 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
849 void |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
850 http_cgi_run(void) |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
851 { |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
852 struct kreq req; |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
853 |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
854 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
|
855 process(&req); |
836a698946f8
pasterd: add basic routes
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
856 } |