mirror of
				https://github.com/hiskang/acme.sh
				synced 2025-11-04 12:28:12 +00:00 
			
		
		
		
	Merge pull request #375 from Neilpang/dev
Add shfmt to format source code
This commit is contained in:
		
						commit
						5daefc0194
					
				
							
								
								
									
										11
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
language: bash
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  global:
 | 
			
		||||
    - SHFMT_URL=https://github.com/mvdan/sh/releases/download/v0.4.0/shfmt_v0.4.0_linux_amd64
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
  - curl -sSL $SHFMT_URL -o ~/shfmt
 | 
			
		||||
  - chmod +x ~/shfmt
 | 
			
		||||
  - ~/shfmt -l -w -i 2 .
 | 
			
		||||
  - git diff --exit-code || (echo "Run shfmt to fix the formatting issues" && false)
 | 
			
		||||
@ -6,8 +6,6 @@
 | 
			
		||||
#Which will be called by acme.sh to deploy the cert
 | 
			
		||||
#returns 0 means success, otherwise error.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
########  Public functions #####################
 | 
			
		||||
 | 
			
		||||
#domain keyfile certfile cafile fullchain
 | 
			
		||||
@ -17,17 +15,14 @@ myapi_deploy() {
 | 
			
		||||
  _ccert="$3"
 | 
			
		||||
  _cca="$4"
 | 
			
		||||
  _cfullchain="$5"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _debug _cdomain "$_cdomain"
 | 
			
		||||
  _debug _ckey "$_ckey"
 | 
			
		||||
  _debug _ccert "$_ccert"
 | 
			
		||||
  _debug _cca "$_cca"
 | 
			
		||||
  _debug _cfullchain "$_cfullchain"
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _err "Not implemented yet"
 | 
			
		||||
  return 1
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,54 +1,52 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
#CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
 | 
			
		||||
#
 | 
			
		||||
#CF_Email="xxxx@sss.com"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CF_Api="https://api.cloudflare.com/client/v4"
 | 
			
		||||
 | 
			
		||||
########  Public functions #####################
 | 
			
		||||
 | 
			
		||||
#Usage: add  _acme-challenge.www.domain.com   "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
 | 
			
		||||
dns_cf_add(){
 | 
			
		||||
dns_cf_add() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
  txtvalue=$2
 | 
			
		||||
  
 | 
			
		||||
  if [ -z "$CF_Key" ] || [ -z "$CF_Email" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ -z "$CF_Key" ] || [ -z "$CF_Email" ]; then
 | 
			
		||||
    _err "You don't specify cloudflare api key and email yet."
 | 
			
		||||
    _err "Please create you key and try again."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  #save the api key and email to the account conf file.
 | 
			
		||||
  _saveaccountconf CF_Key "$CF_Key"
 | 
			
		||||
  _saveaccountconf CF_Email "$CF_Email"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _debug "First detect the root zone"
 | 
			
		||||
  if ! _get_root $fulldomain ; then
 | 
			
		||||
  if ! _get_root $fulldomain; then
 | 
			
		||||
    _err "invalid domain"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug _domain_id "$_domain_id"
 | 
			
		||||
  _debug _sub_domain "$_sub_domain"
 | 
			
		||||
  _debug _domain "$_domain"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _debug "Getting txt records"
 | 
			
		||||
  _cf_rest GET "zones/${_domain_id}/dns_records?type=TXT&name=$fulldomain"
 | 
			
		||||
  
 | 
			
		||||
  if ! printf "$response" | grep \"success\":true > /dev/null ; then
 | 
			
		||||
 | 
			
		||||
  if ! printf "$response" | grep \"success\":true >/dev/null; then
 | 
			
		||||
    _err "Error"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  count=$(printf "%s\n" "$response" | _egrep_o \"count\":[^,]* | cut -d : -f 2)
 | 
			
		||||
  _debug count "$count"
 | 
			
		||||
  if [ "$count" = "0" ] ; then
 | 
			
		||||
  if [ "$count" = "0" ]; then
 | 
			
		||||
    _info "Adding record"
 | 
			
		||||
    if _cf_rest POST "zones/$_domain_id/dns_records"  "{\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"ttl\":120}"; then
 | 
			
		||||
      if printf -- "%s" "$response" | grep $fulldomain > /dev/null ; then
 | 
			
		||||
    if _cf_rest POST "zones/$_domain_id/dns_records" "{\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"ttl\":120}"; then
 | 
			
		||||
      if printf -- "%s" "$response" | grep $fulldomain >/dev/null; then
 | 
			
		||||
        _info "Added, sleeping 10 seconds"
 | 
			
		||||
        sleep 10
 | 
			
		||||
        #todo: check if the record takes effect
 | 
			
		||||
@ -61,22 +59,21 @@ dns_cf_add(){
 | 
			
		||||
    _err "Add txt record error."
 | 
			
		||||
  else
 | 
			
		||||
    _info "Updating record"
 | 
			
		||||
    record_id=$(printf "%s\n" "$response" | _egrep_o \"id\":\"[^\"]*\" | cut -d : -f 2 | tr -d \"| head -n 1)
 | 
			
		||||
    record_id=$(printf "%s\n" "$response" | _egrep_o \"id\":\"[^\"]*\" | cut -d : -f 2 | tr -d \" | head -n 1)
 | 
			
		||||
    _debug "record_id" $record_id
 | 
			
		||||
    
 | 
			
		||||
    _cf_rest PUT "zones/$_domain_id/dns_records/$record_id"  "{\"id\":\"$record_id\",\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"zone_id\":\"$_domain_id\",\"zone_name\":\"$_domain\"}"
 | 
			
		||||
 | 
			
		||||
    _cf_rest PUT "zones/$_domain_id/dns_records/$record_id" "{\"id\":\"$record_id\",\"type\":\"TXT\",\"name\":\"$fulldomain\",\"content\":\"$txtvalue\",\"zone_id\":\"$_domain_id\",\"zone_name\":\"$_domain\"}"
 | 
			
		||||
    if [ "$?" = "0" ]; then
 | 
			
		||||
      _info "Updated, sleeping 10 seconds"
 | 
			
		||||
      sleep 10
 | 
			
		||||
      #todo: check if the record takes effect
 | 
			
		||||
      return 0;
 | 
			
		||||
      return 0
 | 
			
		||||
    fi
 | 
			
		||||
    _err "Update error"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#fulldomain
 | 
			
		||||
dns_cf_rm() {
 | 
			
		||||
@ -84,7 +81,6 @@ dns_cf_rm() {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
####################  Private functions bellow ##################################
 | 
			
		||||
#_acme-challenge.www.domain.com
 | 
			
		||||
#returns
 | 
			
		||||
@ -95,20 +91,20 @@ _get_root() {
 | 
			
		||||
  domain=$1
 | 
			
		||||
  i=2
 | 
			
		||||
  p=1
 | 
			
		||||
  while [ '1' ] ; do
 | 
			
		||||
  while [ '1' ]; do
 | 
			
		||||
    h=$(printf $domain | cut -d . -f $i-100)
 | 
			
		||||
    if [ -z "$h" ] ; then
 | 
			
		||||
    if [ -z "$h" ]; then
 | 
			
		||||
      #not valid
 | 
			
		||||
      return 1;
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    if ! _cf_rest GET "zones?name=$h" ; then
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    if printf $response | grep \"name\":\"$h\" >/dev/null ; then
 | 
			
		||||
 | 
			
		||||
    if ! _cf_rest GET "zones?name=$h"; then
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if printf $response | grep \"name\":\"$h\" >/dev/null; then
 | 
			
		||||
      _domain_id=$(printf "%s\n" "$response" | _egrep_o \"id\":\"[^\"]*\" | head -n 1 | cut -d : -f 2 | tr -d \")
 | 
			
		||||
      if [ "$_domain_id" ] ; then
 | 
			
		||||
      if [ "$_domain_id" ]; then
 | 
			
		||||
        _sub_domain=$(printf $domain | cut -d . -f 1-$p)
 | 
			
		||||
        _domain=$h
 | 
			
		||||
        return 0
 | 
			
		||||
@ -126,24 +122,22 @@ _cf_rest() {
 | 
			
		||||
  ep="$2"
 | 
			
		||||
  data="$3"
 | 
			
		||||
  _debug $ep
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _H1="X-Auth-Email: $CF_Email"
 | 
			
		||||
  _H2="X-Auth-Key: $CF_Key"
 | 
			
		||||
  _H3="Content-Type: application/json"
 | 
			
		||||
  
 | 
			
		||||
  if [ "$data" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$data" ]; then
 | 
			
		||||
    _debug data "$data"
 | 
			
		||||
    response="$(_post "$data" "$CF_Api/$ep" "" $m)"
 | 
			
		||||
  else
 | 
			
		||||
    response="$(_get "$CF_Api/$ep")"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if [ "$?" != "0" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$?" != "0" ]; then
 | 
			
		||||
    _err "error $ep"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug2 response "$response"
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										100
									
								
								dnsapi/dns_cx.sh
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								dnsapi/dns_cx.sh
									
									
									
									
									
								
							@ -6,10 +6,8 @@
 | 
			
		||||
#
 | 
			
		||||
#CX_Secret="sADDsdasdgdsf"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
CX_Api="https://www.cloudxns.net/api2"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#REST_API
 | 
			
		||||
########  Public functions #####################
 | 
			
		||||
 | 
			
		||||
@ -17,54 +15,50 @@ CX_Api="https://www.cloudxns.net/api2"
 | 
			
		||||
dns_cx_add() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
  txtvalue=$2
 | 
			
		||||
  
 | 
			
		||||
  if [ -z "$CX_Key" ] || [ -z "$CX_Secret" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ -z "$CX_Key" ] || [ -z "$CX_Secret" ]; then
 | 
			
		||||
    _err "You don't specify cloudxns.com  api key or secret yet."
 | 
			
		||||
    _err "Please create you key and try again."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  REST_API=$CX_Api
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  #save the api key and email to the account conf file.
 | 
			
		||||
  _saveaccountconf CX_Key "$CX_Key"
 | 
			
		||||
  _saveaccountconf CX_Secret "$CX_Secret"
 | 
			
		||||
  
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
  _debug "First detect the root zone"
 | 
			
		||||
  if ! _get_root $fulldomain ; then
 | 
			
		||||
  if ! _get_root $fulldomain; then
 | 
			
		||||
    _err "invalid domain"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  existing_records  $_domain  $_sub_domain
 | 
			
		||||
 | 
			
		||||
  existing_records $_domain $_sub_domain
 | 
			
		||||
  _debug count "$count"
 | 
			
		||||
  if [ "$?" != "0" ] ; then
 | 
			
		||||
  if [ "$?" != "0" ]; then
 | 
			
		||||
    _err "Error get existing records."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$count" = "0" ] ; then
 | 
			
		||||
  if [ "$count" = "0" ]; then
 | 
			
		||||
    add_record $_domain $_sub_domain $txtvalue
 | 
			
		||||
  else
 | 
			
		||||
    update_record $_domain $_sub_domain $txtvalue
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if [ "$?" = "0" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$?" = "0" ]; then
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
  return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#fulldomain
 | 
			
		||||
dns_cx_rm() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#usage:  root  sub
 | 
			
		||||
#return if the sub record already exists.
 | 
			
		||||
#echos the existing records count.
 | 
			
		||||
@ -73,24 +67,24 @@ existing_records() {
 | 
			
		||||
  _debug "Getting txt records"
 | 
			
		||||
  root=$1
 | 
			
		||||
  sub=$2
 | 
			
		||||
  
 | 
			
		||||
  if ! _rest GET "record/$_domain_id?:domain_id?host_id=0&offset=0&row_num=100" ; then
 | 
			
		||||
 | 
			
		||||
  if ! _rest GET "record/$_domain_id?:domain_id?host_id=0&offset=0&row_num=100"; then
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  count=0
 | 
			
		||||
  seg=$(printf "%s\n" "$response" | _egrep_o "{[^\{]*host\":\"$_sub_domain\"[^\}]*\}")
 | 
			
		||||
  _debug seg "$seg"
 | 
			
		||||
  if [ -z "$seg" ] ; then
 | 
			
		||||
  if [ -z "$seg" ]; then
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if printf "$response" | grep '"type":"TXT"' > /dev/null ; then
 | 
			
		||||
  if printf "$response" | grep '"type":"TXT"' >/dev/null; then
 | 
			
		||||
    count=1
 | 
			
		||||
    record_id=$(printf "%s\n" "$seg" | _egrep_o \"record_id\":\"[^\"]*\" | cut -d : -f 2 | tr -d \")
 | 
			
		||||
    _debug record_id "$record_id"
 | 
			
		||||
    return 0    
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#add the txt record.
 | 
			
		||||
@ -100,13 +94,13 @@ add_record() {
 | 
			
		||||
  sub=$2
 | 
			
		||||
  txtvalue=$3
 | 
			
		||||
  fulldomain=$sub.$root
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _info "Adding record"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  if ! _rest POST "record" "{\"domain_id\": $_domain_id, \"host\":\"$_sub_domain\", \"value\":\"$txtvalue\", \"type\":\"TXT\",\"ttl\":600, \"line_id\":1}"; then
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -117,19 +111,16 @@ update_record() {
 | 
			
		||||
  sub=$2
 | 
			
		||||
  txtvalue=$3
 | 
			
		||||
  fulldomain=$sub.$root
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _info "Updating record"
 | 
			
		||||
  
 | 
			
		||||
  if _rest PUT "record/$record_id" "{\"domain_id\": $_domain_id, \"host\":\"$_sub_domain\", \"value\":\"$txtvalue\", \"type\":\"TXT\",\"ttl\":600, \"line_id\":1}" ; then
 | 
			
		||||
 | 
			
		||||
  if _rest PUT "record/$record_id" "{\"domain_id\": $_domain_id, \"host\":\"$_sub_domain\", \"value\":\"$txtvalue\", \"type\":\"TXT\",\"ttl\":600, \"line_id\":1}"; then
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
####################  Private functions bellow ##################################
 | 
			
		||||
#_acme-challenge.www.domain.com
 | 
			
		||||
#returns
 | 
			
		||||
@ -140,25 +131,25 @@ _get_root() {
 | 
			
		||||
  domain=$1
 | 
			
		||||
  i=2
 | 
			
		||||
  p=1
 | 
			
		||||
  
 | 
			
		||||
  if ! _rest GET "domain" ; then
 | 
			
		||||
 | 
			
		||||
  if ! _rest GET "domain"; then
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  while [ '1' ] ; do
 | 
			
		||||
 | 
			
		||||
  while [ '1' ]; do
 | 
			
		||||
    h=$(printf $domain | cut -d . -f $i-100)
 | 
			
		||||
    _debug h "$h"
 | 
			
		||||
    if [ -z "$h" ] ; then
 | 
			
		||||
    if [ -z "$h" ]; then
 | 
			
		||||
      #not valid
 | 
			
		||||
      return 1;
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if printf "$response" | grep "$h." >/dev/null ; then
 | 
			
		||||
      seg=$(printf "%s" "$response" | _egrep_o "\{[^\{]*\"$h\.\"[^\}]*\}" )
 | 
			
		||||
    if printf "$response" | grep "$h." >/dev/null; then
 | 
			
		||||
      seg=$(printf "%s" "$response" | _egrep_o "\{[^\{]*\"$h\.\"[^\}]*\}")
 | 
			
		||||
      _debug seg "$seg"
 | 
			
		||||
      _domain_id=$(printf "%s" "$seg" | _egrep_o \"id\":\"[^\"]*\" | cut -d : -f 2 | tr -d \")
 | 
			
		||||
      _debug _domain_id "$_domain_id"
 | 
			
		||||
      if [ "$_domain_id" ] ; then
 | 
			
		||||
      if [ "$_domain_id" ]; then
 | 
			
		||||
        _sub_domain=$(printf $domain | cut -d . -f 1-$p)
 | 
			
		||||
        _debug _sub_domain $_sub_domain
 | 
			
		||||
        _domain=$h
 | 
			
		||||
@ -173,7 +164,6 @@ _get_root() {
 | 
			
		||||
  return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#Usage: method  URI  data
 | 
			
		||||
_rest() {
 | 
			
		||||
  m=$1
 | 
			
		||||
@ -181,38 +171,36 @@ _rest() {
 | 
			
		||||
  _debug $ep
 | 
			
		||||
  url="$REST_API/$ep"
 | 
			
		||||
  _debug url "$url"
 | 
			
		||||
  
 | 
			
		||||
  cdate=$(date -u  "+%Y-%m-%d %H:%M:%S UTC")
 | 
			
		||||
 | 
			
		||||
  cdate=$(date -u "+%Y-%m-%d %H:%M:%S UTC")
 | 
			
		||||
  _debug cdate "$cdate"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  data="$3"
 | 
			
		||||
  _debug data "$data"
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
  sec="$CX_Key$url$data$cdate$CX_Secret"
 | 
			
		||||
  _debug sec "$sec"
 | 
			
		||||
  hmac=$(printf "$sec"| openssl md5 |cut -d " " -f 2)
 | 
			
		||||
  hmac=$(printf "$sec" | openssl md5 | cut -d " " -f 2)
 | 
			
		||||
  _debug hmac "$hmac"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _H1="API-KEY: $CX_Key"
 | 
			
		||||
  _H2="API-REQUEST-DATE: $cdate"
 | 
			
		||||
  _H3="API-HMAC: $hmac"
 | 
			
		||||
  _H4="Content-Type: application/json"
 | 
			
		||||
 | 
			
		||||
  if [ "$data" ] ; then
 | 
			
		||||
  if [ "$data" ]; then
 | 
			
		||||
    response="$(_post "$data" "$url" "" $m)"
 | 
			
		||||
  else
 | 
			
		||||
    response="$(_get "$url")"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if [ "$?" != "0" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$?" != "0" ]; then
 | 
			
		||||
    _err "error $ep"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug2 response "$response"
 | 
			
		||||
  if ! printf "$response" | grep '"message":"success"' > /dev/null ; then
 | 
			
		||||
  if ! printf "$response" | grep '"message":"success"' >/dev/null; then
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										102
									
								
								dnsapi/dns_dp.sh
									
									
									
									
									
								
							
							
						
						
									
										102
									
								
								dnsapi/dns_dp.sh
									
									
									
									
									
								
							@ -6,10 +6,8 @@
 | 
			
		||||
#
 | 
			
		||||
#DP_Key="sADDsdasdgdsf"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DP_Api="https://dnsapi.cn"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#REST_API
 | 
			
		||||
########  Public functions #####################
 | 
			
		||||
 | 
			
		||||
@ -17,49 +15,45 @@ DP_Api="https://dnsapi.cn"
 | 
			
		||||
dns_dp_add() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
  txtvalue=$2
 | 
			
		||||
  
 | 
			
		||||
  if [ -z "$DP_Id" ] || [ -z "$DP_Key" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ -z "$DP_Id" ] || [ -z "$DP_Key" ]; then
 | 
			
		||||
    _err "You don't specify dnspod api key and key id yet."
 | 
			
		||||
    _err "Please create you key and try again."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  REST_API=$DP_Api
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  #save the api key and email to the account conf file.
 | 
			
		||||
  _saveaccountconf DP_Id "$DP_Id"
 | 
			
		||||
  _saveaccountconf DP_Key "$DP_Key"
 | 
			
		||||
  
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
  _debug "First detect the root zone"
 | 
			
		||||
  if ! _get_root $fulldomain ; then
 | 
			
		||||
  if ! _get_root $fulldomain; then
 | 
			
		||||
    _err "invalid domain"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  existing_records  $_domain  $_sub_domain
 | 
			
		||||
 | 
			
		||||
  existing_records $_domain $_sub_domain
 | 
			
		||||
  _debug count "$count"
 | 
			
		||||
  if [ "$?" != "0" ] ; then
 | 
			
		||||
  if [ "$?" != "0" ]; then
 | 
			
		||||
    _err "Error get existing records."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$count" = "0" ] ; then
 | 
			
		||||
  if [ "$count" = "0" ]; then
 | 
			
		||||
    add_record $_domain $_sub_domain $txtvalue
 | 
			
		||||
  else
 | 
			
		||||
    update_record $_domain $_sub_domain $txtvalue
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#fulldomain
 | 
			
		||||
dns_dp_rm() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#usage:  root  sub
 | 
			
		||||
#return if the sub record already exists.
 | 
			
		||||
#echos the existing records count.
 | 
			
		||||
@ -68,26 +62,25 @@ existing_records() {
 | 
			
		||||
  _debug "Getting txt records"
 | 
			
		||||
  root=$1
 | 
			
		||||
  sub=$2
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  if ! _rest POST "Record.List" "login_token=$DP_Id,$DP_Key&domain_id=$_domain_id&sub_domain=$_sub_domain"; then
 | 
			
		||||
      return 1
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if  printf "$response" | grep 'No records' ; then
 | 
			
		||||
      count=0;
 | 
			
		||||
      return 0
 | 
			
		||||
 | 
			
		||||
  if printf "$response" | grep 'No records'; then
 | 
			
		||||
    count=0
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
    
 | 
			
		||||
  if printf "$response" | grep "Action completed successful" >/dev/null ; then
 | 
			
		||||
 | 
			
		||||
  if printf "$response" | grep "Action completed successful" >/dev/null; then
 | 
			
		||||
    count=$(printf "$response" | grep '<type>TXT</type>' | wc -l)
 | 
			
		||||
    record_id=$(printf "$response" | grep '^<id>' | tail -1 | cut -d '>' -f 2 | cut -d '<' -f 1)
 | 
			
		||||
    return 0    
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    _err "get existing records error."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  count=0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -98,19 +91,18 @@ add_record() {
 | 
			
		||||
  sub=$2
 | 
			
		||||
  txtvalue=$3
 | 
			
		||||
  fulldomain=$sub.$root
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _info "Adding record"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  if ! _rest POST "Record.Create" "login_token=$DP_Id,$DP_Key&format=json&domain_id=$_domain_id&sub_domain=$_sub_domain&record_type=TXT&value=$txtvalue&record_line=默认"; then
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if printf "$response" | grep "Action completed successful" ; then
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  if printf "$response" | grep "Action completed successful"; then
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  return 1 #error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -121,24 +113,21 @@ update_record() {
 | 
			
		||||
  sub=$2
 | 
			
		||||
  txtvalue=$3
 | 
			
		||||
  fulldomain=$sub.$root
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _info "Updating record"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  if ! _rest POST "Record.Modify" "login_token=$DP_Id,$DP_Key&format=json&domain_id=$_domain_id&sub_domain=$_sub_domain&record_type=TXT&value=$txtvalue&record_line=默认&record_id=$record_id"; then
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if printf "$response" | grep "Action completed successful" ; then
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  if printf "$response" | grep "Action completed successful"; then
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  return 1 #error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
####################  Private functions bellow ##################################
 | 
			
		||||
#_acme-challenge.www.domain.com
 | 
			
		||||
#returns
 | 
			
		||||
@ -149,21 +138,21 @@ _get_root() {
 | 
			
		||||
  domain=$1
 | 
			
		||||
  i=2
 | 
			
		||||
  p=1
 | 
			
		||||
  while [ '1' ] ; do
 | 
			
		||||
  while [ '1' ]; do
 | 
			
		||||
    h=$(printf $domain | cut -d . -f $i-100)
 | 
			
		||||
    if [ -z "$h" ] ; then
 | 
			
		||||
    if [ -z "$h" ]; then
 | 
			
		||||
      #not valid
 | 
			
		||||
      return 1;
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    if ! _rest POST "Domain.Info" "login_token=$DP_Id,$DP_Key&format=json&domain=$h"; then
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    if printf "$response" | grep "Action completed successful" >/dev/null ; then
 | 
			
		||||
 | 
			
		||||
    if printf "$response" | grep "Action completed successful" >/dev/null; then
 | 
			
		||||
      _domain_id=$(printf "%s\n" "$response" | _egrep_o \"id\":\"[^\"]*\" | cut -d : -f 2 | tr -d \")
 | 
			
		||||
      _debug _domain_id "$_domain_id"
 | 
			
		||||
      if [ "$_domain_id" ] ; then
 | 
			
		||||
      if [ "$_domain_id" ]; then
 | 
			
		||||
        _sub_domain=$(printf $domain | cut -d . -f 1-$p)
 | 
			
		||||
        _debug _sub_domain $_sub_domain
 | 
			
		||||
        _domain=$h
 | 
			
		||||
@ -178,7 +167,6 @@ _get_root() {
 | 
			
		||||
  return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#Usage: method  URI  data
 | 
			
		||||
_rest() {
 | 
			
		||||
  m=$1
 | 
			
		||||
@ -186,22 +174,20 @@ _rest() {
 | 
			
		||||
  data="$3"
 | 
			
		||||
  _debug $ep
 | 
			
		||||
  url="$REST_API/$ep"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _debug url "$url"
 | 
			
		||||
  
 | 
			
		||||
  if [ "$data" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$data" ]; then
 | 
			
		||||
    _debug2 data "$data"
 | 
			
		||||
    response="$(_post $data "$url")"
 | 
			
		||||
  else
 | 
			
		||||
    response="$(_get "$url")"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if [ "$?" != "0" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$?" != "0" ]; then
 | 
			
		||||
    _err "error $ep"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug2 response "$response"
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,39 +6,37 @@
 | 
			
		||||
#
 | 
			
		||||
#GD_Secret="asdfsdfsfsdfsdfdfsdf"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
GD_Api="https://api.godaddy.com/v1"
 | 
			
		||||
 | 
			
		||||
########  Public functions #####################
 | 
			
		||||
 | 
			
		||||
#Usage: add  _acme-challenge.www.domain.com   "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
 | 
			
		||||
dns_gd_add(){
 | 
			
		||||
dns_gd_add() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
  txtvalue=$2
 | 
			
		||||
  
 | 
			
		||||
  if [ -z "$GD_Key" ] || [ -z "$GD_Secret" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ -z "$GD_Key" ] || [ -z "$GD_Secret" ]; then
 | 
			
		||||
    _err "You don't specify godaddy api key and secret yet."
 | 
			
		||||
    _err "Please create you key and try again."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  #save the api key and email to the account conf file.
 | 
			
		||||
  _saveaccountconf GD_Key "$GD_Key"
 | 
			
		||||
  _saveaccountconf GD_Secret "$GD_Secret"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _debug "First detect the root zone"
 | 
			
		||||
  if ! _get_root $fulldomain ; then
 | 
			
		||||
  if ! _get_root $fulldomain; then
 | 
			
		||||
    _err "invalid domain"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug _domain_id "$_domain_id"
 | 
			
		||||
  _debug _sub_domain "$_sub_domain"
 | 
			
		||||
  _debug _domain "$_domain"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _info "Adding record"
 | 
			
		||||
  if _gd_rest PUT "domains/$_domain/records/TXT/$_sub_domain"  "[{\"data\":\"$txtvalue\"}]"; then
 | 
			
		||||
    if [ "$response" = "{}" ] ; then
 | 
			
		||||
  if _gd_rest PUT "domains/$_domain/records/TXT/$_sub_domain" "[{\"data\":\"$txtvalue\"}]"; then
 | 
			
		||||
    if [ "$response" = "{}" ]; then
 | 
			
		||||
      _info "Added, sleeping 10 seconds"
 | 
			
		||||
      sleep 10
 | 
			
		||||
      #todo: check if the record takes effect
 | 
			
		||||
@ -50,20 +48,15 @@ dns_gd_add(){
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  _err "Add txt record error."
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#fulldomain
 | 
			
		||||
dns_gd_rm() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
####################  Private functions bellow ##################################
 | 
			
		||||
#_acme-challenge.www.domain.com
 | 
			
		||||
#returns
 | 
			
		||||
@ -74,18 +67,18 @@ _get_root() {
 | 
			
		||||
  domain=$1
 | 
			
		||||
  i=2
 | 
			
		||||
  p=1
 | 
			
		||||
  while [ '1' ] ; do
 | 
			
		||||
  while [ '1' ]; do
 | 
			
		||||
    h=$(printf $domain | cut -d . -f $i-100)
 | 
			
		||||
    if [ -z "$h" ] ; then
 | 
			
		||||
    if [ -z "$h" ]; then
 | 
			
		||||
      #not valid
 | 
			
		||||
      return 1;
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    if ! _gd_rest GET "domains/$h" ; then
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    if printf "$response" | grep '"code":"NOT_FOUND"' >/dev/null ; then
 | 
			
		||||
 | 
			
		||||
    if ! _gd_rest GET "domains/$h"; then
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if printf "$response" | grep '"code":"NOT_FOUND"' >/dev/null; then
 | 
			
		||||
      _debug "$h not found"
 | 
			
		||||
    else
 | 
			
		||||
      _sub_domain=$(printf $domain | cut -d . -f 1-$p)
 | 
			
		||||
@ -103,23 +96,21 @@ _gd_rest() {
 | 
			
		||||
  ep="$2"
 | 
			
		||||
  data="$3"
 | 
			
		||||
  _debug $ep
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _H1="Authorization: sso-key $GD_Key:$GD_Secret"
 | 
			
		||||
  _H2="Content-Type: application/json"
 | 
			
		||||
  
 | 
			
		||||
  if [ "$data" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$data" ]; then
 | 
			
		||||
    _debug data "$data"
 | 
			
		||||
    response="$(_post "$data" "$GD_Api/$ep" "" $m)"
 | 
			
		||||
  else
 | 
			
		||||
    response="$(_get "$GD_Api/$ep")"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if [ "$?" != "0" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$?" != "0" ]; then
 | 
			
		||||
    _err "error $ep"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug2 response "$response"
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -13,15 +13,15 @@ wiki="https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api"
 | 
			
		||||
dns_lexicon_add() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
  txtvalue=$2
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  domain=$(printf "$fulldomain" | cut -d . -f 2-999)
 | 
			
		||||
  
 | 
			
		||||
  if ! _exists $lexicon_cmd ; then
 | 
			
		||||
 | 
			
		||||
  if ! _exists $lexicon_cmd; then
 | 
			
		||||
    _err "Please install $lexicon_cmd first: $wiki"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if [ -z "$PROVIDER" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ -z "$PROVIDER" ]; then
 | 
			
		||||
    _err "Please define env PROVIDER first: $wiki"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
@ -29,34 +29,34 @@ dns_lexicon_add() {
 | 
			
		||||
  _savedomainconf PROVIDER "$PROVIDER"
 | 
			
		||||
  export PROVIDER
 | 
			
		||||
 | 
			
		||||
  Lx_name=$(echo LEXICON_${PROVIDER}_USERNAME |  tr [a-z] [A-Z])
 | 
			
		||||
  Lx_name=$(echo LEXICON_${PROVIDER}_USERNAME | tr [a-z] [A-Z])
 | 
			
		||||
  eval Lx_name_v="\$$Lx_name"
 | 
			
		||||
  _debug "$Lx_name" "$Lx_name_v"
 | 
			
		||||
  if [ "$Lx_name_v" ] ; then
 | 
			
		||||
  if [ "$Lx_name_v" ]; then
 | 
			
		||||
    _saveaccountconf $Lx_name "$Lx_name_v"
 | 
			
		||||
    export "$Lx_name"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  Lx_token=$(echo LEXICON_${PROVIDER}_TOKEN |  tr [a-z] [A-Z])
 | 
			
		||||
 | 
			
		||||
  Lx_token=$(echo LEXICON_${PROVIDER}_TOKEN | tr [a-z] [A-Z])
 | 
			
		||||
  eval Lx_token_v="\$$Lx_token"
 | 
			
		||||
  _debug "$Lx_token" "$Lx_token_v"
 | 
			
		||||
  if [ "$Lx_token_v" ] ; then
 | 
			
		||||
  if [ "$Lx_token_v" ]; then
 | 
			
		||||
    _saveaccountconf $Lx_token "$Lx_token_v"
 | 
			
		||||
    export "$Lx_token"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  Lx_password=$(echo LEXICON_${PROVIDER}_PASSWORD |  tr [a-z] [A-Z])
 | 
			
		||||
 | 
			
		||||
  Lx_password=$(echo LEXICON_${PROVIDER}_PASSWORD | tr [a-z] [A-Z])
 | 
			
		||||
  eval Lx_password_v="\$$Lx_password"
 | 
			
		||||
  _debug "$Lx_password" "$Lx_password_v"
 | 
			
		||||
  if [ "$Lx_password_v" ] ; then
 | 
			
		||||
  if [ "$Lx_password_v" ]; then
 | 
			
		||||
    _saveaccountconf $Lx_password "$Lx_password_v"
 | 
			
		||||
    export "$Lx_password"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  Lx_domaintoken=$(echo LEXICON_${PROVIDER}_DOMAINTOKEN |  tr [a-z] [A-Z])
 | 
			
		||||
 | 
			
		||||
  Lx_domaintoken=$(echo LEXICON_${PROVIDER}_DOMAINTOKEN | tr [a-z] [A-Z])
 | 
			
		||||
  eval Lx_domaintoken_v="\$$Lx_domaintoken"
 | 
			
		||||
  _debug "$Lx_domaintoken" "$Lx_domaintoken_v"
 | 
			
		||||
  if [ "$Lx_domaintoken_v" ] ; then
 | 
			
		||||
  if [ "$Lx_domaintoken_v" ]; then
 | 
			
		||||
    export "$Lx_domaintoken"
 | 
			
		||||
    _saveaccountconf $Lx_domaintoken "$Lx_domaintoken_v"
 | 
			
		||||
  fi
 | 
			
		||||
@ -65,14 +65,8 @@ dns_lexicon_add() {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#fulldomain
 | 
			
		||||
dns_lexicon_rm() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										66
									
								
								dnsapi/dns_lua.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										66
									
								
								dnsapi/dns_lua.sh
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@ -16,40 +16,40 @@ LUA_auth=$(printf $LUA_Email:$LUA_Key | _base64)
 | 
			
		||||
dns_lua_add() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
  txtvalue=$2
 | 
			
		||||
  
 | 
			
		||||
  if [ -z "$LUA_Key" ] || [ -z "$LUA_Email" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ -z "$LUA_Key" ] || [ -z "$LUA_Email" ]; then
 | 
			
		||||
    _err "You don't specify luadns api key and email yet."
 | 
			
		||||
    _err "Please create you key and try again."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  #save the api key and email to the account conf file.
 | 
			
		||||
  _saveaccountconf LUA_Key "$LUA_Key"
 | 
			
		||||
  _saveaccountconf LUA_Email "$LUA_Email"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _debug "First detect the root zone"
 | 
			
		||||
  if ! _get_root $fulldomain ; then
 | 
			
		||||
  if ! _get_root $fulldomain; then
 | 
			
		||||
    _err "invalid domain"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug _domain_id "$_domain_id"
 | 
			
		||||
  _debug _sub_domain "$_sub_domain"
 | 
			
		||||
  _debug _domain "$_domain"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _debug "Getting txt records"
 | 
			
		||||
  _LUA_rest GET "zones/${_domain_id}/records"
 | 
			
		||||
  
 | 
			
		||||
  if ! printf "$response" | grep \"id\": > /dev/null ; then
 | 
			
		||||
 | 
			
		||||
  if ! printf "$response" | grep \"id\": >/dev/null; then
 | 
			
		||||
    _err "Error"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  count=$(printf "%s\n" "$response" | _egrep_o \"name\":\"$fulldomain\" | wc -l)
 | 
			
		||||
  _debug count "$count"
 | 
			
		||||
  if [ "$count" = "0" ] ; then
 | 
			
		||||
  if [ "$count" = "0" ]; then
 | 
			
		||||
    _info "Adding record"
 | 
			
		||||
    if _LUA_rest POST "zones/$_domain_id/records"  "{\"type\":\"TXT\",\"name\":\"$fulldomain.\",\"content\":\"$txtvalue\",\"ttl\":120}"; then
 | 
			
		||||
      if printf -- "%s" "$response" | grep $fulldomain > /dev/null ; then
 | 
			
		||||
    if _LUA_rest POST "zones/$_domain_id/records" "{\"type\":\"TXT\",\"name\":\"$fulldomain.\",\"content\":\"$txtvalue\",\"ttl\":120}"; then
 | 
			
		||||
      if printf -- "%s" "$response" | grep $fulldomain >/dev/null; then
 | 
			
		||||
        _info "Added"
 | 
			
		||||
        #todo: check if the record takes effect
 | 
			
		||||
        return 0
 | 
			
		||||
@ -61,21 +61,20 @@ dns_lua_add() {
 | 
			
		||||
    _err "Add txt record error."
 | 
			
		||||
  else
 | 
			
		||||
    _info "Updating record"
 | 
			
		||||
    record_id=$(printf "%s\n" "$response" | _egrep_o \"id\":[^,]*,\"name\":\"$fulldomain.\",\"type\":\"TXT\" | cut -d: -f2|cut -d, -f1 )
 | 
			
		||||
    record_id=$(printf "%s\n" "$response" | _egrep_o \"id\":[^,]*,\"name\":\"$fulldomain.\",\"type\":\"TXT\" | cut -d: -f2 | cut -d, -f1)
 | 
			
		||||
    _debug "record_id" $record_id
 | 
			
		||||
    
 | 
			
		||||
    _LUA_rest PUT "zones/$_domain_id/records/$record_id"  "{\"id\":\"$record_id\",\"type\":\"TXT\",\"name\":\"$fulldomain.\",\"content\":\"$txtvalue\",\"zone_id\":\"$_domain_id\",\"ttl\":120}"
 | 
			
		||||
 | 
			
		||||
    _LUA_rest PUT "zones/$_domain_id/records/$record_id" "{\"id\":\"$record_id\",\"type\":\"TXT\",\"name\":\"$fulldomain.\",\"content\":\"$txtvalue\",\"zone_id\":\"$_domain_id\",\"ttl\":120}"
 | 
			
		||||
    if [ "$?" = "0" ]; then
 | 
			
		||||
      _info "Updated!"
 | 
			
		||||
      #todo: check if the record takes effect
 | 
			
		||||
      return 0;
 | 
			
		||||
      return 0
 | 
			
		||||
    fi
 | 
			
		||||
    _err "Update error"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#fulldomain
 | 
			
		||||
dns_lua_rm() {
 | 
			
		||||
@ -83,7 +82,6 @@ dns_lua_rm() {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
####################  Private functions bellow ##################################
 | 
			
		||||
#_acme-challenge.www.domain.com
 | 
			
		||||
#returns
 | 
			
		||||
@ -94,19 +92,19 @@ _get_root() {
 | 
			
		||||
  domain=$1
 | 
			
		||||
  i=2
 | 
			
		||||
  p=1
 | 
			
		||||
    if ! _LUA_rest GET "zones" ; then
 | 
			
		||||
  if ! _LUA_rest GET "zones"; then
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  while [ '1' ]; do
 | 
			
		||||
    h=$(printf $domain | cut -d . -f $i-100)
 | 
			
		||||
    if [ -z "$h" ]; then
 | 
			
		||||
      #not valid
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
	while [ '1' ] ; do
 | 
			
		||||
    h=$(printf $domain | cut -d . -f $i-100)
 | 
			
		||||
    if [ -z "$h" ] ; then
 | 
			
		||||
      #not valid
 | 
			
		||||
      return 1;
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    if printf $response | grep \"name\":\"$h\" >/dev/null ; then
 | 
			
		||||
 | 
			
		||||
    if printf $response | grep \"name\":\"$h\" >/dev/null; then
 | 
			
		||||
      _domain_id=$(printf "%s\n" "$response" | _egrep_o \"id\":[^,]*,\"name\":\"$h\" | cut -d : -f 2 | cut -d , -f 1)
 | 
			
		||||
      if [ "$_domain_id" ] ; then
 | 
			
		||||
      if [ "$_domain_id" ]; then
 | 
			
		||||
        _sub_domain=$(printf $domain | cut -d . -f 1-$p)
 | 
			
		||||
        _domain=$h
 | 
			
		||||
        return 0
 | 
			
		||||
@ -124,22 +122,20 @@ _LUA_rest() {
 | 
			
		||||
  ep="$2"
 | 
			
		||||
  data="$3"
 | 
			
		||||
  _debug $ep
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _H1="Accept: application/json"
 | 
			
		||||
  _H2="Authorization: Basic $LUA_auth"
 | 
			
		||||
  if [ "$data" ] ; then
 | 
			
		||||
  if [ "$data" ]; then
 | 
			
		||||
    _debug data "$data"
 | 
			
		||||
    response="$(_post "$data" "$LUA_Api/$ep" "" $m)"
 | 
			
		||||
  else
 | 
			
		||||
    response="$(_get "$LUA_Api/$ep")"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if [ "$?" != "0" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$?" != "0" ]; then
 | 
			
		||||
    _err "error $ep"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug2 response "$response"
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,8 +6,6 @@
 | 
			
		||||
#Which will be called by acme.sh to add the txt record to your api system.
 | 
			
		||||
#returns 0 means success, otherwise error.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
########  Public functions #####################
 | 
			
		||||
 | 
			
		||||
#Usage: dns_myapi_add   _acme-challenge.www.domain.com   "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
 | 
			
		||||
@ -15,21 +13,18 @@ dns_myapi_add() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
  txtvalue=$2
 | 
			
		||||
  _err "Not implemented!"
 | 
			
		||||
  return 1;
 | 
			
		||||
  return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#fulldomain
 | 
			
		||||
dns_myapi_rm() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
####################  Private functions bellow ##################################
 | 
			
		||||
_info() {
 | 
			
		||||
  if [ -z "$2" ] ; then
 | 
			
		||||
  if [ -z "$2" ]; then
 | 
			
		||||
    echo "[$(date)] $1"
 | 
			
		||||
  else
 | 
			
		||||
    echo "[$(date)] $1='$2'"
 | 
			
		||||
@ -42,7 +37,7 @@ _err() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_debug() {
 | 
			
		||||
  if [ -z "$DEBUG" ] ; then
 | 
			
		||||
  if [ -z "$DEBUG" ]; then
 | 
			
		||||
    return
 | 
			
		||||
  fi
 | 
			
		||||
  _err "$@"
 | 
			
		||||
@ -50,8 +45,8 @@ _debug() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_debug2() {
 | 
			
		||||
  if [ "$DEBUG" ] && [ "$DEBUG" -ge "2" ] ; then
 | 
			
		||||
  if [ "$DEBUG" ] && [ "$DEBUG" -ge "2" ]; then
 | 
			
		||||
    _debug "$@"
 | 
			
		||||
  fi
 | 
			
		||||
  return
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,5 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#Applcation Key
 | 
			
		||||
#OVH_AK="sdfsdfsdfljlbjkljlkjsdfoiwje"
 | 
			
		||||
#
 | 
			
		||||
@ -10,10 +9,8 @@
 | 
			
		||||
#Consumer Key
 | 
			
		||||
#OVH_CK="sdfsdfsdfsdfsdfdsf"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#OVH_END_POINT=ovh-eu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#'ovh-eu'
 | 
			
		||||
OVH_EU='https://eu.api.ovh.com/1.0'
 | 
			
		||||
 | 
			
		||||
@ -35,121 +32,116 @@ SYS_CA='https://ca.api.soyoustart.com/1.0'
 | 
			
		||||
#'runabove-ca'
 | 
			
		||||
RAV_CA='https://api.runabove.com/1.0'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
wiki="https://github.com/Neilpang/acme.sh/wiki/How-to-use-OVH-domain-api"
 | 
			
		||||
 | 
			
		||||
ovh_success="https://github.com/Neilpang/acme.sh/wiki/OVH-Success"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
_ovh_get_api() {
 | 
			
		||||
  _ogaep="$1"
 | 
			
		||||
 | 
			
		||||
  case "${_ogaep}" in
 | 
			
		||||
    
 | 
			
		||||
    ovh-eu|ovheu)
 | 
			
		||||
        printf "%s" $OVH_EU
 | 
			
		||||
        return
 | 
			
		||||
        ;;
 | 
			
		||||
    ovh-ca|ovhca)
 | 
			
		||||
        printf "%s" $OVH_CA
 | 
			
		||||
        return
 | 
			
		||||
        ;;
 | 
			
		||||
    kimsufi-eu|kimsufieu)
 | 
			
		||||
        printf "%s" $KSF_EU
 | 
			
		||||
        return
 | 
			
		||||
        ;;
 | 
			
		||||
    kimsufi-ca|kimsufica)
 | 
			
		||||
        printf "%s" $KSF_CA
 | 
			
		||||
        return
 | 
			
		||||
        ;;
 | 
			
		||||
    soyoustart-eu|soyoustarteu)
 | 
			
		||||
        printf "%s" $SYS_EU
 | 
			
		||||
        return
 | 
			
		||||
        ;;
 | 
			
		||||
    soyoustart-ca|soyoustartca)
 | 
			
		||||
        printf "%s" $SYS_CA
 | 
			
		||||
        return
 | 
			
		||||
        ;;      
 | 
			
		||||
    runabove-ca|runaboveca)
 | 
			
		||||
        printf "%s" $RAV_CA
 | 
			
		||||
        return
 | 
			
		||||
        ;;       
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    ovh-eu | ovheu)
 | 
			
		||||
      printf "%s" $OVH_EU
 | 
			
		||||
      return
 | 
			
		||||
      ;;
 | 
			
		||||
    ovh-ca | ovhca)
 | 
			
		||||
      printf "%s" $OVH_CA
 | 
			
		||||
      return
 | 
			
		||||
      ;;
 | 
			
		||||
    kimsufi-eu | kimsufieu)
 | 
			
		||||
      printf "%s" $KSF_EU
 | 
			
		||||
      return
 | 
			
		||||
      ;;
 | 
			
		||||
    kimsufi-ca | kimsufica)
 | 
			
		||||
      printf "%s" $KSF_CA
 | 
			
		||||
      return
 | 
			
		||||
      ;;
 | 
			
		||||
    soyoustart-eu | soyoustarteu)
 | 
			
		||||
      printf "%s" $SYS_EU
 | 
			
		||||
      return
 | 
			
		||||
      ;;
 | 
			
		||||
    soyoustart-ca | soyoustartca)
 | 
			
		||||
      printf "%s" $SYS_CA
 | 
			
		||||
      return
 | 
			
		||||
      ;;
 | 
			
		||||
    runabove-ca | runaboveca)
 | 
			
		||||
      printf "%s" $RAV_CA
 | 
			
		||||
      return
 | 
			
		||||
      ;;
 | 
			
		||||
 | 
			
		||||
    *)
 | 
			
		||||
        _err "Unknown parameter : $1"
 | 
			
		||||
        return 1
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
      _err "Unknown parameter : $1"
 | 
			
		||||
      return 1
 | 
			
		||||
      ;;
 | 
			
		||||
  esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
########  Public functions #####################
 | 
			
		||||
 | 
			
		||||
#Usage: add  _acme-challenge.www.domain.com   "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
 | 
			
		||||
dns_ovh_add(){
 | 
			
		||||
dns_ovh_add() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
  txtvalue=$2
 | 
			
		||||
  
 | 
			
		||||
  if [ -z "$OVH_AK" ] || [ -z "$OVH_AS" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ -z "$OVH_AK" ] || [ -z "$OVH_AS" ]; then
 | 
			
		||||
    _err "You don't specify OVH application key and application secret yet."
 | 
			
		||||
    _err "Please create you key and try again."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  #save the api key and email to the account conf file.
 | 
			
		||||
  _saveaccountconf OVH_AK "$OVH_AK"
 | 
			
		||||
  _saveaccountconf OVH_AS "$OVH_AS"
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
  if [ -z "$OVH_END_POINT" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ -z "$OVH_END_POINT" ]; then
 | 
			
		||||
    OVH_END_POINT="ovh-eu"
 | 
			
		||||
  fi
 | 
			
		||||
  _info "Using OVH endpoint: $OVH_END_POINT"
 | 
			
		||||
  if [ "$OVH_END_POINT" != "ovh-eu" ] ; then
 | 
			
		||||
  _saveaccountconf OVH_END_POINT "$OVH_END_POINT"
 | 
			
		||||
  if [ "$OVH_END_POINT" != "ovh-eu" ]; then
 | 
			
		||||
    _saveaccountconf OVH_END_POINT "$OVH_END_POINT"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  OVH_API="$(_ovh_get_api $OVH_END_POINT )"
 | 
			
		||||
 | 
			
		||||
  OVH_API="$(_ovh_get_api $OVH_END_POINT)"
 | 
			
		||||
  _debug OVH_API "$OVH_API"
 | 
			
		||||
 | 
			
		||||
  if [ -z "$OVH_CK" ] ; then
 | 
			
		||||
  if [ -z "$OVH_CK" ]; then
 | 
			
		||||
    _info "OVH consumer key is empty, Let's get one:"
 | 
			
		||||
    if ! _ovh_authentication ; then
 | 
			
		||||
    if ! _ovh_authentication; then
 | 
			
		||||
      _err "Can not get consumer key."
 | 
			
		||||
    fi
 | 
			
		||||
    #return and wait for retry.
 | 
			
		||||
    return 1;
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _info "Checking authentication"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  response="$(_ovh_rest GET "domain/")"
 | 
			
		||||
  if _contains "$response" "INVALID_CREDENTIAL" ; then
 | 
			
		||||
  if _contains "$response" "INVALID_CREDENTIAL"; then
 | 
			
		||||
    _err "The consumer key is invalid: $OVH_CK"
 | 
			
		||||
    _err "Please retry to create a new one."
 | 
			
		||||
    _clearaccountconf  OVH_CK
 | 
			
		||||
    _clearaccountconf OVH_CK
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _info "Consumer key is ok."
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _debug "First detect the root zone"
 | 
			
		||||
  if ! _get_root $fulldomain ; then
 | 
			
		||||
  if ! _get_root $fulldomain; then
 | 
			
		||||
    _err "invalid domain"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug _domain_id "$_domain_id"
 | 
			
		||||
  _debug _sub_domain "$_sub_domain"
 | 
			
		||||
  _debug _domain "$_domain"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _debug "Getting txt records"
 | 
			
		||||
  _ovh_rest GET "domain/zone/$_domain/record?fieldType=TXT&subDomain=$_sub_domain"
 | 
			
		||||
    
 | 
			
		||||
  if  _contains "$response" '\[\]' || _contains "$response" "This service does not exist" ; then
 | 
			
		||||
 | 
			
		||||
  if _contains "$response" '\[\]' || _contains "$response" "This service does not exist"; then
 | 
			
		||||
    _info "Adding record"
 | 
			
		||||
    if _ovh_rest POST "domain/zone/$_domain/record"  "{\"fieldType\":\"TXT\",\"subDomain\":\"$_sub_domain\",\"target\":\"$txtvalue\",\"ttl\":60}"; then
 | 
			
		||||
      if _contains "$response" "$txtvalue" ; then
 | 
			
		||||
    if _ovh_rest POST "domain/zone/$_domain/record" "{\"fieldType\":\"TXT\",\"subDomain\":\"$_sub_domain\",\"target\":\"$txtvalue\",\"ttl\":60}"; then
 | 
			
		||||
      if _contains "$response" "$txtvalue"; then
 | 
			
		||||
        _ovh_rest POST "domain/zone/$_domain/refresh"
 | 
			
		||||
        _debug "Refresh:$response"
 | 
			
		||||
        _info "Added, sleeping 10 seconds"
 | 
			
		||||
@ -161,27 +153,26 @@ dns_ovh_add(){
 | 
			
		||||
  else
 | 
			
		||||
    _info "Updating record"
 | 
			
		||||
    record_id=$(printf "%s" "$response" | tr -d "[]" | cut -d , -f 1)
 | 
			
		||||
    if [ -z "$record_id" ] ; then
 | 
			
		||||
    if [ -z "$record_id" ]; then
 | 
			
		||||
      _err "Can not get record id."
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
    _debug "record_id" $record_id
 | 
			
		||||
 | 
			
		||||
    if _ovh_rest PUT "domain/zone/$_domain/record/$record_id"  "{\"target\":\"$txtvalue\",\"subDomain\":\"$_sub_domain\",\"ttl\":60}" ; then
 | 
			
		||||
      if _contains "$response" "null" ; then
 | 
			
		||||
    if _ovh_rest PUT "domain/zone/$_domain/record/$record_id" "{\"target\":\"$txtvalue\",\"subDomain\":\"$_sub_domain\",\"ttl\":60}"; then
 | 
			
		||||
      if _contains "$response" "null"; then
 | 
			
		||||
        _ovh_rest POST "domain/zone/$_domain/refresh"
 | 
			
		||||
        _debug "Refresh:$response"
 | 
			
		||||
        _info "Updated, sleeping 10 seconds"
 | 
			
		||||
        sleep 10
 | 
			
		||||
        return 0;
 | 
			
		||||
        return 0
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
    _err "Update error"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#fulldomain
 | 
			
		||||
dns_ovh_rm() {
 | 
			
		||||
@ -189,45 +180,43 @@ dns_ovh_rm() {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
####################  Private functions bellow ##################################
 | 
			
		||||
 | 
			
		||||
_ovh_authentication() {
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _H1="X-Ovh-Application: $OVH_AK"
 | 
			
		||||
  _H2="Content-type: application/json"
 | 
			
		||||
  _H3=""
 | 
			
		||||
  _H4=""
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _ovhdata='{"accessRules": [{"method": "GET","path": "/*"},{"method": "POST","path": "/*"},{"method": "PUT","path": "/*"},{"method": "DELETE","path": "/*"}],"redirection":"'$ovh_success'"}'
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  response="$(_post "$_ovhdata" "$OVH_API/auth/credential")"
 | 
			
		||||
  _debug3 response "$response"
 | 
			
		||||
  validationUrl="$(echo "$response" | _egrep_o "validationUrl\":\"[^\"]*\"" | _egrep_o "http.*\"" | tr -d '"')"
 | 
			
		||||
  if [ -z "$validationUrl" ] ; then
 | 
			
		||||
  if [ -z "$validationUrl" ]; then
 | 
			
		||||
    _err "Unable to get validationUrl"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug validationUrl "$validationUrl"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  consumerKey="$(echo "$response" | _egrep_o "consumerKey\":\"[^\"]*\"" | cut -d : -f 2 | tr -d '"')"
 | 
			
		||||
  if [ -z "$consumerKey" ] ; then
 | 
			
		||||
  if [ -z "$consumerKey" ]; then
 | 
			
		||||
    _err "Unable to get consumerKey"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug consumerKey "$consumerKey"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  OVH_CK="$consumerKey"
 | 
			
		||||
  _saveaccountconf OVH_CK "$OVH_CK"
 | 
			
		||||
  
 | 
			
		||||
  _info "Please open this link to do authentication: $(__green "$validationUrl" )"
 | 
			
		||||
 | 
			
		||||
  _info "Here is a guide for you: $(__green "$wiki" )"
 | 
			
		||||
  _info "Please open this link to do authentication: $(__green "$validationUrl")"
 | 
			
		||||
 | 
			
		||||
  _info "Here is a guide for you: $(__green "$wiki")"
 | 
			
		||||
  _info "Please retry after the authentication is done."
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#_acme-challenge.www.domain.com
 | 
			
		||||
#returns
 | 
			
		||||
# _sub_domain=_acme-challenge.www
 | 
			
		||||
@ -237,18 +226,18 @@ _get_root() {
 | 
			
		||||
  domain=$1
 | 
			
		||||
  i=2
 | 
			
		||||
  p=1
 | 
			
		||||
  while [ '1' ] ; do
 | 
			
		||||
  while [ '1' ]; do
 | 
			
		||||
    h=$(printf $domain | cut -d . -f $i-100)
 | 
			
		||||
    if [ -z "$h" ] ; then
 | 
			
		||||
    if [ -z "$h" ]; then
 | 
			
		||||
      #not valid
 | 
			
		||||
      return 1;
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    if ! _ovh_rest GET "domain/zone/$h" ; then
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
    
 | 
			
		||||
    if ! _contains "$response" "This service does not exist" >/dev/null ; then
 | 
			
		||||
 | 
			
		||||
    if ! _ovh_rest GET "domain/zone/$h"; then
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if ! _contains "$response" "This service does not exist" >/dev/null; then
 | 
			
		||||
      _sub_domain=$(printf $domain | cut -d . -f 1-$p)
 | 
			
		||||
      _domain=$h
 | 
			
		||||
      return 0
 | 
			
		||||
@ -273,8 +262,7 @@ _ovh_rest() {
 | 
			
		||||
  ep="$2"
 | 
			
		||||
  data="$3"
 | 
			
		||||
  _debug $ep
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _ovh_url="$OVH_API/$ep"
 | 
			
		||||
  _debug2 _ovh_url "$_ovh_url"
 | 
			
		||||
  _ovh_t="$(_ovh_timestamp)"
 | 
			
		||||
@ -283,7 +271,6 @@ _ovh_rest() {
 | 
			
		||||
  _debug _ovh_p "$_ovh_p"
 | 
			
		||||
  _ovh_hex="$(printf "%s" "$_ovh_p" | _digest sha1 hex)"
 | 
			
		||||
  _debug2 _ovh_hex "$_ovh_hex"
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
  _H1="X-Ovh-Application: $OVH_AK"
 | 
			
		||||
  _H2="X-Ovh-Signature: \$1\$$_ovh_hex"
 | 
			
		||||
@ -291,19 +278,17 @@ _ovh_rest() {
 | 
			
		||||
  _H3="X-Ovh-Timestamp: $_ovh_t"
 | 
			
		||||
  _H4="X-Ovh-Consumer: $OVH_CK"
 | 
			
		||||
  _H5="Content-Type: application/json;charset=utf-8"
 | 
			
		||||
  if [ "$data" ] || [ "$m" = "POST" ] || [ "$m" = "PUT" ] ; then
 | 
			
		||||
  if [ "$data" ] || [ "$m" = "POST" ] || [ "$m" = "PUT" ]; then
 | 
			
		||||
    _debug data "$data"
 | 
			
		||||
    response="$(_post "$data" "$_ovh_url" "" $m)"
 | 
			
		||||
  else
 | 
			
		||||
    response="$(_get "$_ovh_url")"
 | 
			
		||||
  fi
 | 
			
		||||
  
 | 
			
		||||
  if [ "$?" != "0" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$?" != "0" ]; then
 | 
			
		||||
    _err "error $ep"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug2 response "$response"
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -16,25 +16,25 @@ dns_pdns_add() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
  txtvalue=$2
 | 
			
		||||
 | 
			
		||||
  if [ -z "$PDNS_Url" ] ; then
 | 
			
		||||
  if [ -z "$PDNS_Url" ]; then
 | 
			
		||||
    _err "You don't specify PowerDNS address."
 | 
			
		||||
    _err "Please set PDNS_Url and try again."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -z "$PDNS_ServerId" ] ; then
 | 
			
		||||
  if [ -z "$PDNS_ServerId" ]; then
 | 
			
		||||
    _err "You don't specify PowerDNS server id."
 | 
			
		||||
    _err "Please set you PDNS_ServerId and try again."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -z "$PDNS_Token" ] ; then
 | 
			
		||||
  if [ -z "$PDNS_Token" ]; then
 | 
			
		||||
    _err "You don't specify PowerDNS token."
 | 
			
		||||
    _err "Please create you PDNS_Token and try again."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ -z "$PDNS_Ttl" ] ; then
 | 
			
		||||
  if [ -z "$PDNS_Ttl" ]; then
 | 
			
		||||
    PDNS_Ttl=$DEFAULT_PDNS_TTL
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
@ -42,44 +42,42 @@ dns_pdns_add() {
 | 
			
		||||
  _saveaccountconf PDNS_Url "$PDNS_Url"
 | 
			
		||||
  _saveaccountconf PDNS_ServerId "$PDNS_ServerId"
 | 
			
		||||
  _saveaccountconf PDNS_Token "$PDNS_Token"
 | 
			
		||||
  
 | 
			
		||||
  if [ "$PDNS_Ttl" != "$DEFAULT_PDNS_TTL" ] ; then
 | 
			
		||||
 | 
			
		||||
  if [ "$PDNS_Ttl" != "$DEFAULT_PDNS_TTL" ]; then
 | 
			
		||||
    _saveaccountconf PDNS_Ttl "$PDNS_Ttl"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  _debug "First detect the root zone"
 | 
			
		||||
  if ! _get_root $fulldomain ; then
 | 
			
		||||
  if ! _get_root $fulldomain; then
 | 
			
		||||
    _err "invalid domain"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug _domain "$_domain"
 | 
			
		||||
 | 
			
		||||
  if ! set_record "$_domain" "$fulldomain" "$txtvalue" ; then
 | 
			
		||||
  if ! set_record "$_domain" "$fulldomain" "$txtvalue"; then
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#fulldomain
 | 
			
		||||
dns_pdns_rm() {
 | 
			
		||||
  fulldomain=$1
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
set_record() {
 | 
			
		||||
  _info "Adding record"
 | 
			
		||||
  root=$1
 | 
			
		||||
  full=$2
 | 
			
		||||
  txtvalue=$3
 | 
			
		||||
 | 
			
		||||
  if ! _pdns_rest "PATCH" "/api/v1/servers/$PDNS_ServerId/zones/$root." "{\"rrsets\": [{\"name\": \"$full.\", \"changetype\": \"REPLACE\", \"type\": \"TXT\", \"ttl\": $PDNS_Ttl, \"records\": [{\"name\": \"$full.\", \"type\": \"TXT\", \"content\": \"\\\"$txtvalue\\\"\", \"disabled\": false, \"ttl\": $PDNS_Ttl}]}]}" ; then
 | 
			
		||||
  if ! _pdns_rest "PATCH" "/api/v1/servers/$PDNS_ServerId/zones/$root." "{\"rrsets\": [{\"name\": \"$full.\", \"changetype\": \"REPLACE\", \"type\": \"TXT\", \"ttl\": $PDNS_Ttl, \"records\": [{\"name\": \"$full.\", \"type\": \"TXT\", \"content\": \"\\\"$txtvalue\\\"\", \"disabled\": false, \"ttl\": $PDNS_Ttl}]}]}"; then
 | 
			
		||||
    _err "Set txt record error."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  if ! _pdns_rest "PUT" "/api/v1/servers/$PDNS_ServerId/zones/$root./notify" ; then
 | 
			
		||||
  if ! _pdns_rest "PUT" "/api/v1/servers/$PDNS_ServerId/zones/$root./notify"; then
 | 
			
		||||
    _err "Notify servers error."
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
@ -95,17 +93,17 @@ _get_root() {
 | 
			
		||||
  i=1
 | 
			
		||||
  p=1
 | 
			
		||||
 | 
			
		||||
  if _pdns_rest "GET" "/api/v1/servers/$PDNS_ServerId/zones" ; then
 | 
			
		||||
  if _pdns_rest "GET" "/api/v1/servers/$PDNS_ServerId/zones"; then
 | 
			
		||||
    _zones_response=$response
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  while [ '1' ] ; do
 | 
			
		||||
  while [ '1' ]; do
 | 
			
		||||
    h=$(printf $domain | cut -d . -f $i-100)
 | 
			
		||||
    if [ -z "$h" ] ; then
 | 
			
		||||
    if [ -z "$h" ]; then
 | 
			
		||||
      return 1
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if printf "$_zones_response" | grep "\"name\": \"$h.\"" >/dev/null ; then
 | 
			
		||||
    if printf "$_zones_response" | grep "\"name\": \"$h.\"" >/dev/null; then
 | 
			
		||||
      _domain=$h
 | 
			
		||||
      return 0
 | 
			
		||||
    fi
 | 
			
		||||
@ -124,18 +122,18 @@ _pdns_rest() {
 | 
			
		||||
 | 
			
		||||
  _H1="X-API-Key: $PDNS_Token"
 | 
			
		||||
 | 
			
		||||
  if [ ! "$method" = "GET" ] ; then
 | 
			
		||||
  if [ ! "$method" = "GET" ]; then
 | 
			
		||||
    _debug data "$data"
 | 
			
		||||
    response="$(_post "$data" "$PDNS_Url$ep" "" "$method")"
 | 
			
		||||
  else
 | 
			
		||||
    response="$(_get "$PDNS_Url$ep")"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if [ "$?" != "0" ] ; then
 | 
			
		||||
  if [ "$?" != "0" ]; then
 | 
			
		||||
    _err "error $ep"
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
  _debug2 response "$response"
 | 
			
		||||
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user