mirror of
https://github.com/Erreur32/nginx-proxy-manager-Bash-API.git
synced 2024-12-22 13:32:11 +01:00
Backup add directory for HOST
This commit is contained in:
parent
14fd55f95a
commit
617572a25f
1 changed files with 208 additions and 133 deletions
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Nginx Proxy Manager CLI Script v2.2.0
|
# Nginx Proxy Manager CLI Script v2.3.1
|
||||||
# Erreur32 - July 2024
|
# Erreur32 - July 2024
|
||||||
#
|
#
|
||||||
# This script allows you to manage Nginx Proxy Manager via the API. It provides
|
# This script allows you to manage Nginx Proxy Manager via the API. It provides
|
||||||
|
@ -88,7 +88,6 @@ BASE_DIR="/path/nginx_proxy_script/data"
|
||||||
|
|
||||||
# Will create backup directory automatically
|
# Will create backup directory automatically
|
||||||
BACKUP_DIR="./backups"
|
BACKUP_DIR="./backups"
|
||||||
DATE=$(date +"%Y%m%d%H%M%S")
|
|
||||||
|
|
||||||
# API Endpoints
|
# API Endpoints
|
||||||
BASE_URL="http://$NGINX_IP:81/api"
|
BASE_URL="http://$NGINX_IP:81/api"
|
||||||
|
@ -569,7 +568,12 @@ delete_all_proxy_hosts() {
|
||||||
restore_backup() {
|
restore_backup() {
|
||||||
echo -e "\n 🩹 ${COLOR_ORANGE}Restoring all configurations from backup...${COLOR_RESET}"
|
echo -e "\n 🩹 ${COLOR_ORANGE}Restoring all configurations from backup...${COLOR_RESET}"
|
||||||
|
|
||||||
GLOBAL_BACKUP_FILES=$(list_global_backup_files)
|
# Function to sanitize names for directory
|
||||||
|
sanitize_name() {
|
||||||
|
echo "$1" | sed 's/[^a-zA-Z0-9]/_/g'
|
||||||
|
}
|
||||||
|
|
||||||
|
GLOBAL_BACKUP_FILES=$(ls -t "$BACKUP_DIR"/*_*.json)
|
||||||
if [ -z "$GLOBAL_BACKUP_FILES" ]; then
|
if [ -z "$GLOBAL_BACKUP_FILES" ]; then
|
||||||
echo -e " ⛔ ${COLOR_RED}No backup files found.${COLOR_RESET}"
|
echo -e " ⛔ ${COLOR_RED}No backup files found.${COLOR_RESET}"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -579,58 +583,32 @@ restore_backup() {
|
||||||
select global_file in $GLOBAL_BACKUP_FILES; do
|
select global_file in $GLOBAL_BACKUP_FILES; do
|
||||||
if [ -n "$global_file" ]; then
|
if [ -n "$global_file" ]; then
|
||||||
case "$global_file" in
|
case "$global_file" in
|
||||||
*access_lists_*.json)
|
*users_*.json)
|
||||||
echo -e "\n 🩹 Restoring access lists from $global_file..."
|
echo -e "\n 🩹 Restoring users from $global_file..."
|
||||||
jq -c '.[] | {name, sni, allow, deny}' "$global_file" | while read -r list; do
|
RESPONSE=$(cat "$global_file")
|
||||||
curl -s -X POST "$BASE_URL/nginx/access_lists" \
|
curl -s -X POST "$BASE_URL/users/bulk" \
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
||||||
-H "Content-Type: application/json; charset=UTF-8" \
|
-H "Content-Type: application/json; charset=UTF-8" \
|
||||||
--data-raw "$list"
|
--data-raw "$RESPONSE"
|
||||||
done
|
echo -e " ✅ ${COLOR_GREEN}Users restored successfully!${COLOR_RESET}"
|
||||||
echo -e " ✅ ${COLOR_GREEN}Access lists restored successfully!${COLOR_RESET}"
|
|
||||||
;;
|
|
||||||
*ssl_certificates_*.json)
|
|
||||||
echo -e "\n 🩹 Restoring SSL certificates from $global_file..."
|
|
||||||
jq -c '.[] | {domain_names, certificate, key, expire_date}' "$global_file" | while read -r cert; do
|
|
||||||
curl -s -X POST "$BASE_URL/nginx/certificates" \
|
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
|
||||||
-H "Content-Type: application/json; charset=UTF-8" \
|
|
||||||
--data-raw "$cert"
|
|
||||||
done
|
|
||||||
echo -e " ✅ ${COLOR_GREEN}SSL certificates restored successfully!${COLOR_RESET}"
|
|
||||||
;;
|
|
||||||
*proxy_hosts_*.json)
|
|
||||||
echo -e "\n 🩹 Restoring proxy hosts from $global_file..."
|
|
||||||
jq -c '.[] | {domain_names, forward_host, forward_port, access_list_id, certificate_id, ssl_forced, caching_enabled, block_exploits, advanced_config}' "$global_file" | while read -r host; do
|
|
||||||
curl -s -X POST "$BASE_URL/nginx/proxy_hosts" \
|
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
|
||||||
-H "Content-Type: application/json; charset=UTF-8" \
|
|
||||||
--data-raw "$host"
|
|
||||||
done
|
|
||||||
echo -e " ✅ ${COLOR_GREEN}Proxy hosts restored successfully!${COLOR_RESET}"
|
|
||||||
;;
|
;;
|
||||||
*settings_*.json)
|
*settings_*.json)
|
||||||
echo -e "\n 🩹 Restoring settings from $global_file..."
|
echo -e "\n 🩹 Restoring settings from $global_file..."
|
||||||
jq -c '.[] | {key, value}' "$global_file" | while read -r setting; do
|
RESPONSE=$(cat "$global_file")
|
||||||
curl -s -X POST "$BASE_URL/nginx/settings" \
|
curl -s -X POST "$BASE_URL/nginx/settings/bulk" \
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
||||||
-H "Content-Type: application/json; charset=UTF-8" \
|
-H "Content-Type: application/json; charset=UTF-8" \
|
||||||
--data-raw "$setting"
|
--data-raw "$RESPONSE"
|
||||||
done
|
|
||||||
echo -e " ✅ ${COLOR_GREEN}Settings restored successfully!${COLOR_RESET}"
|
echo -e " ✅ ${COLOR_GREEN}Settings restored successfully!${COLOR_RESET}"
|
||||||
;;
|
;;
|
||||||
*users_*.json)
|
*access_lists_*.json)
|
||||||
echo -e "\n 🩹 Restoring users from $global_file..."
|
echo -e "\n 🩹 Restoring access lists from $global_file..."
|
||||||
jq -c '.[] | {username, password, is_active, roles}' "$global_file" | while read -r user; do
|
RESPONSE=$(cat "$global_file")
|
||||||
curl -s -X POST "$BASE_URL/nginx/users" \
|
curl -s -X POST "$BASE_URL/nginx/access-lists/bulk" \
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
||||||
-H "Content-Type: application/json; charset=UTF-8" \
|
-H "Content-Type: application/json; charset=UTF-8" \
|
||||||
--data-raw "$user"
|
--data-raw "$RESPONSE"
|
||||||
done
|
echo -e " ✅ ${COLOR_GREEN}Access lists restored successfully!${COLOR_RESET}"
|
||||||
echo -e " ✅ ${COLOR_GREEN}Users restored successfully!${COLOR_RESET}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo -e " ⛔ ${COLOR_RED}Unknown backup file type: $global_file${COLOR_RESET}"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
|
@ -639,6 +617,52 @@ restore_backup() {
|
||||||
break
|
break
|
||||||
done
|
done
|
||||||
|
|
||||||
|
echo -e "\n 🩹 Restoring proxy hosts and SSL certificates..."
|
||||||
|
for host_dir in "$BACKUP_DIR"/*/; do
|
||||||
|
if [ -d "$host_dir" ]; then
|
||||||
|
HOST_FILES=$(ls -t "$host_dir"proxy_host_*.json 2>/dev/null)
|
||||||
|
SSL_FILES=$(ls -t "$host_dir"ssl_certificate_*.json 2>/dev/null)
|
||||||
|
if [ -n "$HOST_FILES" ]; then
|
||||||
|
PROXY_HOST_FILE=$(echo "$HOST_FILES" | head -n 1)
|
||||||
|
echo -e "\n 🩹 Restoring proxy host from $PROXY_HOST_FILE..."
|
||||||
|
RESPONSE=$(jq 'del(.id, .created_on, .modified_on, .owner_user_id)' "$PROXY_HOST_FILE")
|
||||||
|
HTTP_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X POST "$BASE_URL/nginx/proxy-hosts" \
|
||||||
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
||||||
|
-H "Content-Type: application/json; charset=UTF-8" \
|
||||||
|
--data-raw "$RESPONSE")
|
||||||
|
|
||||||
|
HTTP_BODY=$(echo "$HTTP_RESPONSE" | sed -e 's/HTTPSTATUS\:.*//g')
|
||||||
|
HTTP_STATUS=$(echo "$HTTP_RESPONSE" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
|
||||||
|
|
||||||
|
if [ "$HTTP_STATUS" -eq 200 ] || [ "$HTTP_STATUS" -eq 201 ]; then
|
||||||
|
echo -e " ✅ ${COLOR_GREEN}Proxy host restored successfully!${COLOR_RESET}"
|
||||||
|
else
|
||||||
|
echo -e " ⛔ ${COLOR_RED}Failed to restore proxy host. Error: $HTTP_BODY${COLOR_RESET}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$SSL_FILES" ]; then
|
||||||
|
for SSL_FILE in $SSL_FILES; do
|
||||||
|
echo -e "\n 🩹 Restoring SSL certificate from $SSL_FILE..."
|
||||||
|
CERT_RESPONSE=$(cat "$SSL_FILE")
|
||||||
|
HTTP_CERT_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X POST "$BASE_URL/nginx/certificates" \
|
||||||
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
||||||
|
-H "Content-Type: application/json; charset=UTF-8" \
|
||||||
|
--data-raw "$CERT_RESPONSE")
|
||||||
|
|
||||||
|
HTTP_CERT_BODY=$(echo "$HTTP_CERT_RESPONSE" | sed -e 's/HTTPSTATUS\:.*//g')
|
||||||
|
HTTP_CERT_STATUS=$(echo "$HTTP_CERT_RESPONSE" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
|
||||||
|
|
||||||
|
if [ "$HTTP_CERT_STATUS" -eq 200 ] || [ "$HTTP_CERT_STATUS" -eq 201 ]; then
|
||||||
|
echo -e " ✅ ${COLOR_GREEN}SSL certificate restored successfully!${COLOR_RESET}"
|
||||||
|
else
|
||||||
|
echo -e " ⛔ ${COLOR_RED}Failed to restore SSL certificate. Error: $HTTP_CERT_BODY${COLOR_RESET}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
echo -e "\n ✅ ${COLOR_GREEN}All configurations restored successfully!${COLOR_RESET}\n"
|
echo -e "\n ✅ ${COLOR_GREEN}All configurations restored successfully!${COLOR_RESET}\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -714,10 +738,19 @@ restore_single_host() {
|
||||||
|
|
||||||
echo -e "\n 🩹 ${COLOR_ORANGE}Restoring backup for host ID $HOST_ID from '$BACKUP_DIR'...${COLOR_RESET}"
|
echo -e "\n 🩹 ${COLOR_ORANGE}Restoring backup for host ID $HOST_ID from '$BACKUP_DIR'...${COLOR_RESET}"
|
||||||
|
|
||||||
|
# Get the current date in a formatted string
|
||||||
|
DATE=$(date +"%Y_%m_%d__%H_%M_%S")
|
||||||
|
|
||||||
|
# Fetch the host name to identify the directory
|
||||||
|
HOST_NAME_RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/proxy-hosts/$HOST_ID" -H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
||||||
|
HOST_NAME=$(echo "$HOST_NAME_RESPONSE" | jq -r '.domain_names[0]')
|
||||||
|
SANITIZED_HOST_NAME=$(echo "$HOST_NAME" | sed 's/[^a-zA-Z0-9]/_/g')
|
||||||
|
HOST_DIR="$BACKUP_DIR/$SANITIZED_HOST_NAME"
|
||||||
|
|
||||||
# Vérifier l'existence des fichiers de sauvegarde
|
# Vérifier l'existence des fichiers de sauvegarde
|
||||||
BACKUP_FILES=$(ls "$BACKUP_DIR"/proxy_host_ID_+"${HOST_ID}"_IP_"${NGINX_IP//./_}"_*.json 2>/dev/null)
|
BACKUP_FILES=$(ls "$HOST_DIR/proxy_host_${HOST_ID}_${NGINX_IP//./_}_*.json" 2>/dev/null)
|
||||||
if [ -z "$BACKUP_FILES" ]; then
|
if [ -z "$BACKUP_FILES" ]; then
|
||||||
echo -e "\n ⛔ ${COLOR_RED}No backup file found for host ID $HOST_ID in '$BACKUP_DIR'. Aborting restore.${COLOR_RESET}"
|
echo -e "\n ⛔ ${COLOR_RED}No backup file found for host ID $HOST_ID in '$HOST_DIR'. Aborting restore.${COLOR_RESET}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -729,12 +762,19 @@ restore_single_host() {
|
||||||
read -p " 👉 you want to (1) restore the latest backup, (2) list backups and choose one, or (3) abandon? (1/2/3): " -r choice
|
read -p " 👉 you want to (1) restore the latest backup, (2) list backups and choose one, or (3) abandon? (1/2/3): " -r choice
|
||||||
case $choice in
|
case $choice in
|
||||||
1)
|
1)
|
||||||
PROXY_HOST_FILE=$(ls -t "$BACKUP_DIR"/proxy_host_ID_+"${HOST_ID}"_IP_"${NGINX_IP//./_}"_*.json | head -n 1)
|
PROXY_HOST_FILE=$(ls -t "$HOST_DIR/proxy_host_${HOST_ID}_${NGINX_IP//./_}_*.json" | head -n 1)
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
|
list_backup_versions() {
|
||||||
|
echo -e "\n 🔍 Listing available backup versions for host ID $HOST_ID..."
|
||||||
|
ls -t "$HOST_DIR/proxy_host_${HOST_ID}_${NGINX_IP//./_}_*.json" | while read -r file; do
|
||||||
|
timestamp=$(echo "$file" | grep -oE '[0-9]{4}_[0-9]{2}_[0-9]{2}__[0-9]{2}_[0-9]{2}_[0-9]{2}')
|
||||||
|
echo " - $timestamp"
|
||||||
|
done
|
||||||
|
}
|
||||||
list_backup_versions
|
list_backup_versions
|
||||||
read -p " 👉 Enter the timestamp of the backup you want to restore: " -r timestamp
|
read -p " 👉 Enter the timestamp of the backup you want to restore: " -r timestamp
|
||||||
PROXY_HOST_FILE="$BACKUP_DIR/proxy_host_ID_+${HOST_ID}_IP_${NGINX_IP//./_}_$timestamp.json"
|
PROXY_HOST_FILE="$HOST_DIR/proxy_host_${HOST_ID}_${NGINX_IP//./_}_$timestamp.json"
|
||||||
if [ ! -f "$PROXY_HOST_FILE" ]; then
|
if [ ! -f "$PROXY_HOST_FILE" ]; then
|
||||||
echo -e "\n ⛔ ${COLOR_RED}Selected backup file not found: $PROXY_HOST_FILE${COLOR_RESET}"
|
echo -e "\n ⛔ ${COLOR_RED}Selected backup file not found: $PROXY_HOST_FILE${COLOR_RESET}"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -781,6 +821,28 @@ restore_single_host() {
|
||||||
|
|
||||||
if [ "$HTTP_STATUS" -eq 200 ] || [ "$HTTP_STATUS" -eq 201 ]; then
|
if [ "$HTTP_STATUS" -eq 200 ] || [ "$HTTP_STATUS" -eq 201 ]; then
|
||||||
echo -e "\n ✅ ${COLOR_GREEN}Proxy host restored 🆗 from file: $PROXY_HOST_FILE${COLOR_RESET}\n"
|
echo -e "\n ✅ ${COLOR_GREEN}Proxy host restored 🆗 from file: $PROXY_HOST_FILE${COLOR_RESET}\n"
|
||||||
|
|
||||||
|
# Restore SSL certificate if it exists
|
||||||
|
SSL_BACKUP_FILE=$(ls "$HOST_DIR/ssl_certificate_${HOST_ID}_${NGINX_IP//./_}_*.json" 2>/dev/null | head -n 1)
|
||||||
|
if [ -f "$SSL_BACKUP_FILE" ]; then
|
||||||
|
CERT_RESPONSE=$(cat "$SSL_BACKUP_FILE")
|
||||||
|
HTTP_CERT_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X POST "$BASE_URL/nginx/certificates" \
|
||||||
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)" \
|
||||||
|
-H "Content-Type: application/json; charset=UTF-8" \
|
||||||
|
--data-raw "$CERT_RESPONSE")
|
||||||
|
|
||||||
|
HTTP_CERT_BODY=$(echo "$HTTP_CERT_RESPONSE" | sed -e 's/HTTPSTATUS\:.*//g')
|
||||||
|
HTTP_CERT_STATUS=$(echo "$HTTP_CERT_RESPONSE" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
|
||||||
|
|
||||||
|
if [ "$HTTP_CERT_STATUS" -eq 200 ] || [ "$HTTP_CERT_STATUS" -eq 201 ]; then
|
||||||
|
echo -e "\n ✅ ${COLOR_GREEN}SSL certificate restored 🆗 from file: $SSL_BACKUP_FILE${COLOR_RESET}\n"
|
||||||
|
else
|
||||||
|
echo -e "\n ⛔ ${COLOR_RED}Failed to restore SSL certificate. Error: $HTTP_CERT_BODY${COLOR_RESET}\n"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ⚠️ ${COLOR_YELLOW}No SSL certificate backup file found.${COLOR_RESET}"
|
||||||
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
echo -e "\n ⛔ ${COLOR_RED}Failed to restore proxy host. Error: $HTTP_BODY${COLOR_RESET}\n"
|
echo -e "\n ⛔ ${COLOR_RED}Failed to restore proxy host. Error: $HTTP_BODY${COLOR_RESET}\n"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -793,46 +855,13 @@ restore_single_host() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
################################
|
################################
|
||||||
|
|
||||||
# Function to backup a single host configuration and its certificate (if exists)
|
|
||||||
backup_single_host() {
|
|
||||||
if [ -z "$HOST_ID" ]; then
|
|
||||||
echo " 📦 The --backup-id option requires a host ID."
|
|
||||||
usage
|
|
||||||
fi
|
|
||||||
|
|
||||||
mkdir -p "$BACKUP_DIR"
|
|
||||||
|
|
||||||
# Backup proxy host
|
|
||||||
RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/proxy-hosts/$HOST_ID" \
|
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
if [ -n "$RESPONSE" ]; then
|
|
||||||
echo "$RESPONSE" | jq '.' > "$BACKUP_DIR/proxy_host_ID_+${HOST_ID}_IP_${NGINX_IP//./_}_$DATE.json"
|
|
||||||
echo -e " ✅ ${COLOR_GREEN}Proxy host backup host ID $HOST_ID completed 🆗: ${BACKUP_DIR}/proxy_host_ID_+${HOST_ID}_IP_${NGINX_IP//./_}_$DATE.json${COLOR_RESET}"
|
|
||||||
|
|
||||||
# Backup SSL certificate if it exists
|
|
||||||
CERTIFICATE_ID=$(echo "$RESPONSE" | jq -r '.certificate_id')
|
|
||||||
if [ "$CERTIFICATE_ID" != "null" ]; then
|
|
||||||
CERT_RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/certificates/$CERTIFICATE_ID" \
|
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
|
||||||
if [ -n "$CERT_RESPONSE" ]; then
|
|
||||||
echo "$CERT_RESPONSE" | jq '.' > "$BACKUP_DIR/ssl_certificate_ID_+${CERTIFICATE_ID}_IP_${NGINX_IP//./_}_$DATE.json"
|
|
||||||
echo -e " ✅ ${COLOR_GREEN}SSL certificate backup ID $CERTIFICATE_ID completed 🆗: ${BACKUP_DIR}/ssl_certificate_ID_+${CERTIFICATE_ID}_IP_${NGINX_IP//./_}_$DATE.json${COLOR_RESET}"
|
|
||||||
else
|
|
||||||
echo -e " ⛔ ${COLOR_RED}Failed to backup SSL certificate for certificate ID $CERTIFICATE_ID.${COLOR_RESET}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -e " ⚠️ ${COLOR_YELLOW}No SSL certificate associated with host ID $HOST_ID.${COLOR_RESET}"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -e " ⛔ ${COLOR_RED}Failed to backup proxy host for host ID $HOST_ID.${COLOR_RESET}"
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if a proxy host with the given domain names already exists
|
# Check if a proxy host with the given domain names already exists
|
||||||
check_existing_proxy_host() {
|
check_existing_proxy_host() {
|
||||||
|
@ -1303,20 +1332,15 @@ disable_ssl() {
|
||||||
CHECK_RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/proxy-hosts/$HOST_ID" \
|
CHECK_RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/proxy-hosts/$HOST_ID" \
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
||||||
|
|
||||||
|
if echo "$CHECK_RESPONSE" | jq -e '.id' > /dev/null 2>&1; then
|
||||||
CERTIFICATE_ID=$(echo "$CHECK_RESPONSE" | jq -r '.certificate_id')
|
CERTIFICATE_ID=$(echo "$CHECK_RESPONSE" | jq -r '.certificate_id')
|
||||||
if [ "$CERTIFICATE_ID" != "null" ]; then
|
|
||||||
CERTIFICATE_ID=null
|
|
||||||
fi
|
|
||||||
|
|
||||||
DATA=$(jq -n --argjson cert_id "$CERTIFICATE_ID" '{
|
DATA=$(jq -n --argjson cert_id null '{
|
||||||
letsencrypt_agree: false,
|
certificate_id: $cert_id,
|
||||||
dns_challenge: false,
|
ssl_forced: false,
|
||||||
allow_websocket_upgrade: 0,
|
http2_support: false,
|
||||||
http2_support: 0,
|
hsts_enabled: false,
|
||||||
hsts_enabled: 0,
|
hsts_subdomains: false
|
||||||
hsts_subdomains: 0,
|
|
||||||
ssl_forced: 0,
|
|
||||||
certificate_id: $cert_id
|
|
||||||
}')
|
}')
|
||||||
|
|
||||||
HTTP_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X PUT "$BASE_URL/nginx/proxy-hosts/$HOST_ID" \
|
HTTP_RESPONSE=$(curl -s -w "HTTPSTATUS:%{http_code}" -X PUT "$BASE_URL/nginx/proxy-hosts/$HOST_ID" \
|
||||||
|
@ -1333,8 +1357,12 @@ disable_ssl() {
|
||||||
echo " Data sent: $DATA" # Log the data sent
|
echo " Data sent: $DATA" # Log the data sent
|
||||||
echo -e " ⛔ ${COLOR_RED}Failed to disable SSL. HTTP status: $HTTP_STATUS. Response: $HTTP_BODY${COLOR_RESET}\n"
|
echo -e " ⛔ ${COLOR_RED}Failed to disable SSL. HTTP status: $HTTP_STATUS. Response: $HTTP_BODY${COLOR_RESET}\n"
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ⛔ ${COLOR_RED}Proxy host with ID $HOST_ID does not exist.${COLOR_RESET}\n"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# Function to show full details for a specific host by ID
|
# Function to show full details for a specific host by ID
|
||||||
host_show() {
|
host_show() {
|
||||||
if [ -z "$HOST_ID" ]; then
|
if [ -z "$HOST_ID" ]; then
|
||||||
|
@ -1366,12 +1394,12 @@ show_default() {
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Perform a full backup of all configurations
|
|
||||||
# Perform a full backup of all configurations
|
# Perform a full backup of all configurations
|
||||||
full_backup() {
|
full_backup() {
|
||||||
mkdir -p "$BACKUP_DIR"
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
|
||||||
DATE=$(date +"%Y_%m_%d__%H_%M_%S")
|
# Get the current date in a formatted string
|
||||||
|
DATE=$(date +"_%Y_%m_%d__%H_%M_%S")
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
@ -1381,7 +1409,7 @@ full_backup() {
|
||||||
}
|
}
|
||||||
|
|
||||||
# Backup users
|
# Backup users
|
||||||
USERS_FILE="$BACKUP_DIR/users_${NGINX_IP//./_}_$DATE.json"
|
USERS_FILE="$BACKUP_DIR/users_${NGINX_IP//./_}$DATE.json"
|
||||||
RESPONSE=$(curl -s -X GET "$BASE_URL/users" \
|
RESPONSE=$(curl -s -X GET "$BASE_URL/users" \
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
||||||
if [ -n "$RESPONSE" ]; then
|
if [ -n "$RESPONSE" ]; then
|
||||||
|
@ -1392,7 +1420,7 @@ full_backup() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Backup settings
|
# Backup settings
|
||||||
SETTINGS_FILE="$BACKUP_DIR/settings_${NGINX_IP//./_}_$DATE.json"
|
SETTINGS_FILE="$BACKUP_DIR/settings_${NGINX_IP//./_}$DATE.json"
|
||||||
RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/settings" \
|
RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/settings" \
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
||||||
if [ -n "$RESPONSE" ]; then
|
if [ -n "$RESPONSE" ]; then
|
||||||
|
@ -1412,26 +1440,30 @@ full_backup() {
|
||||||
HOST_DIR="$BACKUP_DIR/$SANITIZED_HOST_NAME"
|
HOST_DIR="$BACKUP_DIR/$SANITIZED_HOST_NAME"
|
||||||
mkdir -p "$HOST_DIR"
|
mkdir -p "$HOST_DIR"
|
||||||
HOST_ID=$(echo "$proxy" | jq -r '.id')
|
HOST_ID=$(echo "$proxy" | jq -r '.id')
|
||||||
echo "$proxy" | jq '.' > "$HOST_DIR/proxy_host_${HOST_ID}_${NGINX_IP//./_}_$DATE.json"
|
echo "$proxy" | jq '.' > "$HOST_DIR/proxy_host_${HOST_ID}_${NGINX_IP//./_}$DATE.json"
|
||||||
echo -e " ✅ ${COLOR_GREEN}Proxy host backup completed 🆗${COLOR_GREY}: $HOST_DIR/proxy_host_${HOST_ID}_${NGINX_IP//./_}_$DATE.json${COLOR_RESET}"
|
echo -e " ✅ ${COLOR_GREEN}Proxy host backup completed 🆗${COLOR_GREY}: $HOST_DIR/proxy_host_${HOST_ID}_${NGINX_IP//./_}$DATE.json${COLOR_RESET}"
|
||||||
|
|
||||||
|
# Backup SSL certificate if it exists
|
||||||
|
CERTIFICATE_ID=$(echo "$proxy" | jq -r '.certificate_id')
|
||||||
|
if [ "$CERTIFICATE_ID" != "null" ]; then
|
||||||
|
CERT_RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/certificates/$CERTIFICATE_ID" \
|
||||||
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
||||||
|
if [ -n "$CERT_RESPONSE" ]; then
|
||||||
|
echo "$CERT_RESPONSE" | jq '.' > "$HOST_DIR/ssl_certificate_${CERTIFICATE_ID}_${NGINX_IP//./_}$DATE.json"
|
||||||
|
echo -e " ✅ ${COLOR_GREEN}SSL certificate backup completed 🆗${COLOR_GREY}: $HOST_DIR/ssl_certificate_${CERTIFICATE_ID}_${NGINX_IP//./_}$DATE.json${COLOR_RESET}"
|
||||||
|
else
|
||||||
|
echo -e " ⛔ ${COLOR_RED}Failed to backup SSL certificate for certificate ID $CERTIFICATE_ID.${COLOR_RESET}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ⚠️ ${COLOR_YELLOW}No SSL certificate associated with host ID $HOST_ID.${COLOR_RESET}"
|
||||||
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
echo -e " ⛔ ${COLOR_RED}Failed to backup proxy hosts.${COLOR_RESET}"
|
echo -e " ⛔ ${COLOR_RED}Failed to backup proxy hosts.${COLOR_RESET}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Backup SSL certificates
|
|
||||||
SSL_CERTS_FILE="$BACKUP_DIR/ssl_certificates_${NGINX_IP//./_}_$DATE.json"
|
|
||||||
RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/certificates" \
|
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
|
||||||
if [ -n "$RESPONSE" ]; then
|
|
||||||
echo "$RESPONSE" | jq '.' > "$SSL_CERTS_FILE"
|
|
||||||
echo -e " ✅ ${COLOR_GREEN}SSL certificates backup completed 🆗${COLOR_GREY}: $SSL_CERTS_FILE${COLOR_RESET}"
|
|
||||||
else
|
|
||||||
echo -e " ⛔ ${COLOR_RED}Failed to backup SSL certificates.${COLOR_RESET}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Backup access lists
|
# Backup access lists
|
||||||
ACCESS_LISTS_FILE="$BACKUP_DIR/access_lists_${NGINX_IP//./_}_$DATE.json"
|
ACCESS_LISTS_FILE="$BACKUP_DIR/access_lists_${NGINX_IP//./_}$DATE.json"
|
||||||
RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/access-lists" \
|
RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/access-lists" \
|
||||||
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
||||||
if [ -n "$RESPONSE" ]; then
|
if [ -n "$RESPONSE" ]; then
|
||||||
|
@ -1444,7 +1476,52 @@ full_backup() {
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
# Function to backup a single host configuration and its certificate (if exists)
|
||||||
|
backup_single_host() {
|
||||||
|
if [ -z "$HOST_ID" ]; then
|
||||||
|
echo " 📦 The --backup-id option requires a host ID."
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
|
||||||
|
# Get the current date in a formatted string
|
||||||
|
DATE=$(date +"_%Y_%m_%d__%H_%M_%S")
|
||||||
|
|
||||||
|
# Fetch proxy host data
|
||||||
|
RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/proxy-hosts/$HOST_ID" \
|
||||||
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
||||||
|
|
||||||
|
if [ -n "$RESPONSE" ]; then
|
||||||
|
HOST_NAME=$(echo "$RESPONSE" | jq -r '.domain_names[0]')
|
||||||
|
SANITIZED_HOST_NAME=$(echo "$HOST_NAME" | sed 's/[^a-zA-Z0-9]/_/g')
|
||||||
|
HOST_DIR="$BACKUP_DIR/$SANITIZED_HOST_NAME"
|
||||||
|
mkdir -p "$HOST_DIR"
|
||||||
|
|
||||||
|
echo "$RESPONSE" | jq '.' > "$HOST_DIR/proxy_host_${HOST_ID}_${NGINX_IP//./_}_$DATE.json"
|
||||||
|
echo -e " ✅ ${COLOR_GREEN}Proxy host backup completed 🆗: ${HOST_DIR}/proxy_host_${HOST_ID}_${NGINX_IP//./_}_$DATE.json${COLOR_RESET}"
|
||||||
|
|
||||||
|
# Fetch SSL certificate if it exists
|
||||||
|
CERTIFICATE_ID=$(echo "$RESPONSE" | jq -r '.certificate_id')
|
||||||
|
if [ "$CERTIFICATE_ID" != "null" ]; then
|
||||||
|
CERT_RESPONSE=$(curl -s -X GET "$BASE_URL/nginx/certificates/$CERTIFICATE_ID" \
|
||||||
|
-H "Authorization: Bearer $(cat $TOKEN_FILE)")
|
||||||
|
if [ -n "$CERT_RESPONSE" ]; then
|
||||||
|
echo "$CERT_RESPONSE" | jq '.' > "$HOST_DIR/ssl_certificate_${CERTIFICATE_ID}_${NGINX_IP//./_}_$DATE.json"
|
||||||
|
echo -e " ✅ ${COLOR_GREEN}SSL certificate backup completed 🆗: ${HOST_DIR}/ssl_certificate_${CERTIFICATE_ID}_${NGINX_IP//./_}_$DATE.json${COLOR_RESET}"
|
||||||
|
else
|
||||||
|
echo -e " ⛔ ${COLOR_RED}Failed to backup SSL certificate for certificate ID $CERTIFICATE_ID.${COLOR_RESET}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ⚠️ ${COLOR_YELLOW}No SSL certificate associated with host ID $HOST_ID.${COLOR_RESET}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e " ⛔ ${COLOR_RED}Failed to backup proxy host for host ID $HOST_ID.${COLOR_RESET}"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1491,8 +1568,6 @@ elif [ "$SHOW_DEFAULT" = true ]; then
|
||||||
show_default
|
show_default
|
||||||
elif [ "$SSL_RESTORE" = true ]; then
|
elif [ "$SSL_RESTORE" = true ]; then
|
||||||
restore_ssl_certificates
|
restore_ssl_certificates
|
||||||
elif [ "$HOST_RESTORE" = true ]; then
|
|
||||||
restore_backup
|
|
||||||
elif [ "$SSL_REGENERATE" = true ]; then
|
elif [ "$SSL_REGENERATE" = true ]; then
|
||||||
regenerate_all_ssl_certificates
|
regenerate_all_ssl_certificates
|
||||||
elif [ "$1" = "--info" ]; then
|
elif [ "$1" = "--info" ]; then
|
||||||
|
|
Loading…
Reference in a new issue