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