Browse Source

beta ovh_domain set CNAME

main
pvincent 7 months ago
parent
commit
255adb34e6
  1. 9
      lib/functions.sh
  2. 8
      lib/install.sh
  3. 68
      lib/registrar/ovh-domain.sh
  4. 24
      scripts/miaou

9
lib/functions.sh

@ -6,11 +6,16 @@ YELLOW='\033[0;33m'
PURPLE='\033[0;35m' PURPLE='\033[0;35m'
DARK='\e[100m' DARK='\e[100m'
NC='\033[0m' # No Color NC='\033[0m' # No Color
TO_BE_DEFINED="TO BE DEFINED"
# BOLD='\033[1m' # BOLD='\033[1m'
# DIM='\e[2m\e[0;90m' # DIM='\e[2m\e[0;90m'
TO_BE_DEFINED="TO BE DEFINED"
FDN_DOMAINNAME=fdn.fr
FDN_NAMESERVER="ns0.$FDN_DOMAINNAME"
FDN_RESOLVER=80.67.169.12
: $FDN_DOMAINNAME $FDN_NAMESERVER $FDN_RESOLVER
function echo() { function echo() {
[[ -n ${PREFIX:-} ]] && printf "${DARK}%25.25s${NC} " "${PREFIX}" [[ -n ${PREFIX:-} ]] && printf "${DARK}%25.25s${NC} " "${PREFIX}"
builtin echo "$@" builtin echo "$@"

8
lib/install.sh

@ -1,14 +1,10 @@
#!/bin/bash #!/bin/bash
MIAOU_BASEDIR=$(readlink -f "$(dirname "$0")/..") MIAOU_BASEDIR=$(readlink -f "$(dirname "$0")/..")
readonly MIAOU_BASEDIR
# shellcheck source=/dev/null # shellcheck source=/dev/null
. "$MIAOU_BASEDIR/lib/functions.sh" . "$MIAOU_BASEDIR/lib/functions.sh"
FDN_DOMAINNAME=fdn.fr
FDN_RESOLVER=80.67.169.12
readonly MIAOU_BASEDIR FDN_DOMAINNAME FDN_RESOLVER
miaou_init miaou_init
EXPANDED_CONF="$MIAOU_CONFIGDIR/miaou.expanded.yaml" EXPANDED_CONF="$MIAOU_CONFIGDIR/miaou.expanded.yaml"

68
lib/registrar/ovh-domain.sh

@ -4,10 +4,10 @@
# https://eu.api.ovh.com/createToken/?GET=/domain*&POST=/domain*&PUT=/domain*&DELETE=/domain* # https://eu.api.ovh.com/createToken/?GET=/domain*&POST=/domain*&PUT=/domain*&DELETE=/domain*
function usage { function usage {
echo 'usage: <ACTION: list|get|set> <DOMAIN> [CNAME] [destination]'
echo 'usage: <ACTION: list|get|set> <DOMAIN> [CNAME] [TARGET]'
echo ' - list <DOMAIN>' echo ' - list <DOMAIN>'
echo ' - get <DOMAIN> <CNAME>' echo ' - get <DOMAIN> <CNAME>'
echo ' - set <DOMAIN> <CNAME> <DESTINATION>'
echo ' - set <DOMAIN> <CNAME> <TARGET>'
exit 1 exit 1
} }
function set_base { function set_base {
@ -33,6 +33,7 @@ function build_url_list_records {
} }
function list_records { function list_records {
zone="$1" zone="$1"
fieldType="${2:-}" fieldType="${2:-}"
subDomain="${3:-}" subDomain="${3:-}"
@ -56,7 +57,7 @@ function list_records {
echo "" echo ""
echo "output=$output" echo "output=$output"
echo ""
echo "ERROR"
exit 1 exit 1
# echo "$output" | yq .[] # values of array # echo "$output" | yq .[] # values of array
@ -82,6 +83,47 @@ function get_record {
"$query" | yq -o=props "$query" | yq -o=props
} }
function set_record {
zone="$1"
method="POST"
query="${BASE_URL}/domain/zone/$zone/record"
body="{\"fieldType\":\"CNAME\",\"subDomain\":\"$CNAME\",\"target\":\"$TARGET\",\"ttl\":0}"
tstamp=$(date +%s)
sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1)
signature="\$1\$$sha"
curl -s \
-X $method \
-H "Content-type: application/json" \
-H 'Accept: application/json' \
-H "X-Ovh-Application: $AK" \
-H "X-Ovh-Consumer: $CK" \
-H "X-Ovh-Signature: $signature" \
-H "X-Ovh-Timestamp: $tstamp" \
--data-raw "$body" \
"$query" | yq -o=props
}
function refresh {
zone="$1"
method="POST"
query="${BASE_URL}/domain/zone/$zone/refresh"
body=""
tstamp=$(date +%s)
sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1)
signature="\$1\$$sha"
curl -s \
-X $method \
-H "Content-type: application/json" \
-H 'Accept: application/json' \
-H "X-Ovh-Application: $AK" \
-H "X-Ovh-Consumer: $CK" \
-H "X-Ovh-Signature: $signature" \
-H "X-Ovh-Timestamp: $tstamp" \
"$query" | yq -o=props
}
function action_list { function action_list {
for record_id in $(list_records "$DOMAIN" CNAME "$CNAME"); do for record_id in $(list_records "$DOMAIN" CNAME "$CNAME"); do
get_record "$DOMAIN" "$record_id" get_record "$DOMAIN" "$record_id"
@ -90,12 +132,28 @@ function action_list {
function action_get { function action_get {
local record_id local record_id
#TODO: to delete after testing...
list_records "$DOMAIN" CNAME "$CNAME"
record_id=$(list_records "$DOMAIN" CNAME "$CNAME") record_id=$(list_records "$DOMAIN" CNAME "$CNAME")
get_record "$DOMAIN" "$record_id" get_record "$DOMAIN" "$record_id"
} }
function append_dot_target {
local old_target=$TARGET
[[ $TARGET == *\. ]] || TARGET="$TARGET."
[[ $old_target != "$TARGET" ]] && echo "TARGET has been suffixed with '.' (the dot symbol)!"
}
function action_set { function action_set {
echo set_record "$DOMAIN" "$CNAME" "$DESTINATION"
append_dot_target
echo set_record "$DOMAIN" "$CNAME" "$TARGET"
set_record "$DOMAIN" "$CNAME" "$TARGET"
echo refresh "$DOMAIN"
refresh "$DOMAIN"
} }
##----------- ##-----------
@ -109,7 +167,7 @@ function action_set {
ACTION="$1" ACTION="$1"
DOMAIN="$2" DOMAIN="$2"
CNAME="${3:-}" CNAME="${3:-}"
DESTINATION="${4:-}"
TARGET="${4:-}"
set_base set_base

24
scripts/miaou

@ -186,8 +186,13 @@ function build_dmz_certbot {
#TODO: check public ip available #TODO: check public ip available
my_ip=$(dig +short myip.opendns.com @resolver1.opendns.com) my_ip=$(dig +short myip.opendns.com @resolver1.opendns.com)
if hostname -I | grep -q ${my_ip}; then
public_hostname=$(hostname -f)
public_ip=$(dig +short A "${public_hostname}" "@${FDN_NAMESERVER}")
if hostname -I | grep -q "$my_ip"; then
echo "My PUBLIC IP address is: <$my_ip>" echo "My PUBLIC IP address is: <$my_ip>"
echo "My PUBLIC hostname is: <$public_hostname>"
[[ $my_ip != "$public_ip" ]] && echoerr "This machine provides wrong public IP: <$public_ip>" && exit 101
else else
echoerr "This machine can not respond to its PUBLIC IP address: <$my_ip>" #FIXME: && exit 100 echoerr "This machine can not respond to its PUBLIC IP address: <$my_ip>" #FIXME: && exit 100
fi fi
@ -201,11 +206,12 @@ function build_dmz_certbot {
domain=${item[0]} domain=${item[0]}
fqdn=${item[1]} fqdn=${item[1]}
subDomain=${fqdn%.$domain}
subDomain=${fqdn%".${domain}"}
echo "TODO: fqdn=${fqdn}, domain=${domain}"
local server_ip public_hostname
server_ip=$(dig +short A "$fqdn")
echo "TODO: fqdn=$fqdn, domain=$domain"
local server_ip
server_ip=$(dig +short A $fqdn)
if [[ $server_ip == "$my_ip" ]]; then if [[ $server_ip == "$my_ip" ]]; then
echo "CNAME <$fqdn> approved successfuly!" echo "CNAME <$fqdn> approved successfuly!"
else else
@ -214,11 +220,13 @@ function build_dmz_certbot {
server_name=$(dig +short CNAME "$fqdn") server_name=$(dig +short CNAME "$fqdn")
echowarn "CNAME <$fqdn> points to another server: <$server_name>" echowarn "CNAME <$fqdn> points to another server: <$server_name>"
else else
echo TODO:REGISTRAR needed
"$MIAOU_BASEDIR"/lib/registrar/ovh-domain.sh "$domain" "$subDomain"
echo registering "$domain" "$subDomain" to ... "$public_hostname"
"$MIAOU_BASEDIR"/lib/registrar/ovh-domain.sh set "$domain" "$subDomain" "$public_hostname"
echo "TODO: TEST with dig, wait for reply in 4s then certbot!!!"
exit 5
fi fi
fi fi
done done
else else
echo "bypass certbot certificate generation due to target=<$target>" echo "bypass certbot certificate generation due to target=<$target>"

Loading…
Cancel
Save