refactor(git-hangman-lab): rewrite generate-access-token to use HTTP API instead of gitea CLI
- Use -u username:password basic auth for all API calls
- GET /users/{name}/tokens to find existing token
- DELETE /users/{name}/tokens/{id} to remove existing token
- POST /users/{name}/tokens with {"name": "...", "scopes": ["all"]}
- Extract 'sha1' field from POST response as the token value
- Use ego-mgr get default-username instead of secret-mgr get-username
This commit is contained in:
@@ -1,18 +1,47 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
# Get the directory where this script is located
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
|
||||||
# Verify git credentials first
|
|
||||||
"$SCRIPT_DIR/check-git-cred"
|
"$SCRIPT_DIR/check-git-cred"
|
||||||
|
|
||||||
username=$(secret-mgr get-username --key git)
|
USERNAME=$(ego-mgr get default-username)
|
||||||
output=$("$SCRIPT_DIR/gitea" admin user generate-access-token --username "$username" --token-name "$username" 2>&1) || {
|
PASSWORD=$(secret-mgr get-secret --key git)
|
||||||
echo "Failed to generate access token: $output"
|
|
||||||
|
# Check if token already exists
|
||||||
|
EXISTING=$(curl -s -u "${USERNAME}:${PASSWORD}" \
|
||||||
|
"https://git.hangman-lab.top/api/v1/users/${USERNAME}/tokens")
|
||||||
|
|
||||||
|
EXISTING_ID=$(echo "$EXISTING" | python3 -c "
|
||||||
|
import sys, json
|
||||||
|
tokens = json.load(sys.stdin)
|
||||||
|
name = '$USERNAME'
|
||||||
|
for t in tokens:
|
||||||
|
if t.get('name') == name:
|
||||||
|
print(t.get('id'))
|
||||||
|
" 2>/dev/null)
|
||||||
|
|
||||||
|
if [[ -n "$EXISTING_ID" ]]; then
|
||||||
|
curl -s -u "${USERNAME}:${PASSWORD}" -X DELETE \
|
||||||
|
"https://git.hangman-lab.top/api/v1/users/${USERNAME}/tokens/${EXISTING_ID}" > /dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create new token
|
||||||
|
RESP=$(curl -s -u "${USERNAME}:${PASSWORD}" -X POST \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{\"name\": \"${USERNAME}\", \"scopes\": [\"all\"]}" \
|
||||||
|
"https://git.hangman-lab.top/api/v1/users/${USERNAME}/tokens")
|
||||||
|
|
||||||
|
TOKEN=$(echo "$RESP" | python3 -c "
|
||||||
|
import sys, json
|
||||||
|
d = json.load(sys.stdin)
|
||||||
|
print(d.get('sha1', ''))
|
||||||
|
" 2>/dev/null)
|
||||||
|
|
||||||
|
if [[ -z "$TOKEN" ]]; then
|
||||||
|
echo "Failed to generate access token: $RESP"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
fi
|
||||||
|
|
||||||
token=$(echo "$output" | awk '{print $NF}')
|
|
||||||
secret-mgr set --key git-access-token --username "$username" --secret "$token"
|
|
||||||
|
|
||||||
|
secret-mgr set --key git-access-token --username "$USERNAME" --secret "$TOKEN"
|
||||||
echo "Access token generated and stored successfully"
|
echo "Access token generated and stored successfully"
|
||||||
|
|||||||
Reference in New Issue
Block a user