Forráskód Böngészése

新增腾讯云 DNS hook 文件

ywdblog 6 éve%!(EXTRA string=óta)
szülő
commit
93433825d1
3 módosított fájl, 99 hozzáadás és 62 törlés
  1. 1 0
      au.sh
  2. 23 0
      autxy.sh
  3. 75 62
      txydns.php

+ 1 - 0
au.sh

@@ -1,5 +1,6 @@
 #!/bin/bash
 
+# 阿里云操作 DNS Hook
 
 PATH=$(cd `dirname $0`; pwd)
 

+ 23 - 0
autxy.sh

@@ -0,0 +1,23 @@
+#!/bin/bash
+
+# 腾讯云操作 DNS Hook
+
+PATH=$(cd `dirname $0`; pwd)
+
+echo $PATH"/alydns.php"
+
+# 调用 PHP 脚本,自动设置 DNS TXT 记录。
+# 第一个参数:需要为那个域名设置 DNS 记录
+# 第二个参数:需要为具体那个 RR 设置
+# 第三个参数: letsencrypt 动态传递的 RR 值 
+
+echo $CERTBOT_DOMAIN"_acme-challenge"$CERTBOT_VALIDATION
+
+/usr/bin/php  $PATH"/txydns.php"  $CERTBOT_DOMAIN "_acme-challenge"  $CERTBOT_VALIDATION >"/var/log/certdebug.log"
+
+# DNS TXT 记录刷新时间
+/bin/sleep 20
+
+echo "END"
+###
+

+ 75 - 62
txydns.php

@@ -1,46 +1,57 @@
 <?php
+
 date_default_timezone_set("GMT");
 
 ############ 请在腾讯云申请“API密钥”,替换下面两个常量
-// 去 https://console.cloud.tencent.com/cam/capi 页面申请 
+//去 https://console.cloud.tencent.com/cam/capi 页面申请 
 define("txyaccessKeyId", "AKIDwlPr7DUpLgpZBb4tlT0MWUHtIVXOJwxm");
 define("txyaccessSecrec", "mMkxzoTxOirrfJlFYfbS7g7792jEi5GG");
 
 ######### 类测试
 
 /*
-$obj = new TxyDns(txyaccessKeyId, txyaccessSecrec, "yudadan.com");
-//显示所有域名
-//$obj->DomainList();
-//添加域名 TXT 记录
-//$obj->RecordCreate("www3","TXT","s"); 
-//显示某个域名所有的 TXT 记录
-//$obj->RecordList("www3","TXT");
-*/
+  $obj = new TxyDns(txyaccessKeyId, txyaccessSecrec, "yudadan.com");
+  //显示所有域名
+  //$obj->DomainList();
+  //添加域名 TXT 记录
+  //$obj->RecordCreate("www3","TXT","s");
+  //显示某个域名所有的 TXT 记录
+  //$obj->RecordList("www3","TXT");
+ */
 
 ###### 代码运行
 // php txydns.php  "simplehttps.com" "txtname" "txtvalue"  
-$argv[1] = "yudadan.com";
-$argv[2] = "www3";
-$argv[3] = "ss";
+//$argv[1] = "simplehttps.com";
+//$argv[2] = "www3";
+//$argv[3] = "ssssss";
 
 $obj = new TxyDns(txyaccessKeyId, txyaccessSecrec, $argv[1]);
