You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					138 lines
				
				5.0 KiB
			
		
		
			
		
	
	
					138 lines
				
				5.0 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								#!/bin/bash
							 | 
						||
| 
								 | 
							
								# info: Changes the document root for an existing web domain
							 | 
						||
| 
								 | 
							
								# options: USER DOMAIN TARGET_DOMAIN [DIRECTORY] [PHP]
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# example: v-change-web-domain-docroot admin domain.tld otherdomain.tld
							 | 
						||
| 
								 | 
							
								#          # add custom docroot
							 | 
						||
| 
								 | 
							
								#          # points domain.tld to otherdomain.tld's document root.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# example: v-change-web-domain-docroot admin test.local default
							 | 
						||
| 
								 | 
							
								#          # remove custom docroot
							 | 
						||
| 
								 | 
							
								#          # returns document root to default value for domain.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# This call changes the document root of a chosen web domain
							 | 
						||
| 
								 | 
							
								# to another available domain under the user context.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                Variables & Functions                     #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Argument definition
							 | 
						||
| 
								 | 
							
								user=$1
							 | 
						||
| 
								 | 
							
								domain=$2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Export target domain and directory
							 | 
						||
| 
								 | 
							
								# so they are correctly passed through to domain.sh
							 | 
						||
| 
								 | 
							
								export target_domain=$3
							 | 
						||
| 
								 | 
							
								export target_directory=$4
							 | 
						||
| 
								 | 
							
								export php=$5
							 | 
						||
| 
								 | 
							
								restart=$6
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Includes
							 | 
						||
| 
								 | 
							
								# shellcheck source=/etc/hestiacp/hestia.conf
							 | 
						||
| 
								 | 
							
								source /etc/hestiacp/hestia.conf
							 | 
						||
| 
								 | 
							
								# shellcheck source=/usr/local/hestia/func/main.sh
							 | 
						||
| 
								 | 
							
								source $HESTIA/func/main.sh
							 | 
						||
| 
								 | 
							
								# shellcheck source=/usr/local/hestia/func/domain.sh
							 | 
						||
| 
								 | 
							
								source $HESTIA/func/domain.sh
							 | 
						||
| 
								 | 
							
								# load config file
							 | 
						||
| 
								 | 
							
								source_conf "$HESTIA/conf/hestia.conf"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Additional argument formatting
							 | 
						||
| 
								 | 
							
								format_domain
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                    Verifications                         #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								check_args '2' "$#" 'USER DOMAIN [TARGET_DOMAIN] [DIRECTORY] [PHP-DOCROOT] [RESTART]'
							 | 
						||
| 
								 | 
							
								is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
							 | 
						||
| 
								 | 
							
								# Check to ensure that target domain is valid if we're
							 | 
						||
| 
								 | 
							
								# not setting the docroot value back to defaults
							 | 
						||
| 
								 | 
							
								if [ "$target_domain" != "default" ]; then
							 | 
						||
| 
								 | 
							
									is_format_valid 'user' 'domain' 'target_domain' 'restart'
							 | 
						||
| 
								 | 
							
									is_object_valid 'web' 'DOMAIN' "$target_domain"
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
									is_format_valid 'user' 'domain' 'restart'
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								is_object_valid 'user' 'USER' "$user" "$user"
							 | 
						||
| 
								 | 
							
								is_object_unsuspended 'user' 'USER' "$user"
							 | 
						||
| 
								 | 
							
								is_object_valid 'web' 'DOMAIN' "$domain"
							 | 
						||
| 
								 | 
							
								is_object_unsuspended 'web' 'DOMAIN' "$domain"
							 | 
						||
| 
								 | 
							
								is_object_value_empty 'web' 'DOMAIN' "$domain" '$docroot'
							 | 
						||
| 
								 | 
							
								is_dir_symlink "$HOMEDIR/$user/web"
							 | 
						||
| 
								 | 
							
								is_dir_symlink "$HOMEDIR/$user/web/$target_domain"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Perform verification if read-only mode is enabled
							 | 
						||
| 
								 | 
							
								check_hestia_demo_mode
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                       Action                             #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Unset existing custom document root path
							 | 
						||
