0
|
1 # |
|
2 # imgpaster -- convenient front-end to a imgpasterd 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 title="Untitled" |
|
21 duration="day" |
|
22 public=0 |
|
23 verbose=0 |
|
24 |
|
25 die() |
|
26 { |
|
27 echo "$@" 1>&2 |
|
28 exit 1 |
|
29 } |
|
30 |
|
31 durations() |
|
32 { |
|
33 echo "hour" |
|
34 echo "day" |
|
35 echo "week" |
|
36 echo "month" |
|
37 exit 0 |
|
38 } |
|
39 |
|
40 usage() |
|
41 { |
|
42 cat 1>&2 <<-EOF |
|
43 usage: paster [-Dpv] [-a author] [-d duration] [-t title] filename host |
|
44 EOF |
|
45 exit 1 |
|
46 } |
|
47 |
|
48 send() |
|
49 { |
|
50 if [ $public -eq 1 ]; then |
|
51 with_private="-F private=off" |
|
52 else |
|
53 with_private="-F private=on" |
|
54 fi |
|
55 |
|
56 if [ $verbose -eq 0 ]; then |
|
57 with_verbose="-s" |
|
58 fi |
|
59 |
|
60 curl -i \ |
|
61 -F author="$author" \ |
|
62 -F duration="$duration" \ |
|
63 -F title="$title" \ |
|
64 -F filename=@"$1" \ |
|
65 $with_private \ |
|
66 $with_verbose \ |
|
67 "$2"/new |
|
68 } |
|
69 |
|
70 if ! command -v curl >/dev/null 2>&1; then |
|
71 die "abort: curl is required" |
|
72 fi |
|
73 |
|
74 while getopts "Da:d:pt:v" opt; do |
|
75 case "$opt" in |
|
76 D) |
|
77 durations |
|
78 ;; |
|
79 a) |
|
80 author="$OPTARG" |
|
81 ;; |
|
82 d) |
|
83 duration="$OPTARG" |
|
84 ;; |
|
85 p) |
|
86 public=1 |
|
87 ;; |
|
88 t) |
|
89 title="$OPTARG" |
|
90 ;; |
|
91 v) |
|
92 verbose=1 |
|
93 ;; |
|
94 *) |
|
95 usage |
|
96 ;; |
|
97 esac |
|
98 done |
|
99 |
|
100 shift $((OPTIND - 1)) |
|
101 |
|
102 if [ "$#" -ne 2 ]; then |
|
103 usage |
|
104 fi |
|
105 |
|
106 # If verbose, dump all headers. |
|
107 if [ $verbose -eq 1 ]; then |
|
108 send "$1" "$2" |
|
109 else |
|
110 url=$(send "$1" "$2" | grep -E "^Location: " | awk '{ print $2 }') |
|
111 |
|
112 if [ -z "$url" ]; then |
|
113 die "abort: error occured, retry with -v" |
|
114 fi |
|
115 |
|
116 printf "%s%s\n" "$2" "$url" |
|
117 fi |