tangled
alpha
login
or
join now
vicwalker.dev.br
/
pds-mirror
0
fork
atom
Mirror from bluesky-social/pds
0
fork
atom
overview
issues
pulls
pipelines
pdsadmin: style nits, hopefully nothing broken
Jake Gold
2 years ago
307e2353
78da2612
+77
-43
4 changed files
expand all
collapse all
unified
split
pdsadmin
account.sh
create-invite-code.sh
request-crawl.sh
update.sh
+68
-34
pdsadmin/account.sh
···
6
6
PDS_ENV_FILE="/pds/pds.env"
7
7
source "${PDS_ENV_FILE}"
8
8
9
9
-
curl_cmd() {
9
9
+
# curl a URL and fail if the request fails.
10
10
+
function curl_cmd_get {
10
11
curl --fail --silent --show-error "$@"
11
12
}
12
13
13
13
-
curl_cmd_post() {
14
14
+
# curl a URL and fail if the request fails.
15
15
+
function curl_cmd_post {
14
16
curl --fail --silent --show-error --request POST --header "Content-Type: application/json" "$@"
15
17
}
16
18
17
17
-
curl_cmd_post_nofail() {
19
19
+
# curl a URL but do not fail if the request fails.
20
20
+
function curl_cmd_post_nofail {
18
21
curl --silent --show-error --request POST --header "Content-Type: application/json" "$@"
19
22
}
20
23
24
24
+
# The subcommand to run.
21
25
SUBCOMMAND="${1:-}"
22
26
27
27
+
#
28
28
+
# account list
29
29
+
#
23
30
if [[ "${SUBCOMMAND}" == "list" ]]; then
24
24
-
DIDS=$(curl_cmd \
31
31
+
DIDS="$(curl_cmd \
25
32
"https://${PDS_HOSTNAME}/xrpc/com.atproto.sync.listRepos?limit=100" | jq --raw-output '.repos[].did'
26
26
-
)
33
33
+
)"
27
34
OUTPUT='[{"handle":"Handle","email":"Email","did":"DID"}'
28
28
-
for did in $DIDS; do
29
29
-
ITEM=$(curl_cmd \
35
35
+
for did in ${DIDS}; do
36
36
+
ITEM="$(curl_cmd \
30
37
--user "admin:${PDS_ADMIN_PASSWORD}" \
31
31
-
"https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.getAccountInfo?did=$did"
32
32
-
)
38
38
+
"https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.getAccountInfo?did=${did}"
39
39
+
)"
33
40
OUTPUT="${OUTPUT},${ITEM}"
34
41
done
35
42
OUTPUT="${OUTPUT}]"
36
36
-
echo $OUTPUT | jq --raw-output '.[] | [.handle, .email, .did] | @tsv' | column -t
43
43
+
echo "${OUTPUT}" | jq --raw-output '.[] | [.handle, .email, .did] | @tsv' | column --table
44
44
+
45
45
+
#
46
46
+
# account create
47
47
+
#
37
48
elif [[ "${SUBCOMMAND}" == "create" ]]; then
38
49
EMAIL="${2:-}"
39
50
HANDLE="${3:-}"
40
51
52
52
+
if [[ "${EMAIL}" == "" ]]; then
53
53
+
read -p "Enter an email address (e.g. alice@${PDS_HOSTNAME}): " EMAIL
54
54
+
fi
55
55
+
if [[ "${HANDLE}" == "" ]]; then
56
56
+
read -p "Enter a handle (e.g. alice.${PDS_HOSTNAME}): " HANDLE
57
57
+
fi
58
58
+
41
59
if [[ "${EMAIL}" == "" || "${HANDLE}" == "" ]]; then
42
60
echo "ERROR: missing EMAIL and/or HANDLE parameters." >/dev/stderr
43
61
echo "Usage: $0 ${SUBCOMMAND} <EMAIL> <HANDLE>" >/dev/stderr
44
62
exit 1
45
63
fi
46
64
47
47
-
PASSWORD=$(openssl rand -base64 30 | tr -d "=+/" | cut -c1-24)
48
48
-
INVITE_CODE=$(curl_cmd_post \
65
65
+
PASSWORD="$(openssl rand -base64 30 | tr -d "=+/" | cut -c1-24)"
66
66
+
INVITE_CODE="$(curl_cmd_post \
49
67
--user "admin:${PDS_ADMIN_PASSWORD}" \
50
68
--data '{"useCount": 1}' \
51
51
-
https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createInviteCode | jq --raw-output '.code'
52
52
-
)
53
53
-
RESULT=$(curl_cmd_post_nofail \
69
69
+
"https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createInviteCode" | jq --raw-output '.code'
70
70
+
)"
71
71
+
RESULT="$(curl_cmd_post_nofail \
54
72
--data "{\"email\":\"${EMAIL}\", \"handle\":\"${HANDLE}\", \"password\":\"${PASSWORD}\", \"inviteCode\":\"${INVITE_CODE}\"}" \
55
55
-
https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createAccount
56
56
-
)
73
73
+
"https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createAccount"
74
74
+
)"
57
75
58
58
-
DID=$(echo $RESULT | jq --raw-output '.did')
76
76
+
DID="$(echo $RESULT | jq --raw-output '.did')"
59
77
if [[ "${DID}" != did:* ]]; then
60
60
-
ERR=$(echo $RESULT | jq --raw-output '.message')
78
78
+
ERR="$(echo ${RESULT} | jq --raw-output '.message')"
61
79
echo "ERROR: ${ERR}" >/dev/stderr
62
80
echo "Usage: $0 ${SUBCOMMAND} <EMAIL> <HANDLE>" >/dev/stderr
63
81
exit 1
64
82
fi
65
83
66
66
-
echo "Account created for ${HANDLE}.\nYour password is below, which we'll only show you once.\n"
67
67
-
echo "DID: ${DID}"
68
68
-
echo "Password: ${PASSWORD}"
84
84
+
echo "Account created successfully!"
85
85
+
echo "-----------------------------"
86
86
+
echo "Handle : ${HANDLE}"
87
87
+
echo "DID : ${DID}"
88
88
+
echo "Password : ${PASSWORD}"
89
89
+
echo "-----------------------------"
90
90
+
echo "Save this password, it will not be displayed again."
91
91
+
92
92
+
#
93
93
+
# account delete
94
94
+
#
69
95
elif [[ "${SUBCOMMAND}" == "delete" ]]; then
70
96
DID="${2:-}"
71
97
···
83
109
84
110
echo "This action is permanent."
85
111
read -r -p "Are you sure you'd like to delete ${DID}? [y/N] " response
86
86
-
if [[ ! "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
112
112
+
if [[ ! "${response}" =~ ^([yY][eE][sS]|[yY])$ ]]; then
87
113
exit 0
88
114
fi
89
115
90
116
curl_cmd_post \
91
91
-
--user "admin:${PDS_ADMIN_PASSWORD}" \
92
92
-
--data "{\"did\": \"${DID}\"}" \
93
93
-
https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.deleteAccount >/dev/null
117
117
+
--user "admin:${PDS_ADMIN_PASSWORD}" \
118
118
+
--data "{\"did\": \"${DID}\"}" \
119
119
+
"https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.deleteAccount" >/dev/null
94
120
95
121
echo "${DID} deleted"
122
122
+
123
123
+
#
124
124
+
# account takedown
125
125
+
#
96
126
elif [[ "${SUBCOMMAND}" == "takedown" ]]; then
97
127
DID="${2:-}"
98
128
TAKEDOWN_REF="$(date +%s)"
···
109
139
exit 1
110
140
fi
111
141
112
112
-
PAYLOAD=$(cat <<EOF
142
142
+
PAYLOAD="$(cat <<EOF
113
143
{
114
144
"subject": {
115
145
"\$type": "com.atproto.admin.defs#repoRef",
···
121
151
}
122
152
}
123
153
EOF
124
124
-
)
154
154
+
)"
125
155
126
156
curl_cmd_post \
127
127
-
--user "admin:${PDS_ADMIN_PASSWORD}" \
128
128
-
--data "${PAYLOAD}" \
129
129
-
https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.updateSubjectStatus >/dev/null
157
157
+
--user "admin:${PDS_ADMIN_PASSWORD}" \
158
158
+
--data "${PAYLOAD}" \
159
159
+
"https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.updateSubjectStatus" >/dev/null
130
160
131
161
echo "${DID} taken down"
162
162
+
163
163
+
#
164
164
+
# account untakedown
165
165
+
#
132
166
elif [[ "${SUBCOMMAND}" == "untakedown" ]]; then
133
167
DID="${2:-}"
134
168
···
158
192
)
159
193
160
194
curl_cmd_post \
161
161
-
--user "admin:${PDS_ADMIN_PASSWORD}" \
162
162
-
--data "${PAYLOAD}" \
163
163
-
https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.updateSubjectStatus >/dev/null
195
195
+
--user "admin:${PDS_ADMIN_PASSWORD}" \
196
196
+
--data "${PAYLOAD}" \
197
197
+
"https://${PDS_HOSTNAME}/xrpc/com.atproto.admin.updateSubjectStatus" >/dev/null
164
198
165
199
echo "${DID} untaken down"
166
200
else
+1
-1
pdsadmin/create-invite-code.sh
···
15
15
--user "admin:${PDS_ADMIN_PASSWORD}" \
16
16
--header "Content-Type: application/json" \
17
17
--data '{"useCount": 1}' \
18
18
-
https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createInviteCode | jq --raw-output '.code'
18
18
+
"https://${PDS_HOSTNAME}/xrpc/com.atproto.server.createInviteCode" | jq --raw-output '.code'
+1
-1
pdsadmin/request-crawl.sh
···
27
27
--user "admin:${PDS_ADMIN_PASSWORD}" \
28
28
--header "Content-Type: application/json" \
29
29
--data "{\"hostname\": \"${PDS_HOSTNAME}\"}" \
30
30
-
https://${host}/xrpc/com.atproto.sync.requestCrawl >/dev/null
30
30
+
"https://${host}/xrpc/com.atproto.sync.requestCrawl" >/dev/null
31
31
done
32
32
33
33
echo "done"
+7
-7
pdsadmin/update.sh
···
14
14
15
15
echo "* Downloading PDS compose file"
16
16
curl \
17
17
-
--silent \
18
18
-
--show-error \
19
19
-
--fail \
20
20
-
--output "${COMPOSE_TEMP_FILE}" \
21
21
-
"${COMPOSE_URL}"
17
17
+
--silent \
18
18
+
--show-error \
19
19
+
--fail \
20
20
+
--output "${COMPOSE_TEMP_FILE}" \
21
21
+
"${COMPOSE_URL}"
22
22
23
23
-
if cmp -s "${COMPOSE_FILE}" "${COMPOSE_TEMP_FILE}"; then
23
23
+
if cmp --quiet "${COMPOSE_FILE}" "${COMPOSE_TEMP_FILE}"; then
24
24
echo "PDS is already up to date"
25
25
-
rm "${COMPOSE_TEMP_FILE}"
25
25
+
rm --force "${COMPOSE_TEMP_FILE}"
26
26
exit 0
27
27
fi
28
28