#!/bin/bash # Usage: redmine-fetch # stdout: Issue-JSON + alle Wiki-JSONs deren Titel mit # beginnt # (Newline-getrennt; Wikis = nichts wenn keine Treffer) # stderr: Hinweis auf Bilder-Speicherort (wenn Bilder vorhanden) # Side effect: Bilder von Issue + Wikis nach /tmp/redmine-{nr}/ TICKET_NR="$1" URL="https://servicecenter.mitho-media.de" API_KEY=$(cat /home/arbeit/projects/project-starter/.redmine_api_key) ATTACH_DIR="/tmp/redmine-$TICKET_NR" ISSUE_JSON=$(curl -s -H "X-Redmine-API-Key: $API_KEY" \ "$URL/issues/$TICKET_NR.json?include=journals,attachments,relations") PROJECT_ID=$(echo "$ISSUE_JSON" | python3 -c "import sys,json;print(json.load(sys.stdin)['issue']['project']['id'])") PROJECT_IDENTIFIER=$(curl -s -H "X-Redmine-API-Key: $API_KEY" \ "$URL/projects/$PROJECT_ID.json" \ | python3 -c "import sys,json;print(json.load(sys.stdin)['project']['identifier'])") WIKI_INDEX=$(curl -sf -H "X-Redmine-API-Key: $API_KEY" \ "$URL/projects/$PROJECT_IDENTIFIER/wiki/index.json" || echo "") WIKI_TITLES=$(echo "$WIKI_INDEX" | TICKET_NR="$TICKET_NR" python3 -c " import sys, json, os try: pages = json.load(sys.stdin).get('wiki_pages', []) except Exception: sys.exit(0) prefix = '#' + os.environ['TICKET_NR'] for p in pages: t = p.get('title', '') if t == prefix or t.startswith(prefix + '_'): print(t) ") rm -rf "$ATTACH_DIR" mkdir -p "$ATTACH_DIR" download_images() { local json="$1" [ -z "$json" ] && return echo "$json" | python3 -c " import sys, json d = json.load(sys.stdin) container = d.get('issue', d.get('wiki_page', {})) for a in container.get('attachments', []): if a.get('content_type', '').startswith('image/'): print(a['content_url'] + '|' + a['filename']) " | while IFS='|' read -r url filename; do [ -n "$url" ] && curl -sf -H "X-Redmine-API-Key: $API_KEY" -o "$ATTACH_DIR/$filename" "$url" done } download_images "$ISSUE_JSON" WIKI_OUTPUT="" while IFS= read -r title; do [ -z "$title" ] && continue encoded=$(python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1], safe=''))" "$title") wiki=$(curl -sf -H "X-Redmine-API-Key: $API_KEY" \ "$URL/projects/$PROJECT_IDENTIFIER/wiki/$encoded.json?include=attachments" || echo "") if [ -n "$wiki" ]; then download_images "$wiki" WIKI_OUTPUT="${WIKI_OUTPUT}${wiki}"$'\n' fi done <<< "$WIKI_TITLES" COUNT=$(find "$ATTACH_DIR" -maxdepth 1 -type f 2>/dev/null | wc -l) [ "$COUNT" -gt 0 ] && echo "$COUNT Bild(er) gespeichert in $ATTACH_DIR" >&2 echo "$ISSUE_JSON" printf '%s' "$WIKI_OUTPUT"