op-packages/openwrt-natmap/files/cloudflare_origin_rule.sh
github-actions[bot] 32600acc60 🌴 Sync 2026-03-05 23:51:42
2026-03-05 23:51:42 +08:00

31 lines
1.2 KiB
Bash
Executable File

#!/bin/sh
# NATMap
outter_ip=$1
outter_port=$2
get_current_rule() {
curl --retry 10 --request GET \
--url https://api.cloudflare.com/client/v4/zones/$CLOUDFLARE_ZONE_ID/rulesets/phases/http_request_origin/entrypoint \
--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \
--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
--header 'Content-Type: application/json'
}
currrent_rule=$(get_current_rule)
CLOUDFLARE_RULE_NAME="\"$CLOUDFLARE_RULE_NAME\""
new_rule=$(echo "$currrent_rule" | jq '.result.rules| to_entries | map(select(.value.description == '"$CLOUDFLARE_RULE_NAME"')) | .[].key')
new_rule=$(echo "$currrent_rule" | jq '.result.rules['"$new_rule"'].action_parameters.origin.port = '"$outter_port"'')
CLOUDFLARE_RULESET_ID=$(echo "$currrent_rule" | jq '.result.id' | sed 's/"//g')
body=$(echo "$new_rule" | jq '.result')
# delete last_updated
body=$(echo "$body" | jq 'del(.last_updated)')
curl --retry 10 --request PUT \
--url https://api.cloudflare.com/client/v4/zones/$CLOUDFLARE_ZONE_ID/rulesets/$CLOUDFLARE_RULESET_ID \
--header "X-Auth-Key: $CLOUDFLARE_API_KEY" \
--header "X-Auth-Email: $CLOUDFLARE_EMAIL" \
--header 'Content-Type: application/json' \
--data "$body"