-$data = $obj->RecordList($argv[2],"TXT");
-if ($data["code"]!="0") {
+$data = $obj->RecordList($argv[2], "TXT");
+if ($data["code"] != "0") {
     $obj->error($data["code"], $data["message"]);
 }
- 
+
 $records = $data["data"]["records"];
-foreach ($records as $k=>$v) {
+foreach ($records as $k => $v) {
+    // 如果存在记录,则直接修改。
     if ($v["name"] == $argv[2]) {
-        echo "sss";
-        
-        
-        $obj->RecordDelete($v["recordId"]);
-        exit ;
+        $data = $obj->RecordModify($argv[2], "TXT", $argv[3], $v["id"]);
+        if ($data["code"] != "0") {
+            $obj->error($data["code"], $data["message"]);
+        }
+        //$obj->RecordDelete($v["id"]);
+        exit;
     }
 }
- 
+//如果不存在,就增加 TXT 记录
+$data = $obj->RecordCreate($argv[2], "TXT", $argv[3]);
+if ($data["code"] != "0") {
+    //失败,则记录日志
+    $obj->error($data["code"], $data["message"]);
+}
+
+####### 基于腾讯云 DNS API 实现的 PHP 类,参考 https://cloud.tencent.com/document/product/302/4032
+
 class TxyDns {
 
     private $accessKeyId = null;
@@ -49,56 +60,66 @@ class TxyDns {
     private $Host = "cns.api.qcloud.com";
     private $Path = "/v2/index.php";
 
-    public function __construct($accessKeyId, $accessSecrec, $domain="") {
+    public function __construct($accessKeyId, $accessSecrec, $domain = "") {
         $this->accessKeyId = $accessKeyId;
         $this->accessSecrec = $accessSecrec;
         $this->DomainName = $domain;
     }
-    
-    public function error($code,$str) {
-        echo "操作错误:" . $code .":" . $str ;
-        exit ;
+
+    public function error($code, $str) {
+        echo "操作错误:" . $code . ":" . $str;
+        exit;
     }
- 
+
     public function RecordDelete($recordId) {
-        $param["domain"] = $this->DomainName ;
-        $param["recordId"] = $recordId ;
-        
+        $param["domain"] = $this->DomainName;
+        $param["recordId"] = $recordId;
+
         $data = $this->send("RecordDelete", "GET", $param);
         return ($this->out($data));
     }
-    
-    public function RecordList($subDomain,$recordType="") {
-        
-        if ($recordType!="")
-        $param["recordType"] = $recordType ;
-        $param["subDomain"] = $subDomain ;
-        $param["domain"] = $this->DomainName ;
-        
+
+    public function RecordList($subDomain, $recordType = "") {
+
+        if ($recordType != "")
+            $param["recordType"] = $recordType;
+        $param["subDomain"] = $subDomain;
+        $param["domain"] = $this->DomainName;
+
         $data = $this->send("RecordList", "GET", $param);
         return ($this->out($data));
-        
     }
-    
-    public function RecordCreate($subDomain,$recordType = "TXT",$value) {
-        $param["recordType"] = $recordType ;
-        $param["subDomain"] = $subDomain ;
-        $param["domain"] = $this->DomainName ;
-        $param["recordLine"]="默认";
+
+    public function RecordModify($subDomain, $recordType = "TXT", $value, $recordId) {
+        $param["recordType"] = $recordType;
+        $param["subDomain"] = $subDomain;
+        $param["recordId"] = $recordId;
+        $param["domain"] = $this->DomainName;
+        $param["recordLine"] = "默认";
         $param["value"] = $value;
-        //print_r($param);
-       
+
+        $data = $this->send("RecordModify", "GET", $param);
+        return ($this->out($data));
+    }
+
+    public function RecordCreate($subDomain, $recordType = "TXT", $value) {
+        $param["recordType"] = $recordType;
+        $param["subDomain"] = $subDomain;
+        $param["domain"] = $this->DomainName;
+        $param["recordLine"] = "默认";
+        $param["value"] = $value;
+
         $data = $this->send("RecordCreate", "GET", $param);
         return ($this->out($data));
-        
     }
+
     public function DomainList() {
- 
+
         $data = $this->send("DomainList", "GET", array());
         return ($this->out($data));
     }
 
-    public function send($action, $reqMethod, $requestParams) {
+    private function send($action, $reqMethod, $requestParams) {
 
         $params = $this->formatRequestData($action, $requestParams, $reqMethod);
 
@@ -107,7 +128,7 @@ class TxyDns {
         return $this->curl($url);
     }
 
-    public function formatRequestData($action, $request, $reqMethod) {
+    private function formatRequestData($action, $request, $reqMethod) {
         $param = $request;
         $param["Action"] = ucfirst($action);
 //$param["RequestClient"] = $this->sdkVersion;
@@ -123,7 +144,7 @@ class TxyDns {
     }
 
 //签名
-    public function formatSignString($host, $path, $param, $requestMethod) {
+    private function formatSignString($host, $path, $param, $requestMethod) {
         $tmpParam = [];
         ksort($param);
         foreach ($param as $key => $value) {
@@ -134,7 +155,7 @@ class TxyDns {
         return $signStr;
     }
 
-    public function sign($signStr) {
+    private function sign($signStr) {
 
         $signature = base64_encode(hash_hmac("sha1", $signStr, $this->accessSecrec, true));
         return $signature;
@@ -154,11 +175,3 @@ class TxyDns {
     }
 
 }
-
-
-
-
-
- 
- 
-