-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathea
More file actions
executable file
·93 lines (82 loc) · 2.67 KB
/
ea
File metadata and controls
executable file
·93 lines (82 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env sh
# remote file access (http file-sharing shenanigans)
# compat: +ash +bash +dash +hush +ksh +mksh +oksh +osh +posh +yash +zsh
__ea_curl() {
curl -q --no-progress-meter 127.255.255.255 >/dev/null 2>&1
if [ $? = 2 ]
then __ea_curl() { curl -sS "$@"; }
else __ea_curl() { curl --no-progress-meter "$@"; }
fi
__ea_curl "$@"
}
__ea_urlencode() {
while test "$1"; do
case "$1" in
([a-zA-Z0-9~_.-]*) printf '%.1s' "$1";; # RFC 3986
(*) printf '%%%02X' "'$1";; # bash complains but works
esac
set -- "${1#?}"
done
} 2>&- # send bash's complaints to the abyss
__ea() { ### @ ea - **TODO:** document.
set -fu +e
unset LC_ALL cmd dst src trg x
export LC_ALL=C
cmd="${1:?missing subcommand}"; shift
case "$cmd" in
(head)
trg="$(__ea_urlencode "$EA_DIR/${1:?missing target}")"
__ea_curl -I "$EA_DOMAIN/$trg"
return;;
(get)
trg="$(__ea_urlencode "$EA_DIR/${1:?missing target}")"
__ea_curl -f -R "$EA_DOMAIN/$trg" -o "${2:-$1}"
return;;
(put)
src="${1:?missing source}"
dst="$EA_DOMAIN/$EA_AUTH/"
__ea_curl -f -g -n -T "$src" "$dst"
return;;
(puts)
x=0
for src; do
dst="$EA_DOMAIN/$EA_AUTH/"
src="$(readlink -f -- "$src")" || return
if [ "${src%.minisig}" != "$src" ]; then
printf >&2 '%s: skipping %s\n' ea "$src"
continue
fi
(cd -- "${src%/*}" && minisign -QSm "${src##*/}") || return
__ea_curl -f -g -n -T "$src" -T "$src.minisig" "$dst" "$dst" ||
{
x=$?
rm "$src.minisig"
printf >&2 '%s: failed to upload %s\n' ea "${src##*/}"
continue
}
rm "$src.minisig"
trg="$(__ea_urlencode "${src##*/}")" &&
printf >&2 '%s: uploaded %25s => %s\n' ea "${src##*/}" "$EA_DOMAIN/$EA_DIR/$trg"
done
return $x;;
(move)
src="$EA_DOMAIN/$EA_AUTH/${1:?missing source}"
dst="$EA_DOMAIN/$EA_DIR/${2:?missing destination}"
__ea_curl -n -X MOVE -H "Destination: $dst" "$src"
return;;
(copy)
src="$EA_DOMAIN/$EA_AUTH/${1:?missing source}"
dst="$EA_DOMAIN/$EA_DIR/${2:?missing destination}"
__ea_curl -n -X COPY -H "Destination: $dst" "$src"
return;;
(delete)
trg="$EA_DOMAIN/$EA_AUTH/${1:?missing target}"
__ea_curl -f -n -X DELETE "$trg"
return;;
(*)
printf 'unknown subcommand: %s\n' "$cmd" >&2
return 2;;
esac
}
ea()(__ea "$@")
[ -n "${preload+-}" ] || __ea "$@"