|
@@ -132,47 +132,49 @@ _spaceship_init() {
|
|
|
_get_root() {
|
|
|
domain="$1"
|
|
|
|
|
|
- # Check if user manually specified root domain
|
|
|
+ # Check manual override
|
|
|
SPACESHIP_ROOT_DOMAIN="${SPACESHIP_ROOT_DOMAIN:-$(_readaccountconf_mutable SPACESHIP_ROOT_DOMAIN)}"
|
|
|
if [ -n "$SPACESHIP_ROOT_DOMAIN" ]; then
|
|
|
_domain="$SPACESHIP_ROOT_DOMAIN"
|
|
|
_debug "Using manually specified or saved root domain: $_domain"
|
|
|
- # Ensure it's saved (in case it was read from config but not saved previously)
|
|
|
_saveaccountconf_mutable SPACESHIP_ROOT_DOMAIN "$SPACESHIP_ROOT_DOMAIN"
|
|
|
return 0
|
|
|
fi
|
|
|
|
|
|
- # Split domain into parts and try from back to front
|
|
|
- _debug "Detecting root zone for $domain from back to front"
|
|
|
- _parts=$(echo "$domain" | tr '.' '\n' | wc -l)
|
|
|
- if [ "$_parts" -lt 2 ]; then
|
|
|
- _err "Invalid domain format for $domain"
|
|
|
- return 1
|
|
|
- fi
|
|
|
+ _debug "Detecting root zone for '$domain'"
|
|
|
|
|
|
- # Start with the last 2 parts (e.g., example.com) and move forward
|
|
|
i=2
|
|
|
- max_attempts=$((_parts + 1))
|
|
|
- while [ $i -le $max_attempts ]; do
|
|
|
- _cutdomain=$(echo "$domain" | rev | cut -d . -f 1-$i | rev)
|
|
|
+ p=1
|
|
|
+ while true; do
|
|
|
+ _cutdomain=$(printf "%s" "$domain" | cut -d . -f "$i"-100)
|
|
|
+
|
|
|
+ _debug "Attempt i=$i: Checking if '$_cutdomain' is root zone (cut ret=$?)"
|
|
|
+
|
|
|
if [ -z "$_cutdomain" ]; then
|
|
|
- _debug "Reached end of domain parts."
|
|
|
+ _debug "Cut resulted in empty string, root zone not found."
|
|
|
break
|
|
|
fi
|
|
|
|
|
|
- _debug "Checking if $_cutdomain is root zone"
|
|
|
+ # Call the API to check if this _cutdomain is a manageable zone
|
|
|
if _spaceship_api_request "GET" "$SPACESHIP_API_BASE/dns/records/$_cutdomain?take=1&skip=0"; then
|
|
|
+ # API call succeeded (HTTP 200 OK for GET /dns/records)
|
|
|
_domain="$_cutdomain"
|
|
|
- _debug "Root zone found: $_domain"
|
|
|
- # Save the detected root domain to configuration for future use
|
|
|
+ _debug "Root zone found: '$_domain'"
|
|
|
+
|
|
|
+ # Save the detected root domain
|
|
|
_saveaccountconf_mutable SPACESHIP_ROOT_DOMAIN "$_domain"
|
|
|
- _info "Root domain $_domain saved to configuration for future use."
|
|
|
+ _info "Root domain '$_domain' saved to configuration for future use."
|
|
|
+
|
|
|
return 0
|
|
|
fi
|
|
|
+
|
|
|
+ _debug "API check failed for '$_cutdomain'. Continuing search."
|
|
|
+
|
|
|
+ p=$i
|
|
|
i=$((i + 1))
|
|
|
done
|
|
|
|
|
|
- _err "Could not detect root zone for $domain after $max_attempts attempts. Please set SPACESHIP_ROOT_DOMAIN manually."
|
|
|
+ _err "Could not detect root zone for '$domain'. Please set SPACESHIP_ROOT_DOMAIN manually."
|
|
|
return 1
|
|
|
}
|
|
|
|