forge-avatar-sync: fix data URI prefix and add jq to service path (closes #197)

This commit is contained in:
damocles 2026-05-23 00:17:38 +02:00
parent edf7f1602d
commit cd9831b39e

View file

@ -505,6 +505,7 @@
path = [ path = [
pkgs.curl pkgs.curl
pkgs.coreutils pkgs.coreutils
pkgs.jq
pkgs.librsvg pkgs.librsvg
]; ];
script = '' script = ''
@ -535,12 +536,15 @@
fi fi
IMAGE=$(base64 -w 0 < "$PNG") IMAGE=$(base64 -w 0 < "$PNG")
rm -f "$PNG" rm -f "$PNG"
DATA_URI="data:image/png;base64,$IMAGE" # Forgejo POST /user/avatar expects {"image":"<base64>"} — just the
# raw base64 string, NOT a data URI (data:image/png;base64,...).
# Use jq to build the payload so the large base64 value is safely quoted.
PAYLOAD=$(jq -n --arg img "$IMAGE" '{image:$img}')
RESP=$(curl -sf --max-time 10 \ RESP=$(curl -sf --max-time 10 \
-X POST "$FORGE_URL/api/v1/user/avatar" \ -X POST "$FORGE_URL/api/v1/user/avatar" \
-H "Authorization: token $TOKEN" \ -H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d "{\"image\":\"$DATA_URI\"}" \ -d "$PAYLOAD" \
-w "\n%{http_code}" 2>/dev/null || true) -w "\n%{http_code}" 2>/dev/null || true)
CODE=$(printf '%s' "$RESP" | tail -1) CODE=$(printf '%s' "$RESP" | tail -1)
if [ "$CODE" = "204" ] || [ "$CODE" = "200" ]; then if [ "$CODE" = "204" ] || [ "$CODE" = "200" ]; then