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 = [
pkgs.curl
pkgs.coreutils
pkgs.jq
pkgs.librsvg
];
script = ''
@ -535,12 +536,15 @@
fi
IMAGE=$(base64 -w 0 < "$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 \
-X POST "$FORGE_URL/api/v1/user/avatar" \
-H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"image\":\"$DATA_URI\"}" \
-d "$PAYLOAD" \
-w "\n%{http_code}" 2>/dev/null || true)
CODE=$(printf '%s' "$RESP" | tail -1)
if [ "$CODE" = "204" ] || [ "$CODE" = "200" ]; then