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.
196 lines
5.3 KiB
196 lines
5.3 KiB
#!/bin/bash
|
|
# info: change user package
|
|
# options: USER PACKAGE [FORCE]
|
|
#
|
|
# example: v-change-user-package admin yourpackage
|
|
#
|
|
# This function changes user's hosting package.
|
|
|
|
#----------------------------------------------------------#
|
|
# Variables & Functions #
|
|
#----------------------------------------------------------#
|
|
|
|
# Argument definition
|
|
user=$1
|
|
package=$2
|
|
force=$3
|
|
|
|
# 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
|
|
# load config file
|
|
source_conf "$HESTIA/conf/hestia.conf"
|
|
|
|
is_package_available() {
|
|
|
|
source_conf "$USER_DATA/user.conf"
|
|
|
|
WEB_DOMAINS='0'
|
|
DATABASES='0'
|
|
MAIL_DOMAINS='0'
|
|
DNS_DOMAINS='0'
|
|
DISK_QUOTA='0'
|
|
BANDWIDTH='0'
|
|
|
|
source_conf "$HESTIA/data/packages/$package.pkg"
|
|
|
|
# Checking usage agains package limits
|
|
if [ "$WEB_DOMAINS" != 'unlimited' ]; then
|
|
if [ "$WEB_DOMAINS" -lt "$U_WEB_DOMAINS" ]; then
|
|
check_result "$E_LIMIT" "Package doesn't cover WEB_DOMAIN usage"
|
|
fi
|
|
fi
|
|
if [ "$DNS_DOMAINS" != 'unlimited' ]; then
|
|
if [ "$DNS_DOMAINS" -lt "$U_DNS_DOMAINS" ]; then
|
|
check_result "$E_LIMIT" "Package doesn't cover DNS_DOMAIN usage"
|
|
fi
|
|
fi
|
|
if [ "$MAIL_DOMAINS" != 'unlimited' ]; then
|
|
if [ "$MAIL_DOMAINS" -lt "$U_MAIL_DOMAINS" ]; then
|
|
check_result "$E_LIMI"T "Package doesn't cover MAIL_DOMAIN usage"
|
|
fi
|
|
fi
|
|
if [ "$DATABASES" != 'unlimited' ]; then
|
|
if [ "$DATABASES" -lt "$U_DATABASES" ]; then
|
|
check_result "$E_LIMIT" "Package doesn't cover DATABASE usage"
|
|
fi
|
|
fi
|
|
if [ "$CRON_JOBS" != 'unlimited' ]; then
|
|
if [ "$CRON_JOBS" -lt "$U_CRON_JOBS" ]; then
|
|
check_result "$E_LIMIT" "Package doesn't cover CRON usage"
|
|
fi
|
|
fi
|
|
if [ "$DISK_QUOTA" != 'unlimited' ]; then
|
|
if [ "$DISK_QUOTA" -lt "$U_DISK" ]; then
|
|
check_result "$E_LIMIT" "Package doesn't cover DISK usage"
|
|
fi
|
|
fi
|
|
if [ "$BANDWIDTH" != 'unlimited' ]; then
|
|
if [ "$BANDWIDTH" -lt "$U_BANDWIDTH" ]; then
|
|
check_result "$E_LIMIT" "Package doesn't cover BANDWIDTH usage"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
change_user_package() {
|
|
source_conf "$USER_DATA/user.conf"
|
|
# Keep user creation date and time saved
|
|
time="$TIME"
|
|
date="$DATE"
|
|
source_conf "$HESTIA/data/packages/$package.pkg"
|
|
echo "NAME='$NAME'
|
|
PACKAGE='$package'
|
|
WEB_TEMPLATE='$WEB_TEMPLATE'
|
|
BACKEND_TEMPLATE='$BACKEND_TEMPLATE'
|
|
PROXY_TEMPLATE='$PROXY_TEMPLATE'
|
|
DNS_TEMPLATE='$DNS_TEMPLATE'
|
|
WEB_DOMAINS='$WEB_DOMAINS'
|
|
WEB_ALIASES='$WEB_ALIASES'
|
|
DNS_DOMAINS='$DNS_DOMAINS'
|
|
DNS_RECORDS='$DNS_RECORDS'
|
|
MAIL_DOMAINS='$MAIL_DOMAINS'
|
|
MAIL_ACCOUNTS='$MAIL_ACCOUNTS'
|
|
RATE_LIMIT='$RATE_LIMIT'
|
|
DATABASES='$DATABASES'
|
|
CRON_JOBS='$CRON_JOBS'
|
|
DISK_QUOTA='$DISK_QUOTA'
|
|
BANDWIDTH='$BANDWIDTH'
|
|
NS='$NS'
|
|
SHELL='$SHELL'
|
|
BACKUPS='$BACKUPS'
|
|
CONTACT='$CONTACT'
|
|
CRON_REPORTS='$CRON_REPORTS'
|
|
MD5='$MD5'
|
|
RKEY='$RKEY'
|
|
TWOFA='$TWOFA'
|
|
QRCODE='$QRCODE'
|
|
PHPCLI='$PHPCLI'
|
|
ROLE='$ROLE'
|
|
SUSPENDED='$SUSPENDED'
|
|
SUSPENDED_USERS='$SUSPENDED_USERS'
|
|
SUSPENDED_WEB='$SUSPENDED_WEB'
|
|
SUSPENDED_DNS='$SUSPENDED_DNS'
|
|
SUSPENDED_MAIL='$SUSPENDED_MAIL'
|
|
SUSPENDED_DB='$SUSPENDED_DB'
|
|
SUSPENDED_CRON='$SUSPENDED_CRON'
|
|
IP_AVAIL='$IP_AVAIL'
|
|
IP_OWNED='$IP_OWNED'
|
|
U_USERS='$U_USERS'
|
|
U_DISK='$U_DISK'
|
|
U_DISK_DIRS='$U_DISK_DIRS'
|
|
U_DISK_WEB='$U_DISK_WEB'
|
|
U_DISK_MAIL='$U_DISK_MAIL'
|
|
U_DISK_DB='$U_DISK_DB'
|
|
U_BANDWIDTH='$U_BANDWIDTH'
|
|
U_WEB_DOMAINS='$U_WEB_DOMAINS'
|
|
U_WEB_SSL='$U_WEB_SSL'
|
|
U_WEB_ALIASES='$U_WEB_ALIASES'
|
|
U_DNS_DOMAINS='$U_DNS_DOMAINS'
|
|
U_DNS_RECORDS='$U_DNS_RECORDS'
|
|
U_MAIL_DOMAINS='$U_MAIL_DOMAINS'
|
|
U_MAIL_DKIM='$U_MAIL_DKIM'
|
|
U_MAIL_ACCOUNTS='$U_MAIL_ACCOUNTS'
|
|
U_DATABASES='$U_DATABASES'
|
|
U_CRON_JOBS='$U_CRON_JOBS'
|
|
U_BACKUPS='$U_BACKUPS'
|
|
LANGUAGE='$LANGUAGE'
|
|
THEME='$THEME'
|
|
NOTIFICATIONS='$NOTIFICATIONS'
|
|
PREF_UI_SORT='$PREF_UI_SORT'
|
|
LOGIN_DISABLED='$LOGIN_DISABLED'
|
|
LOGIN_USE_IPLIST='$LOGIN_USE_IPLIST'
|
|
LOGIN_ALLOW_IPS='$LOGIN_ALLOW_IPS'
|
|
TIME='$time'
|
|
DATE='$date'" > $USER_DATA/user.conf
|
|
}
|
|
|
|
#----------------------------------------------------------#
|
|
# Verifications #
|
|
#----------------------------------------------------------#
|
|
|
|
check_args '2' "$#" 'USER PACKAGE [FORCE]'
|
|
is_format_valid 'user' 'package'
|
|
is_object_valid 'user' 'USER' "$user"
|
|
is_package_valid
|
|
if [ "$force" != 'yes' ]; then
|
|
is_package_available
|
|
fi
|
|
|
|
# Perform verification if read-only mode is enabled
|
|
check_hestia_demo_mode
|
|
|
|
#----------------------------------------------------------#
|
|
# Action #
|
|
#----------------------------------------------------------#
|
|
|
|
# Changing user package
|
|
change_user_package
|
|
|
|
# Update user shell
|
|
shell_conf=$(cat "$HESTIA/data/packages/$package.pkg" | grep 'SHELL' | cut -f 2 -d \')
|
|
$BIN/v-change-user-shell "$user" "$shell_conf"
|
|
|
|
# Run template trigger
|
|
if [ -x "$HESTIA/data/packages/$package.sh" ]; then
|
|
$HESTIA/data/packages/$package.sh "$user" "$CONTACT" "$NAME"
|
|
fi
|
|
|
|
# Update disk quota
|
|
source $HESTIA/conf/hestia.conf
|
|
if [ "$DISK_QUOTA" = 'yes' ]; then
|
|
$BIN/v-update-user-quota "$user"
|
|
fi
|
|
|
|
#----------------------------------------------------------#
|
|
# Hestia #
|
|
#----------------------------------------------------------#
|
|
|
|
# Logging
|
|
$BIN/v-log-action "$user" "Info" "System" "You have been assigned a new package ($package)."
|
|
$BIN/v-log-action "system" "Info" "System" "Package limits applied to user (Package: $package, User: $user)."
|
|
log_event "$OK" "$ARGUMENTS"
|
|
|
|
exit
|