7
|
1 # |
|
2 # paster -- convenient front-end to a pasterd instance |
|
3 # |
|
4 # Copyright (c) 2020 David Demelier <markand@malikania.fr> |
|
5 # |
|
6 # Permission to use, copy, modify, and/or distribute this software for any |
|
7 # purpose with or without fee is hereby granted, provided that the above |
|
8 # copyright notice and this permission notice appear in all copies. |
|
9 # |
|
10 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
|
11 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
|
12 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
|
13 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
|
14 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
|
15 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
|
16 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
|
17 # |
|
18 |
|
19 author="Anonymous" |
|
20 language="nohighlight" |
|
21 title="Untitled" |
|
22 duration="month" |
|
23 private=0 |
|
24 verbose=0 |
|
25 |
|
26 die() |
|
27 { |
|
28 echo "$@" 1>&2 |
|
29 exit 1 |
|
30 } |
|
31 |
|
32 languages() |
|
33 { |
|
34 echo "nohighlight" |
|
35 echo "1c" |
|
36 echo "abnf" |
|
37 echo "accesslog" |
|
38 echo "actionscript" |
|
39 echo "ada" |
|
40 echo "apache" |
|
41 echo "applescript" |
|
42 echo "arduino" |
|
43 echo "armasm" |
|
44 echo "asciidoc" |
|
45 echo "aspectj" |
|
46 echo "autohotkey" |
|
47 echo "autoit" |
|
48 echo "avrasm" |
|
49 echo "awk" |
|
50 echo "axapta" |
|
51 echo "bash" |
|
52 echo "basic" |
|
53 echo "bnf" |
|
54 echo "brainfuck" |
|
55 echo "cal" |
|
56 echo "capnproto" |
|
57 echo "ceylon" |
|
58 echo "clean" |
|
59 echo "clojure" |
|
60 echo "clojure-repl" |
|
61 echo "cmake" |
|
62 echo "coffeescript" |
|
63 echo "coq" |
|
64 echo "cos" |
|
65 echo "cpp" |
|
66 echo "crmsh" |
|
67 echo "crystal" |
|
68 echo "cs" |
|
69 echo "csp" |
|
70 echo "css" |
|
71 echo "dart" |
|
72 echo "delphi" |
|
73 echo "diff" |
|
74 echo "django" |
|
75 echo "d" |
|
76 echo "dns" |
|
77 echo "dockerfile" |
|
78 echo "dos" |
|
79 echo "dsconfig" |
|
80 echo "dts" |
|
81 echo "dust" |
|
82 echo "ebnf" |
|
83 echo "elixir" |
|
84 echo "elm" |
|
85 echo "erb" |
|
86 echo "erlang" |
|
87 echo "erlang-repl" |
|
88 echo "excel" |
|
89 echo "fix" |
|
90 echo "flix" |
|
91 echo "fortran" |
|
92 echo "fsharp" |
|
93 echo "gams" |
|
94 echo "gauss" |
|
95 echo "gcode" |
|
96 echo "gherkin" |
|
97 echo "glsl" |
|
98 echo "go" |
|
99 echo "golo" |
|
100 echo "gradle" |
|
101 echo "groovy" |
|
102 echo "haml" |
|
103 echo "handlebars" |
|
104 echo "haskell" |
|
105 echo "haxe" |
|
106 echo "hsp" |
|
107 echo "htmlbars" |
|
108 echo "http" |
|
109 echo "hy" |
|
110 echo "inform7" |
|
111 echo "ini" |
|
112 echo "irpf90" |
|
113 echo "java" |
|
114 echo "javascript" |
|
115 echo "jboss-cli" |
|
116 echo "json" |
|
117 echo "julia" |
|
118 echo "julia-repl" |
|
119 echo "kotlin" |
|
120 echo "lasso" |
|
121 echo "ldif" |
|
122 echo "leaf" |
|
123 echo "less" |
|
124 echo "lisp" |
|
125 echo "livecodeserver" |
|
126 echo "livescript" |
|
127 echo "llvm" |
|
128 echo "lsl" |
|
129 echo "lua" |
|
130 echo "makefile" |
|
131 echo "markdown" |
|
132 echo "mathematica" |
|
133 echo "matlab" |
|
134 echo "maxima" |
|
135 echo "mel" |
|
136 echo "mercury" |
|
137 echo "mipsasm" |
|
138 echo "mizar" |
|
139 echo "mojolicious" |
|
140 echo "monkey" |
|
141 echo "moonscript" |
|
142 echo "n1ql" |
|
143 echo "nginx" |
|
144 echo "nimrod" |
|
145 echo "nix" |
|
146 echo "nsis" |
|
147 echo "objectivec" |
|
148 echo "ocaml" |
|
149 echo "openscad" |
|
150 echo "oxygene" |
|
151 echo "parser3" |
|
152 echo "perl" |
|
153 echo "pf" |
|
154 echo "php" |
|
155 echo "pony" |
|
156 echo "powershell" |
|
157 echo "processing" |
|
158 echo "profile" |
|
159 echo "prolog" |
|
160 echo "protobuf" |
|
161 echo "puppet" |
|
162 echo "purebasic" |
|
163 echo "python" |
|
164 echo "q" |
|
165 echo "qml" |
|
166 echo "rib" |
|
167 echo "r" |
|
168 echo "roboconf" |
|
169 echo "routeros" |
|
170 echo "rsl" |
|
171 echo "ruby" |
|
172 echo "ruleslanguage" |
|
173 echo "rust" |
|
174 echo "scala" |
|
175 echo "scheme" |
|
176 echo "scilab" |
|
177 echo "scss" |
|
178 echo "shell" |
|
179 echo "smali" |
|
180 echo "smalltalk" |
|
181 echo "sml" |
|
182 echo "sqf" |
|
183 echo "sql" |
|
184 echo "stan" |
|
185 echo "stata" |
|
186 echo "step21" |
|
187 echo "stylus" |
|
188 echo "subunit" |
|
189 echo "swift" |
|
190 echo "taggerscript" |
|
191 echo "tap" |
|
192 echo "tcl" |
|
193 echo "tex" |
|
194 echo "thrift" |
|
195 echo "tp" |
|
196 echo "twig" |
|
197 echo "typescript" |
|
198 echo "vala" |
|
199 echo "vbnet" |
|
200 echo "vbscript-html" |
|
201 echo "vbscript" |
|
202 echo "verilog" |
|
203 echo "vhdl" |
|
204 echo "vim" |
|
205 echo "x86asm" |
|
206 echo "xl" |
|
207 echo "xml" |
|
208 echo "xquery" |
|
209 echo "yaml" |
|
210 echo "zephir" |
|
211 exit 0 |
|
212 } |
|
213 |
|
214 durations() |
|
215 { |
|
216 echo "hour" |
|
217 echo "day" |
|
218 echo "week" |
|
219 echo "month" |
|
220 exit 0 |
|
221 } |
|
222 |
|
223 usage() |
|
224 { |
|
225 cat 1>&2 <<-EOF |
|
226 usage: paster [-LDvx] [-a author] [-l language] [-d duration] [-t title] filename host |
|
227 EOF |
|
228 exit 1 |
|
229 } |
|
230 |
|
231 send() |
|
232 { |
|
233 if [ $private -eq 1 ]; then |
|
234 with_private="--data private=on" |
|
235 fi |
|
236 if [ $verbose -eq 0 ]; then |
|
237 with_verbose="-s" |
|
238 fi |
|
239 |
|
240 curl -i -X POST \ |
|
241 --data author="$author" \ |
|
242 --data language="$language" \ |
|
243 --data duration="$duration" \ |
|
244 --data title="$title" \ |
|
245 --data-urlencode code@"$1" \ |
|
246 $with_private \ |
|
247 $with_verbose \ |
|
248 "$2"/new |
|
249 } |
|
250 |
|
251 if ! command -v curl >/dev/null 2>&1; then |
|
252 die "abort: curl is required" |
|
253 fi |
|
254 |
|
255 while getopts "LDa:d:l:t:vx" opt; do |
|
256 case "$opt" in |
|
257 D) |
|
258 durations |
|
259 ;; |
|
260 L) |
|
261 languages |
|
262 ;; |
|
263 a) |
|
264 author="$OPTARG" |
|
265 ;; |
|
266 d) |
|
267 duration="$OPTARG" |
|
268 ;; |
|
269 l) |
|
270 language="$OPTARG" |
|
271 ;; |
|
272 t) |
|
273 title="$OPTARG" |
|
274 ;; |
|
275 v) |
|
276 verbose=1 |
|
277 ;; |
|
278 x) |
|
279 private=1 |
|
280 ;; |
|
281 *) |
|
282 usage |
|
283 ;; |
|
284 esac |
|
285 done |
|
286 |
|
287 shift $((OPTIND - 1)) |
|
288 |
|
289 if [ "$#" -ne 2 ]; then |
|
290 usage |
|
291 fi |
|
292 |
|
293 # If verbose, dump all headers. |
|
294 if [ $verbose -eq 1 ]; then |
|
295 send "$1" "$2" |
|
296 else |
|
297 url=$(send "$1" "$2" | grep -E "^Location: " | awk '{ print $2 }') |
|
298 |
|
299 if [ -z "$url" ]; then |
|
300 die "abort: error occured, retry with -v" |
|
301 fi |
|
302 |
|
303 printf "%s%s\n" "$2" "$url" |
|
304 fi |