From 3d98c9285f800d5094dbeda3009ecb478b299df1 Mon Sep 17 00:00:00 2001 From: Gianluca Giacometti <52405+gianlucagiacometti@users.noreply.github.com> Date: Fri, 27 Dec 2024 17:58:53 +0100 Subject: [PATCH] Create dns_fmdns.sh --- dnsapi/dns_fmdns.sh | 129 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 dnsapi/dns_fmdns.sh diff --git a/dnsapi/dns_fmdns.sh b/dnsapi/dns_fmdns.sh new file mode 100644 index 0000000000..674072297b --- /dev/null +++ b/dnsapi/dns_fmdns.sh @@ -0,0 +1,129 @@ +#!/usr/bin/env sh + +# +# facileManager (https://github.com/WillyXJ/facileManager) hook script for acme.sh +# +# Author: Gianluca Giacometti +# Git repo and usage: https://github.com/gianlucagiacometti/proxmox-acme-facilemanager +# + +# Values to export: +# export FMDNS_API_ENDPOINT='https://my.fmdnsapi.endpoint' +# export FMDNS_API_TOKEN='xxxxx' +# export FMDNS_API_DOMAIN_ID='xxxxx' + +# IMPORTANT NOTE: set the validation delay at 360s since facileManager updates dns zones usually every 300s + +######## Public functions ##################### + +dns_fmdns_add() { + fulldomain="${1}" + txtvalue="${2}" + + FMDNS_API_TOKEN="${FMDNS_API_TOKEN:-$(_readaccountconf_mutable FMDNS_API_TOKEN)}" + # Check if API token exists + if [ -z "$FMDNS_API_TOKEN" ]; then + FMDNS_API_TOKEN="" + _err "You did not specify facileManager API token." + _err "Please export FMDNS_API_TOKEN and try again." + return 1 + fi + + FMDNS_API_ENDPOINT="${FMDNS_API_ENDPOINT:-$(_readaccountconf_mutable FMDNS_API_ENDPOINT)}" + # Check if API endpoint exists + if [ -z "$FMDNS_API_ENDPOINT" ]; then + FMDNS_API_ENDPOINT="" + _err "You did not specify facileManager API endpoint." + _err "Please export FMDNS_API_ENDPOINT and try again." + return 1 + fi + + FMDNS_API_DOMAIN_ID="${FMDNS_API_DOMAIN_ID:-$(_readaccountconf_mutable FMDNS_API_DOMAIN_ID)}" + # Check if API domain id exists + if [ -z "$FMDNS_API_DOMAIN_ID" ]; then + FMDNS_API_DOMAIN_ID="" + _err "You did not specify facileManager API domain id." + _err "Please export FMDNS_API_DOMAIN_ID and try again." + return 1 + fi + + _debug "Calling: _fmDnsApi_addRecord() '${fulldomain}' '${txtvalue}'" + _fmDnsApi_addRecord + return $? +} + +dns_fmdns_rm() { + fulldomain="${1}" + txtvalue="${2}" + + FMDNS_API_TOKEN="${FMDNS_API_TOKEN:-$(_readaccountconf_mutable FMDNS_API_TOKEN)}" + # Check if API token exists + if [ -z "$FMDNS_API_TOKEN" ]; then + FMDNS_API_TOKEN="" + _err "You did not specify facileManager API token." + _err "Please export FMDNS_API_TOKEN and try again." + return 1 + fi + + FMDNS_API_ENDPOINT="${FMDNS_API_ENDPOINT:-$(_readaccountconf_mutable FMDNS_API_ENDPOINT)}" + # Check if API endpoint exists + if [ -z "$FMDNS_API_ENDPOINT" ]; then + FMDNS_API_ENDPOINT="" + _err "You did not specify facileManager API endpoint." + _err "Please export FMDNS_API_ENDPOINT and try again." + return 1 + fi + + FMDNS_API_DOMAIN_ID="${FMDNS_API_DOMAIN_ID:-$(_readaccountconf_mutable FMDNS_API_DOMAIN_ID)}" + # Check if API domain id exists + if [ -z "$FMDNS_API_DOMAIN_ID" ]; then + FMDNS_API_DOMAIN_ID="" + _err "You did not specify facileManager API domain id." + _err "Please export FMDNS_API_DOMAIN_ID and try again." + return 1 + fi + + _debug "Calling: _fmDnsApi_removeRecord() '${fulldomain}' '${txtvalue}'" + _fmDnsApi_removeRecord + return $? +} + +#################### Private functions below ################################## + +_fmDnsApi_addRecord() { + _info "Connecting to ${FMDNS_API_ENDPOINT}" + _info "Adding record to zone" + curData="{\"fmAuthToken\":\"${FMDNS_API_TOKEN}\",\"id\":\"${FMDNS_API_DOMAIN_ID}\",\"action\":\"add\",\"name\":\"${fulldomain}\",\"value\":\"${txtvalue}\",\"type\":\"TXT\",\"ttl\":\"5\",\"autoupdate\":\"yes\"}" + curResult="$(_post "${curData}" "${FMDNS_API_ENDPOINT}")" + _info "API result: "${curResult}"" + _debug "Calling facileManager API: '${curData}' '${FMDNS_API_ENDPOINT}'" + _debug "Result of zone add: '$curResult'" + if [ "${curResult}" != "Success" ]; then + if [ -z "${curResult}" ]; then + _err "Empty response" + else + _err "${curResult}" + fi + return 1 + fi + return 0 +} + +_fmDnsApi_removeRecord() { + _info "Connecting to ${FMDNS_API_ENDPOINT}" + _info "Removing record from zone" + curData="{\"fmAuthToken\":\"${FMDNS_API_TOKEN}\",\"id\":\"${FMDNS_API_DOMAIN_ID}\",\"action\":\"delete\",\"name\":\"${fulldomain}\",\"type\":\"TXT\",\"ttl\":\"5\",\"autoupdate\":\"yes\"}" + curResult="$(_post "${curData}" "${FMDNS_API_ENDPOINT}")" + _info "API result: "${curResult}"" + _debug "Calling facileManager API: '${curData}' '${FMDNS_API_ENDPOINT}'" + _debug "Result of zone delete: '$curResult'" + if [ "${curResult}" != "Success" ]; then + if [ -z "${curResult}" ]; then + _err "Empty response" + else + _err "${curResult}" + fi + return 1 + fi + return 0 +}