comparison paster.sh @ 7:39defd15564e

paster: initial import
author David Demelier <markand@malikania.fr>
date Wed, 05 Feb 2020 20:20:00 +0100
parents
children fa7125489435
comparison
equal deleted inserted replaced
6:98ef2713eb0d 7:39defd15564e
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