11#! /bin/bash
22# info: add web domain
3- # options: USER DOMAIN IP [RESTART ] [ALIASES] [PROXY_EXTENTIONS]
3+ # options: USER DOMAIN [IP ] [ALIASES] [PROXY_EXTENTIONS] [RESTART ]
44#
5- # The function adds virtual host to a server. In cases when a template is
6- # undefined in the script, the template "default" will be used. The alias of
7- # www.domain.tld type will be automatically assigned to the domain. If ip have
8- # associated dns name, this domain will also get the alias domain-tpl.$ipname.
9- # An alias with the ip name is useful during the site testing while dns isn't
10- # moved to a server yet.
5+ # The function adds virtual host to a server. In cases when ip is
6+ # undefined in the script, "default" template will be used. The alias of
7+ # www.domain.tld type will be automatically assigned to the domain unless
8+ # "none" is transmited as argument. If ip have associated dns name, this
9+ # domain will also get the alias domain-tpl.$ipname. An alias with the ip
10+ # name is useful during the site testing while dns isn't moved to server yet.
1111
1212
1313# ----------------------------------------------------------#
1414# Variable&Function #
1515# ----------------------------------------------------------#
1616
17+
1718# Argument definition
1819user=$1
19- domain=$( idn -t --quiet -u " $2 " )
20- domain=$( echo $domain | sed -e ' s/\.*$//g' -e ' s/^\.*//g' )
21- domain=$( echo $domain | tr ' [:upper:]' ' [:lower:]' )
22- domain_idn=$( idn -t --quiet -a " $domain " )
23- ip=$3 ; IP=$3
24- restart=$4
20+ domain=$2
21+ ip=$3
22+ restart=$4 # will be moved to the end soon
2523aliases=$5
26- default_extentions=" jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls,\
27- exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp,rtf,js,mp3,avi,mpeg,flv,html,htm"
28- extentions=${6-$default_extentions }
24+ proxy_ext=$6
25+
26+ # Additional argument formatting
27+ if [[ " $domain " =~ [[:upper:]] ]]; then
28+ domain=$( echo " $domain " | tr ' [:upper:]' ' [:lower:]' )
29+ fi
30+ if [[ " $domain " =~ ^www\. .* ]]; then
31+ domain=$( echo " $domain " | sed -e " s/^www.//" )
32+ fi
33+ if [[ " $domain " =~ .* \. $ ]]; then
34+ domain=$( echo " $domain " | sed -e " s/\.$//" )
35+ fi
36+ domain_idn=" $domain "
37+ if [[ " $domain " = * [! [:ascii:]]* ]]; then
38+ domain_idn= $( idn -t --quiet -a $domain )
39+ fi
40+ if [ ! -z " $aliases " ] && [ " $aliases " != ' none' ]; then
41+ aliases=$( echo $aliases | tr ' [:upper:]' ' [:lower:]' | tr ' ,' ' \n' )
42+ aliases=$( echo " $aliases " | sed -e " s/\.$//" | sort -u | grep -v www.$domain )
43+ aliases=$( echo " $aliases " | sed -e " /^$/d" | tr ' \n' ' ,' | sed -e " s/,$//" )
44+ fi
2945
3046# Includes
3147source $VESTA /func/main.sh
@@ -38,76 +54,24 @@ source $VESTA/conf/vesta.conf
3854# Verifications #
3955# ----------------------------------------------------------#
4056
41- check_args ' 3' " $# " ' USER DOMAIN IP [RESTART] [ALIASES] [PROXY_EXTENTIONS]'
42- validate_format ' user' ' domain' ' ip'
4357is_system_enabled " $WEB_SYSTEM " ' WEB_SYSTEM'
58+ check_args ' 2' " $# " ' USER DOMAIN [IP] [ALIASES] [PROXY_EXTENTIONS] [RESTART]'
59+ is_format_valid ' user' ' domain' ' aliases' ' ip' ' proxy_ext'
4460is_object_valid ' user' ' USER' " $user "
4561is_object_unsuspended ' user' ' USER' " $user "
46- is_domain_new ' web'
47- is_ip_valid
48- is_ip_avalable
49- is_package_full ' WEB_DOMAINS'
50- template=$( get_user_value ' $WEB_TEMPLATE' )
51- is_web_template_valid
52- if [ ! -z " $aliases " ]; then
53- for domain_alias in $( echo " ${aliases// ,/ } " ) ; do
54- is_domain_new ' web' " $domain_alias " ' alias'
55- done
56- fi
57- if [ ! -z " $PROXY_SYSTEM " ]; then
58- validate_format ' extentions'
59- proxy=$( get_user_value ' $PROXY_TEMPLATE' )
60- is_proxy_template_valid $proxy
61- fi
62+ is_package_full ' WEB_DOMAINS' ' WEB_ALIASES'
63+ is_domain_new ' web' " $domain ,$aliases "
64+ is_ip_valid " $ip "
6265
6366
6467# ----------------------------------------------------------#
6568# Action #
6669# ----------------------------------------------------------#
6770
68- # Checking domain backend in case PHP-FPM is configured
69- if [ ! -z " $WEB_BACKEND " ]; then
70- is_web_backend_pool_valid
71- $BIN /v-add-web-domain-backend $user $domain
72- rc=$?
73- if [ $rc -ne 0 ]; then
74- exit $rc
75- fi
76- get_domain_backend_values
77- backend=$( get_user_value ' $BACKEND_TEMPLATE' )
78- if [ -z " $backend " ]; then
79- backend=' default'
80- fi
81- fi
82-
83- # Defining variables for add_config function
84- ip=$( get_real_ip $ip )
85- group=" $user "
86- email=" info@$domain "
87- docroot=" $HOMEDIR /$user /web/$domain /public_html"
88- tpl_file=" $WEBTPL /$WEB_SYSTEM /$WEB_BACKEND /$template .tpl"
89- conf=" $HOMEDIR /$user /conf/web/$WEB_SYSTEM .conf"
90-
91- # Defining domain aliases
92- ip_name=$( get_ip_name)
93- if [ -z " $aliases " ]; then
94- if [ -z " $ip_name " ]; then
95- aliases=" www.$domain "
96- else
97- aliases=" www.$domain ,${domain// ./ -} .$ip_name "
98- fi
99- else
100- if [ ! -z " $ip_name " ]; then
101- aliases=" $aliases ,${domain// ./ -} .$ip_name "
102- fi
103- fi
104- aliases_idn=$( idn -t --quiet -a $aliases )
105- alias_string=" ServerAlias ${aliases_idn// ,/ } "
106-
107- # Adding web config
108- add_web_config
71+ # Reading user values
72+ source $USER_DATA /user.conf
10973
110- # Building directory tree
74+ # Creating domain directories
11175mkdir -p $HOMEDIR /$user /web/$domain \
11276 $HOMEDIR /$user /web/$domain /public_html \
11377 $HOMEDIR /$user /web/$domain /public_shtml \
@@ -117,83 +81,49 @@ mkdir -p $HOMEDIR/$user/web/$domain \
11781 $HOMEDIR /$user /web/$domain /stats \
11882 $HOMEDIR /$user /web/$domain /logs
11983
120- # Adding domain logs
84+ # Creating domain logs
12185touch /var/log/$WEB_SYSTEM /domains/$domain .bytes \
12286 /var/log/$WEB_SYSTEM /domains/$domain .log \
12387 /var/log/$WEB_SYSTEM /domains/$domain .error.log
124-
125- # Adding symlink for logs
12688ln -f -s /var/log/$WEB_SYSTEM /domains/$domain .* log \
12789 $HOMEDIR /$user /web/$domain /logs/
12890
12991# Adding domain skeleton
130- if [ -e " $WEBTPL /skel/public_html/" ]; then
131- cp -r $WEBTPL /skel/public_html/ $HOMEDIR /$user /web/$domain /
132- fi
133- if [ -e " $WEBTPL /skel/public_shtml/" ]; then
134- cp -r $WEBTPL /skel/public_shtml/ $HOMEDIR /$user /web/$domain /
135- fi
136- if [ -e " $WEBTPL /skel/document_errors/" ]; then
137- cp -r $WEBTPL /skel/document_errors/ $HOMEDIR /$user /web/$domain /
138- fi
139- if [ -e " $WEBTPL /skel/cgi-bin/" ]; then
140- cp -r $WEBTPL /skel/cgi-bin/ $HOMEDIR /$user /web/$domain /
141- fi
142-
143- # Changing tpl values
92+ cp -r $WEBTPL /skel/* $HOMEDIR /$user /web/$domain / > /dev/null 2>&1
14493for file in $( find " $HOMEDIR /$user /web/$domain /" -type f) ; do
14594 sed -i " s/%domain%/$domain /g" $file
14695done
14796
148- # Changing file owner
97+ # Changing file owner & permission
14998chown -R $user :$user $HOMEDIR /$user /web/$domain
15099chown root:$user /var/log/$WEB_SYSTEM /domains/$domain .* $conf
151-
152- # Changing file permissions
153- chmod 640 $conf /var/log/$WEB_SYSTEM /domains/$domain .*
154- chmod 551 $HOMEDIR /$user /web/$domain
155- chmod 751 $HOMEDIR /$user /web/$domain /private \
156- $HOMEDIR /$user /web/$domain /cgi-bin \
157- $HOMEDIR /$user /web/$domain /public_html \
158- $HOMEDIR /$user /web/$domain /public_shtml \
159- $HOMEDIR /$user /web/$domain /document_errors
160- chmod -f -R 665 $HOMEDIR /$user /web/$domain /cgi-bin/* \
161- $HOMEDIR /$user /web/$domain /public_html/* \
162- $HOMEDIR /$user /web/$domain /document_errors/* \
163- chmod 551 $HOMEDIR /$user /web/$domain /stats \
164- $HOMEDIR /$user /web/$domain /logs
165-
166- # Running template trigger
167- if [ -x $WEBTPL /$WEB_SYSTEM /$WEB_BACKEND /$template .sh ]; then
168- $WEBTPL /$WEB_SYSTEM /$WEB_BACKEND /$template .sh \
169- $user $domain $ip $HOMEDIR $docroot
100+ chmod 640 /var/log/$WEB_SYSTEM /domains/$domain .*
101+ chmod 751 $HOMEDIR /$user /web/$domain $HOMEDIR /$user /web/$domain /*
102+ chmod 551 $HOMEDIR /$user /web/$domain /stats $HOMEDIR /$user /web/$domain /logs
103+
104+ # Addding PHP-FPM backend
105+ if [ ! -z " $BACKEND_SYSTEM " ]; then
106+ $BIN /v-add-web-domain-backend " $user " " $domain " $BACKEND_TEMPLATE
107+ check_result $? " Backend error" > /dev/null
170108fi
171109
172- # Checking web config include
173- web_conf=" /etc/$WEB_SYSTEM /conf.d/vesta.conf"
174- web_include=$( grep " $conf " $web_conf )
175- if [ -z " $web_include " ] && [ " $WEB_SYSTEM " != ' nginx' ]; then
176- echo " Include $conf " >> $web_conf
177- fi
178- if [ -z " $web_include " ] && [ " $WEB_SYSTEM " = ' nginx' ]; then
179- echo " include $conf ;" >> $web_conf
110+ # Preparing domain aliases
111+ if [ " $aliases " != ' none' ]; then
112+ prepare_web_aliases " www.$domain ,$aliases ,$( get_ip_alias $domain ) "
180113fi
181114
182- # Checking proxy system
115+ # Adding web server config
116+ add_web_config " $WEB_SYSTEM " " $WEB_TEMPLATE .tpl"
117+
118+ # Adding proxy config
183119if [ ! -z " $PROXY_SYSTEM " ]; then
184- PROXY_EXT=" $extentions "
185- tpl_file=" $WEBTPL /$PROXY_SYSTEM /$proxy .tpl"
186- conf=" $HOMEDIR /$user /conf/web/$PROXY_SYSTEM .conf"
187- add_web_config
188- chown root:$user $conf
189- chmod 640 $conf
190- proxy_conf=" /etc/$PROXY_SYSTEM /conf.d/vesta.conf"
191- if [ -z " $( grep " $conf " $proxy_conf ) " ]; then
192- echo " include $conf ;" >> $proxy_conf
193- fi
194- if [ -x $WEBTPL /$PROXY_SYSTEM /$proxy .sh ]; then
195- $WEBTPL /$PROXY_SYSTEM /$proxy .sh $user $domain $ip $HOMEDIR $docroot
120+ PROXY_EXT=" $proxy_ext "
121+ if [ -z " $proxy_ext " ]; then
122+ PROXY_EXT=" jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls"
123+ PROXY_EXT=" $PROXY_EXT ,exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp"
124+ PROXY_EXT=" $PROXY_EXT ,rtf,js,mp3,avi,mpeg,flv,html,htm"
196125 fi
126+ add_web_config " $PROXY_SYSTEM " " $PROXY_TEMPLATE .tpl"
197127fi
198128
199129
202132# ----------------------------------------------------------#
203133
204134# Increasing counters
205- increase_ip_value " $ip "
206- increase_user_value " $user " ' $U_WEB_DOMAINS'
135+ increase_ip_value " $local_ip "
136+ increase_user_value " $user " ' $U_WEB_DOMAINS' " $alias_number "
207137increase_user_value " $user " ' $U_WEB_ALIASES'
208138
209- # Defining domain variables
210- str=" DOMAIN='$domain ' IP='$IP ' IP6='' ALIAS='$aliases ' TPL='$template '"
211- str=" $str SSL='no' SSL_HOME='same' FTP_USER='' FTP_MD5='' BACKEND='$backend '"
212- str=" $str PROXY='$proxy ' PROXY_EXT='$extentions ' STATS='' STATS_USER=''"
213- str=" $str STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0' SUSPENDED='no'"
214- str=" $str TIME='$TIME ' DATE='$DATE '"
139+ # Generating timestamp
140+ time_n_date= $( date +' %T %F' )
141+ time= $( echo " $time_n_date " | cut -f 1 -d \ )
142+ date= $( echo " $time_n_date " | cut -f 2 -d \ )
215143
216- # Registering domain
217- echo " $str " >> $USER_DATA /web.conf
144+ # Adding domain in web.conf
145+ echo " DOMAIN='$domain ' IP='$ip ' IP6='' ALIAS='$aliases ' TPL='$WEB_TEMPLATE ' \
146+ SSL='no' SSL_HOME='same' FTP_USER='' FTP_MD5='' BACKEND='$BACKEND_TEMPLATE ' \
147+ PROXY='$PROXY_TEMPLATE ' PROXY_EXT='$PROXY_EXT ' STATS='' STATS_USER='' \
148+ STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0' SUSPENDED='no' \
149+ TIME='$time ' DATE='$date '" >> $USER_DATA /web.conf
218150
219151# Restarting web server
220152if [ " $restart " != ' no' ]; then
221153 $BIN /v-restart-web
222154 check_result $? " Web restart failed" > /dev/null
223155
156+ # Restarting proxy server
224157 if [ ! -z " $PROXY_SYSTEM " ]; then
225158 $BIN /v-restart-proxy
226159 check_result $? " Proxy restart failed" > /dev/null
229162
230163# Logging
231164log_history " added web domain $domain "
232- log_event " $OK " " $EVENT "
165+ log_event " $OK " " $ARGUMENTS "
233166
234167exit
0 commit comments