2024-07-10 14:03:57 +02:00
#!/bin/bash
2024-07-15 12:59:33 +02:00
# Nginx Proxy Manager CLI Script v1.0.0
2024-07-10 20:46:54 +02:00
# Erreur32 - July 2024
2024-07-10 14:03:57 +02:00
#
2024-07-11 11:50:09 +02:00
# This script allows you to manage Nginx Proxy Manager via the API. It provides
2024-07-12 13:07:09 +02:00
# functionalities such as creating proxy hosts, managing users, listing hosts,
# backing up configurations, and more.
2024-07-10 14:03:57 +02:00
#
# Usage:
# ./nginx_proxy_manager_cli.sh [OPTIONS]
#
# Examples:
2024-07-15 14:36:34 +02:00
#
# 📦 Backup First!
2024-07-15 12:59:33 +02:00
# ./nginx_proxy_manager_cli.sh --host-backup
2024-07-12 21:43:35 +02:00
#
2024-07-15 14:36:34 +02:00
# 🌐 Host Creation:
2024-07-12 21:43:35 +02:00
# ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 (check default values below)
2024-07-15 12:59:33 +02:00
# ./nginx_proxy_manager_cli.sh --host-show-default
# ./nginx_proxy_manager_cli.sh --host-create-user newuser password123 user@example.com
# ./nginx_proxy_manager_cli.sh --host-delete-user 'username'
# ./nginx_proxy_manager_cli.sh --host-list
2024-07-15 14:36:34 +02:00
# ./nginx_proxy_manager_cli.sh --host-ssl-enable 10
2024-07-13 11:46:53 +02:00
#
2024-07-15 14:36:34 +02:00
# 🔧 Advanced Example:
2024-07-12 13:25:40 +02:00
# ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 -a 'proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;'
2024-07-15 14:36:34 +02:00
#
2024-07-15 14:52:53 +02:00
# Custom Certificat:
2024-07-15 12:59:33 +02:00
# ./nginx_proxy_manager_cli.sh --host-generate-cert example.com user@example.com --custom
2024-07-12 13:07:09 +02:00
#
2024-07-15 14:36:34 +02:00
# Custom locations:
# ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 -l '[{"path":"/api","forward_host":"192.168.1.11","forward_port":8081}]'
#
#
2024-07-12 13:07:09 +02:00
# Options:
2024-07-15 12:59:33 +02:00
#
# 🌐 Host proxy creation:
2024-07-13 11:46:53 +02:00
# -d DOMAIN_NAMES Domain name (required for creating/updating hosts)
# -i FORWARD_HOST IP address or domain name of the target server (required for creating/updating hosts)
# -p FORWARD_PORT Port of the target server (required for creating/updating hosts)
# -f FORWARD_SCHEME Scheme for forwarding (http/https, default: http)
# -c CACHING_ENABLED Enable caching (true/false, default: false)
# -b BLOCK_EXPLOITS Block exploits (true/false, default: true)
# -w ALLOW_WEBSOCKET_UPGRADE Allow WebSocket upgrade (true/false, default: true)
2024-07-15 14:36:34 +02:00
# -l CUSTOM_LOCATIONS Custom locations (JSON array of location objects)"
2024-07-13 11:46:53 +02:00
# -a ADVANCED_CONFIG Advanced configuration (block of configuration settings)
2024-07-15 12:59:33 +02:00
#
# 📦 Backup and Restore:
# --host-backup Backup all configurations to a file
# --host-backup-id id Backup a single host configuration and its certificate (if exists)
# --host-restore Restore configurations from a backup file
# --host-restore-id id Restore a single host configuration and its certificate (if exists)
#
# 🔧 Miscellaneous:
# --host-check-token Check if the current token is valid
# --host-create-user user pass email Create a user with a username, password and email
# --host-delete-user username Delete a user by username
# --host-delete id Delete a proxy host by ID
# --host-show id Show full details for a specific host by ID
# --host-show-default Show default settings for creating hosts
# --host-list List the names of all proxy hosts
# --host-list-full List all proxy hosts with full details
# --host-list-ssl-certificates List all SSL certificates
# --host-list-users List all users
# --host-search hostname Search for a proxy host by domain name
# --host-enable id Enable a proxy host by ID
# --host-disable id Disable a proxy host by ID
# --host-ssl-enable id Enable SSL, HTTP/2, and HSTS for a proxy host (don't need to generate a custom cert.)
# --host-ssl-disable id Disable SSL, HTTP/2, and HSTS for a proxy host
# --host-generate-cert domain email [--custom] Generate a Let's Encrypt or Custom certificate for the given domain and email
# --host-help Display this help
2024-07-10 14:03:57 +02:00
2024-07-12 13:29:18 +02:00
################################
# Variables to Edit (required) #
################################
2024-07-10 20:46:54 +02:00
NGINX_IP = "127.0.0.1"
# Existing nginx user
API_USER = "user@nginx"
API_PASS = "pass nginx"
2024-07-10 14:03:57 +02:00
2024-07-12 13:29:18 +02:00
#################################
2024-07-12 21:43:35 +02:00
# Variables to Edit (optional) #
2024-07-12 13:29:18 +02:00
#################################
2024-07-12 21:43:35 +02:00
# Will create backup directory automatically
2024-07-12 13:07:09 +02:00
BACKUP_DIR = "./backups"
DATE = $( date +"%Y%m%d%H%M%S" )
2024-07-10 20:46:54 +02:00
# API Endpoints
2024-07-10 14:03:57 +02:00
BASE_URL = " http:// $NGINX_IP :81/api "
API_ENDPOINT = "/tokens"
2024-07-11 14:55:14 +02:00
EXPIRY_FILE = " expiry_ ${ NGINX_IP } .txt "
TOKEN_FILE = " token_ ${ NGINX_IP } .txt "
2024-07-15 14:36:34 +02:00
# Set Token duration validity.
2024-07-10 20:46:54 +02:00
TOKEN_EXPIRY = "1y"
2024-07-10 14:03:57 +02:00
2024-07-10 20:46:54 +02:00
# Default variables
CACHING_ENABLED = false
BLOCK_EXPLOITS = true
2024-07-12 21:43:35 +02:00
ALLOW_WEBSOCKET_UPGRADE = 1
HTTP2_SUPPORT = 0
2024-07-10 20:46:54 +02:00
ADVANCED_CONFIG = ""
LETS_ENCRYPT_AGREE = false
LETS_ENCRYPT_EMAIL = ""
FORWARD_SCHEME = "http"
2024-07-12 21:43:35 +02:00
FORCE_CERT_CREATION = false
SSL_FORCED = 0
HSTS_ENABLED = 0
HSTS_SUBDOMAINS = 0
2024-07-10 14:03:57 +02:00
2024-07-10 20:46:54 +02:00
# Control variables
CREATE_USER = false
DELETE_USER = false
DELETE_HOST = false
LIST_HOSTS = false
LIST_HOSTS_FULL = false
LIST_SSL_CERTIFICATES = false
LIST_USERS = false
SEARCH_HOST = false
2024-07-11 11:50:09 +02:00
ENABLE_HOST = false
DISABLE_HOST = false
2024-07-12 13:07:09 +02:00
CHECK_TOKEN = false
BACKUP = false
2024-07-15 12:59:33 +02:00
BACKUP_HOST = false
RESTORE = false
RESTORE_HOST = false
2024-07-12 21:43:35 +02:00
GENERATE_CERT = false
ENABLE_SSL = false
DISABLE_SSL = false
SHOW_HOST = false
SHOW_DEFAULT = false
2024-07-13 11:46:53 +02:00
CUSTOM_CERT = false
2024-07-12 21:43:35 +02:00
# Colors
COLOR_GREEN = "\033[32m"
COLOR_RED = "\033[41;1m"
COLOR_ORANGE = "\033[38;5;202m"
COLOR_YELLOW = "\033[93m"
COLOR_RESET = "\033[0m"
WHITE_ON_GREEN = "\033[30;48;5;83m"
#WHITE_ON_GREEN="\033[97m\033[42m"
2024-07-10 14:03:57 +02:00
2024-07-10 20:46:54 +02:00
# Check if necessary dependencies are installed
check_dependencies( ) {
local dependencies = ( "curl" "jq" )
for dep in " ${ dependencies [@] } " ; do
2024-07-12 21:43:35 +02:00
if ! command -v " $dep " & > /dev/null; then
2024-07-10 20:46:54 +02:00
echo -e " ${ COLOR_RED } Dependency $dep is not installed. Please install it before running this script. ${ COLOR_RESET } "
exit 1
fi
done
2024-07-10 14:03:57 +02:00
}
2024-07-10 20:46:54 +02:00
check_dependencies
2024-07-10 14:03:57 +02:00
2024-07-10 16:41:36 +02:00
# Display help
2024-07-10 14:03:57 +02:00
usage( ) {
2024-07-15 12:59:33 +02:00
echo -e " \n ${ COLOR_YELLOW } Usage: ./nginx_proxy_manager_cli.sh -d domain -i ip -p port [-f forward_scheme] [-c caching_enabled] [-b block_exploits] [-w allow_websocket_upgrade] [-a advanced_config] [-t token_expiry] [--host-create-user username password email] [--host-delete-user username] [--host-delete id] [--host-list] [--host-list-full] [--host-list-ssl-certificates] [--host-list-users] [--host-search hostname] [--host-enable id] [--host-disable id] [--host-check-token] [--host-backup] [--host-backup-id id] [--host-restore] [--host-restore-id id] [--host-generate-cert domain email [--custom]] [--host-ssl-enable id] [--host-ssl-disable id] [--host-show id] [--host-show-default] [--host-help] ${ COLOR_RESET } "
2024-07-10 20:46:54 +02:00
echo ""
echo -e "Examples:"
2024-07-15 14:52:53 +02:00
echo -e "\n 📦 Backup First before doing anything!"
2024-07-15 12:59:33 +02:00
echo -e " ./nginx_proxy_manager_cli.sh --host-backup"
2024-07-15 14:52:53 +02:00
echo -e " ./nginx_proxy_manager_cli.sh --host-backup-id 10"
2024-07-15 12:59:33 +02:00
echo -e " ./nginx_proxy_manager_cli.sh --host-restore"
2024-07-15 14:52:53 +02:00
echo -e " ./nginx_proxy_manager_cli.sh --host-restore-id 10"
echo -e "\n 🌐 Host Creation"
2024-07-15 12:59:33 +02:00
echo -e " ./nginx_proxy_manager_cli.sh --host-show-default"
2024-07-12 21:43:35 +02:00
echo -e " ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080"
2024-07-15 14:52:53 +02:00
echo -e " ./nginx_proxy_manager_cli.sh --host-ssl-enable 10"
echo -e " ./nginx_proxy_manager_cli.sh --host-show 10"
2024-07-15 12:59:33 +02:00
echo -e " ./nginx_proxy_manager_cli.sh --host-list"
2024-07-15 14:52:53 +02:00
echo -e "\n 👤 User Management"
2024-07-15 12:59:33 +02:00
echo -e " ./nginx_proxy_manager_cli.sh --host-create-user newuser password123 user@example.com"
echo -e " ./nginx_proxy_manager_cli.sh --host-delete-user 'username'"
2024-07-15 14:52:53 +02:00
echo -e "\n 🔧 Advanced Example:"
2024-07-12 21:43:35 +02:00
echo -e " ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 -a 'proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;'"
2024-07-15 12:59:33 +02:00
echo -e " ./nginx_proxy_manager_cli.sh --host-generate-cert example.com user@example.com --custom"
2024-07-15 14:52:53 +02:00
echo -e "\n 📁 Custom locations:"
echo -e " ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 -l '[{\"path\":\"/api\",\"forward_host\":\"192.168.1.11\",\"forward_port\":8081}]'"
echo -e "\n 🔖 Full option:"
echo -e " ./nginx_proxy_manager_cli.sh -d example.com -i 192.168.1.10 -p 8080 -f https -c true -b true -w true -a 'proxy_set_header X-Real-IP $remote_addr ;' -l '[{\"path\":\"/api\",\"forward_host\":\"192.168.1.11\",\"forward_port\":8081}]' "
2024-07-12 21:43:35 +02:00
echo -e ""
2024-07-10 14:03:57 +02:00
echo -e "Options:"
2024-07-15 12:59:33 +02:00
echo -e " -d ${ COLOR_ORANGE } DOMAIN_NAMES ${ COLOR_RESET } Domain name ( ${ COLOR_RED } required ${ COLOR_RESET } ) "
echo -e " -i ${ COLOR_ORANGE } FORWARD_HOST ${ COLOR_RESET } IP address or domain name of the target server ( ${ COLOR_RED } required ${ COLOR_RESET } ) "
echo -e " -p ${ COLOR_ORANGE } FORWARD_PORT ${ COLOR_RESET } Port of the target server ( ${ COLOR_RED } required ${ COLOR_RESET } ) "
echo -e " -f FORWARD_SCHEME Scheme for forwarding (http/https, default: $( colorize_booleanh $FORWARD_SCHEME ) ) "
echo -e " -c CACHING_ENABLED Enable caching (true/false, default: $( colorize_boolean $CACHING_ENABLED ) ) "
echo -e " -b BLOCK_EXPLOITS Block exploits (true/false, default: $( colorize_boolean $BLOCK_EXPLOITS ) ) "
echo -e " -w ALLOW_WEBSOCKET_UPGRADE Allow WebSocket upgrade (true/false, default: $( colorize_boolean $ALLOW_WEBSOCKET_UPGRADE ) ) "
2024-07-15 14:36:34 +02:00
echo -e " -l CUSTOM_LOCATIONS Custom locations ( ${ COLOR_YELLOW } JSON array ${ COLOR_RESET } of location objects) "
2024-07-15 12:59:33 +02:00
echo -e " -a ADVANCED_CONFIG Advanced configuration ( ${ COLOR_YELLOW } string ${ COLOR_RESET } ) "
echo ""
echo -e " --host-backup 📦 ${ COLOR_GREEN } Backup ${ COLOR_RESET } All configurations to a different files in $BACKUP_DIR "
echo -e " --host-backup-id id 📦 ${ COLOR_GREEN } Backup ${ COLOR_RESET } Single host configuration and its certificate (if exists) "
echo -e " --host-restore 📦 ${ COLOR_GREEN } Restore ${ COLOR_RESET } All configurations from a backup file "
echo -e " --host-restore-id id 📦 ${ COLOR_GREEN } Restore ${ COLOR_RESET } Single host configuration and its certificate (if exists) "
echo -e " --host-check-token 🔧 ${ COLOR_YELLOW } Check ${ COLOR_RESET } If the current token is valid "
echo -e " --host-create-user user pass email 👤 ${ COLOR_GREEN } Create ${ COLOR_RESET } User with a ${ COLOR_YELLOW } username, ${ COLOR_YELLOW } password ${ COLOR_RESET } and ${ COLOR_YELLOW } email ${ COLOR_RESET } "
echo -e " --host-delete-user username 💣 ${ COLOR_ORANGE } Delete ${ COLOR_RESET } User by ${ COLOR_YELLOW } username ${ COLOR_RESET } "
echo -e " --host-delete id 💣 ${ COLOR_ORANGE } Delete ${ COLOR_RESET } Proxy host by ${ COLOR_YELLOW } ID ${ COLOR_RESET } "
echo -e " --host-search hostname 🔍 ${ COLOR_GREEN } Search ${ COLOR_RESET } Proxy host by domain name "
echo -e " --host-show-default 🔍 ${ COLOR_YELLOW } Show ${ COLOR_RESET } Default settings for creating hosts "
echo -e " --host-show id 🔍 ${ COLOR_YELLOW } Show ${ COLOR_RESET } Full details for a specific host by ${ COLOR_YELLOW } ID ${ COLOR_RESET } "
echo -e " --host-list 📋 ${ COLOR_YELLOW } List ${ COLOR_RESET } Names of all proxy hosts "
echo -e " --host-list-full 📋 ${ COLOR_YELLOW } List ${ COLOR_RESET } All Proxy hosts with full details "
echo -e " --host-list-ssl-certificates 📋 ${ COLOR_YELLOW } List ${ COLOR_RESET } All SSL certificates "
echo -e " --host-list-users 📋 ${ COLOR_YELLOW } List ${ COLOR_RESET } All Users "
echo -e " --host-enable id ✅ ${ COLOR_GREEN } Enable ${ COLOR_RESET } Proxy host by ${ COLOR_YELLOW } ID ${ COLOR_RESET } "
echo -e " --host-disable id ❌ ${ COLOR_ORANGE } Disable ${ COLOR_RESET } Proxy host by ${ COLOR_YELLOW } ID ${ COLOR_RESET } "
echo -e " --host-ssl-enable id 🔒 ${ COLOR_GREEN } Enable ${ COLOR_RESET } SSL, HTTP/2, and HSTS for a proxy host (Will generate Certificat auto if needed) "
echo -e " --host-ssl-disable id 🔓 ${ COLOR_ORANGE } Disable ${ COLOR_RESET } SSL, HTTP/2, and HSTS for a proxy host "
2024-07-15 14:52:53 +02:00
echo -e " --host-generate-cert domain email [--custom] 🛡️ ${ COLOR_GREEN } Generate ${ COLOR_RESET } Custom certificate for the given domain and email (Only for Custom certificat) "
2024-07-15 12:59:33 +02:00
echo -e " --host-help ℹ ️ ${ COLOR_YELLOW } Display ${ COLOR_RESET } This help "
echo ""
2024-07-10 20:46:54 +02:00
exit 0
2024-07-10 14:03:57 +02:00
}
2024-07-15 12:59:33 +02:00
2024-07-12 13:07:09 +02:00
# Colorize boolean values for display
2024-07-10 20:46:54 +02:00
colorize_boolean( ) {
local value = $1
if [ " $value " = true ] ; then
echo -e " ${ COLOR_GREEN } true ${ COLOR_RESET } "
else
echo -e " ${ COLOR_YELLOW } false ${ COLOR_RESET } "
fi
2024-07-13 12:31:45 +02:00
}
2024-07-15 12:59:33 +02:00
2024-07-13 12:31:45 +02:00
colorize_booleanh( ) {
local value = $1
if [ " $value " = https ] ; then
echo -e " ${ COLOR_GREEN } https ${ COLOR_RESET } "
else
echo -e " ${ COLOR_YELLOW } http ${ COLOR_RESET } "
fi
2024-07-10 20:46:54 +02:00
}
2024-07-10 14:03:57 +02:00
2024-07-12 13:07:09 +02:00
# Parse options
2024-07-15 14:36:34 +02:00
while getopts "d:i:p:f:c:b:w:a:l:-:" opt; do
2024-07-10 14:03:57 +02:00
case $opt in
d) DOMAIN_NAMES = " $OPTARG " ; ;
i) FORWARD_HOST = " $OPTARG " ; ;
p) FORWARD_PORT = " $OPTARG " ; ;
2024-07-10 16:41:36 +02:00
f) FORWARD_SCHEME = " $OPTARG " ; ;
2024-07-10 14:03:57 +02:00
c) CACHING_ENABLED = " $OPTARG " ; ;
b) BLOCK_EXPLOITS = " $OPTARG " ; ;
w) ALLOW_WEBSOCKET_UPGRADE = " $OPTARG " ; ;
a) ADVANCED_CONFIG = " $OPTARG " ; ;
2024-07-15 14:36:34 +02:00
l) CUSTOM_LOCATIONS = " $OPTARG " ; ;
2024-07-10 14:03:57 +02:00
-)
case " ${ OPTARG } " in
2024-07-15 12:59:33 +02:00
host-help) usage ; ;
host-backup-id)
BACKUP_HOST = true
HOST_ID = " ${ !OPTIND } " ; shift
; ;
host-backup) BACKUP = true ; ;
host-restore)
RESTORE = true
; ;
host-restore-id)
RESTORE_HOST = true
HOST_ID = " ${ !OPTIND } " ; shift
; ;
host-create-user)
2024-07-10 14:03:57 +02:00
CREATE_USER = true
USERNAME = " ${ !OPTIND } " ; shift
PASSWORD = " ${ !OPTIND } " ; shift
2024-07-12 13:07:09 +02:00
EMAIL = " ${ !OPTIND } " ; shift
2024-07-10 14:03:57 +02:00
; ;
2024-07-15 12:59:33 +02:00
host-delete-user)
2024-07-10 14:03:57 +02:00
DELETE_USER = true
USERNAME = " ${ !OPTIND } " ; shift
; ;
2024-07-15 12:59:33 +02:00
host-delete)
2024-07-10 14:03:57 +02:00
DELETE_HOST = true
HOST_ID = " ${ !OPTIND } " ; shift
; ;
2024-07-15 12:59:33 +02:00
host-list) LIST_HOSTS = true ; ;
host-list-full) LIST_HOSTS_FULL = true ; ;
host-list-ssl-certificates) LIST_SSL_CERTIFICATES = true ; ;
host-list-users) LIST_USERS = true ; ;
host-search)
2024-07-10 14:03:57 +02:00
SEARCH_HOST = true
SEARCH_HOSTNAME = " ${ !OPTIND } " ; shift
; ;
2024-07-15 12:59:33 +02:00
host-enable)
2024-07-11 11:50:09 +02:00
ENABLE_HOST = true
HOST_ID = " ${ !OPTIND } " ; shift
; ;
2024-07-15 12:59:33 +02:00
host-disable)
2024-07-11 11:50:09 +02:00
DISABLE_HOST = true
HOST_ID = " ${ !OPTIND } " ; shift
; ;
2024-07-15 12:59:33 +02:00
host-check-token) CHECK_TOKEN = true ; ;
host-generate-cert)
2024-07-12 21:43:35 +02:00
GENERATE_CERT = true
DOMAIN = " ${ !OPTIND } " ; shift
EMAIL = " ${ !OPTIND } " ; shift
; ;
2024-07-13 11:46:53 +02:00
custom) CUSTOM_CERT = true ; ;
2024-07-15 12:59:33 +02:00
host-ssl-enable)
2024-07-12 21:43:35 +02:00
ENABLE_SSL = true
HOST_ID = " ${ !OPTIND } " ; shift
; ;
2024-07-15 12:59:33 +02:00
host-ssl-disable)
2024-07-12 21:43:35 +02:00
DISABLE_SSL = true
HOST_ID = " ${ !OPTIND } " ; shift
; ;
2024-07-15 12:59:33 +02:00
host-show-default)
2024-07-12 21:43:35 +02:00
SHOW_DEFAULT = true
; ;
2024-07-15 12:59:33 +02:00
host-show)
2024-07-12 21:43:35 +02:00
SHOW_HOST = true
HOST_ID = " ${ !OPTIND } " ; shift
; ;
force-cert-creation)
FORCE_CERT_CREATION = true
; ;
2024-07-10 16:41:36 +02:00
*) echo " Unknown option -- ${ OPTARG } " ; usage ; ;
2024-07-10 14:03:57 +02:00
esac ; ;
*) usage ; ;
esac
done
2024-07-12 13:07:09 +02:00
# If no arguments are provided, display usage
if [ $# -eq 0 ] ; then
usage
fi
# Check if the Nginx Proxy Manager API is accessible
2024-07-10 20:46:54 +02:00
check_nginx_access( ) {
if ping -c 2 -W 2 $NGINX_IP & > /dev/null; then
if curl --output /dev/null --silent --head --fail " $BASE_URL " ; then
2024-07-12 22:32:29 +02:00
echo -e " \n ✅ Nginx url: $BASE_URL "
2024-07-10 20:46:54 +02:00
else
2024-07-12 22:32:29 +02:00
echo -e " \n ⛔ Nginx url ⛔ $BASE_URL is NOT accessible. "
2024-07-10 20:46:54 +02:00
exit 1
fi
else
2024-07-12 22:01:59 +02:00
echo -e " \n ⛔ $NGINX_IP ⛔ is not responding. Houston, we have a problem. "
2024-07-10 20:46:54 +02:00
exit 1
fi
}
2024-07-12 13:07:09 +02:00
# Generate a new API token
2024-07-10 20:46:54 +02:00
generate_token( ) {
response = $( curl -s -X POST " $BASE_URL $API_ENDPOINT " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " {\"identity\":\" $API_USER \",\"secret\":\" $API_PASS \",\"expiry\":\" $TOKEN_EXPIRY \"} " )
2024-07-12 21:43:35 +02:00
token = $( echo " $response " | jq -r '.token' )
expires = $( echo " $response " | jq -r '.expires' )
2024-07-10 20:46:54 +02:00
if [ " $token " != "null" ] ; then
2024-07-12 21:43:35 +02:00
echo " $token " > $TOKEN_FILE
echo " $expires " > $EXPIRY_FILE
2024-07-10 20:46:54 +02:00
echo " Token: $token "
echo " Expiry: $expires "
else
echo -e " ${ COLOR_RED } Error generating token. ${ COLOR_RESET } "
2024-07-12 13:07:09 +02:00
echo -e "Check your [user] and [pass] and [IP]"
2024-07-10 20:46:54 +02:00
exit 1
fi
}
2024-07-12 13:07:09 +02:00
# Validate the existing token
2024-07-10 20:46:54 +02:00
validate_token( ) {
if [ ! -f " $TOKEN_FILE " ] || [ ! -f " $EXPIRY_FILE " ] ; then
return 1
fi
token = $( cat $TOKEN_FILE )
expires = $( cat $EXPIRY_FILE )
current_time = $( date -u +"%Y-%m-%dT%H:%M:%SZ" )
if [ [ " $current_time " < " $expires " ] ] ; then
2024-07-12 21:43:35 +02:00
echo -e " ✅ ${ COLOR_GREEN } The token is valid. Expiry: $expires ${ COLOR_RESET } "
2024-07-10 20:46:54 +02:00
return 0
else
2024-07-12 21:43:35 +02:00
echo -e " ⛔ ${ COLOR_RED } The token is invalid. Expiry: $expires ${ COLOR_RESET } "
2024-07-10 20:46:54 +02:00
return 1
fi
}
2024-07-12 13:07:09 +02:00
# Ensure Nginx access and token validity before proceeding
2024-07-15 12:59:33 +02:00
if [ [ ! " $1 " = ~ --host-help ] ] ; then
2024-07-12 13:07:09 +02:00
check_nginx_access
2024-07-10 20:46:54 +02:00
2024-07-12 13:07:09 +02:00
if ! validate_token; then
echo "No valid token found. Generating a new token..."
generate_token
fi
2024-07-10 14:03:57 +02:00
fi
2024-07-13 11:46:53 +02:00
2024-07-15 12:59:33 +02:00
# Function to backup a single host configuration and its certificate (if exists)
backup_single_host( ) {
if [ -z " $HOST_ID " ] ; then
echo " 📦 The --host-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 ) " )
2024-07-15 13:26:31 +02:00
echo " $RESPONSE " | jq '.' > " $BACKUP_DIR /proxy_host_ID_+ ${ HOST_ID } _IP_ ${ NGINX_IP //./_ } _ $DATE .json "
2024-07-15 12:59:33 +02:00
# Backup SSL certificate if it exists
CERTIFICATE_ID = $( echo " $RESPONSE " | jq -r '.certificate_id' )
if [ " $CERTIFICATE_ID " != "null" ] ; then
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/certificates/ $CERTIFICATE_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
2024-07-15 13:26:31 +02:00
echo " $RESPONSE " | jq '.' > " $BACKUP_DIR /ssl_certificate_ID_+ ${ CERTIFICATE_ID } _IP_ ${ NGINX_IP //./_ } _ $DATE .json "
2024-07-15 12:59:33 +02:00
fi
echo -e " ✅ ${ COLOR_GREEN } Backup for host ID $HOST_ID completed successfully in 📂 ' $BACKUP_DIR ' ${ COLOR_RESET } \n "
}
# Function to restore configurations from a backup file
restore_backup( ) {
echo " 📦 Restoring backup from ' $BACKUP_DIR '... "
# Restore proxy hosts
RESPONSE = $( cat " $BACKUP_DIR /proxy_hosts_ ${ NGINX_IP //./_ } _ $DATE .json " )
echo " $RESPONSE " | jq -c '.[]' | while read -r proxy; 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 " $proxy "
done
# Restore users
RESPONSE = $( cat " $BACKUP_DIR /users_ ${ NGINX_IP //./_ } _ $DATE .json " )
echo " $RESPONSE " | jq -c '.[]' | while read -r user; do
curl -s -X POST " $BASE_URL /users " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " $user "
done
# Restore SSL certificates
RESPONSE = $( cat " $BACKUP_DIR /ssl_certificates_ ${ NGINX_IP //./_ } _ $DATE .json " )
echo " $RESPONSE " | jq -c '.[]' | 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
# Restore access lists
RESPONSE = $( cat " $BACKUP_DIR /access_lists_ ${ NGINX_IP //./_ } _ $DATE .json " )
echo " $RESPONSE " | jq -c '.[]' | while read -r list; do
curl -s -X POST " $BASE_URL /nginx/access-lists " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " $list "
done
# Restore settings
RESPONSE = $( cat " $BACKUP_DIR /settings_ ${ NGINX_IP //./_ } _ $DATE .json " )
curl -s -X POST " $BASE_URL /nginx/settings " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " $RESPONSE "
2024-07-15 13:26:31 +02:00
echo -e " ✅ ${ COLOR_GREEN } Restore completed successfully from 📂 ' $BACKUP_DIR ' ${ COLOR_RESET } \n "
2024-07-15 12:59:33 +02:00
}
# Function to restore a single host configuration and its certificate (if exists)
restore_single_host( ) {
if [ -z " $HOST_ID " ] ; then
2024-07-15 13:26:31 +02:00
echo -e "\n 🩹 The --host-restore-id option requires a host ID."
2024-07-15 12:59:33 +02:00
usage
fi
2024-07-15 13:26:31 +02:00
echo -e " \n 🩹 Restoring backup for host ID $HOST_ID from ' $BACKUP_DIR '... "
2024-07-15 12:59:33 +02:00
# Restore proxy host
RESPONSE = $( cat " $BACKUP_DIR /proxy_host_ ${ HOST_ID } _ ${ NGINX_IP //./_ } _ $DATE .json " )
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 " $RESPONSE "
# Restore SSL certificate if it exists
if [ -f " $BACKUP_DIR /ssl_certificate_ ${ CERTIFICATE_ID } _ ${ NGINX_IP //./_ } _ $DATE .json " ] ; then
RESPONSE = $( cat " $BACKUP_DIR /ssl_certificate_ ${ CERTIFICATE_ID } _ ${ NGINX_IP //./_ } _ $DATE .json " )
curl -s -X POST " $BASE_URL /nginx/certificates " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " $RESPONSE "
fi
2024-07-15 13:26:31 +02:00
echo -e " ✅ ${ COLOR_GREEN } Restore for host ID $HOST_ID completed successfully from 📂 ' $BACKUP_DIR ' ${ COLOR_RESET } \n "
2024-07-15 12:59:33 +02:00
}
2024-07-12 13:07:09 +02:00
# Check if a proxy host with the given domain names already exists
2024-07-10 16:41:36 +02:00
check_existing_proxy_host( ) {
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
EXISTING_HOST = $( echo " $RESPONSE " | jq -r --arg DOMAIN " $DOMAIN_NAMES " '.[] | select(.domain_names[] == $DOMAIN)' )
if [ -n " $EXISTING_HOST " ] ; then
2024-07-10 20:46:54 +02:00
echo -e " \n 🔔 Proxy host for $DOMAIN_NAMES already exists. ${ COLOR_GREEN } "
2024-07-15 12:59:33 +02:00
read -p " 👉 Do you want to update it with the new configuration? (y/n): " -r
2024-07-10 16:41:36 +02:00
if [ [ $REPLY = ~ ^[ Yy] $ ] ] ; then
HOST_ID = $( echo " $EXISTING_HOST " | jq -r '.id' )
2024-07-12 21:43:35 +02:00
update_proxy_host " $HOST_ID "
2024-07-10 16:41:36 +02:00
else
2024-07-15 13:26:31 +02:00
echo -e " ${ COLOR_RESET } No changes made.\n "
2024-07-10 16:41:36 +02:00
exit 0
fi
2024-07-10 20:46:54 +02:00
else
create_new_proxy_host
2024-07-10 16:41:36 +02:00
fi
}
2024-07-12 13:07:09 +02:00
# Update an existing proxy host
2024-07-10 16:41:36 +02:00
update_proxy_host( ) {
HOST_ID = $1
2024-07-15 12:59:33 +02:00
echo -e " \n 🌀 Updating proxy host for $DOMAIN_NAMES ... "
2024-07-15 14:36:34 +02:00
if [ -n " $CUSTOM_LOCATIONS " ] ; then
CUSTOM_LOCATIONS_ESCAPED = $( printf '%s' " $CUSTOM_LOCATIONS " | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g' )
else
CUSTOM_LOCATIONS_ESCAPED = "[]"
fi
2024-07-10 16:41:36 +02:00
2024-07-12 13:07:09 +02:00
ADVANCED_CONFIG_ESCAPED = $( printf '%s' " $ADVANCED_CONFIG " | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g' )
DATA = $( printf ' {
2024-07-15 14:36:34 +02:00
"domain_names" : [ "%s" ] ,
"forward_host" : "%s" ,
"forward_port" : %s,
"access_list_id" : null,
"certificate_id" : null,
"ssl_forced" : %s,
"caching_enabled" : %s,
"block_exploits" : %s,
"advanced_config" : "%s" ,
"meta" : {
"dns_challenge" : %s
} ,
"allow_websocket_upgrade" : %s,
"http2_support" : %s,
"forward_scheme" : "%s" ,
"enabled" : true,
"locations" : %s
} ' " $DOMAIN_NAMES " " $FORWARD_HOST " " $FORWARD_PORT " " $SSL_FORCED " " $CACHING_ENABLED " " $BLOCK_EXPLOITS " " $ADVANCED_CONFIG_ESCAPED " " $DNS_CHALLENGE " " $ALLOW_WEBSOCKET_UPGRADE " " $HTTP2_SUPPORT " " $FORWARD_SCHEME " " $CUSTOM_LOCATIONS_ESCAPED " )
2024-07-12 13:07:09 +02:00
2024-07-15 13:26:31 +02:00
echo -e " \n Request Data: $DATA "
2024-07-12 13:07:09 +02:00
echo " $DATA " | jq . > /dev/null 2>& 1
if [ $? -ne 0 ] ; then
2024-07-15 13:26:31 +02:00
echo -e " \n ${ COLOR_RED } Invalid JSON format ${ COLOR_RESET } "
2024-07-12 13:07:09 +02:00
exit 1
fi
RESPONSE = $( curl -v -s -X PUT " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
2024-07-10 16:41:36 +02:00
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " $DATA " )
2024-07-12 13:07:09 +02:00
echo -e " Response: $RESPONSE "
2024-07-12 21:43:35 +02:00
if [ " $( echo " $RESPONSE " | jq -r '.error | length' ) " -eq 0 ] ; then
2024-07-12 13:07:09 +02:00
echo -e " ✅ ${ COLOR_GREEN } Proxy host updated successfully! ${ COLOR_RESET } "
2024-07-10 20:46:54 +02:00
else
2024-07-12 13:07:09 +02:00
echo -e " ⛔ ${ COLOR_RED } Failed to update proxy host. Error: $( echo " $RESPONSE " | jq -r '.message' ) ${ COLOR_RESET } "
2024-07-10 16:41:36 +02:00
fi
2024-07-10 20:46:54 +02:00
}
2024-07-10 16:41:36 +02:00
2024-07-15 14:36:34 +02:00
2024-07-12 13:07:09 +02:00
# Create a new proxy host
2024-07-10 20:46:54 +02:00
create_new_proxy_host( ) {
2024-07-15 12:59:33 +02:00
echo -e " \n 🌍 Creating proxy host for $DOMAIN_NAMES ... "
2024-07-15 14:36:34 +02:00
if [ -n " $CUSTOM_LOCATIONS " ] ; then
CUSTOM_LOCATIONS_ESCAPED = $( printf '%s' " $CUSTOM_LOCATIONS " | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g' )
else
CUSTOM_LOCATIONS_ESCAPED = "[]"
fi
DATA = $( printf ' {
"domain_names" : [ "%s" ] ,
"forward_host" : "%s" ,
"forward_port" : %s,
2024-07-10 14:03:57 +02:00
"access_list_id" : null,
"certificate_id" : null,
2024-07-12 21:43:35 +02:00
"ssl_forced" : false,
2024-07-15 14:36:34 +02:00
"caching_enabled" : %s,
"block_exploits" : %s,
"advanced_config" : "%s" ,
2024-07-10 14:03:57 +02:00
"meta" : {
2024-07-15 14:36:34 +02:00
"dns_challenge" : %s
2024-07-10 14:03:57 +02:00
} ,
2024-07-15 14:36:34 +02:00
"allow_websocket_upgrade" : %s,
"http2_support" : %s,
"forward_scheme" : "%s" ,
2024-07-10 14:03:57 +02:00
"enabled" : true,
2024-07-15 14:36:34 +02:00
"locations" : %s
} ' " $DOMAIN_NAMES " " $FORWARD_HOST " " $FORWARD_PORT " " $CACHING_ENABLED " " $BLOCK_EXPLOITS " " $ADVANCED_CONFIG " " $DNS_CHALLENGE " " $ALLOW_WEBSOCKET_UPGRADE " " $HTTP2_SUPPORT " " $FORWARD_SCHEME " " $CUSTOM_LOCATIONS_ESCAPED " )
echo -e " \n Request Data: $DATA "
echo " $DATA " | jq . > /dev/null 2>& 1
if [ $? -ne 0 ] ; then
echo -e " \n ${ COLOR_RED } Invalid JSON format ${ COLOR_RESET } "
exit 1
fi
2024-07-10 14:03:57 +02:00
RESPONSE = $( 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 " $DATA " )
2024-07-15 14:36:34 +02:00
if [ " $( echo " $RESPONSE " | jq -r '.error | length' ) " -eq 0 ] ; then
2024-07-12 13:07:09 +02:00
echo -e " ✅ ${ COLOR_GREEN } Proxy host created successfully! ${ COLOR_RESET } "
2024-07-10 20:46:54 +02:00
else
2024-07-15 13:26:31 +02:00
echo -e " ⛔ ${ COLOR_RED } Failed to create proxy host. Error: $( echo " $RESPONSE " | jq -r '.message' ) ${ COLOR_RESET } \n "
2024-07-10 20:46:54 +02:00
fi
}
2024-07-12 13:07:09 +02:00
# Create or update a proxy host based on the existence of the domain
2024-07-10 20:46:54 +02:00
create_or_update_proxy_host( ) {
if [ -z " $DOMAIN_NAMES " ] || [ -z " $FORWARD_HOST " ] || [ -z " $FORWARD_PORT " ] ; then
2024-07-15 13:26:31 +02:00
echo -e "\n 🌍 The -d, -i, and -p options are required to create or update a proxy host.\n"
2024-07-10 20:46:54 +02:00
usage
fi
check_existing_proxy_host
2024-07-10 14:03:57 +02:00
}
2024-07-12 13:07:09 +02:00
# Delete a proxy host by ID
2024-07-10 14:03:57 +02:00
delete_proxy_host( ) {
if [ -z " $HOST_ID " ] ; then
2024-07-15 12:59:33 +02:00
echo -e "\n 💣 The --host-delete option requires a host ID."
2024-07-10 14:03:57 +02:00
usage
fi
2024-07-15 13:26:31 +02:00
echo -e " \n 💣 Deleting proxy host ID: $HOST_ID ... "
2024-07-12 13:07:09 +02:00
2024-07-10 14:03:57 +02:00
RESPONSE = $( curl -s -X DELETE " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
2024-07-12 13:07:09 +02:00
if echo " $RESPONSE " | jq -e .error > /dev/null 2>& 1; then
echo -e " ⛔ ${ COLOR_RED } Failed to delete proxy host. Error: $( echo " $RESPONSE " | jq -r '.message' ) ${ COLOR_RESET } "
2024-07-10 20:46:54 +02:00
else
2024-07-15 13:26:31 +02:00
echo -e " ✅ ${ COLOR_GREEN } Proxy host 💣 deleted successfully! ${ COLOR_RESET } \n "
2024-07-10 20:46:54 +02:00
fi
2024-07-10 14:03:57 +02:00
}
2024-07-13 11:46:53 +02:00
# Function to pad strings to a certain length
pad( ) {
local str = " $1 "
local len = " $2 "
local str_len = ${# str }
local pad_len = $(( len - str_len))
local padding = $( printf '%*s' " $pad_len " "" )
echo " $str $padding "
}
2024-07-12 13:07:09 +02:00
# List all proxy hosts with basic details
2024-07-11 11:50:09 +02:00
list_proxy_hosts( ) {
2024-07-13 11:46:53 +02:00
echo -e " \n ${ COLOR_ORANGE } 👉 List of proxy hosts (simple) ${ COLOR_RESET } "
printf " %-6s %-36s %-9s %-4s\n" "ID" "Domain" "Status" "SSL"
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
2024-07-15 13:26:31 +02:00
echo -e " \n $RESPONSE " | jq -r '.[] | "\(.id) \(.domain_names | join(", ")) \(.enabled) \(.ssl_forced)"' | while read -r id domain enabled ssl_forced; do
2024-07-13 11:46:53 +02:00
if [ " $enabled " -eq 1 ] ; then
#status="[${WHITE_ON_GREEN}enabled${COLOR_RESET} ]"
status = " $( echo -e " ${ WHITE_ON_GREEN } enabled ${ COLOR_RESET } " ) "
else
#status="[${COLOR_RED}disabled${COLOR_RESET}]"
status = " $( echo -e " ${ COLOR_RED } disable ${ COLOR_RESET } " ) "
fi
if [ " $ssl_forced " -eq 1 ] ; then
ssl_status = "✅"
else
ssl_status = "✘"
fi
# Print the row with colors
printf " ${ COLOR_YELLOW } %6s ${ COLOR_RESET } ${ COLOR_GREEN } %-36s ${ COLOR_RESET } %-8s %-4s\n " \
" $( pad " $id " 6) " " $( pad " $domain " 36) " " $status " " $ssl_status "
done
2024-07-15 12:59:33 +02:00
echo ""
2024-07-11 11:50:09 +02:00
}
2024-07-12 13:07:09 +02:00
# List all proxy hosts with full details
2024-07-10 14:03:57 +02:00
list_proxy_hosts_full( ) {
2024-07-12 13:07:09 +02:00
echo -e " \n ${ COLOR_ORANGE } 👉 List of proxy hosts with full details... ${ COLOR_RESET } \n "
2024-07-10 14:03:57 +02:00
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
2024-07-12 13:07:09 +02:00
echo " $RESPONSE " | jq -c '.[]' | while read -r proxy; do
echo " $proxy " | jq .
2024-07-10 14:03:57 +02:00
done
2024-07-15 12:59:33 +02:00
echo ""
2024-07-12 21:43:35 +02:00
}
2024-07-12 13:07:09 +02:00
# Search for a proxy host by domain name
2024-07-10 14:03:57 +02:00
search_proxy_host( ) {
if [ -z " $SEARCH_HOSTNAME " ] ; then
2024-07-15 12:59:33 +02:00
echo " 🔍 The --host-search option requires a domain name."
2024-07-10 14:03:57 +02:00
usage
fi
2024-07-15 12:59:33 +02:00
echo -e " \n 🔍 Searching for proxy host for $SEARCH_HOSTNAME ... "
2024-07-10 14:03:57 +02:00
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
2024-07-10 21:39:11 +02:00
2024-07-10 14:03:57 +02:00
echo " $RESPONSE " | jq -c --arg search " $SEARCH_HOSTNAME " '.[] | select(.domain_names[] | contains($search))' | while IFS = read -r line; do
2024-07-10 21:39:11 +02:00
id = $( echo " $line " | jq -r '.id' )
2024-07-10 14:03:57 +02:00
domain_names = $( echo " $line " | jq -r '.domain_names[]' )
2024-07-15 12:59:33 +02:00
echo -e " 🔎 id: ${ COLOR_YELLOW } $id ${ COLOR_RESET } ${ COLOR_GREEN } $domain_names ${ COLOR_RESET } \n "
2024-07-10 14:03:57 +02:00
done
}
2024-07-12 13:07:09 +02:00
# List all SSL certificates
2024-07-10 14:03:57 +02:00
list_ssl_certificates( ) {
2024-07-12 13:07:09 +02:00
echo " 👉 List of SSL certificates..."
2024-07-10 14:03:57 +02:00
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/certificates " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
echo " $RESPONSE " | jq
}
2024-07-12 13:07:09 +02:00
# List all users
2024-07-10 14:03:57 +02:00
list_users( ) {
2024-07-15 13:26:31 +02:00
echo -e "\n 👉 List of users..."
2024-07-10 14:03:57 +02:00
RESPONSE = $( curl -s -X GET " $BASE_URL /users " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
2024-07-15 13:26:31 +02:00
echo -e " \n $RESPONSE " | jq
2024-07-10 14:03:57 +02:00
}
2024-07-12 13:07:09 +02:00
# Create a new user
2024-07-10 14:03:57 +02:00
create_user( ) {
2024-07-12 13:07:09 +02:00
if [ -z " $USERNAME " ] || [ -z " $PASSWORD " ] || [ -z " $EMAIL " ] ; then
2024-07-15 13:26:31 +02:00
echo -e "\n 👤 The username, password, and email parameters are required to create a user."
2024-07-10 14:03:57 +02:00
usage
fi
2024-07-15 13:26:31 +02:00
echo -e " \n 👤 Creating user $USERNAME ... "
2024-07-12 13:07:09 +02:00
DATA = $( jq -n --arg username " $USERNAME " --arg password " $PASSWORD " --arg email " $EMAIL " --arg name " $USERNAME " --arg nickname " $USERNAME " --arg secret " $PASSWORD " ' {
name: $name ,
nickname: $nickname ,
email: $email ,
roles: [ "admin" ] ,
is_disabled: false,
auth: {
type: "password" ,
secret: $secret
}
} ' )
echo " Data being sent: $DATA " # Log the data being sent
HTTP_RESPONSE = $( curl -s -w "HTTPSTATUS:%{http_code}" -X POST " $BASE_URL /users " \
2024-07-10 14:03:57 +02:00
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
2024-07-12 13:07:09 +02:00
--data-raw " $DATA " )
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 201 ] ; then
2024-07-15 12:59:33 +02:00
echo -e " ✅ ${ COLOR_GREEN } User created successfully! ${ COLOR_RESET } \n "
2024-07-10 20:46:54 +02:00
else
2024-07-12 13:07:09 +02:00
echo " Data sent: $DATA " # Log the data sent
2024-07-15 12:59:33 +02:00
echo -e " ⛔ ${ COLOR_RED } Failed to create user. HTTP status: $HTTP_STATUS . Response: $HTTP_BODY ${ COLOR_RESET } \n "
2024-07-10 20:46:54 +02:00
fi
2024-07-10 14:03:57 +02:00
}
2024-07-12 13:07:09 +02:00
# Delete a user by username
2024-07-10 14:03:57 +02:00
delete_user( ) {
if [ -z " $USERNAME " ] ; then
2024-07-15 12:59:33 +02:00
echo " 🗑️ The --host-delete-user option requires a 👤 username."
2024-07-10 14:03:57 +02:00
usage
fi
2024-07-15 12:59:33 +02:00
echo " 🗑️ Deleting user 👤 $USERNAME ... "
2024-07-12 13:07:09 +02:00
# Fetch the user ID based on the username
2024-07-10 14:03:57 +02:00
USER_ID = $( curl -s -X GET " $BASE_URL /users " \
2024-07-12 13:07:09 +02:00
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " | jq -r --arg USERNAME " $USERNAME " '.[] | select(.nickname == $USERNAME) | .id' )
2024-07-10 14:03:57 +02:00
if [ -n " $USER_ID " ] ; then
2024-07-12 13:07:09 +02:00
HTTP_RESPONSE = $( curl -s -w "HTTPSTATUS:%{http_code}" -X DELETE " $BASE_URL /users/ $USER_ID " \
2024-07-10 14:03:57 +02:00
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
2024-07-12 13:07:09 +02:00
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 ] ; then
2024-07-15 12:59:33 +02:00
echo -e " ✅ ${ COLOR_GREEN } User deleted successfully! ${ COLOR_RESET } \n "
2024-07-10 20:46:54 +02:00
else
2024-07-15 12:59:33 +02:00
echo -e " ⛔ ${ COLOR_RED } Failed to delete user. HTTP status: $HTTP_STATUS . Response: $HTTP_BODY ${ COLOR_RESET } \n "
2024-07-10 20:46:54 +02:00
fi
2024-07-10 14:03:57 +02:00
else
2024-07-15 12:59:33 +02:00
echo -e " ${ COLOR_RED } User not found: $USERNAME ${ COLOR_RESET } \n "
2024-07-10 14:03:57 +02:00
fi
}
2024-07-12 13:07:09 +02:00
# Enable a proxy host by ID
2024-07-11 11:50:09 +02:00
enable_proxy_host( ) {
if [ -z " $HOST_ID " ] ; then
2024-07-15 12:59:33 +02:00
echo -e "\n 💣 The --host-enable option requires a host ID."
2024-07-11 11:50:09 +02:00
usage
fi
2024-07-15 12:59:33 +02:00
echo -e " \n ✅ Enabling 🌐 proxy host ID: $HOST_ID ... "
2024-07-12 13:07:09 +02:00
# Check if the proxy host exists before enabling
CHECK_RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
if echo " $CHECK_RESPONSE " | jq -e '.id' > /dev/null 2>& 1; then
# Proxy host exists, proceed to enable
DATA = $( echo " $CHECK_RESPONSE " | jq '{enabled: 1}' )
HTTP_RESPONSE = $( curl -s -w "HTTPSTATUS:%{http_code}" -X PUT " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " $DATA " )
# Extract the body and the status
HTTP_BODY = $( echo " $HTTP_RESPONSE " | sed -e 's/HTTPSTATUS\:.*//g' )
HTTP_STATUS = $( echo " $HTTP_RESPONSE " | tr -d '\n' | sed -e 's/.*HTTPSTATUS://' )
2024-07-15 12:59:33 +02:00
if [ " $HTTP_STATUS " -eq 200] ; then
echo -e " ✅ ${ COLOR_GREEN } Proxy host enabled successfully! ${ COLOR_RESET } \n "
2024-07-12 13:07:09 +02:00
else
2024-07-15 12:59:33 +02:00
echo -e " ⛔ ${ COLOR_RED } Failed to enable proxy host. HTTP status: $HTTP_STATUS . Response: $HTTP_BODY ${ COLOR_RESET } \n "
2024-07-12 13:07:09 +02:00
fi
2024-07-11 11:50:09 +02:00
else
2024-07-15 12:59:33 +02:00
echo -e " ⛔ ${ COLOR_RED } Proxy host with ID $HOST_ID does not exist. ${ COLOR_RESET } \n "
2024-07-11 11:50:09 +02:00
fi
}
2024-07-12 13:07:09 +02:00
# Disable a proxy host by ID
2024-07-11 11:50:09 +02:00
disable_proxy_host( ) {
if [ -z " $HOST_ID " ] ; then
2024-07-15 12:59:33 +02:00
echo -e "\n ❌ The --host-disable option requires a host ID."
2024-07-11 11:50:09 +02:00
usage
fi
2024-07-15 12:59:33 +02:00
echo -e " \n ❌ Disabling 🌐 proxy host ID: $HOST_ID ... "
2024-07-12 13:07:09 +02:00
# Check if the proxy host exists before disabling
CHECK_RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
if echo " $CHECK_RESPONSE " | jq -e '.id' > /dev/null 2>& 1; then
# Proxy host exists, proceed to disable
DATA = $( echo " $CHECK_RESPONSE " | jq '{enabled: 0}' )
HTTP_RESPONSE = $( curl -s -w "HTTPSTATUS:%{http_code}" -X PUT " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " $DATA " )
# Extract the body and the status
HTTP_BODY = $( echo " $HTTP_RESPONSE " | sed -e 's/HTTPSTATUS\:.*//g' )
HTTP_STATUS = $( echo " $HTTP_RESPONSE " | tr -d '\n' | sed -e 's/.*HTTPSTATUS://' )
2024-07-15 12:59:33 +02:00
if [ " $HTTP_STATUS " -eq 200] ; then
echo -e " ✅ ${ COLOR_GREEN } Proxy host disabled successfully! ${ COLOR_RESET } \n "
2024-07-12 13:07:09 +02:00
else
2024-07-15 12:59:33 +02:00
echo -e " ⛔ ${ COLOR_RED } Failed to disable proxy host. HTTP status: $HTTP_STATUS . Response: $HTTP_BODY ${ COLOR_RESET } \n "
2024-07-12 13:07:09 +02:00
fi
2024-07-11 11:50:09 +02:00
else
2024-07-15 12:59:33 +02:00
echo -e " ⛔ ${ COLOR_RED } Proxy host with ID $HOST_ID does not exist. ${ COLOR_RESET } \n "
2024-07-11 11:50:09 +02:00
fi
}
2024-07-12 21:43:35 +02:00
# Generate Let's Encrypt certificate if not exists
generate_certificate( ) {
if [ -z " $DOMAIN " ] || [ -z " $EMAIL " ] ; then
2024-07-15 12:59:33 +02:00
echo -e "\n 🛡️ The --host-generate-cert option requires a domain and email."
2024-07-12 21:43:35 +02:00
usage
fi
2024-07-13 11:46:53 +02:00
echo -e " \n 👀 Checking if Let's Encrypt certificate for domain: $DOMAIN exists... "
2024-07-12 21:43:35 +02:00
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/certificates " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
EXISTING_CERT = $( echo " $RESPONSE " | jq -r --arg DOMAIN " $DOMAIN " '.[] | select(.domain_names[] == $DOMAIN)' )
if [ -n " $EXISTING_CERT " ] && ! $FORCE_CERT_CREATION ; then
EXPIRES_ON = $( echo " $EXISTING_CERT " | jq -r '.expires_on' )
echo -e " 🔔 Certificate for $DOMAIN already exists and is valid until $EXPIRES_ON . "
exit 0
fi
2024-07-13 11:46:53 +02:00
echo -e " ⚙️ Generating Let's Encrypt certificate for domain: $DOMAIN ... "
2024-07-12 21:43:35 +02:00
DATA = $( jq -n --arg domain " $DOMAIN " --arg email " $EMAIL " --argjson agree true ' {
provider: "letsencrypt" ,
domain_names: [ $domain ] ,
meta: {
letsencrypt_agree: $agree ,
letsencrypt_email: $email
}
} ' )
2024-07-13 11:46:53 +02:00
echo -e " \n 🔔 Please WAIT until validation !!(or not)!! \n Data being sent: $DATA " # Log the data being sent
2024-07-12 21:43:35 +02:00
HTTP_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 " $DATA " )
HTTP_BODY = $( echo " $HTTP_RESPONSE " | sed -e 's/HTTPSTATUS\:.*//g' )
HTTP_STATUS = $( echo " $HTTP_RESPONSE " | tr -d '\n' | sed -e 's/.*HTTPSTATUS://' )
2024-07-15 12:59:33 +02:00
if [ " $HTTP_STATUS " -eq 201] ; then
echo -e " ✅ ${ COLOR_GREEN } Certificate generated successfully! ${ COLOR_RESET } \n "
2024-07-12 21:43:35 +02:00
else
echo " Data sent: $DATA " # Log the data sent
2024-07-15 12:59:33 +02:00
echo -e " ⛔ ${ COLOR_RED } Failed to generate certificate. HTTP status: $HTTP_STATUS . Response: $HTTP_BODY ${ COLOR_RESET } \n "
2024-07-12 21:43:35 +02:00
fi
}
2024-07-15 12:59:33 +02:00
# enable_ssl function
2024-07-12 21:43:35 +02:00
enable_ssl( ) {
if [ -z " $HOST_ID " ] ; then
2024-07-15 12:59:33 +02:00
echo -e "\n 🛡️ The --host-ssl-enable option requires a host ID."
2024-07-12 21:43:35 +02:00
usage
fi
2024-07-15 12:59:33 +02:00
echo -e " \n ✅ Enabling 🔒 SSL, HTTP/2, and HSTS for proxy host ID: $HOST_ID ... "
2024-07-12 21:43:35 +02:00
2024-07-13 11:46:53 +02:00
# Check host details
2024-07-12 21:43:35 +02:00
CHECK_RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
CERTIFICATE_ID = $( echo " $CHECK_RESPONSE " | jq -r '.certificate_id' )
2024-07-13 11:46:53 +02:00
DOMAIN_NAMES = $( echo " $CHECK_RESPONSE " | jq -r '.domain_names[]' )
# Check if a Let's Encrypt certificate exists
CERT_EXISTS = $( curl -s -X GET " $BASE_URL /nginx/certificates " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " | jq -r --arg domain " $DOMAIN_NAMES " '.[] | select(.provider == "letsencrypt" and .domain_names[] == $domain) | .id' )
if [ -z " $CERT_EXISTS " ] ; then
echo " ⛔ No Let's Encrypt certificate associated with this host. Generating a new certificate..."
generate_certificate
2024-07-12 21:43:35 +02:00
CERTIFICATE_ID = $( curl -s -X GET " $BASE_URL /nginx/certificates " \
2024-07-13 11:46:53 +02:00
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " | jq -r --arg domain " $DOMAIN_NAMES " '.[] | select(.provider == "letsencrypt" and .domain_names[] == $domain) | .id' )
else
echo " ✅ Existing Let's Encrypt certificate found. Using certificate ID: $CERT_EXISTS "
CERTIFICATE_ID = " $CERT_EXISTS "
2024-07-12 21:43:35 +02:00
fi
2024-07-13 11:46:53 +02:00
# Update the host with SSL enabled
DATA = $( jq -n --arg cert_id " $CERTIFICATE_ID " ' {
certificate_id: $cert_id ,
2024-07-12 21:43:35 +02:00
ssl_forced: true,
http2_support: true,
hsts_enabled: true,
2024-07-13 11:46:53 +02:00
hsts_subdomains: false
2024-07-12 21:43:35 +02:00
} ' )
2024-07-13 11:46:53 +02:00
echo -e " \n Data being sent for SSL enablement: $DATA " # Log the data being sent
2024-07-12 21:43:35 +02:00
HTTP_RESPONSE = $( curl -s -w "HTTPSTATUS:%{http_code}" -X PUT " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " $DATA " )
HTTP_BODY = $( echo " $HTTP_RESPONSE " | sed -e 's/HTTPSTATUS\:.*//g' )
HTTP_STATUS = $( echo " $HTTP_RESPONSE " | tr -d '\n' | sed -e 's/.*HTTPSTATUS://' )
2024-07-15 12:59:33 +02:00
if [ " $HTTP_STATUS " -eq 200] ; then
2024-07-13 11:46:53 +02:00
echo -e " \n ✅ ${ COLOR_GREEN } SSL, HTTP/2, and HSTS enabled successfully! ${ COLOR_RESET } \n "
2024-07-12 21:43:35 +02:00
else
2024-07-13 11:46:53 +02:00
echo -e " \n 👉Data sent: $DATA " # Log the data sent
echo -e " \n ⛔ ${ COLOR_RED } Failed to enable SSL, HTTP/2, and HSTS. HTTP status: $HTTP_STATUS . Response: $HTTP_BODY ${ COLOR_RESET } \n "
2024-07-12 21:43:35 +02:00
fi
}
# Function to disable SSL for a proxy host
disable_ssl( ) {
if [ -z " $HOST_ID " ] ; then
2024-07-15 12:59:33 +02:00
echo -e "\n 🛡️ The --host-ssl-disable option requires a host ID."
2024-07-12 21:43:35 +02:00
usage
fi
2024-07-15 12:59:33 +02:00
echo -e " \n 🚫 Disabling 🔓 SSL for proxy host ID: $HOST_ID ... "
2024-07-12 21:43:35 +02:00
CHECK_RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
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 " ' {
letsencrypt_agree: false,
dns_challenge: false,
allow_websocket_upgrade: 0,
http2_support: 0,
hsts_enabled: 0,
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 " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " \
-H "Content-Type: application/json; charset=UTF-8" \
--data-raw " $DATA " )
HTTP_BODY = $( echo " $HTTP_RESPONSE " | sed -e 's/HTTPSTATUS\:.*//g' )
HTTP_STATUS = $( echo " $HTTP_RESPONSE " | tr -d '\n' | sed -e 's/.*HTTPSTATUS://' )
2024-07-15 12:59:33 +02:00
if [ " $HTTP_STATUS " -eq 200] ; then
2024-07-15 13:26:31 +02:00
echo -e " ✅ ${ COLOR_GREEN } SSL disabled successfully! ${ COLOR_RESET } \n "
2024-07-12 21:43:35 +02:00
else
echo " Data sent: $DATA " # Log the data sent
2024-07-15 13:26:31 +02:00
echo -e " ⛔ ${ COLOR_RED } Failed to disable SSL. HTTP status: $HTTP_STATUS . Response: $HTTP_BODY ${ COLOR_RESET } \n "
2024-07-12 21:43:35 +02:00
fi
}
# Function to show full details for a specific host by ID
show_host( ) {
if [ -z " $HOST_ID " ] ; then
2024-07-15 12:59:33 +02:00
echo -e "\n ⛔ The --host-show option requires a host ID."
2024-07-12 21:43:35 +02:00
usage
fi
echo -e " \n ${ COLOR_ORANGE } 👉 Full details for proxy host ID: $HOST_ID ... ${ COLOR_RESET } \n "
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts/ $HOST_ID " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
echo " $RESPONSE " | jq .
2024-07-15 12:59:33 +02:00
echo ""
2024-07-12 21:43:35 +02:00
}
# Display default settings for creating hosts
show_default( ) {
2024-07-13 11:46:53 +02:00
echo -e " \n ⭐ ${ COLOR_YELLOW } Default settings Token: ${ COLOR_RESET } "
echo -e " - TOKEN_EXPIRY: ${ COLOR_ORANGE } ${ TOKEN_EXPIRY } ${ COLOR_RESET } "
echo -e " \n ⭐ ${ COLOR_YELLOW } Default settings for creating hosts (change according to your needs): ${ COLOR_RESET } "
2024-07-12 21:43:35 +02:00
echo -e " - FORWARD_SCHEME: ${ COLOR_ORANGE } ${ FORWARD_SCHEME } ${ COLOR_RESET } "
echo -e " - SSL_FORCED: ${ COLOR_ORANGE } ${ SSL_FORCED } ${ COLOR_RESET } "
echo -e " - CACHING_ENABLED: ${ COLOR_ORANGE } ${ CACHING_ENABLED } ${ COLOR_RESET } "
echo -e " - BLOCK_EXPLOITS: ${ COLOR_ORANGE } ${ BLOCK_EXPLOITS } ${ COLOR_RESET } "
echo -e " - ALLOW_WEBSOCKET_UPGRADE: ${ COLOR_ORANGE } ${ ALLOW_WEBSOCKET_UPGRADE } ${ COLOR_RESET } "
echo -e " - HTTP2_SUPPORT: ${ COLOR_ORANGE } ${ HTTP2_SUPPORT } ${ COLOR_RESET } "
echo -e " - HSTS_ENABLED: ${ COLOR_ORANGE } ${ HSTS_ENABLED } ${ COLOR_RESET } "
echo -e " - HSTS_SUBDOMAINS: ${ COLOR_ORANGE } ${ HSTS_SUBDOMAINS } ${ COLOR_RESET } "
echo
exit 0
}
2024-07-12 13:07:09 +02:00
# Perform a full backup of all configurations
full_backup( ) {
mkdir -p " $BACKUP_DIR "
# Backup proxy hosts
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/proxy-hosts " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
echo " $RESPONSE " | jq '.' > " $BACKUP_DIR /proxy_hosts_ ${ NGINX_IP //./_ } _ $DATE .json "
# Backup users
RESPONSE = $( curl -s -X GET " $BASE_URL /users " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
echo " $RESPONSE " | jq '.' > " $BACKUP_DIR /users_ ${ NGINX_IP //./_ } _ $DATE .json "
# Backup SSL certificates
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/certificates " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
echo " $RESPONSE " | jq '.' > " $BACKUP_DIR /ssl_certificates_ ${ NGINX_IP //./_ } _ $DATE .json "
# Backup access lists
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/access-lists " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
echo " $RESPONSE " | jq '.' > " $BACKUP_DIR /access_lists_ ${ NGINX_IP //./_ } _ $DATE .json "
# Backup settings
RESPONSE = $( curl -s -X GET " $BASE_URL /nginx/settings " \
-H " Authorization: Bearer $( cat $TOKEN_FILE ) " )
echo " $RESPONSE " | jq '.' > " $BACKUP_DIR /settings_ ${ NGINX_IP //./_ } _ $DATE .json "
2024-07-15 13:26:31 +02:00
echo -e " ✅ ${ COLOR_GREEN } Full backup completed successfully in 📂 ' $BACKUP_DIR ' ${ COLOR_RESET } \n "
2024-07-12 13:07:09 +02:00
}
2024-07-15 12:59:33 +02:00
2024-07-12 21:43:35 +02:00
# Main logic
2024-07-10 14:03:57 +02:00
if [ " $CREATE_USER " = true ] ; then
create_user
elif [ " $DELETE_USER " = true ] ; then
delete_user
elif [ " $DELETE_HOST " = true ] ; then
delete_proxy_host
elif [ " $LIST_HOSTS " = true ] ; then
list_proxy_hosts
elif [ " $LIST_HOSTS_FULL " = true ] ; then
list_proxy_hosts_full
2024-07-12 21:43:35 +02:00
elif [ " $SHOW_HOST " = true ] ; then
show_host
2024-07-10 14:03:57 +02:00
elif [ " $LIST_SSL_CERTIFICATES " = true ] ; then
list_ssl_certificates
elif [ " $LIST_USERS " = true ] ; then
list_users
elif [ " $SEARCH_HOST " = true ] ; then
search_proxy_host
2024-07-11 11:50:09 +02:00
elif [ " $ENABLE_HOST " = true ] ; then
enable_proxy_host
elif [ " $DISABLE_HOST " = true ] ; then
disable_proxy_host
2024-07-12 13:07:09 +02:00
elif [ " $CHECK_TOKEN " = true ] ; then
validate_token
elif [ " $BACKUP " = true ] ; then
full_backup
2024-07-15 12:59:33 +02:00
elif [ " $BACKUP_HOST " = true ] ; then
backup_single_host
elif [ " $RESTORE " = true ] ; then
restore_backup
elif [ " $RESTORE_HOST " = true] ; then
restore_single_host
2024-07-12 21:43:35 +02:00
elif [ " $GENERATE_CERT " = true ] ; then
generate_certificate
2024-07-15 12:59:33 +02:00
elif [ " $ENABLE_SSL " = true] ; then
2024-07-12 21:43:35 +02:00
enable_ssl
2024-07-15 12:59:33 +02:00
elif [ " $DISABLE_SSL " = true] ; then
2024-07-12 21:43:35 +02:00
disable_ssl
elif [ " $SHOW_DEFAULT " = true ] ; then
2024-07-15 12:59:33 +02:00
show_default
2024-07-10 14:03:57 +02:00
else
2024-07-10 20:46:54 +02:00
create_or_update_proxy_host
2024-07-13 14:39:45 +02:00
fi