| 
								 | 
							
								if [ -n "$CUSTOM_DOCROOT" ]; then
							 | 
						||
| 
								 | 
							
									update_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_DOCROOT' ""
							 | 
						||
| 
								 | 
							
									update_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_PHPROOT' ""
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# If target domain value is 'default', remove the custom document root
							 | 
						||
| 
								 | 
							
								# value and rebuild web domain to restore default configuration.
							 | 
						||
| 
								 | 
							
								# Otherwise, set target document root path accordingly based on passed values.
							 | 
						||
| 
								 | 
							
								if [ "$target_domain" = "default" ]; then
							 | 
						||
| 
								 | 
							
									update_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_DOCROOT' ""
							 | 
						||
| 
								 | 
							
									update_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_PHPROOT' ""
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
									# Check for existence of specified directory under target domain's public_html folder
							 | 
						||
| 
								 | 
							
									target_domain_directory="$HOMEDIR/$user/web/$target_domain"
							 | 
						||
| 
								 | 
							
									if [ -n "$target_directory" ]; then
							 | 
						||
| 
								 | 
							
										# Checking destination path
							 | 
						||
| 
								 | 
							
										real_target_directory="$(readlink -e "${target_domain_directory}/public_html/$target_directory/")"
							 | 
						||
| 
								 | 
							
										if [ ! -e "$real_target_directory" ]; then
							 | 
						||
| 
								 | 
							
											check_result "$E_NOTEXIST" "Directory $target_directory does not exist under $HOMEDIR/$user/web/$target_domain/public_html/."
							 | 
						||
| 
								 | 
							
										elif [ -z "$(echo $real_target_directory | egrep "^$target_domain_directory\b")" ]; then
							 | 
						||
| 
								 | 
							
											check_result "$E_FORBIDEN" "Target dir outside of target domain dir"
							 | 
						||
| 
								 | 
							
										else
							 | 
						||
| 
								 | 
							
											CUSTOM_DOCROOT="$real_target_directory"
							 | 
						||
| 
								 | 
							
											if [ -n "$php" ]; then
							 | 
						||
| 
								 | 
							
												custom_phproot="${target_domain_directory}/public_html/"
							 | 
						||
| 
								 | 
							
											else
							 | 
						||
| 
								 | 
							
												custom_phproot="$real_target_directory"
							 | 
						||
| 
								 | 
							
											fi
							 | 
						||
| 
								 | 
							
										fi
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
										CUSTOM_DOCROOT="${target_domain_directory}/public_html/"
							 | 
						||
| 
								 | 
							
										custom_phproot="${target_domain_directory}/public_html/"
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									add_object_key 'web' 'DOMAIN' "$domain" 'CUSTOM_DOCROOT' 'IP6'
							 | 
						||
| 
								 | 
							
									add_object_key 'web' 'DOMAIN' "$domain" 'CUSTOM_PHPROOT' 'IP6'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									update_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_DOCROOT' "$CUSTOM_DOCROOT"
							 | 
						||
| 
								 | 
							
									# CUSTOM_PHPROOT got overwriten by default
							 | 
						||
| 
								 | 
							
									CUSTOM_PHPROOT=$custom_phproot
							 | 
						||
| 
								 | 
							
									update_object_value 'web' 'DOMAIN' "$domain" '$CUSTOM_PHPROOT' "$CUSTOM_PHPROOT"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                       Hestia                             #
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Rebuild domain configuration
							 | 
						||
| 
								 | 
							
								$BIN/v-rebuild-web-domain "$user" "$domain" "$restart"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Logging
							 | 
						||
| 
								 | 
							
								if [ "$target_domain" = "default" ]; then
							 | 
						||
| 
								 | 
							
									$BIN/v-log-action "$user" "Info" "Web" "Domain document root reset (Domain: $domain)."
							 | 
						||
| 
								 | 
							
								else
							 | 
						||
| 
								 | 
							
									$BIN/v-log-action "$user" "Info" "Web" "Domain document root updated (Domain: $domain, Target: $target_domain)."
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								log_event "$OK" "$ARGUMENTS"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Unset variables
							 | 
						||
| 
								 | 
							
								unset target_domain
							 | 
						||
| 
								 | 
							
								unset target_directory
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exit
							 |