#!/bin/bash # GiteaHubSync CGI 入口:把控制面板(127.0.0.1:8899)代理到飞牛同源路径下, # 使桌面图标 iframe 可以直接打开面板(避免 http/https 混合内容问题)。 # 完整转发 HTTP 方法、Content-Type 与请求体(POST /api/toggle、/api/sync 等)。 PANEL="http://127.0.0.1:8899" APP_SLUG="GiteaHubSync" URI_NO_QUERY="${REQUEST_URI%%\?*}" REL_PATH="/" case "$URI_NO_QUERY" in *index.cgi*) REL_PATH="${URI_NO_QUERY#*index.cgi}" ;; esac REL_PATH="${REL_PATH#/}" [ -z "$REL_PATH" ] && REL_PATH="/" case "$REL_PATH" in /*) ;; *) REL_PATH="/$REL_PATH" ;; esac METHOD="${REQUEST_METHOD:-GET}" CTYPE="${CONTENT_TYPE:-application/json}" HDR="$(mktemp)"; BODY="$(mktemp)"; INBODY="" CURL_ARGS=(-s -m 120 -X "$METHOD" -H "Content-Type: $CTYPE") case "$METHOD" in POST|PUT|PATCH) CL="${CONTENT_LENGTH:-0}" if [ "$CL" -gt 0 ] 2>/dev/null; then INBODY="$(mktemp)" head -c "$CL" > "$INBODY" CURL_ARGS+=(--data-binary "@$INBODY") fi ;; esac curl "${CURL_ARGS[@]}" -D "$HDR" -o "$BODY" "${PANEL}${REL_PATH}" rc=$? [ -n "$INBODY" ] && rm -f "$INBODY" if [ $rc -ne 0 ]; then rm -f "$HDR" "$BODY" printf 'Status: 503 Service Unavailable\r\n' printf 'Content-Type: text/html; charset=utf-8\r\n\r\n' printf '

同步服务未运行

请到飞牛 应用中心 → 已安装 → GiteaHubSync 中启动应用。

\n' exit 0 fi CTYPE_OUT="$(grep -i '^content-type:' "$HDR" | head -1 | cut -d' ' -f2 | tr -d '\r')" [ -z "$CTYPE_OUT" ] && CTYPE_OUT="text/html; charset=utf-8" printf 'Content-Type: %s\r\n' "$CTYPE_OUT" printf 'Cache-Control: no-store\r\n' printf '\r\n' case "$CTYPE_OUT" in text/html*) # 注入 ,让页面里的相对路径 API 请求落在本 CGI 前缀下 sed "s|||" "$BODY" ;; *) cat "$BODY" ;; esac rm -f "$HDR" "$BODY" exit 0