浏览代码

新增 支持 API 令牌方式

xiu2 1 年之前
父节点
当前提交
bbe762c46f
共有 3 个文件被更改,包括 30 次插入10 次删除
  1. 3 0
      script/README.md
  2. 9 2
      script/cfst_ddns.bat
  3. 18 8
      script/cfst_ddns.sh

+ 3 - 0
script/README.md

@@ -118,6 +118,9 @@
 
 ****
 
+#### 2024年10月06日,版本 v1.0.5
+ - **1. 新增** 支持 API 令牌方式(相比 API 密钥这种全局权限的,API 令牌可以自由控制权限)   
+
 #### 2021年12月17日,版本 v1.0.4
  - **1. 新增** 找不到满足条件的 IP 就一直循环测速功能(默认注释)  
  - **2. 优化** 代码  

+ 9 - 2
script/cfst_ddns.bat

@@ -1,6 +1,6 @@
 :: --------------------------------------------------------------
 ::	项目: CloudflareSpeedTest 自动更新域名解析记录
-::	版本: 1.0.4
+::	版本: 1.0.5
 ::	作者: XIU2
 ::	项目: https://github.com/XIU2/CloudflareSpeedTest
 :: --------------------------------------------------------------
@@ -26,11 +26,18 @@ for /f "tokens=1 delims=," %%i in (result_ddns.txt) do (
             echo CloudflareST 测速结果 IP 数量为 0,跳过下面步骤...
             goto :END
         )
+::      API 密钥方式(全局权限)
         curl -X PUT "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records/域名解析记录ID" ^
                 -H "X-Auth-Email: 账号邮箱" ^
-                -H "X-Auth-Key: 前面获取的 API 令牌" ^
+                -H "X-Auth-Key: 前面获取的 API 密钥" ^
                 -H "Content-Type: application/json" ^
                 --data "{\"type\":\"A\",\"name\":\"完整域名\",\"content\":\"%%i\",\"ttl\":1,\"proxied\":true}"
+::        API 令牌方式(自定义权限),如果要使用这种方式,可以把上面的删除或注释,然后把下面的行首 "::" 注释符删除即可。
+::        curl -X PUT "https://api.cloudflare.com/client/v4/zones/域名ID/dns_records/域名解析记录ID" ^
+::                -H "Authorization: Bearer 前面获取的 API 令牌" ^
+::                -H "Content-Type: application/json" ^
+::                --data "{\"type\":\"A\",\"name\":\"完整域名\",\"content\":\"%%i\",\"ttl\":1,\"proxied\":true}"
+
         goto :END
     )
 )

+ 18 - 8
script/cfst_ddns.sh

@@ -3,7 +3,7 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
 export PATH
 # --------------------------------------------------------------
 #	项目: CloudflareSpeedTest 自动更新域名解析记录
-#	版本: 1.0.4
+#	版本: 1.0.5
 #	作者: XIU2
 #	项目: https://github.com/XIU2/CloudflareSpeedTest
 # --------------------------------------------------------------
@@ -17,10 +17,10 @@ _READ() {
 	[[ -z "${ZONE_ID}" ]] && echo -e "[错误] 缺少配置项 [ZONE_ID] !" && exit 1
 	DNS_RECORDS_ID=$(echo "${CONFIG}"|grep 'DNS_RECORDS_ID='|awk -F '=' '{print $NF}')
 	[[ -z "${DNS_RECORDS_ID}" ]] && echo -e "[错误] 缺少配置项 [DNS_RECORDS_ID] !" && exit 1
-	EMAIL=$(echo "${CONFIG}"|grep 'EMAIL='|awk -F '=' '{print $NF}')
-	[[ -z "${EMAIL}" ]] && echo -e "[错误] 缺少配置项 [EMAIL] !" && exit 1
 	KEY=$(echo "${CONFIG}"|grep 'KEY='|awk -F '=' '{print $NF}')
 	[[ -z "${KEY}" ]] && echo -e "[错误] 缺少配置项 [KEY] !" && exit 1
+	EMAIL=$(echo "${CONFIG}"|grep 'EMAIL='|awk -F '=' '{print $NF}')
+	[[ -z "${EMAIL}" ]] && echo -e "[信息] 缺少配置项 [EMAIL],由 [API 密钥] 方式转为 [API 令牌] 方式!"
 	TYPE=$(echo "${CONFIG}"|grep 'TYPE='|awk -F '=' '{print $NF}')
 	[[ -z "${TYPE}" ]] && echo -e "[错误] 缺少配置项 [TYPE] !" && exit 1
 	NAME=$(echo "${CONFIG}"|grep 'NAME='|awk -F '=' '{print $NF}')
@@ -43,11 +43,21 @@ _UPDATE() {
 		echo "CloudflareST 测速结果 IP 数量为 0,跳过下面步骤..."
 		exit 0
 	fi
-	curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${DNS_RECORDS_ID}" \
-		-H "X-Auth-Email: ${EMAIL}" \
-		-H "X-Auth-Key: ${KEY}" \
-		-H "Content-Type: application/json" \
-		--data "{\"type\":\"${TYPE}\",\"name\":\"${NAME}\",\"content\":\"${CONTENT}\",\"ttl\":${TTL},\"proxied\":${PROXIED}}"
+	# 如果 EMAIL 变量是空的,那么就代表要使用 API 令牌方式
+	if [[ -n "${EMAIL}" ]]; then
+		# API 密钥方式(全局权限)
+		curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${DNS_RECORDS_ID}" \
+			-H "X-Auth-Email: ${EMAIL}" \
+			-H "X-Auth-Key: ${KEY}" \
+			-H "Content-Type: application/json" \
+			--data "{\"type\":\"${TYPE}\",\"name\":\"${NAME}\",\"content\":\"${CONTENT}\",\"ttl\":${TTL},\"proxied\":${PROXIED}}"
+	else
+		# API 令牌方式(自定义权限)
+		curl -X PUT "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${DNS_RECORDS_ID}" \
+			-H "Authorization: Bearer ${KEY}" \
+			-H "Content-Type: application/json" \
+			--data "{\"type\":\"${TYPE}\",\"name\":\"${NAME}\",\"content\":\"${CONTENT}\",\"ttl\":${TTL},\"proxied\":${PROXIED}}"
+	fi
 }
 
 _READ