-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcf-api
More file actions
executable file
·69 lines (60 loc) · 1.37 KB
/
cf-api
File metadata and controls
executable file
·69 lines (60 loc) · 1.37 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
#!/bin/bash
set -eu
if [ "$#" -lt 1 ]; then
echo "USAGE: $0 [--zone-id ZONE | --zone ZONE] METHOD PATH [--body BODY] {KEY=VALUE}" >&2
echo "KEY=VALUEs go into the query string" >&2
echo "If zone-id given, /zones/ZONE/ is prepended to path" >&2
echo "If zone given, zone name is looked up and /zones/ID of that zone is prepended." >&2
exit 1
fi
if [ -n "${CF_TOKEN:-}" ]; then
AUTH=("-H" "Authorization: Bearer $CF_TOKEN")
elif [ -n "${CF_EMAIL:-}" ]; then
CF_KEY=$(pass show work/cloudflare/api-key)
AUTH=("-H" "X-Auth-Key: $CF_KEY" "-H" "X-Auth-Email: $CF_EMAIL")
else
echo "CF_TOKEN or CF_EMAIL required" >&2
exit 1
fi
BASE="https://api.cloudflare.com/client/v4"
if [ "$1" == "--zone-id" ]; then
URL="$BASE/zones/$2/$4"
METHOD="$3"
shift 3
elif [ "$1" == "--zone" ]; then
ID=$(
"$0" GET zones name="$2" | jq -r '.result[]|.id'
)
if [ -z "$ID" ]; then
echo "Zone with name $2 not found" >&2
echo 1
fi
URL="$BASE/zones/$ID/$4"
METHOD="$3"
shift 4
else
URL="$BASE/$2"
METHOD="$1"
shift 2
fi
if [ "${1:-}" == "--body" ]; then
BODY=(--data "$2")
shift 2
else
BODY=()
fi
if [ "$#" -gt 0 ]; then
QUERY="$1"
shift
for param in "$@"; do
QUERY="${QUERY}&$param"
done
URL="$URL?$QUERY"
fi
log() {
if [ -n "${VERBOSE:-}" ]; then
echo "Running: $*" >&2
fi
"$@"
}
log curl -Ss -X "$METHOD" "$URL" "${AUTH[@]}" -H "Content-Type: application/json" "${BODY[@]}" | jq .