diff --git a/.gitignore b/.gitignore index 326d390f7..6701a8878 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,3 @@ *.gz .vscode .DS_Store -src/react/node_modules -src/react/build -/.idea \ No newline at end of file diff --git a/README.md b/README.md index b953eea6f..a16fe83e1 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ [Vesta Control Panel](http://vestacp.com/) ================================================== -Vesta is back under active development as of 25 February 2024. We are commited to open source, and will engage with the community to identify the new roadmap for Vesta. Stay tuned! - [![Join the chat at https://gitter.im/vesta-cp/Lobby](https://badges.gitter.im/vesta-cp/Lobby.svg)](https://gitter.im/vesta-cp/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) * Vesta is an open source hosting control panel. @@ -18,7 +16,7 @@ ssh root@your.server Download the installation script, and run it: ```bash -curl https://vestacp.com/pub/vst-install.sh | bash +curl http://vestacp.com/pub/vst-install.sh | bash ``` How to install (3 step) @@ -31,7 +29,7 @@ ssh root@your.server Download the installation script: ```bash -curl -O https://vestacp.com/pub/vst-install.sh +curl -O http://vestacp.com/pub/vst-install.sh ``` Then run it: ```bash @@ -40,5 +38,5 @@ bash vst-install.sh License ---------------------------- -Vesta is licensed under [GPL v3 ](https://github.com/outroll/vesta/blob/master/LICENSE) license +Vesta is licensed under [GPL v3 ](https://github.com/serghey-rodin/vesta/blob/master/LICENSE) license diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index c7499444a..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,5 +0,0 @@ -# Security Policy - -## Reporting a Vulnerability - -Please report security issues to dev@vestacp.com diff --git a/bin/v-activate-vesta-license b/bin/v-activate-vesta-license index fefed2027..6d5c875ec 100755 --- a/bin/v-activate-vesta-license +++ b/bin/v-activate-vesta-license @@ -27,7 +27,7 @@ source $VESTA/conf/vesta.conf # Checking arg number check_args '2' "$#" 'MODULE LICENSE' -is_user_format_valid "$license" "license" + #----------------------------------------------------------# # Action # @@ -35,7 +35,7 @@ is_user_format_valid "$license" "license" # Activating license v_host='https://vestacp.com/checkout' -answer=$(curl -s "$v_host/activate.php?licence_key=$license&module=$module") +answer=$(curl -s $v_host/activate.php?licence_key=$license&module=$module) check_result $? "cant' connect to vestacp.com " $E_CONNECT # Checking server answer diff --git a/bin/v-add-backup-host b/bin/v-add-backup-host index bccaa03ee..327703a7b 100755 --- a/bin/v-add-backup-host +++ b/bin/v-add-backup-host @@ -38,7 +38,8 @@ EOF sftpc() { expect -f "-" </dev/null 2>&1 check_result $? "expect command not found" $E_NOTEXIST fi - host "$host" >/dev/null 2>&1 - check_result $? "host connection failed" "$E_CONNECT" fi diff --git a/bin/v-add-dns-on-web-alias b/bin/v-add-dns-on-web-alias index 705594f34..a6a7272c9 100755 --- a/bin/v-add-dns-on-web-alias +++ b/bin/v-add-dns-on-web-alias @@ -55,7 +55,7 @@ if [ "$domain_lvl" -eq 1 ] || [ "${#top_domain}" -le '6' ]; then fi # Adding top-level domain and then its sub -$BIN/v-add-dns-domain $user $top_domain $ip '' '' '' '' '' '' '' '' $restart >> /dev/null +$BIN/v-add-dns-domain $user $top_domain $ip '' '' '' '' '' $restart >> /dev/null # Checking top-level domain if [ ! -e "$USER_DATA/dns/$top_domain.conf" ]; then diff --git a/bin/v-add-dns-record b/bin/v-add-dns-record index bbf8edd8b..2b4c52ca4 100755 --- a/bin/v-add-dns-record +++ b/bin/v-add-dns-record @@ -45,12 +45,10 @@ if [[ $rtype =~ NS|CNAME|MX|PTR|SRV ]]; then fi fi -if [ $rtype != "CAA" ]; then - dvalue=${dvalue//\"/} +dvalue=${dvalue//\"/} - if [[ "$dvalue" =~ [\;[:space:]] ]]; then - dvalue='"'"$dvalue"'"' - fi +if [[ "$dvalue" =~ [\;[:space:]] ]]; then + dvalue='"'"$dvalue"'"' fi # Additional argument formatting diff --git a/bin/v-add-firewall-chain b/bin/v-add-firewall-chain index 0bac12da7..c7b826fa0 100755 --- a/bin/v-add-firewall-chain +++ b/bin/v-add-firewall-chain @@ -22,7 +22,7 @@ protocol=$(echo $protocol|tr '[:lower:]' '[:upper:]') iptables="/sbin/iptables" # Get vesta port by reading nginx.conf -vestaport=$(grep 'listen' $VESTA/nginx/conf/nginx.conf | awk '{print $2}' | sed "s|;||") +vestaport=$(grep 'listen' /usr/local/vesta/nginx/conf/nginx.conf | awk '{print $2}' | sed "s|;||") if [ -z "$vestaport" ]; then vestaport=8083 fi @@ -47,13 +47,7 @@ is_system_enabled "$FIREWALL_SYSTEM" 'FIREWALL_SYSTEM' # Checking known chains case $chain in - SSH) # Get ssh port by reading ssh config file. - sshport=$(grep '^Port ' /etc/ssh/sshd_config | head -1 | cut -d ' ' -f 2) - if [ -z "$sshport" ]; then - sshport=22 - fi - port=$sshport; - protocol=TCP ;; + SSH) port=22; protocol=TCP ;; FTP) port=21; protocol=TCP ;; MAIL) port='25,465,587,2525,110,995,143,993'; protocol=TCP ;; DNS) port=53; protocol=UDP ;; diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index fdd89fed3..c69a21f1e 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -1,8 +1,13 @@ #!/bin/bash -# info: check letsencrypt domain -# options: USER DOMAIN [ALIASES] +# info: adding letsencrypt ssl cetificate for domain +# options: USER DOMAIN [ALIASES] [RESTART] [NOTIFY] # -# The function check and validates domain with Let's Encript +# The function turns on SSL support for a domain. Parameter ssl_dir is a path +# to directory where 2 or 3 ssl files can be found. Certificate file +# domain.tld.crt and its key domain.tld.key are mandatory. Certificate +# authority domain.tld.ca file is optional. If home directory parameter +# (ssl_home) is not set, https domain uses public_shtml as separate +# documentroot directory. #----------------------------------------------------------# @@ -13,9 +18,8 @@ user=$1 domain=$2 aliases=$3 - -# LE API -API='https://acme-v02.api.letsencrypt.org' +restart=$4 +notify=$5 # Includes source $VESTA/func/main.sh @@ -23,346 +27,98 @@ source $VESTA/func/domain.sh source $VESTA/conf/vesta.conf # Additional argument formatting -format_identifier_idn() { - identifier_idn=$identifier - if [[ "$identifier_idn" = *[![:ascii:]]* ]]; then - identifier_idn=$(idn -t --quiet -a $identifier_idn) - fi -} - -# encode base64 -encode_base64() { - cat |base64 |tr '+/' '-_' |tr -d '\r\n=' -} - -# Let's Encrypt v2 curl function -query_le_v2() { - - protected='{"nonce": "'$3'",' - protected=''$protected' "url": "'$1'",' - protected=''$protected' "alg": "RS256", "kid": "'$KID'"}' - content="Content-Type: application/jose+json" - - payload_=$(echo -n "$2" |encode_base64) - protected_=$(echo -n "$protected" |encode_base64) - signature_=$(printf "%s" "$protected_.$payload_" |\ - openssl dgst -sha256 -binary -sign $USER_DATA/ssl/user.key |\ - encode_base64) - - post_data='{"protected":"'"$protected_"'",' - post_data=$post_data'"payload":"'"$payload_"'",' - post_data=$post_data'"signature":"'"$signature_"'"}' - - # Save http response to file passed as "$4" arg or print to stdout if not provided - # http response headers are always sent to stdout - local save_to_file=${4:-"/dev/stdout"} - curl --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" -} - +format_domain_idn #----------------------------------------------------------# # Verifications # #----------------------------------------------------------# -check_args '2' "$#" 'USER DOMAIN [ALIASES]' -is_format_valid 'user' 'domain' 'aliases' +check_args '2' "$#" 'USER DOMAIN [ALIASES] [RESTART] [NOTIFY]' +is_format_valid 'user' 'domain' is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' +is_system_enabled "$WEB_SSL" 'SSL_SUPPORT' is_object_valid 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user" is_object_valid 'web' 'DOMAIN' "$domain" is_object_unsuspended 'web' 'DOMAIN' "$domain" -get_domain_values 'web' -echo "-----------------------------------------------------------------------------------" >> /usr/local/vesta/log/letsencrypt.log -echo "[$(date)] : v-add-letsencrypt-domain $domain [$aliases]" >> /usr/local/vesta/log/letsencrypt.log - -# check if alias is the letsencrypt wildcard domain, if not, make the normal checks -if [[ "$aliases" != "*.$domain" ]]; then - for alias in $(echo "$aliases" |tr ',' '\n' |sort -u); do - check_alias="$(echo $ALIAS |tr ',' '\n' |grep ^$alias$)" - if [ -z "$check_alias" ]; then - echo "[$(date)] : EXIT=domain alias $alias doesn't exist" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_NOTEXIST "domain alias $alias doesn't exist" - fi - done -fi; #----------------------------------------------------------# # Action # #----------------------------------------------------------# +# Parsing domain data +get_domain_values 'web' + # Registering LetsEncrypt user account -echo "[$(date)] : v-add-letsencrypt-user $user" >> /usr/local/vesta/log/letsencrypt.log $BIN/v-add-letsencrypt-user $user -echo "[$(date)] : result: $?" >> /usr/local/vesta/log/letsencrypt.log if [ "$?" -ne 0 ]; then touch $VESTA/data/queue/letsencrypt.pipe sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe send_notice "LETSENCRYPT" "Account registration failed" - echo "[$(date)] : EXIT=LE account registration" >> /usr/local/vesta/log/letsencrypt.log check_result $E_CONNECT "LE account registration" >/dev/null fi # Parsing LetsEncrypt account data source $USER_DATA/ssl/le.conf +email=$EMAIL -# Checking wildcard alias -if [ "$aliases" = "*.$domain" ]; then - echo "[$(date)] : Checking wildcard alias" >> /usr/local/vesta/log/letsencrypt.log - wildcard='yes' - proto="dns-01" - if [ ! -e "$VESTA/data/users/$user/dns/$domain.conf" ]; then - echo "[$(date)] : EXIT=DNS domain $domain doesn't exist" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_NOTEXIST "DNS domain $domain doesn't exist" - fi -else - proto="http-01" -fi - -# Requesting nonce / STEP 1 -echo "[$(date)] : --- Requesting nonce / STEP 1 ---" >> /usr/local/vesta/log/letsencrypt.log -echo "[$(date)] : curl -s -I \"$API/directory\"" >> /usr/local/vesta/log/letsencrypt.log -answer=$(curl -s -I "$API/directory") -echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log -nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n') -echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log -status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ') -echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log -if [[ "$status" -ne 200 ]]; then - echo "[$(date)] : EXIT=Let's Encrypt nonce request status $status" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt nonce request status $status" -fi - -# Placing new order / STEP 2 -echo "[$(date)] : --- Placing new order / STEP 2 ---" >> /usr/local/vesta/log/letsencrypt.log -url="$API/acme/new-order" -payload='{"identifiers":[' -for identifier in $(echo $domain,$aliases |tr ',' '\n' |sort -u); do - format_identifier_idn - payload=$payload'{"type":"dns","value":"'$identifier_idn'"},' -done -payload=$(echo "$payload"|sed "s/,$//") -payload=$payload']}' -echo "[$(date)] : payload=$payload" >> /usr/local/vesta/log/letsencrypt.log -echo "[$(date)] : query_le_v2 \"$url\" \"$payload\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log -answer=$(query_le_v2 "$url" "$payload" "$nonce") -echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log -nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n') -echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log -authz=$(echo "$answer" |grep "acme/authz" |cut -f2 -d '"') -echo "[$(date)] : authz=$authz" >> /usr/local/vesta/log/letsencrypt.log -finalize=$(echo "$answer" |grep 'finalize":' |cut -f4 -d '"') -echo "[$(date)] : finalize=$finalize" >> /usr/local/vesta/log/letsencrypt.log -status=$(echo "$answer" |grep HTTP/ |tail -n1 |cut -f2 -d ' ') -echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log -if [[ "$status" -ne 201 ]]; then - echo "[$(date)] : EXIT=Let's Encrypt new auth status $status" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt new auth status $status" -fi - -# Requesting authorization token / STEP 3 -echo "[$(date)] : --- Requesting authorization token / STEP 3 ---" >> /usr/local/vesta/log/letsencrypt.log -for auth in $authz; do - payload='' - echo "[$(date)] : for auth=$auth" >> /usr/local/vesta/log/letsencrypt.log - echo "[$(date)] : query_le_v2 \"$auth\" \"$payload\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log - answer=$(query_le_v2 "$auth" "$payload" "$nonce") - echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log - url=$(echo "$answer" |grep -A3 $proto |grep '"url"' |cut -f 4 -d \") - echo "[$(date)] : url=$url" >> /usr/local/vesta/log/letsencrypt.log - token=$(echo "$answer" |grep -A3 $proto |grep token |cut -f 4 -d \") - echo "[$(date)] : token=$token" >> /usr/local/vesta/log/letsencrypt.log - nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n') - echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log - status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ') - echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log - if [[ "$status" -ne 200 ]]; then - echo "[$(date)] : EXIT=Let's Encrypt acme/authz bad status $status" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt acme/authz bad status $status" +# Validating domain and aliases +i=1 +for alias in $(echo $domain,$aliases |tr ',' '\n' |sort -u); do + $BIN/v-check-letsencrypt-domain $user $alias + if [ "$?" -ne 0 ]; then + touch $VESTA/data/queue/letsencrypt.pipe + sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe + send_notice "LETSENCRYPT" "$alias validation failed" + check_result $E_INVALID "LE domain validation" >/dev/null fi - # Configuring challenge / STEP 4 - echo "[$(date)] : --- Configuring challenge / STEP 4 ---" >> /usr/local/vesta/log/letsencrypt.log - echo "[$(date)] : wildcard=$wildcard" >> /usr/local/vesta/log/letsencrypt.log - if [ "$wildcard" = 'yes' ]; then - record=$(printf "%s" "$token.$THUMB" |\ - openssl dgst -sha256 -binary |encode_base64) - old_records=$($BIN/v-list-dns-records $user $domain plain|grep 'TXT') - old_records=$(echo "$old_records" |grep _acme-challenge |cut -f 1) - for old_record in $old_records; do - $BIN/v-delete-dns-record "$user" "$domain" "$old_record" - done - $BIN/v-add-dns-record "$user" "$domain" "_acme-challenge" "TXT" "$record" - exitstatus=$? - echo "[$(date)] : v-add-dns-record \"$user\" \"$domain\" \"_acme-challenge\" \"TXT\" \"$record\"" >> /usr/local/vesta/log/letsencrypt.log - if [ "$exitstatus" -ne 0 ]; then - echo "[$(date)] : EXIT=DNS _acme-challenge record wasn't created" >> /usr/local/vesta/log/letsencrypt.log - fi - check_result $exitstatus "DNS _acme-challenge record wasn't created" - else - if [ "$WEB_SYSTEM" = 'nginx' ] || [ ! -z "$PROXY_SYSTEM" ]; then - if [ -f "/usr/local/vesta/web/inc/nginx_proxy" ]; then - # if vesta is behind main nginx - well_known="$HOMEDIR/$user/web/$domain/public_html/.well-known" - acme_challenge="$well_known/acme-challenge" - mkdir -p $acme_challenge - echo "$token.$THUMB" > $acme_challenge/$token - echo "[$(date)] : in $acme_challenge/$token we put: $token.$THUMB" >> /usr/local/vesta/log/letsencrypt.log - chown -R $user:$user $well_known - else - # default nginx method - conf="$HOMEDIR/$user/conf/web/nginx.$domain.conf_letsencrypt" - sconf="$HOMEDIR/$user/conf/web/snginx.$domain.conf_letsencrypt" - # if [ ! -e "$conf" ]; then - echo 'location ~ "^/\.well-known/acme-challenge/(.*)$" {' \ - > $conf - echo ' default_type text/plain;' >> $conf - echo ' return 200 "$1.'$THUMB'";' >> $conf - echo '}' >> $conf - # fi - echo "[$(date)] : in $conf we put: $THUMB" >> /usr/local/vesta/log/letsencrypt.log - if [ ! -e "$sconf" ]; then - ln -s "$conf" "$sconf" - fi - echo "[$(date)] : v-restart-proxy" >> /usr/local/vesta/log/letsencrypt.log - $BIN/v-restart-proxy - if [ -z "$PROXY_SYSTEM" ]; then - # apache-less variant - echo "[$(date)] : v-restart-web" >> /usr/local/vesta/log/letsencrypt.log - $BIN/v-restart-web - fi - exitstatus=$? - if [ "$exitstatus" -ne 0 ]; then - echo "[$(date)] : EXIT=Proxy restart failed = $exitstatus" >> /usr/local/vesta/log/letsencrypt.log - fi - check_result $exitstatus "Proxy restart failed" >/dev/null - fi - else - well_known="$HOMEDIR/$user/web/$domain/public_html/.well-known" - acme_challenge="$well_known/acme-challenge" - mkdir -p $acme_challenge - echo "$token.$THUMB" > $acme_challenge/$token - chown -R $user:$user $well_known - echo "[$(date)] : in $acme_challenge/$token we put: $token.$THUMB" >> /usr/local/vesta/log/letsencrypt.log - # $BIN/v-restart-web - # check_result $? "Web restart failed" >/dev/null - fi - fi - - # Requesting ACME validation / STEP 5 - echo "[$(date)] : --- Requesting ACME validation / STEP 5 ---" >> /usr/local/vesta/log/letsencrypt.log - validation_check=$(echo "$answer" |grep '"valid"') - echo "[$(date)] : validation_check=$validation_check" >> /usr/local/vesta/log/letsencrypt.log - if [[ ! -z "$validation_check" ]]; then - validation='valid' - else - validation='pending' - fi - - # Doing pol check on status - i=1 - while [ "$validation" = 'pending' ]; do - echo "[$(date)] : - Doing pol check on status" >> /usr/local/vesta/log/letsencrypt.log - payload='{}' - echo "[$(date)] : query_le_v2 \"$url\" \"$payload\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log - answer=$(query_le_v2 "$url" "$payload" "$nonce") - echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log - validation=$(echo "$answer"|grep -A1 $proto |tail -n1|cut -f4 -d \") - echo "[$(date)] : validation=$validation" >> /usr/local/vesta/log/letsencrypt.log - nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n') - echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log - status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ') - echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log - if [[ "$status" -ne 200 ]]; then - echo "[$(date)] : EXIT=Let's Encrypt validation status $status" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt validation status $status" - fi - - i=$((i + 1)) - if [ "$i" -gt 10 ]; then - echo "[$(date)] : EXIT=Let's Encrypt domain validation timeout" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt domain validation timeout" - fi - sleeping=$((i*2)) - echo "[$(date)] : sleep $sleeping (i=$i)" >> /usr/local/vesta/log/letsencrypt.log - sleep $sleeping - done - if [ "$validation" = 'invalid' ]; then - echo "[$(date)] : EXIT=Let's Encrypt domain verification failed" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt domain verification failed" + # Checking LE limits per account + if [ "$i" -gt 100 ]; then + touch $VESTA/data/queue/letsencrypt.pipe + sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe + send_notice 'LETSENCRYPT' 'Limit of domains per account is reached' + check_result $E_LIMIT "LE can't sign more than 100 domains" fi + i=$((i++)) done - -# Generating new ssl certificate -ssl_dir=$($BIN/v-generate-ssl-cert "$domain" "info@$domain" "US" "California"\ +# Generating CSR +ssl_dir=$($BIN/v-generate-ssl-cert "$domain" "$email" "US" "California" \ "San Francisco" "Vesta" "IT" "$aliases" |tail -n1 |awk '{print $2}') -# Sending CSR to finalize order / STEP 6 -echo "[$(date)] : --- Sending CSR to finalize order / STEP 6 ---" >> /usr/local/vesta/log/letsencrypt.log - -csr=$(openssl req -in $ssl_dir/$domain.csr -outform DER |encode_base64) -payload='{"csr":"'$csr'"}' -echo "[$(date)] : query_le_v2 \"$finalize\" \"$payload\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log -answer=$(query_le_v2 "$finalize" "$payload" "$nonce") -echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log -nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n') -echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log -status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ') -echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log -certificate=$(echo "$answer"|grep 'certificate":' |cut -f4 -d '"') -echo "[$(date)] : certificate=$certificate" >> /usr/local/vesta/log/letsencrypt.log -if [[ "$status" -ne 200 ]]; then - echo "[$(date)] : EXIT=Let's Encrypt finalize bad status $status" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt finalize bad status $status" +# Signing CSR +crt=$($BIN/v-sign-letsencrypt-csr $user $domain $ssl_dir) +if [ "$?" -ne 0 ]; then + touch $VESTA/data/queue/letsencrypt.pipe + sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe + send_notice "LETSENCRYPT" "$alias validation failed" + check_result "$E_INVALID" "LE $domain validation" fi +echo "$crt" > $ssl_dir/$domain.crt -# Downloading signed certificate / STEP 7 -echo "[$(date)] : --- Downloading signed certificate / STEP 7 ---" >> /usr/local/vesta/log/letsencrypt.log -echo "[$(date)] : query_le_v2 \"$certificate\" \"\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log -answer=$(query_le_v2 "$certificate" "" "$nonce" "$ssl_dir/$domain.pem") -echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log -status=$(echo "$answer"|grep HTTP/ |tail -n1 |cut -f 2 -d ' ') -echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log -if [[ "$status" -ne 200 ]]; then - [ -d "$ssl_dir" ] && rm -rf "$ssl_dir" - echo "[$(date)] : EXIT=Let's Encrypt downloading signed cert failed status: $status" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_NOTEXIST "Let's Encrypt downloading signed cert failed status: $status" -fi - -# Splitting up downloaded pem -# echo "[$(date)] : - Splitting up downloaded pem" >> /usr/local/vesta/log/letsencrypt.log -crt_end=$(grep -n 'END CERTIFICATE' $ssl_dir/$domain.pem |head -n1 |cut -f1 -d:) -# echo "[$(date)] : crt_end=$crt_end" >> /usr/local/vesta/log/letsencrypt.log -head -n $crt_end $ssl_dir/$domain.pem > $ssl_dir/$domain.crt - -pem_lines=$(wc -l $ssl_dir/$domain.pem |cut -f 1 -d ' ') -# echo "[$(date)] : pem_lines=$pem_lines" >> /usr/local/vesta/log/letsencrypt.log -ca_end=$(grep -n 'BEGIN CERTIFICATE' $ssl_dir/$domain.pem |tail -n1 |cut -f 1 -d :) -# echo "[$(date)] : ca_end=$ca_end" >> /usr/local/vesta/log/letsencrypt.log -ca_end=$(( pem_lines - crt_end + 1 )) -# echo "[$(date)] : ca_end=$ca_end" >> /usr/local/vesta/log/letsencrypt.log -tail -n $ca_end $ssl_dir/$domain.pem > $ssl_dir/$domain.ca - -# Temporary fix for double "END CERTIFICATE" -if [[ $(head -n 1 $ssl_dir/$domain.ca) = "-----END CERTIFICATE-----" ]]; then - sed -i '1,2d' $ssl_dir/$domain.ca +# Dowloading CA certificate +le_certs='https://letsencrypt.org/certs' +x1='lets-encrypt-x1-cross-signed.pem.txt' +x3='lets-encrypt-x3-cross-signed.pem.txt' +issuer=$(openssl x509 -text -in $ssl_dir/$domain.crt |grep "Issuer:") +if [ -z "$(echo $issuer|grep X3)" ]; then + curl -s $le_certs/$x1 > $ssl_dir/$domain.ca +else + curl -s $le_certs/$x3 > $ssl_dir/$domain.ca fi # Adding SSL ssl_home=$(search_objects 'web' 'LETSENCRYPT' 'yes' 'SSL_HOME') $BIN/v-delete-web-domain-ssl $user $domain >/dev/null 2>&1 -echo "[$(date)] : v-add-web-domain-ssl $user $domain $ssl_dir $ssl_home" >> /usr/local/vesta/log/letsencrypt.log $BIN/v-add-web-domain-ssl $user $domain $ssl_dir $ssl_home -exitstatus=$? -echo "[$(date)] : v-add-web-domain-ssl status: $exitstatus" >> /usr/local/vesta/log/letsencrypt.log -if [ "$exitstatus" -ne '0' ]; then +if [ "$?" -ne '0' ]; then touch $VESTA/data/queue/letsencrypt.pipe sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe - echo "[$(date)] : EXIT=$domain certificate installation failed" >> /usr/local/vesta/log/letsencrypt.log send_notice 'LETSENCRYPT' "$domain certificate installation failed" - check_result $exitstatus "SSL install" >/dev/null + check_result $? "SSL install" >/dev/null fi # Adding LE autorenew cronjob @@ -379,19 +135,23 @@ if [ -z "$LETSENCRYPT" ]; then fi update_object_value 'web' 'DOMAIN' "$domain" '$LETSENCRYPT' 'yes' -reset_web_counter "$user" "$domain" 'LETSENCRYPT_FAIL_COUNT' #----------------------------------------------------------# # Vesta # #----------------------------------------------------------# -# Deleteing task from queue -touch $VESTA/data/queue/letsencrypt.pipe -sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe +# Restarting web +$BIN/v-restart-web $restart +if [ "$?" -ne 0 ]; then + send_notice 'LETSENCRYPT' "web server needs to be restarted manually" +fi # Notifying user send_notice 'LETSENCRYPT' "$domain SSL has been installed successfully" -echo "[$(date)] : EXIT=***** $domain SSL has been installed successfully *****" >> /usr/local/vesta/log/letsencrypt.log + +# Deleteing task from queue +touch $VESTA/data/queue/letsencrypt.pipe +sed -i "/ $domain /d" $VESTA/data/queue/letsencrypt.pipe # Logging log_event "$OK" "$ARGUMENTS" diff --git a/bin/v-add-letsencrypt-user b/bin/v-add-letsencrypt-user index 11aec113b..3b14cd691 100755 --- a/bin/v-add-letsencrypt-user +++ b/bin/v-add-letsencrypt-user @@ -1,8 +1,8 @@ #!/bin/bash # info: register letsencrypt user account -# options: USER +# options: USER [EMAIL] # -# The function creates and register LetsEncript account +# The function creates and register LetsEncript account key #----------------------------------------------------------# @@ -11,9 +11,8 @@ # Argument definition user=$1 - -# LE API -API='https://acme-v02.api.letsencrypt.org' +email=$2 +key_size=4096 # Includes source $VESTA/func/main.sh @@ -24,38 +23,15 @@ encode_base64() { cat |base64 |tr '+/' '-_' |tr -d '\r\n=' } -# Let's Encrypt v2 curl function -query_le_v2() { - protected='{"nonce": "'$3'",' - protected=''$protected' "url": "'$1'",' - protected=''$protected' "alg": "RS256", "jwk": '$jwk'}' - content="Content-Type: application/jose+json" - - payload_=$(echo -n "$2" |encode_base64) - protected_=$(echo -n "$protected" |encode_base64) - signature_=$(printf "%s" "$protected_.$payload_" |\ - openssl dgst -sha256 -binary -sign $USER_DATA/ssl/user.key |\ - encode_base64) - - post_data='{"protected":"'"$protected_"'",' - post_data=$post_data'"payload":"'"$payload_"'",' - post_data=$post_data'"signature":"'"$signature_"'"}' - - curl -s -i -d "$post_data" "$1" -H "$content" -} - #----------------------------------------------------------# # Verifications # #----------------------------------------------------------# -check_args '1' "$#" 'USER' +check_args '1' "$#" 'USER [EMAIL]' is_format_valid 'user' is_object_valid 'user' 'USER' "$user" if [ -e "$USER_DATA/ssl/le.conf" ]; then - source "$USER_DATA/ssl/le.conf" -fi -if [ ! -z "$KID" ]; then exit fi @@ -64,57 +40,57 @@ fi # Action # #----------------------------------------------------------# - -# Defining user email -if [[ -z "$EMAIL" ]]; then - EMAIL=$(get_user_value '$CONTACT') +api='https://acme-v01.api.letsencrypt.org' +if [ -z "$email" ]; then + email=$(get_user_value '$CONTACT') fi -# Defining user agreement -agreement='' +agreement=$(curl -s -I "$api/terms" |grep Location |cut -f 2 -d \ |tr -d '\r\n') -# Generating user key -KEY="$USER_DATA/ssl/user.key" -if [ ! -e "$KEY" ]; then - openssl genrsa -out $KEY 4096 >/dev/null 2>&1 - chmod 600 $KEY +# Generating key +key="$USER_DATA/ssl/user.key" +if [ ! -e "$key" ]; then + openssl genrsa -out $key $key_size >/dev/null 2>&1 + chmod 600 $key fi # Defining key exponent -if [ -z "$EXPONENT" ]; then - EXPONENT=$(openssl pkey -inform pem -in "$KEY" -noout -text_pub |\ - grep Exponent: |cut -f 2 -d '(' |cut -f 1 -d ')' |sed -e 's/x//' |\ - xxd -r -p |encode_base64) -fi +exponent=$(openssl pkey -inform pem -in "$key" -noout -text_pub |\ + grep Exponent: |cut -f 2 -d '(' |cut -f 1 -d ')' |sed -e 's/x//' |\ + xxd -r -p |encode_base64) # Defining key modulus -if [ -z "$MODULUS" ]; then - MODULUS=$(openssl rsa -in "$KEY" -modulus -noout |\ - sed -e 's/^Modulus=//' |xxd -r -p |encode_base64) -fi +modulus=$(openssl rsa -in "$key" -modulus -noout |\ + sed -e 's/^Modulus=//' |xxd -r -p |encode_base64) -# Defining JWK -jwk='{"e":"'$EXPONENT'","kty":"RSA","n":"'"$MODULUS"'"}' +# Defining key thumb +thumb='{"e":"'$exponent'","kty":"RSA","n":"'"$modulus"'"}' +thumb="$(echo -n "$thumb" |openssl dgst -sha256 -binary |encode_base64)" -# Defining key thumbnail -if [ -z "$THUMB" ]; then - THUMB="$(echo -n "$jwk" |openssl dgst -sha256 -binary |encode_base64)" -fi +# Defining JWK header +header='{"e":"'$exponent'","kty":"RSA","n":"'"$modulus"'"}' +header='{"alg":"RS256","jwk":'"$header"'}' +# Requesting nonce +nonce=$(curl -s -I "$api/directory" |grep Nonce |cut -f 2 -d \ |tr -d '\r\n') +protected=$(echo -n '{"nonce":"'"$nonce"'"}' |encode_base64) -# Requesting ACME nonce -nonce=$(curl -s -I "$API/directory" |grep -i nonce |cut -f2 -d\ |tr -d '\r\n') +# Defining registration query +query='{"resource":"new-reg","contact":["mailto:'"$email"'"],' +query=$query'"agreement":"'$agreement'"}' +payload=$(echo -n "$query" |encode_base64) +signature=$(printf "%s" "$protected.$payload" |\ + openssl dgst -sha256 -binary -sign "$key" |encode_base64) +data='{"header":'"$header"',"protected":"'"$protected"'",' +data=$data'"payload":"'"$payload"'","signature":"'"$signature"'"}' -# Creating ACME account -url="$API/acme/new-acct" -payload='{"termsOfServiceAgreed": true}' -answer=$(query_le_v2 "$url" "$payload" "$nonce") -kid=$(echo "$answer" |grep -i location: |cut -f2 -d ' '|tr -d '\r') +# Sending request to LetsEncrypt API +answer=$(curl -s -i -d "$data" "$api/acme/new-reg") +status=$(echo "$answer" |grep HTTP/1.1 |tail -n1 |cut -f2 -d ' ') -# Checking answer status -status=$(echo "$answer" |grep HTTP/ |tail -n1 |cut -f2 -d ' ') -if [[ "${status:0:2}" -ne "20" ]]; then - check_result $E_CONNECT "Let's Encrypt acc registration failed $status" +# Checking http answer status +if [[ "$status" -ne "201" ]] && [[ "$status" -ne "409" ]]; then + check_result $E_CONNECT "LetsEncrypt account registration $status" fi @@ -123,17 +99,12 @@ fi #----------------------------------------------------------# # Adding le.conf -if [ ! -e "$USER_DATA/ssl/le.conf" ]; then - echo "EXPONENT='$EXPONENT'" > $USER_DATA/ssl/le.conf - echo "MODULUS='$MODULUS'" >> $USER_DATA/ssl/le.conf - echo "THUMB='$THUMB'" >> $USER_DATA/ssl/le.conf - echo "EMAIL='$EMAIL'" >> $USER_DATA/ssl/le.conf - echo "KID='$kid'" >> $USER_DATA/ssl/le.conf - chmod 660 $USER_DATA/ssl/le.conf -else - sed -i '/^KID=/d' $USER_DATA/ssl/le.conf - echo "KID='$kid'" >> $USER_DATA/ssl/le.conf -fi +echo "EMAIL='$email'" > $USER_DATA/ssl/le.conf +echo "EXPONENT='$exponent'" >> $USER_DATA/ssl/le.conf +echo "MODULUS='$modulus'" >> $USER_DATA/ssl/le.conf +echo "THUMB='$thumb'" >> $USER_DATA/ssl/le.conf +chmod 660 $USER_DATA/ssl/le.conf + # Logging log_event "$OK" "$ARGUMENTS" diff --git a/bin/v-add-sys-mail-ssl b/bin/v-add-sys-mail-ssl deleted file mode 100755 index 1ebffdc35..000000000 --- a/bin/v-add-sys-mail-ssl +++ /dev/null @@ -1,106 +0,0 @@ -#!/bin/bash -# info: copy mail ssl certificate -# options: USER DOMAIN [RESTART] -# -# The function copies user domain SSL to mail SSL directory - - -#----------------------------------------------------------# -# Variable&Function # -#----------------------------------------------------------# - -# Argument definition -user=$1 -domain=$2 -restart=$3 - -# Includes -source $VESTA/func/main.sh -source $VESTA/func/domain.sh -source $VESTA/conf/vesta.conf - - -#----------------------------------------------------------# -# Verifications # -#----------------------------------------------------------# - -check_args '2' "$#" 'USER DOMAIN [RESTART]' -is_format_valid 'user' 'domain' -is_system_enabled "$MAIL_SYSTEM" 'MAIL_SYSTEM' -is_object_valid 'user' 'USER' "$user" -is_object_valid 'web' 'DOMAIN' "$domain" -is_object_value_exist 'web' 'DOMAIN' "$domain" '$SSL' - - -#----------------------------------------------------------# -# Action # -#----------------------------------------------------------# - -# Defining certificate location -dom_crt="/home/$user/conf/web/ssl.$domain.pem" -dom_key="/home/$user/conf/web/ssl.$domain.key" -vst_crt="$VESTA/ssl/mail.crt" -vst_key="$VESTA/ssl/mail.key" - -# Checking certificate -if [ ! -e "$dom_crt" ] || [ ! -e "$dom_key" ]; then - check_result $E_NOTEXIST "$domain certificate doesn't exist" -fi - -# Checking difference -diff $dom_crt $vst_crt >/dev/null 2>&1 -if [ $? -ne 0 ]; then - rm -f $vst_crt.old $vst_key.old - mv $vst_crt $vst_crt.old >/dev/null 2>&1 - mv $vst_key $vst_key.old >/dev/null 2>&1 - cp $dom_crt $vst_crt 2>/dev/null - cp $dom_key $vst_key 2>/dev/null - chown root:mail $vst_crt $vst_key -else - restart=no -fi - -# Updating mail certificate -case $MAIL_SYSTEM in - exim) conf='/etc/exim/exim.conf';; - exim4) conf='/etc/exim4/exim4.conf.template';; -esac -if [ -e "$conf" ]; then - sed -e "s|^tls_certificate.*|tls_certificate = $vst_crt|" \ - -e "s|^tls_privatekey.*|tls_privatekey = $vst_key|" -i $conf -fi - -# Updating imap certificate -conf="/etc/dovecot/conf.d/10-ssl.conf" -if [ ! -z "$IMAP_SYSTEM" ] && [ -e "$conf" ]; then - sed -e "s|ssl_cert.*|ssl_cert = <$vst_crt|" \ - -e "s|ssl_key.*|ssl_key = <$vst_key|" -i $conf -fi - - -#----------------------------------------------------------# -# Vesta # -#----------------------------------------------------------# - -# Restarting services -if [ "$restart" != 'no' ]; then - if [ ! -z "$MAIL_SYSTEM" ]; then - $BIN/v-restart-service $MAIL_SYSTEM - fi - if [ ! -z "$IMAP_SYSTEM" ]; then - $BIN/v-restart-service $IMAP_SYSTEM - fi -fi - -# Updating vesta.conf -if [ -z "$(grep MAIL_CERTIFICATE $VESTA/conf/vesta.conf)" ]; then - echo "MAIL_CERTIFICATE='$user:$domain'" >> $VESTA/conf/vesta.conf -else - sed -i "s/MAIL_CERTIFICATE.*/MAIL_CERTIFICATE='$user:$domain'/g" \ - $VESTA/conf/vesta.conf -fi - -# Logging -log_event "$OK" "$ARGUMENTS" - -exit diff --git a/bin/v-add-sys-vesta-ssl b/bin/v-add-sys-vesta-ssl deleted file mode 100755 index 32cd6c141..000000000 --- a/bin/v-add-sys-vesta-ssl +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/bash -# info: add vesta ssl certificate -# options: USER DOMAIN [RESTART] -# -# The function copies user domain SSL to vesta SSL directory - - -#----------------------------------------------------------# -# Variable&Function # -#----------------------------------------------------------# - -# Argument definition -user=$1 -domain=$2 -restart=$3 - -# Includes -source $VESTA/func/main.sh -source $VESTA/func/domain.sh -source $VESTA/conf/vesta.conf - - -#----------------------------------------------------------# -# Verifications # -#----------------------------------------------------------# - -check_args '2' "$#" 'USER DOMAIN [RESTART]' -is_format_valid 'user' 'domain' -is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' -is_object_valid 'user' 'USER' "$user" -is_object_valid 'web' 'DOMAIN' "$domain" -is_object_value_exist 'web' 'DOMAIN' "$domain" '$SSL' - - -#----------------------------------------------------------# -# Action # -#----------------------------------------------------------# - -# Defining certificate location -dom_crt="/home/$user/conf/web/ssl.$domain.pem" -dom_key="/home/$user/conf/web/ssl.$domain.key" -vst_crt="$VESTA/ssl/certificate.crt" -vst_key="$VESTA/ssl/certificate.key" - -# Checking certificate -if [ ! -e "$dom_crt" ] || [ ! -e "$dom_key" ]; then - check_result $E_NOTEXIST "$domain certificate doesn't exist" -fi - -# Checking difference -diff $dom_crt $vst_crt >/dev/null 2>&1 -if [ $? -ne 0 ]; then - rm -f $vst_crt.old $vst_key.old - mv $vst_crt $vst_crt.old - mv $vst_key $vst_key.old - cp $dom_crt $vst_crt 2>/dev/null - cp $dom_key $vst_key 2>/dev/null - chown root:mail $vst_crt $vst_key -else - restart=no -fi - - -#----------------------------------------------------------# -# Vesta # -#----------------------------------------------------------# - -# Restarting services -if [ "$restart" != 'no' ]; then - if [ ! -z "$MAIL_SYSTEM" ] && [ -z "$MAIL_CERTIFICATE" ]; then - $BIN/v-restart-service $MAIL_SYSTEM - fi - if [ ! -z "$IMAP_SYSTEM" ] && [ -z "$MAIL_CERTIFICATE" ]; then - $BIN/v-restart-service $IMAP_SYSTEM - fi - if [ ! -z "$FTP_SYSTEM" ]; then - $BIN/v-restart-service "$FTP_SYSTEM" - fi - if [ -e "/var/run/vesta-nginx.pid" ]; then - kill -HUP $(cat /var/run/vesta-nginx.pid) - else - service vesta restart - fi -fi - -# Updating vesta.conf -if [ -z "$(grep VESTA_CERTIFICATE $VESTA/conf/vesta.conf)" ]; then - echo "VESTA_CERTIFICATE='$user:$domain'" >> $VESTA/conf/vesta.conf -else - sed -i "s/VESTA_CERTIFICATE.*/VESTA_CERTIFICATE='$user:$domain'/g" \ - $VESTA/conf/vesta.conf -fi - -# Logging -log_event "$OK" "$ARGUMENTS" - -exit diff --git a/bin/v-add-web-domain b/bin/v-add-web-domain index 12de353a5..b937330c5 100755 --- a/bin/v-add-web-domain +++ b/bin/v-add-web-domain @@ -48,8 +48,6 @@ is_object_unsuspended 'user' 'USER' "$user" is_package_full 'WEB_DOMAINS' 'WEB_ALIASES' is_domain_new 'web' "$domain,$aliases" is_dir_symlink $HOMEDIR/$user/web -if_dir_exists $HOMEDIR/$user/web/$domain -is_dir_symlink $HOMEDIR/$user/web/$domain if [ ! -z "$ip" ]; then is_ip_valid "$ip" "$user" else @@ -65,7 +63,7 @@ fi source $USER_DATA/user.conf # Creating domain directories -sudo -u $user mkdir -p $HOMEDIR/$user/web/$domain \ +mkdir -p $HOMEDIR/$user/web/$domain \ $HOMEDIR/$user/web/$domain/public_html \ $HOMEDIR/$user/web/$domain/public_shtml \ $HOMEDIR/$user/web/$domain/document_errors \ @@ -82,7 +80,7 @@ ln -f -s /var/log/$WEB_SYSTEM/domains/$domain.*log \ $HOMEDIR/$user/web/$domain/logs/ # Adding domain skeleton -sudo -u $user cp -r $WEBTPL/skel/* $HOMEDIR/$user/web/$domain/ >/dev/null 2>&1 +cp -r $WEBTPL/skel/* $HOMEDIR/$user/web/$domain/ >/dev/null 2>&1 for file in $(find "$HOMEDIR/$user/web/$domain/" -type f); do sed -i "s/%domain%/$domain/g" $file done @@ -91,9 +89,9 @@ done chown -R $user:$user $HOMEDIR/$user/web/$domain chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.* $conf chmod 640 /var/log/$WEB_SYSTEM/domains/$domain.* -sudo -u $user chmod 751 $HOMEDIR/$user/web/$domain $HOMEDIR/$user/web/$domain/* -sudo -u $user chmod 551 $HOMEDIR/$user/web/$domain/stats $HOMEDIR/$user/web/$domain/logs -sudo -u $user chmod 644 $HOMEDIR/$user/web/$domain/public_*html/*.* +chmod 751 $HOMEDIR/$user/web/$domain $HOMEDIR/$user/web/$domain/* +chmod 551 $HOMEDIR/$user/web/$domain/stats $HOMEDIR/$user/web/$domain/logs +chmod 644 $HOMEDIR/$user/web/$domain/public_*html/* # Addding PHP-FPM backend if [ ! -z "$WEB_BACKEND" ]; then @@ -115,12 +113,9 @@ if [ "$aliases" = 'none' ]; then ALIAS='' else ALIAS="www.$domain" - if [ -z "$aliases" ]; then - ALIAS="www.$domain" - else - ALIAS="$aliases" + if [ ! -z "$aliases" ]; then + ALIAS="$ALIAS,$aliases" fi - ip_alias=$(get_ip_alias $domain) if [ ! -z "$ip_alias" ]; then ALIAS="$ALIAS,$ip_alias" diff --git a/bin/v-add-web-domain-backend b/bin/v-add-web-domain-backend index 8cafa987f..44698ffe4 100755 --- a/bin/v-add-web-domain-backend +++ b/bin/v-add-web-domain-backend @@ -46,7 +46,7 @@ fi # Allocating backend port backend_port=9000 -ports=$(grep listen $pool/* 2>/dev/null |grep -o :[0-9].*) +ports=$(grep -v '^;' $pool/* 2>/dev/null |grep listen |grep -o :[0-9].*) ports=$(echo "$ports" |sed "s/://" |sort -n) for port in $ports; do if [ "$backend_port" -eq "$port" ]; then diff --git a/bin/v-add-web-domain-ftp b/bin/v-add-web-domain-ftp index 089991243..1a722bad6 100755 --- a/bin/v-add-web-domain-ftp +++ b/bin/v-add-web-domain-ftp @@ -84,7 +84,7 @@ fi /usr/sbin/useradd $ftp_user \ -s $shell \ -o -u $(id -u $user) \ - -g $(id -g $user) \ + -g $(id -u $user) \ -M -d "$ftp_path_a" > /dev/null 2>&1 # Set ftp user password diff --git a/bin/v-add-web-domain-ssl b/bin/v-add-web-domain-ssl index 2c0f78aef..55c4ce413 100755 --- a/bin/v-add-web-domain-ssl +++ b/bin/v-add-web-domain-ssl @@ -120,22 +120,6 @@ check_result $? "Web restart failed" >/dev/null $BIN/v-restart-proxy $restart check_result $? "Proxy restart failed" >/dev/null -# Updating system ssl dependencies -if [ ! -z "$VESTA_CERTIFICATE" ]; then - crt_user=$(echo "$VESTA_CERTIFICATE" |cut -f 1 -d :) - crt_domain=$(echo "$VESTA_CERTIFICATE" |cut -f 2 -d :) - if [ "$user" = "$crt_user" ] && [ "$domain" = "$crt_domain" ]; then - $BIN/v-add-sys-vesta-ssl $user $domain >/dev/null 2>&1 - fi -fi -if [ ! -z "$MAIL_CERTIFICATE" ]; then - crt_user=$(echo "$MAIL_CERTIFICATE" |cut -f 1 -d :) - crt_domain=$(echo "$MAIL_CERTIFICATE" |cut -f 2 -d :) - if [ "$user" = "$crt_user" ] && [ "$domain" = "$crt_domain" ]; then - $BIN/v-add-sys-mail-ssl $user $domain >/dev/null 2>&1 - fi -fi - if [ ! -z "$UPDATE_HOSTNAME_SSL" ] && [ "$UPDATE_HOSTNAME_SSL" = "yes" ]; then hostname=$(hostname) if [ "$hostname" = "$domain" ]; then @@ -143,12 +127,6 @@ if [ ! -z "$UPDATE_HOSTNAME_SSL" ] && [ "$UPDATE_HOSTNAME_SSL" = "yes" ]; then fi fi -UPDATE_SSL_SCRIPT='' -source $VESTA/conf/vesta.conf -if [ ! -z "$UPDATE_SSL_SCRIPT" ]; then - eval "$UPDATE_SSL_SCRIPT $user $domain" -fi - # Logging log_history "enabled ssl support for $domain" log_event "$OK" "$ARGUMENTS" diff --git a/bin/v-backup-user b/bin/v-backup-user index 4bb857eaf..f9569aa41 100755 --- a/bin/v-backup-user +++ b/bin/v-backup-user @@ -216,32 +216,24 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB" != '*' ]; then cp $USER_DATA/ssl/$domain.* vesta/ fi - # Changin dir to documentroot - cd $HOMEDIR/$user/web/$domain - # Define exclude arguments exlusion=$(echo -e "$WEB" |tr ',' '\n' |grep "^$domain:") set -f fargs=() - fargs+=(--exclude='./logs/*') + fargs+=(--exclude='logs/*') if [ ! -z "$exlusion" ]; then xdirs="$(echo -e "$exlusion" |tr ':' '\n' |grep -v $domain)" for xpath in $xdirs; do - if [ -d "$xpath" ]; then - fargs+=(--exclude=$xpath/*) - echo "$(date "+%F %T") excluding directory $xpath" - msg="$msg\n$(date "+%F %T") excluding directory $xpath" - else - echo "$(date "+%F %T") excluding file $xpath" - msg="$msg\n$(date "+%F %T") excluding file $xpath" - fargs+=(--exclude=$xpath) - fi + fargs+=(--exclude=$xpath/*) + echo "$(date "+%F %T") excluding directory $xpath" + msg="$msg\n$(date "+%F %T") excluding directory $xpath" done fi set +f # Backup files - tar --anchored -cpf- ${fargs[@]} * |gzip -$BACKUP_GZIP - > $tmpdir/web/$domain/domain_data.tar.gz + cd $HOMEDIR/$user/web/$domain + tar -cpf- * ${fargs[@]} |gzip -$BACKUP_GZIP - > $tmpdir/web/$domain/domain_data.tar.gz done # Print total @@ -460,15 +452,11 @@ if [ "$USER" != '*' ]; then fi fargs=() for xpath in $(echo "$USER" |tr ',' '\n'); do - if [ -d "$xpath" ]; then - fargs+=(--exclude=$xpath/*) - echo "$(date "+%F %T") excluding directory $xpath" |\ + fargs+=(-not) + fargs+=(-path) + fargs+=("./$xpath*") + echo "$(date "+%F %T") excluding directory $xpath" |\ tee -a $BACKUP/$user.log - else - echo "$(date "+%F %T") excluding file $xpath" |\ - tee -a $BACKUP/$user.log - fargs+=(--exclude=$xpath) - fi done IFS=$'\n' @@ -479,12 +467,11 @@ if [ "$USER" != '*' ]; then exclusion=$(echo "$USER" |tr ',' '\n' |grep "^$udir$") if [ -z "$exclusion" ]; then ((i ++)) - udir_str=$(echo "$udir" |sed -e "s|'|\\\'|g") - udir_list="$udir_list $udir_str" + udir_list="$udir_list $udir" echo -e "$(date "+%F %T") adding $udir" |tee -a $BACKUP/$user.log # Backup files and dirs - tar --anchored -cpf- ${fargs[@]} $udir |gzip -$BACKUP_GZIP - > $tmpdir/user_dir/$udir.tar.gz + tar -cpf- $udir |gzip -$BACKUP_GZIP - > $tmpdir/user_dir/$udir.tar.gz fi done set +f @@ -595,7 +582,7 @@ ftp_backup() { fi # Debug info - echo -e "$(date "+%F %T") Remote: ftp://$HOST/$BPATH/$user.$backup_new_date.tar" + echo -e "$(date "+%F %T") Remote: ftp://$HOST$BPATH/$user.$backup_new_date.tar" # Checking ftp connection fconn=$(ftpc) diff --git a/bin/v-backup-users b/bin/v-backup-users index bbabf3dbc..e96eb2fbe 100755 --- a/bin/v-backup-users +++ b/bin/v-backup-users @@ -28,9 +28,6 @@ if [ -z "$BACKUP_SYSTEM" ]; then exit fi for user in $(grep '@' /etc/passwd |cut -f1 -d:); do - if [ ! -f "$VESTA/data/users/$user/user.conf" ]; then - continue; - fi check_suspend=$(grep "SUSPENDED='no'" $VESTA/data/users/$user/user.conf) log=$VESTA/log/backup.log if [ ! -z "$check_suspend" ]; then diff --git a/bin/v-change-mail-account-password b/bin/v-change-mail-account-password index 5c01ffbd8..28c8809b1 100755 --- a/bin/v-change-mail-account-password +++ b/bin/v-change-mail-account-password @@ -52,11 +52,8 @@ salt=$(generate_password "$PW_MATRIX" "8") md5="{MD5}$($BIN/v-generate-password-hash md5 $salt <<<$password)" if [[ "$MAIL_SYSTEM" =~ exim ]]; then - quota=$(grep $account $VESTA/data/users/${user}/mail/${domain}.conf) - quota=$(echo $quota | awk '{ print $7 }' | sed -e "s/'//g" ) - quota=$(echo $quota | cut -d "=" -f 2 | sed -e "s/unlimited/0/g") sed -i "/^$account:/d" $HOMEDIR/$user/conf/mail/$domain/passwd - str="$account:$md5:$user:mail::$HOMEDIR/$user:${quota}M" + str="$account:$md5:$user:mail::$HOMEDIR/$user:$quota" echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd fi diff --git a/bin/v-change-sys-config-value b/bin/v-change-sys-config-value index 3681075c3..106576563 100755 --- a/bin/v-change-sys-config-value +++ b/bin/v-change-sys-config-value @@ -28,7 +28,6 @@ PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" check_args '2' "$#" 'KEY VALUE' is_format_valid 'key' -format_no_quotes "$value" 'value' #----------------------------------------------------------# # Action # diff --git a/bin/v-change-sys-service-config b/bin/v-change-sys-service-config index f90326b72..97c14a17c 100755 --- a/bin/v-change-sys-service-config +++ b/bin/v-change-sys-service-config @@ -63,7 +63,6 @@ case $service in spamd) dst=$($BIN/v-list-sys-spamd-config plain);; spamassassin) dst=$($BIN/v-list-sys-spamd-config plain);; clamd) dst=$($BIN/v-list-sys-clamd-config plain);; - clamd.scan) dst=$($BIN/v-list-sys-clamd-config plain);; cron) dst='/etc/crontab';; crond) dst='/etc/crontab';; fail2ban) dst='/etc/fail2ban/jail.local';; @@ -96,21 +95,13 @@ if [ "$update" = 'yes' ] && [ "$restart" != 'no' ]; then if [ "$service" = 'php' ]; then if [ "$WEB_SYSTEM" = "nginx" ]; then - if [ $(ps --no-headers -o comm 1) == systemd ]; then - service=$(systemctl | grep -o -E "php.*fpm.*\.service") - service=${service//.service/} - else - service=$(ls /etc/init.d/php*fpm* |cut -f 4 -d /) - fi + service=$(ls /etc/init.d/php*fpm* |cut -f 4 -d / |sed -n 1p) else service=$WEB_SYSTEM fi fi - for single_service in $service; do - service $single_service restart >/dev/null 2>&1 - done <<< "$service" - + service $service restart >/dev/null 2>&1 if [ $? -ne 0 ]; then for config in $dst; do cat $config.vst.back > $config diff --git a/bin/v-change-user-package b/bin/v-change-user-package index b358fb13c..d0de98db0 100755 --- a/bin/v-change-user-package +++ b/bin/v-change-user-package @@ -16,12 +16,16 @@ force=$3 # Includes source $VESTA/func/main.sh -source $VESTA/func/domain.sh source $VESTA/conf/vesta.conf is_package_avalable() { - source $USER_DATA/user.conf + usr_data=$(cat $USER_DATA/user.conf) + IFS=$'\n' + for key in $usr_data; do + eval ${key%%=*}=${key#*=} + done + WEB_DOMAINS='0' DATABASES='0' MAIL_DOMAINS='0' @@ -29,13 +33,9 @@ is_package_avalable() { DISK_QUOTA='0' BANDWIDTH='0' - pkg_data=$(cat $VESTA/data/packages/$package.pkg| egrep -v "TIME|DATE") - IFS=$'\n' - for str in $pkg_data; do - key=$(echo $str |cut -f 1 -d =) - value=$(echo $str |cut -f 2 -d \') - eval $key="$value" - done + pkg_data=$(cat $VESTA/data/packages/$package.pkg |grep -v TIME |\ + grep -v DATE) + eval $pkg_data # Checking usage agains package limits if [ "$WEB_DOMAINS" != 'unlimited' ]; then @@ -73,22 +73,11 @@ is_package_avalable() { check_result $E_LIMIT "Package doesn't cover BANDWIDTH usage" fi fi - - # Checking templates - is_web_template_valid $WEB_TEMPLATE - is_dns_template_valid $DNS_TEMPLATE - is_proxy_template_valid $PROXY_TEMPLATE } change_user_package() { - source $USER_DATA/user.conf - pkg_data=$(cat $VESTA/data/packages/$package.pkg| egrep -v "TIME|DATE") - IFS=$'\n' - for str in $pkg_data; do - key=$(echo $str |cut -f 1 -d =) - value=$(echo $str |cut -f 2 -d \') - eval $key="$value" - done + eval $(cat $USER_DATA/user.conf) + eval $(cat $VESTA/data/packages/$package.pkg |egrep -v "TIME|DATE") echo "FNAME='$FNAME' LNAME='$LNAME' PACKAGE='$package' @@ -167,7 +156,7 @@ fi change_user_package # Update user shell -shell_conf=$(echo "$pkg_data" |grep 'SHELL' |cut -f 2 -d \') +shell_conf=$(echo "$pkg_data" | grep 'SHELL' | cut -f 2 -d \') shell=$(grep -w "$shell_conf" /etc/shells |head -n1) /usr/bin/chsh -s "$shell" "$user" &>/dev/null diff --git a/bin/v-change-user-password b/bin/v-change-user-password index 30328641f..22a3d78f6 100755 --- a/bin/v-change-user-password +++ b/bin/v-change-user-password @@ -13,10 +13,6 @@ user=$1 password=$2; HIDE=2 -# Importing system enviroment as we run this script -# mostly by cron wich not read it by itself -source /etc/profile - # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf @@ -26,9 +22,6 @@ source $VESTA/conf/vesta.conf # Verifications # #----------------------------------------------------------# -if [ "$user" = "root" ]; then - check_result $E_FORBIDEN "Changing root password is forbiden" -fi check_args '2' "$#" 'USER PASSWORD' is_format_valid 'user' is_object_valid 'user' 'USER' "$user" diff --git a/bin/v-change-vesta-port b/bin/v-change-vesta-port deleted file mode 100644 index 3f3866549..000000000 --- a/bin/v-change-vesta-port +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash -# info: change vesta port -# options: port -# -# Function will change vesta port - -#----------------------------------------------------------# -# Variable&Function # -#----------------------------------------------------------# - -# Argument definition -port=$1 - -if [ -z "$VESTA" ]; then - VESTA="/usr/local/vesta" -fi - -# Get current vesta port by reading nginx.conf -oldport=$(grep 'listen' $VESTA/nginx/conf/nginx.conf | awk '{print $2}' | sed "s|;||") -if [ -z "$oldport" ]; then - oldport=8083 -fi - -# Includes -source $VESTA/func/main.sh - -#----------------------------------------------------------# -# Verifications # -#----------------------------------------------------------# - -# Checking permissions -if [ "$(id -u)" != '0' ]; then - check_result $E_FORBIDEN "You must be root to execute this script" -fi - -check_args '1' "$#" 'PORT' -is_int_format_valid "$port" 'port number' - -#----------------------------------------------------------# -# Action # -#----------------------------------------------------------# - -sed -i "s|$oldport;|$port;|g" $VESTA/nginx/conf/nginx.conf -if [ -f "/etc/roundcube/plugins/password/config.inc.php" ]; then - sed -i "s|'$oldport'|'$port'|g" /etc/roundcube/plugins/password/config.inc.php -fi -sed -i "s|'$oldport'|'$port'|g" $VESTA/data/firewall/rules.conf -$VESTA/bin/v-update-firewall -systemctl restart fail2ban.service -sed -i "s| $oldport | $port |g" /etc/iptables.rules -systemctl restart vesta - -#----------------------------------------------------------# -# Vesta # -#----------------------------------------------------------# - -# Logging -log_event "$OK" "$ARGUMENTS" - -exit 0; diff --git a/bin/v-change-web-domain-backend-tpl b/bin/v-change-web-domain-backend-tpl index 71dc9fd63..62918d094 100755 --- a/bin/v-change-web-domain-backend-tpl +++ b/bin/v-change-web-domain-backend-tpl @@ -52,7 +52,7 @@ rm -f $pool/$backend_type.conf # Allocating backend port backend_port=9000 -ports=$(grep listen $pool/* 2>/dev/null |grep -o :[0-9].*) +ports=$(grep -v '^;' $pool/* 2>/dev/null |grep listen |grep -o :[0-9].*) ports=$(echo "$ports" |sed "s/://" |sort -n) for port in $ports; do if [ "$backend_port" -eq "$port" ]; then diff --git a/bin/v-check-letsencrypt-domain b/bin/v-check-letsencrypt-domain new file mode 100755 index 000000000..97e248787 --- /dev/null +++ b/bin/v-check-letsencrypt-domain @@ -0,0 +1,162 @@ +#!/bin/bash +# info: check letsencrypt domain +# options: USER DOMAIN +# +# The function check and validates domain with LetsEncript + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +user=$1 +domain=$2 + +# Includes +source $VESTA/func/main.sh +source $VESTA/conf/vesta.conf + +# encode base64 +encode_base64() { + cat |base64 |tr '+/' '-_' |tr -d '\r\n=' +} + +# Additional argument formatting +format_domain_idn + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '2' "$#" 'USER DOMAIN' +is_format_valid 'user' 'domain' +is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' +is_object_valid 'user' 'USER' "$user" +is_object_unsuspended 'user' 'USER' "$user" +if [ ! -e "$USER_DATA/ssl/le.conf" ]; then + check_result $E_NOTEXIST "LetsEncrypt key doesn't exist" +fi +rdomain=$(egrep "'$domain'|'$domain,|,$domain,|,$domain'" $USER_DATA/web.conf) +if [ -z "$rdomain" ]; then + check_result $E_NOTEXIST "domain $domain doesn't exist" +fi + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +source $USER_DATA/ssl/le.conf +api='https://acme-v01.api.letsencrypt.org' +r_domain=$(echo "$rdomain" |cut -f 2 -d \') +key="$USER_DATA/ssl/user.key" +exponent="$EXPONENT" +modulus="$MODULUS" +thumb="$THUMB" + +# Defining JWK header +header='{"e":"'$exponent'","kty":"RSA","n":"'"$modulus"'"}' +header='{"alg":"RS256","jwk":'"$header"'}' + +# Requesting nonce +nonce=$(curl -s -I "$api/directory" |grep Nonce |cut -f2 -d \ |tr -d '\r\n') +protected=$(echo -n '{"nonce":"'"$nonce"'"}' |encode_base64) + +# Defining ACME query (request challenge) +query='{"resource":"new-authz","identifier"' +query=$query':{"type":"dns","value":"'"$domain_idn"'"}}' +payload=$(echo -n "$query" |encode_base64) +signature=$(printf "%s" "$protected.$payload" |\ + openssl dgst -sha256 -binary -sign "$key" |encode_base64) +data='{"header":'"$header"',"protected":"'"$protected"'",' +data=$data'"payload":"'"$payload"'","signature":"'"$signature"'"}' + +# Sending request to LetsEncrypt API +answer=$(curl -s -i -d "$data" "$api/acme/new-authz") + +# Checking http answer status +status=$(echo "$answer" |grep HTTP/1.1 |tail -n1 |cut -f2 -d ' ') +if [[ "$status" -ne "201" ]]; then + check_result $E_CONNECT "LetsEncrypt challenge request $status" +fi + +# Parsing domain nonce,token and uri +nonce=$(echo "$answer" |grep Nonce |cut -f2 -d \ |tr -d '\r\n') +protected=$(echo -n '{"nonce":"'"$nonce"'"}' |encode_base64) +token=$(echo "$answer" |grep -A 3 http-01 |grep token |cut -f 4 -d \") +uri=$(echo "$answer" |grep -A 3 http-01 |grep uri |cut -f 4 -d \") + +# Adding location wrapper for request challenge +if [ "$WEB_SYSTEM" = 'nginx' ] || [ "$PROXY_SYSTEM" = 'nginx' ]; then + conf="$HOMEDIR/$user/conf/web/nginx.$r_domain.conf_letsencrypt" + sconf="$HOMEDIR/$user/conf/web/snginx.$r_domain.conf_letsencrypt" + if [ ! -e "$conf" ]; then + echo 'location ~ "^/\.well-known/acme-challenge/(.*)$" {' > $conf + echo ' default_type text/plain;' >> $conf + echo ' return 200 "$1.'$thumb'";' >> $conf + echo '}' >> $conf + fi + if [ ! -e "$sconf" ]; then + ln -s "$conf" "$sconf" + fi +else + acme="$HOMEDIR/$user/web/$r_domain/public_html/.well-known/acme-challenge" + if [ ! -d "$acme" ]; then + mkdir -p $acme + fi + echo "$token.$thumb" > $acme/$token + chown -R $user:$user $HOMEDIR/$user/web/$r_domain/public_html/.well-known +fi + +# Restarting web server +if [ -z "$PROXY_SYSTEM" ]; then + $BIN/v-restart-web + check_result $? "Proxy restart failed" >/dev/null +else + $BIN/v-restart-proxy + $BIN/v-restart-web + check_result $? "Web restart failed" >/dev/null +fi + +# Defining ACME query (request validation) +query='{"resource":"challenge","type":"http-01","keyAuthorization"' +query=$query':"'$token.$thumb'","token":"'$token'"}' +payload=$(echo -n "$query" |encode_base64) +signature=$(printf "%s" "$protected.$payload" |\ + openssl dgst -sha256 -binary -sign "$key" |encode_base64) +data='{"header":'"$header"',"protected":"'"$protected"'",' +data=$data'"payload":"'"$payload"'","signature":"'"$signature"'"}' + +# Sending request to LetsEncrypt API +answer=$(curl -s -i -d "$data" "$uri") + +# Checking domain validation status +i=1 +status=$(echo $answer |tr ',' '\n' |grep status |cut -f 4 -d \") +location=$(echo "$answer" |grep Location: |awk '{print $2}' |tr -d '\r\n') +while [ "$status" = 'pending' ]; do + answer=$(curl -s -i "$location") + detail="$(echo $answer |tr ',' '\n' |grep detail |cut -f 4 -d \")" + status=$(echo "$answer" |tr ',' '\n' |grep status |cut -f 4 -d \") + sleep 1 + i=$((i + 1)) + if [ "$i" -gt 60 ]; then + check_result $E_CONNECT "$detail" + fi +done +if [ "$status" = 'invalid' ]; then + detail="$(echo $answer |tr ',' '\n' |grep detail |cut -f 4 -d \")" + check_result $E_CONNECT "$detail" +fi + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Logging +log_event "$OK" "$ARGUMENTS" + +exit diff --git a/bin/v-deactivate-vesta-license b/bin/v-deactivate-vesta-license index c7279e456..5839aaad5 100755 --- a/bin/v-deactivate-vesta-license +++ b/bin/v-deactivate-vesta-license @@ -35,7 +35,7 @@ check_args '2' "$#" 'MODULE LICENSE' # Activating license v_host='https://vestacp.com/checkout' -answer=$(curl -s "$v_host/cancel.php?licence_key=$license&module=$module") +answer=$(curl -s $v_host/cancel.php?licence_key=$license) check_result $? "cant' connect to vestacp.com " $E_CONNECT # Checking server answer diff --git a/bin/v-delete-mail-domain b/bin/v-delete-mail-domain index ee727aa96..f3541edbe 100755 --- a/bin/v-delete-mail-domain +++ b/bin/v-delete-mail-domain @@ -56,7 +56,7 @@ fi # Deleting dkim dns record if [ "$DKIM" = 'yes' ] && [ -e "$USER_DATA/dns/$domain.conf" ]; then records=$($BIN/v-list-dns-records $user $domain plain) - dkim_records=$(echo "$records" |grep -w '_domainkey' |cut -f 1) + dkim_records=$(echo "$records" |grep -w '_domainkey' | cut -f 1 -d ' ') for id in $dkim_records; do $BIN/v-delete-dns-record $user $domain $id done diff --git a/bin/v-delete-sys-mail-ssl b/bin/v-delete-sys-mail-ssl deleted file mode 100755 index 06dab82ba..000000000 --- a/bin/v-delete-sys-mail-ssl +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/bash -# info: delete sys vesta user ssl certificate -# options: NONE -# -# The script disables user domain ssl synchronization - - -#----------------------------------------------------------# -# Variable & Function # -#----------------------------------------------------------# - -# Includes -source $VESTA/func/main.sh -source $VESTA/conf/vesta.conf - - -#----------------------------------------------------------# -# Verifications # -#----------------------------------------------------------# - - -#----------------------------------------------------------# -# Action # -#----------------------------------------------------------# - -vst_crt="$VESTA/ssl/certificate.crt" -vst_key="$VESTA/ssl/certificate.key" - -# Updating mail certificate -case $MAIL_SYSTEM in - exim) conf='/etc/exim/exim.conf';; - exim4) conf='/etc/exim4/exim4.conf.template';; -esac -if [ -e "$conf" ]; then - sed -e "s|^tls_certificate.*|tls_certificate = $vst_crt|" \ - -e "s|^tls_privatekey.*|tls_privatekey = $vst_key|" -i $conf -fi - -# Updating imap certificate -conf="/etc/dovecot/conf.d/10-ssl.conf" -if [ ! -z "$IMAP_SYSTEM" ] && [ -e "$conf" ]; then - sed -e "s|ssl_cert.*|ssl_cert = <$vst_crt|" \ - -e "s|ssl_key.*|ssl_key = <$vst_key|" -i $conf -fi - -# Moving old certificates -if [ -e "$VESTA/ssl/mail.crt" ]; then - mv -f $VESTA/ssl/mail.crt $VESTA/ssl/mail.crt.old -fi -if [ -e "VESTA/ssl/mail.key" ]; then - mv $VESTA/ssl/mail.key VESTA/ssl/mail.key.old -fi - -# Updating vesta.conf value -sed -i "/MAIL_CERTIFICATE=/ d" $VESTA/conf/vesta.conf - - -#----------------------------------------------------------# -# Vesta # -#----------------------------------------------------------# - -# Restarting services -if [ "$restart" != 'no' ]; then - if [ ! -z "$MAIL_SYSTEM" ]; then - $BIN/v-restart-service $MAIL_SYSTEM - fi - if [ ! -z "$IMAP_SYSTEM" ]; then - $BIN/v-restart-service $IMAP_SYSTEM - fi -fi - -# Logging -log_event "$OK" "$ARGUMENTS" - -exit diff --git a/bin/v-delete-sys-vesta-ssl b/bin/v-delete-sys-vesta-ssl deleted file mode 100755 index e90f32b9b..000000000 --- a/bin/v-delete-sys-vesta-ssl +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/bash -# info: delete sys vesta user ssl certificate -# options: NONE -# -# The script disables user domain ssl synchronization - - -#----------------------------------------------------------# -# Variable & Function # -#----------------------------------------------------------# - -# Includes -source $VESTA/func/main.sh -source $VESTA/conf/vesta.conf - - -#----------------------------------------------------------# -# Verifications # -#----------------------------------------------------------# - - -#----------------------------------------------------------# -# Action # -#----------------------------------------------------------# - -# Updating vesta.conf value -sed -i "/VESTA_CERTIFICATE=/ d" $VESTA/conf/vesta.conf - - -#----------------------------------------------------------# -# Vesta # -#----------------------------------------------------------# - -# Logging -log_event "$OK" "$ARGUMENTS" - -exit diff --git a/bin/v-delete-user-favourites b/bin/v-delete-user-favourites index 28a8dd971..374fa4308 100755 --- a/bin/v-delete-user-favourites +++ b/bin/v-delete-user-favourites @@ -32,8 +32,6 @@ case $system in DNS_REC) is_format_valid 'id' ;; *) is_format_valid 'object' esac - -is_format_valid 'user' is_object_valid 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user" diff --git a/bin/v-delete-web-domain-ssl b/bin/v-delete-web-domain-ssl index 160b07cce..05e8c9403 100755 --- a/bin/v-delete-web-domain-ssl +++ b/bin/v-delete-web-domain-ssl @@ -57,13 +57,7 @@ fi # Deleting old certificate tmpdir=$(mktemp -p $HOMEDIR/$user/web/$domain/private -d) - -# remove certificate files - do not use wildcard, as this might remove other domains -rm -f $HOMEDIR/$user/conf/web/ssl.$domain.ca -rm -f $HOMEDIR/$user/conf/web/ssl.$domain.crt -rm -f $HOMEDIR/$user/conf/web/ssl.$domain.key -rm -f $HOMEDIR/$user/conf/web/ssl.$domain.pem - +rm -f $HOMEDIR/$user/conf/web/ssl.$domain.* mv $USER_DATA/ssl/$domain.* $tmpdir chown -R $user:$user $tmpdir diff --git a/bin/v-extract-fs-archive b/bin/v-extract-fs-archive index 1ea608af9..ec70baba4 100755 --- a/bin/v-extract-fs-archive +++ b/bin/v-extract-fs-archive @@ -82,7 +82,7 @@ fi # Extracting ziped archive if [ ! -z "$(echo $src_file |grep -i '.zip')" ]; then sudo -u $user mkdir -p "$dst_dir" >/dev/null 2>&1 - sudo -u $user unzip -o "$src_file" -d "$dst_dir" >/dev/null 2>&1 + sudo -u $user unzip "$src_file" -d "$dst_dir" >/dev/null 2>&1 rc=$? fi diff --git a/bin/v-generate-ssl-cert b/bin/v-generate-ssl-cert index 394c6625b..9f75f9d8c 100755 --- a/bin/v-generate-ssl-cert +++ b/bin/v-generate-ssl-cert @@ -67,7 +67,7 @@ fi args_usage='DOMAIN EMAIL COUNTRY STATE CITY ORG UNIT [ALIASES] [FORMAT]' check_args '7' "$#" "$args_usage" -is_format_valid 'domain' 'alias' 'format' +is_format_valid 'domain_alias' 'format' #----------------------------------------------------------# diff --git a/bin/v-insert-dns-domain b/bin/v-insert-dns-domain index 9e6874df5..b767b576a 100755 --- a/bin/v-insert-dns-domain +++ b/bin/v-insert-dns-domain @@ -50,7 +50,7 @@ if [ "$flush" = 'records' ]; then fi # Flush domain -if [ "$flush" != 'no' ]; then +if [ "$flush" ! = 'no' ]; then sed -i "/DOMAIN='$DOMAIN'/d" $USER_DATA/dns.conf 2> /dev/null fi diff --git a/bin/v-list-dns-domain b/bin/v-list-dns-domain index c9c3f1ea6..f72943f9a 100755 --- a/bin/v-list-dns-domain +++ b/bin/v-list-dns-domain @@ -71,7 +71,6 @@ csv_list() { #----------------------------------------------------------# check_args '2' "$#" 'USER DOMAIN [FORMAT]' -is_format_valid 'user' 'domain' is_object_valid 'user' 'USER' "$user" is_object_valid 'dns' 'DOMAIN' "$domain" diff --git a/bin/v-list-letsencrypt-user b/bin/v-list-letsencrypt-user index f6e2c774d..cded96001 100755 --- a/bin/v-list-letsencrypt-user +++ b/bin/v-list-letsencrypt-user @@ -23,8 +23,7 @@ json_list() { "EMAIL": "'$EMAIL'", "EXPONENT": "'$EXPONENT'", "MODULUS": "'$MODULUS'", - "THUMB": "'$THUMB'", - "KID": "'$KID'" + "THUMB: "'$THUMB'" }' echo '}' } @@ -36,18 +35,17 @@ shell_list() { echo "THUMB: $THUMB" echo "EXPONENT: $EXPONENT" echo "MODULUS: $MODULUS" - echo "KID: $KID" } # PLAIN list function plain_list() { - echo -e "$user\t$EMAIL\t$EXPONENT\t$MODULUS\t$THUMB\t$KID" + echo -e "$user\t$EMAIL\t$EXPONENT\t$MODULUS\t$THUMB" } # CSV list function csv_list() { - echo "USER,EMAIL,EXPONENT,MODULUS,THUMB,KID" - echo "$user,$EMAIL,$EXPONENT,$MODULUS,$THUMB,$KID" + echo "USER,EMAIL,EXPONENT,MODULUS,THUMB" + echo "$user,$EMAIL,$EXPONENT,$MODULUS,$THUMB" } @@ -56,7 +54,6 @@ csv_list() { #----------------------------------------------------------# check_args '1' "$#" 'USER [FORMAT]' -is_format_valid 'user' is_object_valid 'user' 'USER' "$user" if [ ! -e "$USER_DATA/ssl/le.conf" ]; then check_result $E_NOTEXIST "LetsEncrypt user account doesn't exist" diff --git a/bin/v-list-mail-domain-dkim-dns b/bin/v-list-mail-domain-dkim-dns index d9f9d5bac..d7b3e2a65 100755 --- a/bin/v-list-mail-domain-dkim-dns +++ b/bin/v-list-mail-domain-dkim-dns @@ -57,7 +57,6 @@ csv_list() { #----------------------------------------------------------# check_args '2' "$#" 'USER DOMAIN [FORMAT]' -is_format_valid 'user' 'domain' is_object_valid 'user' 'USER' "$user" is_object_valid 'mail' 'DOMAIN' "$domain" @@ -68,7 +67,7 @@ is_object_valid 'mail' 'DOMAIN' "$domain" # Parsing domain keys if [ -e "$USER_DATA/mail/$domain.pub" ]; then - pub=$(cat $USER_DATA/mail/$domain.pub |grep -v "KEY-----" |tr -d "\n\r") + pub=$(cat $USER_DATA/mail/$domain.pub |grep -v "KEY-----") pub=$(echo "$pub" |sed ':a;N;$!ba;s/\n/\\n/g') else pub="DKIM-SUPPORT-IS-NOT-ACTIVATED" diff --git a/bin/v-list-sys-config b/bin/v-list-sys-config index 7764af29c..879c3ab3c 100755 --- a/bin/v-list-sys-config +++ b/bin/v-list-sys-config @@ -51,9 +51,7 @@ json_list() { "MAIL_URL": "'$MAIL_URL'", "DB_PMA_URL": "'$DB_PMA_URL'", "DB_PGA_URL": "'$DB_PGA_URL'", - "SOFTACULOUS": "'$SOFTACULOUS'", - "MAIL_CERTIFICATE": "'$MAIL_CERTIFICATE'", - "VESTA_CERTIFICATE": "'$VESTA_CERTIFICATE'" + "SOFTACULOUS": "'$SOFTACULOUS'" } }' } @@ -140,12 +138,6 @@ shell_list() { if [ ! -z "$LANGUAGE" ] && [ "$LANGUAGE" != 'en' ]; then echo "Language: $LANGUAGE" fi - if [ ! -z "$MAIL_CERTIFICATE" ]; then - echo "Mail SSL: $MAIL_CERTIFICATE" - fi - if [ ! -z "$VESTA_CERTIFICATE" ]; then - echo "Vesta SSL: $VESTA_CERTIFICATE" - fi echo "Version: $VERSION" } @@ -159,8 +151,7 @@ plain_list() { echo -ne "$CRON_SYSTEM\t$DISK_QUOTA\t$FIREWALL_SYSTEM\t" echo -ne "$FIREWALL_EXTENSION\t$FILEMANAGER_KEY\t$SFTPJAIL_KEY\t" echo -ne "$REPOSITORY\t$VERSION\t$LANGUAGE\t$BACKUP_GZIP\t$BACKUP\t" - echo -ne "$MAIL_URL\t$DB_PMA_URL\t$DB_PGA_URL\t$MAIL_CERTIFICATE\t" - echo -e "$VESTA_CERTIFICATE" + echo -e "$MAIL_URL\t$DB_PMA_URL\t$DB_PGA_URL" } @@ -174,8 +165,7 @@ csv_list() { echo -n "'CRON_SYSTEM','DISK_QUOTA','FIREWALL_SYSTEM'," echo -n "'FIREWALL_EXTENSION','FILEMANAGER_KEY','SFTPJAIL_KEY'," echo -n "'REPOSITORY','VERSION','LANGUAGE','BACKUP_GZIP','BACKUP'," - echo -n "'MAIL_URL','DB_PMA_URL','DB_PGA_URL', 'SOFTACULOUS'," - echo -n "'MAIL_CERTIFICATE','VESTA_CERTIFICATE'" + echo -n "'MAIL_URL','DB_PMA_URL','DB_PGA_URL'" echo echo -n "'$WEB_SYSTEM','$WEB_RGROUPS','$WEB_PORT','$WEB_SSL'," echo -n "'$WEB_SSL_PORT','$WEB_BACKEND','$PROXY_SYSTEM','$PROXY_PORT'," @@ -186,7 +176,6 @@ csv_list() { echo -n "'$FIREWALL_EXTENSION','$FILEMANAGER_KEY','$SFTPJAIL_KEY'," echo -n "'$REPOSITORY','$VERSION','$LANGUAGE','$BACKUP_GZIP','$BACKUP'," echo -n "'$MAIL_URL','$DB_PMA_URL','$DB_PGA_URL', '$SOFTACULOUS'" - echo -n "'$MAIL_CERTIFICATE','$VESTA_CERTIFICATE'" echo } @@ -198,7 +187,7 @@ csv_list() { # Listing data case $format in json) json_list ;; - plain) plain_list ;; + plain) shell_list ;; csv) csv_list ;; shell) shell_list ;; esac diff --git a/bin/v-list-sys-mail-ssl b/bin/v-list-sys-mail-ssl deleted file mode 100755 index 5da74e080..000000000 --- a/bin/v-list-sys-mail-ssl +++ /dev/null @@ -1,135 +0,0 @@ -#!/bin/bash -# info: list mail ssl certificate -# options: [FORMAT] -# -# The function of obtaining mail ssl files. - - -#----------------------------------------------------------# -# Variable&Function # -#----------------------------------------------------------# - -# Argument definition -format=${1-shell} - -# Includes -source $VESTA/func/main.sh - -# JSON list function -json_list() { - echo '{' - echo -e "\t\"MAIL\": {" - echo " \"CRT\": \"$crt\"," - echo " \"KEY\": \"$key\"," - echo " \"CA\": \"$ca\"," - echo " \"SUBJECT\": \"$subj\"," - echo " \"ALIASES\": \"$alt_dns\"," - echo " \"NOT_BEFORE\": \"$before\"," - echo " \"NOT_AFTER\": \"$after\"," - echo " \"SIGNATURE\": \"$signature\"," - echo " \"PUB_KEY\": \"$pub_key\"," - echo " \"ISSUER\": \"$issuer\"" - echo -e "\t}\n}" -} - -# SHELL list function -shell_list() { - if [ ! -z "$crt" ]; then - echo -e "$crt" - fi - if [ ! -z "$key" ]; then - echo -e "\n$key" - fi - if [ ! -z "$crt" ]; then - echo - echo - echo "SUBJECT: $subj" - if [ ! -z "$alt_dns" ]; then - echo "ALIASES: ${alt_dns//,/ }" - fi - echo "VALID FROM: $before" - echo "VALID TIL: $after" - echo "SIGNATURE: $signature" - echo "PUB_KEY: $pub_key" - echo "ISSUER: $issuer" - fi -} - -# PLAIN list function -plain_list() { - if [ ! -z "$crt" ]; then - echo -e "$crt" - fi - if [ ! -z "$key" ]; then - echo -e "\n$key" - fi - if [ ! -z "$ca" ]; then - echo -e "\n$ca" - fi - if [ ! -z "$crt" ]; then - echo "$subj" - echo "${alt_dns//,/ }" - echo "$before" - echo "$after" - echo "$signature" - echo "$pub_key" - echo "$issuer" - fi - -} - -# CSV list function -csv_list() { - echo -n "CRT,KEY,CA,SUBJECT,ALIASES,NOT_BEFORE,NOT_AFTER,SIGNATURE," - echo "PUB_KEY,ISSUER" - echo -n "\"$crt\",\"$key\",\"$ca\",\"$subj\",\"${alt_dns//,/ }\"," - echo "\"$before\",\"$after\",\"$signature\",\"$pub_key\",\"$issuer\"" -} - - -#----------------------------------------------------------# -# Verifications # -#----------------------------------------------------------# - - - -#----------------------------------------------------------# -# Action # -#----------------------------------------------------------# - -# Parsing SSL certificate -if [ ! -e "$VESTA/ssl/mail.crt" ] || [ ! -e "$VESTA/ssl/mail.key" ]; then - exit -fi - -crt=$(cat $VESTA/ssl/mail.crt |sed ':a;N;$!ba;s/\n/\\n/g') -key=$(cat $VESTA/ssl/mail.key |sed ':a;N;$!ba;s/\n/\\n/g') - - -# Parsing SSL certificate details without CA -info=$(openssl x509 -text -in $VESTA/ssl/mail.crt) -subj=$(echo "$info" |grep Subject: |cut -f 2 -d =) -before=$(echo "$info" |grep Before: |sed -e "s/.*Before: //") -after=$(echo "$info" |grep "After :" |sed -e "s/.*After : //") -signature=$(echo "$info" |grep "Algorithm:" |head -n1 ) -signature=$(echo "$signature"| sed -e "s/.*Algorithm: //") -pub_key=$(echo "$info" |grep Public-Key: |cut -f2 -d \( | tr -d \)) -issuer=$(echo "$info" |grep Issuer: |sed -e "s/.*Issuer: //") -alt_dns=$(echo "$info" |grep DNS |sed -e 's/DNS:/\n/g' |tr -d ',') -alt_dns=$(echo "$alt_dns" |tr -d ' ' |sed -e "/^$/d") -alt_dns=$(echo "$alt_dns" |sed -e ':a;N;$!ba;s/\n/,/g') - -# Listing data -case $format in - json) json_list ;; - plain) plain_list ;; - csv) csv_list ;; - shell) shell_list ;; -esac - - -#----------------------------------------------------------# -# Vesta # -#----------------------------------------------------------# - -exit diff --git a/bin/v-list-user b/bin/v-list-user index 57b48bb3a..05649f915 100755 --- a/bin/v-list-user +++ b/bin/v-list-user @@ -154,7 +154,6 @@ csv_list() { #----------------------------------------------------------# check_args '1' "$#" 'USER [FORMAT]' -is_format_valid 'user' is_object_valid 'user' 'USER' "$user" diff --git a/bin/v-list-user-backup b/bin/v-list-user-backup index 8ee8a41b5..2e0a98d0d 100755 --- a/bin/v-list-user-backup +++ b/bin/v-list-user-backup @@ -75,7 +75,6 @@ csv_list() { #----------------------------------------------------------# check_args '2' "$#" 'USER BACKUP [FORMAT]' -is_format_valid 'user' is_object_valid 'user' 'USER' "$user" is_object_valid 'backup' 'BACKUP' "$backup" diff --git a/bin/v-list-user-backups b/bin/v-list-user-backups index 7e7e284e3..813ee6871 100755 --- a/bin/v-list-user-backups +++ b/bin/v-list-user-backups @@ -22,7 +22,7 @@ json_list() { i=1 objects=$(grep BACKUP $USER_DATA/backup.conf |wc -l) echo "{" - while read -r str; do + while read str; do eval $str echo -n ' "'$BACKUP'": { "TYPE": "'$TYPE'", diff --git a/bin/v-list-user-package b/bin/v-list-user-package index 74ce4b145..26d809239 100755 --- a/bin/v-list-user-package +++ b/bin/v-list-user-package @@ -22,7 +22,6 @@ json_list() { echo '{' echo ' "'$PACKAGE'": { "WEB_TEMPLATE": "'$WEB_TEMPLATE'", - "BACKEND_TEMPLATE": "'$BACKEND_TEMPLATE'", "PROXY_TEMPLATE": "'$PROXY_TEMPLATE'", "DNS_TEMPLATE": "'$DNS_TEMPLATE'", "WEB_DOMAINS": "'$WEB_DOMAINS'", @@ -48,7 +47,6 @@ json_list() { shell_list() { echo "PACKAGE: $PACKAGE" echo "WEB TEMPLATE: $WEB_TEMPLATE" - echo "BACKEND_TEMPLATE: $BACKEND_TEMPLATE" echo "PROXY TEMPLATE: $PROXY_TEMPLATE" echo "DNS TEMPLATE: $DNS_TEMPLATE" echo "WEB DOMAINS: $WEB_DOMAINS" @@ -70,7 +68,7 @@ shell_list() { # PLAIN list function plain_list() { - echo -ne "$PACKAGE\t$WEB_TEMPLATE\t$BACKEND_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t" + echo -ne "$PACKAGE\t$WEB_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t" echo -ne "$WEB_DOMAINS\t$WEB_ALIASES\t$DNS_DOMAINS\t$DNS_RECORDS\t" echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$DATABASES\t$CRON_JOBS\t" echo -e "$DISK_QUOTA\t$BANDWIDTH\t$NS\t$SHELL\t$BACKUPS\t$TIME\t$DATE" @@ -78,11 +76,11 @@ plain_list() { # CSV list function csv_list() { - echo -n "PACKAGE,WEB_TEMPLATE,BACKEND_TEMPLATE,PROXY_TEMPLATE,DNS_TEMPLATE," + echo -n "PACKAGE,WEB_TEMPLATE,PROXY_TEMPLATE,DNS_TEMPLATE," echo -n "WEB_DOMAINS,WEB_ALIASES,DNS_DOMAINS,DNS_RECORDS," echo -n "MAIL_DOMAINS,MAIL_ACCOUNTS,DATABASES,CRON_JOBS," echo "DISK_QUOTA,BANDWIDTH,NS,SHELL,BACKUPS,TIME,DATE" - echo -n "$PACKAGE,$WEB_TEMPLATE,$BACKEND_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE," + echo -n "$PACKAGE,$WEB_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE," echo -n "$WEB_DOMAINS,$WEB_ALIASES,$DNS_DOMAINS,$DNS_RECORDS," echo -n "$MAIL_DOMAINS,$MAIL_ACCOUNTS,$DATABASES,$CRON_JOBS," echo "$DISK_QUOTA,$BANDWIDTH,\"$NS\",$SHELL,$BACKUPS,$TIME,$DATE" diff --git a/bin/v-list-user-packages b/bin/v-list-user-packages index 6808022cd..3c9238798 100755 --- a/bin/v-list-user-packages +++ b/bin/v-list-user-packages @@ -27,7 +27,6 @@ json_list() { source $VESTA/data/packages/$package echo -n ' "'$PACKAGE'": { "WEB_TEMPLATE": "'$WEB_TEMPLATE'", - "BACKEND_TEMPLATE": "'$BACKEND_TEMPLATE'", "PROXY_TEMPLATE": "'$PROXY_TEMPLATE'", "DNS_TEMPLATE": "'$DNS_TEMPLATE'", "WEB_DOMAINS": "'$WEB_DOMAINS'", @@ -66,7 +65,7 @@ shell_list() { package_data=$(cat $VESTA/data/packages/$package) package_data=$(echo "$package_data" |sed -e 's/unlimited/unlim/g') eval $package_data - echo -n "$PACKAGE $WEB_TEMPLATE $BACKEND_TEMPLATE $WEB_DOMAINS $DNS_DOMAINS " + echo -n "$PACKAGE $WEB_TEMPLATE $WEB_DOMAINS $DNS_DOMAINS " echo "$MAIL_DOMAINS $DATABASES $SHELL $DISK_QUOTA $BANDWIDTH" done } @@ -76,7 +75,7 @@ plain_list() { for package in $packages; do source $VESTA/data/packages/$package PACKAGE=${package/.pkg/} - echo -ne "$PACKAGE\t$WEB_TEMPLATE\t$BACKEND_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t" + echo -ne "$PACKAGE\t$WEB_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t" echo -ne "$WEB_DOMAINS\t$WEB_ALIASES\t$DNS_DOMAINS\t$DNS_RECORDS\t" echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$DATABASES\t$CRON_JOBS\t" echo -e "$DISK_QUOTA\t$BANDWIDTH\t$NS\t$SHELL\t$BACKUPS\t$TIME\t$DATE" @@ -85,13 +84,13 @@ plain_list() { # CSV list function csv_list() { - echo -n "PACKAGE,WEB_TEMPLATE,BACKEND_TEMPLATE,PROXY_TEMPLATE,DNS_TEMPLATE," + echo -n "PACKAGE,WEB_TEMPLATE,PROXY_TEMPLATE,DNS_TEMPLATE," echo -n "WEB_DOMAINS,WEB_ALIASES,DNS_DOMAINS,DNS_RECORDS," echo -n "MAIL_DOMAINS,MAIL_ACCOUNTS,DATABASES,CRON_JOBS," echo "DISK_QUOTA,BANDWIDTH,NS,SHELL,BACKUPS,TIME,DATE" for package in $packages; do PACKAGE=${package/.pkg/} - echo -n "$PACKAGE,$WEB_TEMPLATE,$BACKEND_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE," + echo -n "$PACKAGE,$WEB_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE," echo -n "$WEB_DOMAINS,$WEB_ALIASES,$DNS_DOMAINS,$DNS_RECORDS," echo -n "$MAIL_DOMAINS,$MAIL_ACCOUNTS,$DATABASES,$CRON_JOBS," echo "$DISK_QUOTA,$BANDWIDTH,\"$NS\",$SHELL,$BACKUPS,$TIME,$DATE" diff --git a/bin/v-list-user-stats b/bin/v-list-user-stats index 0fa7dc900..11b867afd 100755 --- a/bin/v-list-user-stats +++ b/bin/v-list-user-stats @@ -115,7 +115,6 @@ csv_list() { #----------------------------------------------------------# check_args '1' "$#" 'USER [FORMAT]' -is_format_valid 'user' is_object_valid 'user' 'USER' "$user" diff --git a/bin/v-list-users b/bin/v-list-users index 32a947366..14a6d007d 100755 --- a/bin/v-list-users +++ b/bin/v-list-users @@ -15,14 +15,9 @@ format=${1-shell} # JSON list function json_list() { echo '{' + object_count=$(grep '@' /etc/passwd |wc -l) i=1 while read USER; do - if [ ! -f "$VESTA/data/users/$USER/user.conf" ]; then - continue; - fi - if [ $i -gt 1 ]; then - echo "," - fi source $VESTA/data/users/$USER/user.conf echo -n ' "'$USER'": { "FNAME": "'$FNAME'", @@ -79,8 +74,14 @@ json_list() { "TIME": "'$TIME'", "DATE": "'$DATE'" }' + if [ "$i" -lt "$object_count" ]; then + echo ',' + else + echo + fi ((i++)) done < <(grep '@' /etc/passwd |cut -f1 -d:) + echo '}' } @@ -89,9 +90,6 @@ shell_list() { echo "USER PKG WEB DNS MAIL DB DISK BW SPND DATE" echo "---- --- --- --- --- -- ---- -- ---- ----" while read USER; do - if [ ! -f "$VESTA/data/users/$USER/user.conf" ]; then - continue; - fi source $VESTA/data/users/$USER/user.conf echo -n "$USER $PACKAGE $U_WEB_DOMAINS $U_DNS_DOMAINS $U_MAIL_DOMAINS" echo " $U_DATABASES $U_DISK $U_BANDWIDTH $SUSPENDED $DATE" @@ -101,9 +99,6 @@ shell_list() { # PLAIN list function plain_list() { while read USER; do - if [ ! -f "$VESTA/data/users/$USER/user.conf" ]; then - continue; - fi source $VESTA/data/users/$USER/user.conf echo -ne "$USER\t$FNAME\t$LNAME\t$PACKAGE\t$WEB_TEMPLATE\t" echo -ne "$BACKEND_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t" @@ -136,9 +131,6 @@ csv_list() { echo -n "U_MAIL_DOMAINS,U_MAIL_DKIM,U_MAIL_ACCOUNTS,U_DATABASES" echo "U_CRON_JOBS,U_BACKUPS,LANGUAGE,TIME,DATE" while read USER; do - if [ ! -f "$VESTA/data/users/$USER/user.conf" ]; then - continue; - fi source $VESTA/data/users/$USER/user.conf echo -n "$USER,\"$FNAME\",\"$LNAME\",$PACKAGE,$WEB_TEMPLATE," echo -n "$BACKEND_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE," @@ -159,9 +151,6 @@ csv_list() { # Raw list function raw_list() { while read USER; do - if [ ! -f "$VESTA/data/users/$USER/user.conf" ]; then - continue; - fi echo $VESTA/data/users/$USER/user.conf cat $VESTA/data/users/$USER/user.conf done < <(grep '@' /etc/passwd |cut -f1 -d:) diff --git a/bin/v-list-web-domain b/bin/v-list-web-domain index 7e33a4ab0..e0f9492cb 100755 --- a/bin/v-list-web-domain +++ b/bin/v-list-web-domain @@ -110,7 +110,6 @@ csv_list() { #----------------------------------------------------------# check_args '2' "$#" 'USER DOMAIN [FORMAT]' -is_format_valid 'user' 'domain' is_object_valid 'user' 'USER' "$user" is_object_valid 'web' 'DOMAIN' "$domain" diff --git a/bin/v-list-web-domain-ssl b/bin/v-list-web-domain-ssl index bf69e3624..c91a7cca7 100755 --- a/bin/v-list-web-domain-ssl +++ b/bin/v-list-web-domain-ssl @@ -19,7 +19,6 @@ source $VESTA/func/main.sh # JSON list function json_list() { - issuer=$(echo "$issuer" |sed -e 's/"/\\"/g' -e "s/%quote%/'/g") echo '{' echo -e "\t\"$domain\": {" echo " \"CRT\": \"$crt\"," @@ -98,7 +97,6 @@ csv_list() { #----------------------------------------------------------# check_args '2' "$#" 'USER DOMAIN [FORMAT]' -is_format_valid 'user' 'domain' is_object_valid 'user' 'USER' "$user" is_object_valid 'web' 'DOMAIN' "$domain" @@ -112,7 +110,7 @@ if [ -e "$USER_DATA/ssl/$domain.crt" ]; then crt=$(cat $USER_DATA/ssl/$domain.crt |sed ':a;N;$!ba;s/\n/\\n/g') info=$(openssl x509 -text -in $USER_DATA/ssl/$domain.crt) - subj=$(echo "$info" |grep Subject: |cut -f 2 -d =|cut -f 2 -d \") + subj=$(echo "$info" |grep Subject: |cut -f 2 -d =) before=$(echo "$info" |grep Before: |sed -e "s/.*Before: //") after=$(echo "$info" |grep "After :" |sed -e "s/.*After : //") signature=$(echo "$info" |grep "Algorithm:" |head -n1 ) diff --git a/bin/v-list-web-domains b/bin/v-list-web-domains index 23de5fb4f..a31199fa4 100755 --- a/bin/v-list-web-domains +++ b/bin/v-list-web-domains @@ -100,7 +100,6 @@ csv_list() { #----------------------------------------------------------# check_args '1' "$#" 'USER [FORMAT]' -is_format_valid 'user' is_object_valid 'user' 'USER' "$user" diff --git a/bin/v-restart-proxy b/bin/v-restart-proxy index 7dcfad120..25ab20bf1 100755 --- a/bin/v-restart-proxy +++ b/bin/v-restart-proxy @@ -50,13 +50,7 @@ if [ -z "$PROXY_SYSTEM" ] || [ "$PROXY_SYSTEM" = 'remote' ]; then fi # Restart system -if [ ! -f "/etc/debian_version" ]; then - service $PROXY_SYSTEM restart >/dev/null 2>&1 -else - systemctl reset-failed $PROXY_SYSTEM - systemctl restart $PROXY_SYSTEM > /dev/null 2>&1 -fi - +service $PROXY_SYSTEM restart >/dev/null 2>&1 if [ $? -ne 0 ]; then send_email_report check_result $E_RESTART "$PROXY_SYSTEM restart failed" diff --git a/bin/v-restore-user b/bin/v-restore-user index cb77f7434..55e29e187 100755 --- a/bin/v-restore-user +++ b/bin/v-restore-user @@ -56,7 +56,6 @@ ftpc() { quote USER $USERNAME quote PASS $PASSWORD binary - lcd $BACKUP $1 $2 $3 @@ -290,7 +289,7 @@ if [ "$web" != 'no' ] && [ ! -z "$WEB_SYSTEM" ]; then if [ -z "$web" ] || [ "$web" = '*' ]; then domains="$backup_domains" else - echo "$web" | tr ',' '\n' | sed -e "s/^/^/" > $tmpdir/selected.txt + echo "$web" |tr ',' '\n' > $tmpdir/selected.txt domains=$(echo "$backup_domains" |egrep -f $tmpdir/selected.txt) fi @@ -407,21 +406,15 @@ if [ "$web" != 'no' ] && [ ! -z "$WEB_SYSTEM" ]; then fi # Restoring web domain data - chown $user $tmpdir - chmod u+w $HOMEDIR/$user/web/$domain - sudo -u $user tar -xzpf $tmpdir/web/$domain/domain_data.tar.gz \ - -C $HOMEDIR/$user/web/$domain/ --exclude=./logs/* \ - 2> $HOMEDIR/$user/web/$domain/restore_errors.log - if [ -e "$HOMEDIR/$user/web/$domain/restore_errors.log" ]; then - chown $user:$user $HOMEDIR/$user/web/$domain/restore_errors.log + tar -xzpf $tmpdir/web/$domain/domain_data.tar.gz \ + -C $HOMEDIR/$user/web/$domain/ + if [ "$?" -ne 0 ]; then + rm -rf $tmpdir + error="can't unpack $domain data tarball" + echo "$error" |$SENDMAIL -s "$subj" $email $notify + sed -i "/ $user /d" $VESTA/data/queue/backup.pipe + check_result "$E_PARSING" "$error" fi - #if [ "$?" -ne 0 ]; then - # rm -rf $tmpdir - # error="can't unpack $domain data tarball" - # echo "$error" |$SENDMAIL -s "$subj" $email $notify - # sed -i "/ $user /d" $VESTA/data/queue/backup.pipe - # check_result "$E_PARSING" "$error" - #fi # Applying Fix for tar < 1.24 find $HOMEDIR/$user/web/$domain -type d \ @@ -459,7 +452,7 @@ if [ "$dns" != 'no' ] && [ ! -z "$DNS_SYSTEM" ]; then if [ -z "$dns" ] || [ "$dns" = '*' ]; then domains="$backup_domains" else - echo "$dns" | tr ',' '\n' | sed -e "s/^/^/" > $tmpdir/selected.txt + echo "$dns" |tr ',' '\n' > $tmpdir/selected.txt domains=$(echo "$backup_domains" |egrep -f $tmpdir/selected.txt) fi @@ -539,7 +532,7 @@ if [ "$mail" != 'no' ] && [ ! -z "$MAIL_SYSTEM" ]; then if [ -z "$mail" ] || [ "$mail" = '*' ]; then domains="$backup_domains" else - echo "$mail" | tr ',' '\n' | sed -e "s/^/^/" > $tmpdir/selected.txt + echo "$mail" |tr ',' '\n' > $tmpdir/selected.txt domains=$(echo "$backup_domains" |egrep -f $tmpdir/selected.txt) fi @@ -593,15 +586,13 @@ if [ "$mail" != 'no' ] && [ ! -z "$MAIL_SYSTEM" ]; then # Rebuilding mail config rebuild_mail_domain_conf - + domain_idn=$domain format_domain_idn # Restoring emails if [ -e "$tmpdir/mail/$domain/accounts.tar.gz" ]; then - chown $user $tmpdir - chmod u+w $HOMEDIR/$user/mail/$domain_idn - sudo -u $user tar -xzpf $tmpdir/mail/$domain/accounts.tar.gz \ + tar -xzpf $tmpdir/mail/$domain/accounts.tar.gz \ -C $HOMEDIR/$user/mail/$domain_idn/ if [ "$?" -ne 0 ]; then rm -rf $tmpdir @@ -636,7 +627,7 @@ if [ "$db" != 'no' ] && [ ! -z "$DB_SYSTEM" ]; then if [ -z "$db" ] || [ "$db" = '*' ]; then databases="$backup_databases" else - echo "$db" |tr ',' '\n' | sed -e "s/$/$/" > $tmpdir/selected.txt + echo "$db" |tr ',' '\n' > $tmpdir/selected.txt databases=$(echo "$backup_databases" |egrep -f $tmpdir/selected.txt) fi diff --git a/bin/v-schedule-user-restore b/bin/v-schedule-user-restore index 0fbb8546e..031b024e8 100755 --- a/bin/v-schedule-user-restore +++ b/bin/v-schedule-user-restore @@ -23,19 +23,6 @@ udir=$8 source $VESTA/func/main.sh source $VESTA/conf/vesta.conf -# Check backup ownership function -is_backup_available() { - passed=false - if [[ $2 =~ ^$1.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]_[0-9][0-9]-[0-9][0-9]-[0-9][0-9].tar$ ]]; then - passed=true - elif [[ $2 =~ ^$1.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].tar$ ]]; then - passed=true - fi - - if [ $passed = false ]; then - check_result $E_FORBIDEN "permission denied" - fi -} #----------------------------------------------------------# # Verifications # @@ -47,7 +34,6 @@ is_system_enabled "$BACKUP_SYSTEM" 'BACKUP_SYSTEM' is_object_valid 'user' 'USER' "$user" is_backup_enabled is_backup_scheduled 'restore' -is_backup_available "$user" "$backup" #----------------------------------------------------------# diff --git a/bin/v-search-object b/bin/v-search-object index 939cbafc2..c642b3e63 100755 --- a/bin/v-search-object +++ b/bin/v-search-object @@ -84,22 +84,6 @@ OLD_IFS=$IFS IFS=$'\n' # User loop -search_user=$(ls -1 $VESTA/data/users |grep $object) -for user in $search_user; do - if [ -e "$VESTA/data/users/$user/user.conf" ]; then - source $VESTA/data/users/$user/user.conf - ((i ++)) - type=$(echo $type|cut -f1 -d \.) - str="ID='$i' USER='$user' TYPE='user' KEY='$user'" - str="$str RESULT='$user' ALIAS=''" - str="$str LINK='$user' PARENT=''" - str="$str SUSPENDED='$SUSPENDED' TIME='$TIME'" - str="$str DATE='$DATE'" - echo $str >> $conf - fi -done - -# User data loop for user in $(ls $VESTA/data/users/); do # Search query search=$(grep "$object" \ @@ -110,7 +94,7 @@ for user in $(ls $VESTA/data/users/); do $VESTA/data/users/$user/mail/*.conf \ $VESTA/data/users/$user/db.conf \ $VESTA/data/users/$user/cron.conf 2> /dev/null) - + for row in $search; do # Initialise variable key='' @@ -170,13 +154,12 @@ for user in $(ls $VESTA/data/users/); do # DNS Records if [ "$type" = 'dns' ]; then - if [ -n "$(echo $RECORD $VALUE |grep $object)" ]; then - dom="$(echo $row|cut -f 1 -d :|cut -f 9 -d /|sed 's/.conf//')" + if [ -n "$(echo $RECORD |grep $object)" ]; then key="RECORD" - result="$RECORD.$dom" + result="$RECORD.$DOMAIN" suspended=$SUSPENDED object_link=$ID - object_parent=$dom + object_parent=$DOMAIN object_time=$TIME object_date=$DATE ((i ++)) diff --git a/bin/v-search-ssl-certificates b/bin/v-search-ssl-certificates deleted file mode 100755 index c9208830b..000000000 --- a/bin/v-search-ssl-certificates +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/bash -# info: search ssl certificates -# options: [FORMAT] -# -# The function to obtain the list of available ssl certificates. - - -#----------------------------------------------------------# -# Variable&Function # -#----------------------------------------------------------# - -# Argument definition -format=${1-shell} - -# Includes -source $VESTA/func/main.sh - -# JSON list function -json_list() { - IFS=$'\n' - objects=$(echo "$search_cmd" |wc -l) - i=1 - echo '[' - for str in $search_cmd; do - eval $str - if [ "$i" -lt "$objects" ]; then - echo -e "\t\"$USER:$DOMAIN\"," - else - echo -e "\t\"$USER:$DOMAIN\"" - fi - (( ++i)) - done - echo "]" -} - -# SHELL list function -shell_list() { - IFS=$'\n' - echo "USER DOMAIN" - echo "---- ------" - for str in $search_cmd; do - eval $str - echo "$USER $DOMAIN" - done -} - -# PLAIN list function -plain_list() { - IFS=$'\n' - for str in $search_cmd; do - eval $str - echo -e "$USER\t$DOMAIN" - done -} - -# CSV list function -csv_list() { - IFS=$'\n' - echo "USER,DOMAIN" - for str in $search_cmd; do - eval $str - echo "$USER,$DOMAIN" - done -} - - -#----------------------------------------------------------# -# Verifications # -#----------------------------------------------------------# - - -#----------------------------------------------------------# -# Action # -#----------------------------------------------------------# - -search_cmd=$(grep -H "SSL='yes'" $VESTA/data/users/*/web.conf |\ - cut -f 1 -d ' ' |\ - sed -e "s|$VESTA/data/users/|USER='|" -e "s|/web.conf:|' |") - -# Listing data -case $format in - json) json_list ;; - plain) plain_list ;; - csv) csv_list ;; - shell) shell_list |column -t ;; -esac - - -#----------------------------------------------------------# -# Vesta # -#----------------------------------------------------------# - -exit diff --git a/bin/v-sign-letsencrypt-csr b/bin/v-sign-letsencrypt-csr new file mode 100755 index 000000000..414eb8b38 --- /dev/null +++ b/bin/v-sign-letsencrypt-csr @@ -0,0 +1,110 @@ +#!/bin/bash +# info: sing letsencrypt csr +# options: USER DOMAIN CSR_DIR [FORMAT] +# +# The function signs certificate request using LetsEncript API + + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +# Argument definition +user=$1 +domain=$2 +csr="$3/$domain.csr" +format=$4 + +# Includes +source $VESTA/func/main.sh +source $VESTA/conf/vesta.conf + +# encode base64 +encode_base64() { + cat |base64 |tr '+/' '-_' |tr -d '\r\n=' +} + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '3' "$#" 'USER DOMAIN CSR' +is_format_valid 'user' 'domain' +is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM' +is_object_valid 'user' 'USER' "$user" +is_object_unsuspended 'user' 'USER' "$user" +if [ ! -e "$USER_DATA/ssl/le.conf" ]; then + check_result $E_NOTEXIST "LetsEncrypt key doesn't exist" +fi +check_domain=$(grep -w "$domain'" $USER_DATA/web.conf) +if [ -z "$check_domain" ]; then + check_result $E_NOTEXIST "domain $domain doesn't exist" +fi +if [ ! -e "$csr" ]; then + check_result $E_NOTEXIST "$csr doesn't exist" +fi + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +source $USER_DATA/ssl/le.conf +api='https://acme-v01.api.letsencrypt.org' +key="$USER_DATA/ssl/user.key" +exponent="$EXPONENT" +modulus="$MODULUS" +thumb="$THUMB" + +# Defining JWK header +header='{"e":"'$exponent'","kty":"RSA","n":"'"$modulus"'"}' +header='{"alg":"RS256","jwk":'"$header"'}' + +# Requesting nonce +nonce=$(curl -s -I "$api/directory" |grep Nonce |cut -f2 -d \ |tr -d '\r\n') +protected=$(echo -n '{"nonce":"'"$nonce"'"}' |encode_base64) + +# Defining ACME query (request challenge) +csr=$(openssl req -in $csr -outform DER |encode_base64) +query='{"resource":"new-cert","csr":"'$csr'"}' +payload=$(echo -n "$query" |encode_base64) +signature=$(printf "%s" "$protected.$payload" |\ + openssl dgst -sha256 -binary -sign "$key" |encode_base64) +data='{"header":'"$header"',"protected":"'"$protected"'",' +data=$data'"payload":"'"$payload"'","signature":"'"$signature"'"}' + +# Sending request to LetsEncrypt API +answer=$(mktemp) +curl -s -d "$data" "$api/acme/new-cert" -o $answer +if [ ! -z "$(grep Error $answer)" ]; then + detail="$(cat $answer |tr ',' '\n' |grep detail |cut -f 4 -d \")" + detail=$(echo "$detail" |awk -F "::" '{print $2}') + rm $answer + check_result $E_LIMIT "$detail" +fi + +# Printing certificate +crt=$(cat "$answer" |openssl base64 -e) +rm $answer +if [ "$format" != 'json' ]; then + echo "-----BEGIN CERTIFICATE-----" + echo "$crt" + echo "-----END CERTIFICATE-----" +else + echo -e "{\n\t\"$domain\": {\n\t\t\"CRT\":\"" + echo -n '-----BEGIN CERTIFICATE-----\n' + echo -n "$crt" |sed ':a;N;$!ba;s/\n/\\n/g' + echo -n '-----END CERTIFICATE-----' + echo -e "\"\n\t\t}\n\t}" +fi + + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +# Logging +log_event "$OK" "$ARGUMENTS" + +exit diff --git a/bin/v-unsuspend-mail-account b/bin/v-unsuspend-mail-account index 57e54af50..314c13bc0 100755 --- a/bin/v-unsuspend-mail-account +++ b/bin/v-unsuspend-mail-account @@ -48,9 +48,6 @@ is_object_suspended "mail/$domain" 'ACCOUNT' "$account" if [[ "$MAIL_SYSTEM" =~ exim ]]; then md5=$(get_object_value "mail/$domain" 'ACCOUNT' "$account" '$MD5') quota=$(get_object_value "mail/$domain" 'ACCOUNT' "$account" '$QUOTA') - if [ "$quota" = 'unlimited' ]; then - quota=0 - fi sed -i "/^$account:/d" $HOMEDIR/$user/conf/mail/$domain/passwd str="$account:$md5:$user:mail::$HOMEDIR/$user:$quota" echo $str >> $HOMEDIR/$user/conf/mail/$domain/passwd diff --git a/bin/v-update-firewall b/bin/v-update-firewall index 46e2073a3..da91acc81 100755 --- a/bin/v-update-firewall +++ b/bin/v-update-firewall @@ -51,6 +51,11 @@ if [ $? -ne 0 ]; then conntrack_ftp='no' fi +# Checking custom OpenSSH port +sshport=$(grep '^Port ' /etc/ssh/sshd_config | head -1 | cut -d ' ' -f 2) +if [[ "$sshport" =~ ^[0-9]+$ ]] && [ "$sshport" -ne "22" ]; then + sed -i "s/PORT='22'/PORT=\'$sshport\'/" $rules +fi # Creating temporary file tmp=$(mktemp) diff --git a/bin/v-update-letsencrypt-ssl b/bin/v-update-letsencrypt-ssl index ac3e2eda9..907d305f3 100755 --- a/bin/v-update-letsencrypt-ssl +++ b/bin/v-update-letsencrypt-ssl @@ -22,63 +22,46 @@ source $VESTA/conf/vesta.conf # Action # #----------------------------------------------------------# -lecounter=0 -hostname=$(hostname) +# Defining user list +users=$($BIN/v-list-users | tail -n+3 | awk '{ print $1 }') -echo "[$(date)] : -----------------------------------------------------------------------------------" >> /usr/local/vesta/log/letsencrypt_cron.log - -# Checking user certificates -for user in $($BIN/v-list-users plain |cut -f 1); do +# Checking users +for user in $users; do USER_DATA=$VESTA/data/users/$user - + # Checking user certificates + lecounter=0 for domain in $(search_objects 'web' 'LETSENCRYPT' 'yes' 'DOMAIN'); do - - limit_check=1 - fail_counter=$(get_web_counter "$user" "$domain" 'LETSENCRYPT_FAIL_COUNT') - if [[ "$hostname" = "$domain" ]]; then - if [[ "$fail_counter" -eq 7 ]]; then - limit_check=0 - fi - if [[ "$fail_counter" -eq 8 ]]; then - fail_counter=$(alter_web_counter "$user" "$domain" 'LETSENCRYPT_FAIL_COUNT') - send_email_to_admin "LetsEncrypt renewing hostname $hostname" "Warning: hostname $domain failed for LetsEncrypt renewing" - fi - fi - - if [[ "$fail_counter" -ge 7 ]] && [[ "$limit_check" -eq 1 ]]; then - # echo "$domain failed $fail_counter times for LetsEncrypt renewing, skipping" - echo "[$(date)] : $domain failed $fail_counter times for LetsEncrypt renewing, skipping" >> /usr/local/vesta/log/letsencrypt_cron.log - continue; - fi - crt_data=$(openssl x509 -text -in $USER_DATA/ssl/$domain.crt) - not_after=$(echo "$crt_data" |grep "Not After" |cut -f 2,3,4 -d :) - expiration=$(date -d "$not_after" +%s) + crt="$VESTA/data/users/$user/ssl/$domain.crt" + crt_data=$(openssl x509 -text -in "$crt") + expire=$(echo "$crt_data" |grep "Not After") + expire=$(echo "$expire" |cut -f 2,3,4 -d :) + expire=$(date -d "$expire" +%s) now=$(date +%s) - seconds_valid=$((expiration - now)) - days_valid=$((seconds_valid / 86400)) - if [[ "$days_valid" -lt 31 ]]; then - if [ $lecounter -gt 0 ]; then - sleep 120 - fi - ((lecounter++)) + expire=$((expire - now)) + expire=$((expire / 86400)) + domain=$(basename $crt |sed -e "s/.crt$//") + if [[ "$expire" -lt 31 ]]; then aliases=$(echo "$crt_data" |grep DNS:) - aliases=$(echo "$aliases" |sed -e "s/DNS://g" -e "s/,//g") + aliases=$(echo "$aliases" |sed -e "s/DNS://g" -e "s/,//") aliases=$(echo "$aliases" |tr ' ' '\n' |sed "/^$/d") - aliases=$(echo "$aliases" |egrep -v "^$domain,?$") - aliases=$(echo "$aliases" |sed -e ':a;N;$!ba;s/\n/,/g') - msg=$($BIN/v-add-letsencrypt-domain $user $domain $aliases) - if [ $? -ne 0 ]; then - if [[ $msg == *"is suspended" ]]; then - echo "[$(date)] : SUSPENDED: $domain $msg" >> /usr/local/vesta/log/letsencrypt_cron.log - else - echo "[$(date)] : $domain $msg" >> /usr/local/vesta/log/letsencrypt_cron.log + aliases=$(echo "$aliases" |grep -v "^$domain$") + if [ ! -z "$aliases" ]; then + aliases=$(echo "$aliases" |sed -e ':a;N;$!ba;s/\n/,/g') + msg=$($BIN/v-add-letsencrypt-domain $user $domain $aliases) + if [ $? -ne 0 ]; then + echo "$domain $msg" + fi + else + msg==$($BIN/v-add-letsencrypt-domain $user $domain) + if [ $? -ne 0 ]; then echo "$domain $msg" - fail_counter=$(alter_web_counter "$user" "$domain" 'LETSENCRYPT_FAIL_COUNT') - echo "[$(date)] : fail_counter = $fail_counter" >> /usr/local/vesta/log/letsencrypt_cron.log - echo "fail_counter = $fail_counter" fi fi + if [ $lecounter -gt 0 ]; then + sleep 10 + fi + ((lecounter++)) fi done done diff --git a/bin/v-update-sys-ip b/bin/v-update-sys-ip index 6c07edc6f..7360b07f4 100755 --- a/bin/v-update-sys-ip +++ b/bin/v-update-sys-ip @@ -44,7 +44,7 @@ if [[ "$ip_num" -eq '1' ]] && [[ "$v_ip_num" -eq 1 ]]; then fi # Updating configs -if [ ! -z "$old" ]; then +if [ ! -z "$new" ]; then mv $VESTA/data/ips/$old $VESTA/data/ips/$new # Updating PROXY diff --git a/bin/v-update-sys-rrd-mem b/bin/v-update-sys-rrd-mem index 018acfb74..7be459da9 100755 --- a/bin/v-update-sys-rrd-mem +++ b/bin/v-update-sys-rrd-mem @@ -61,13 +61,13 @@ fi # Parsing data if [ "$period" = 'daily' ]; then mem=$(free -m) - used=$(echo "$mem" |awk '(NR == 2)' |awk '{print $3}') + used=$(echo "$mem" |grep Mem |awk '{print $3}') if [ -z "$(echo "$mem" | grep available)" ]; then - free=$(echo "$mem" |grep buff/cache |awk '{print $4}') + free=$(echo "$mem" |grep buffers/cache |awk '{print $4}') else - free=$(echo "$mem" |awk '(NR == 2)' |awk '{print $7}') + free=$(echo "$mem" |grep Mem |awk '{print $7}') fi - swap=$(echo "$mem" |awk '(NR == 3)' |awk '{print $3}') + swap=$(echo "$mem" |grep Swap |awk '{print $3}') # Updating rrd rrdtool update $RRD/mem/mem.rrd N:$used:$swap:$free diff --git a/bin/v-update-sys-rrd-pgsql b/bin/v-update-sys-rrd-pgsql index de2fec8f8..6e15c9e8c 100755 --- a/bin/v-update-sys-rrd-pgsql +++ b/bin/v-update-sys-rrd-pgsql @@ -85,7 +85,7 @@ for host in $hosts; do # Parsing data q='SELECT SUM(xact_commit + xact_rollback), SUM(numbackends) FROM pg_stat_database;' - status=$($sql psql -d postgres -c "$q" 2>/dev/null); code="$?" + status=$($sql plsql -d postgres -c "$q" 2>/dev/null); code="$?" if [ '0' -ne "$code" ]; then active=0 slow=0 diff --git a/bin/v-update-sys-vesta b/bin/v-update-sys-vesta index da026ed13..39cd33a25 100755 --- a/bin/v-update-sys-vesta +++ b/bin/v-update-sys-vesta @@ -28,32 +28,12 @@ source $VESTA/conf/vesta.conf # Checking arg number check_args '1' "$#" 'PACKAGE' -valid=0 -if [ "$package" = "vesta" ]; then - valid=1 -fi -if [ "$package" = "vesta-nginx" ]; then - valid=1 -fi -if [ "$package" = "vesta-php" ]; then - valid=1 -fi -if [ "$package" = "vesta-ioncube" ]; then - valid=1 -fi -if [ "$package" = "vesta-softaculous" ]; then - valid=1 -fi -if [ $valid -eq 0 ]; then - echo "Package $package is not valid" - exit 1 -fi #----------------------------------------------------------# # Action # #----------------------------------------------------------# -if [ -n "$(command -v yum)" ]; then +if [ -d "/etc/sysconfig" ]; then # Clean yum chache yum -q clean all diff --git a/bin/v-update-user-counters b/bin/v-update-user-counters index b0f944302..5fcdd6712 100755 --- a/bin/v-update-user-counters +++ b/bin/v-update-user-counters @@ -53,7 +53,6 @@ for user in $user_list; do IP_OWNED=0 U_USERS=0 U_DISK=0 - DISK=0 U_DISK_DIRS=$(get_user_value '$U_DISK_DIRS') if [ -z "$U_DISK_DIRS" ]; then U_DISK_DIRS=0 diff --git a/bin/v-update-user-stats b/bin/v-update-user-stats index 23854328d..f6b5ff566 100755 --- a/bin/v-update-user-stats +++ b/bin/v-update-user-stats @@ -67,9 +67,6 @@ TOTAL_USERS=0 # Updating user stats for user in $user_list; do - if [ ! -f "$VESTA/data/users/$user/user.conf" ]; then - continue; - fi USER_DATA=$VESTA/data/users/$user source $USER_DATA/user.conf next_month=$(date +'%m/01/%y' -d '+ 1 month') diff --git a/func/db.sh b/func/db.sh index b0ff73b93..d397dfec2 100644 --- a/func/db.sh +++ b/func/db.sh @@ -55,14 +55,14 @@ mysql_query() { mysql_dump() { err="/tmp/e.mysql" - mysqldump --defaults-file=$mycnf --single-transaction --max_allowed_packet=100M -r $1 $2 2> $err + mysqldump --defaults-file=$mycnf --single-transaction -r $1 $2 2> $err if [ '0' -ne "$?" ]; then rm -rf $tmpdir if [ "$notify" != 'no' ]; then echo -e "Can't dump database $database\n$(cat $err)" |\ $SENDMAIL -s "$subj" $email fi - echo "Error: dump $database failed\n$(cat $err)" + echo "Error: dump $database failed" log_event "$E_DB" "$ARGUMENTS" exit $E_DB fi @@ -322,7 +322,7 @@ delete_pgsql_database() { psql_connect $HOST query="REVOKE ALL PRIVILEGES ON DATABASE $database FROM $DBUSER" - psql_query "$query" > /dev/null + psql_qyery "$query" > /dev/null query="DROP DATABASE $database" psql_query "$query" > /dev/null diff --git a/func/domain.sh b/func/domain.sh index 6bd05b910..cc66aecbc 100644 --- a/func/domain.sh +++ b/func/domain.sh @@ -215,11 +215,7 @@ add_web_config() { fi fi - trigger="${2/%.tpl/.sh}" - if [[ "$2" =~ stpl$ ]]; then - trigger="${2/%.stpl/.sh}" - fi - + trigger="${2/.*pl/.sh}" if [ -x "$WEBTPL/$1/$WEB_BACKEND/$trigger" ]; then $WEBTPL/$1/$WEB_BACKEND/$trigger \ $user $domain $local_ip $HOMEDIR \ @@ -289,10 +285,8 @@ del_web_config() { if [[ "$2" =~ stpl$ ]]; then conf="$HOMEDIR/$user/conf/web/s$1.conf" fi - if [ -e "$conf" ]; then - get_web_config_lines $WEBTPL/$1/$WEB_BACKEND/$2 $conf - sed -i "$top_line,$bottom_line d" $conf - fi + get_web_config_lines $WEBTPL/$1/$WEB_BACKEND/$2 $conf + sed -i "$top_line,$bottom_line d" $conf fi # clean-up for both config styles if there is no more domains web_domain=$(grep DOMAIN $USER_DATA/web.conf |wc -l) @@ -343,7 +337,7 @@ is_web_domain_cert_valid() { check_result $E_FORBIDEN "SSL Key is protected (remove pass_phrase)" fi - openssl s_server -port 654321 -quiet -cert $ssl_dir/$domain.crt \ + openssl s_server -quiet -cert $ssl_dir/$domain.crt \ -key $ssl_dir/$domain.key >> /dev/null 2>&1 & pid=$! sleep 0.5 @@ -412,24 +406,6 @@ update_domain_zone() { VALUE=$(idn --quiet -a -t "$VALUE") fi - # Split long TXT entries into 255 chunks - if [ "$TYPE" = 'TXT' ]; then - txtlength=${#VALUE} - if [ $txtlength -gt 255 ]; then - already_chunked=0 - if [[ $VALUE == *"\" \""* ]] || [[ $VALUE == *"\"\""* ]]; then - already_chunked=1 - fi - if [ $already_chunked -eq 0 ]; then - if [[ ${VALUE:0:1} = '"' ]]; then - txtlength=$(( $txtlength - 2 )) - VALUE=${VALUE:1:txtlength} - fi - VALUE=$(echo $VALUE | fold -w 255 | xargs -I '$' echo -n '"$"') - fi - fi - fi - if [ "$SUSPENDED" != 'yes' ]; then eval echo -e "\"$fields\""|sed "s/%quote%/'/g" >> $zn_conf fi diff --git a/func/ip.sh b/func/ip.sh index c99a3272b..605554af8 100644 --- a/func/ip.sh +++ b/func/ip.sh @@ -141,7 +141,7 @@ get_real_ip() { else nat=$(grep -H "^NAT='$1'" $VESTA/data/ips/*) if [ ! -z "$nat" ]; then - echo "$nat" |cut -f 1 -d : |cut -f 7 -d / |head -n 1 + echo "$nat" |cut -f 1 -d : |cut -f 7 -d / fi fi } diff --git a/func/main.sh b/func/main.sh index 6f848a220..e78e6edf2 100644 --- a/func/main.sh +++ b/func/main.sh @@ -35,7 +35,6 @@ E_DB=17 E_RRD=18 E_UPDATE=19 E_RESTART=20 -E_TEAPOT=418 # Event string for logger for ((I=1; I <= $# ; I++)); do @@ -213,8 +212,7 @@ is_object_new() { # Check if object is valid is_object_valid() { if [ $2 = 'USER' ]; then - user_vst_dir=$(basename $3) - if [ ! -d "$VESTA/data/users/$user_vst_dir" ]; then + if [ ! -d "$VESTA/data/users/$3" ]; then check_result $E_NOTEXIST "$1 $3 doesn't exist" fi else @@ -296,20 +294,6 @@ is_dir_symlink() { fi } -# Check if file exists -if_file_exists() { - if [[ -f "$1" ]]; then - check_result $E_FORBIDEN "$1 file exists" - fi -} - -# Check if directory exists -if_dir_exists() { - if [[ -d "$1" ]]; then - check_result $E_FORBIDEN "$1 directory exists" - fi -} - # Get object value get_object_value() { object=$(grep "$2='$3'" $USER_DATA/$1.conf) @@ -675,7 +659,7 @@ is_dbuser_format_valid() { # DNS record type validator is_dns_type_format_valid() { - known_dnstype='A,AAAA,NS,CNAME,MX,TXT,SRV,DNSKEY,KEY,IPSECKEY,PTR,SPF,TLSA,CAA' + known_dnstype='A,AAAA,NS,CNAME,MX,TXT,SRV,DNSKEY,KEY,IPSECKEY,PTR,SPF,TLSA' if [ -z "$(echo $known_dnstype |grep -w $1)" ]; then check_result $E_INVALID "invalid dns record type format :: $1" fi @@ -831,23 +815,6 @@ is_format_valid_shell() { exit $E_INVALID fi } - -format_no_quotes() { - exclude="['|\"]" - if [[ "$1" =~ $exclude ]]; then - check_result "$E_INVALID" "Invalid $2 contains qoutes (\" or ') :: $1" - fi - is_no_new_line_format "$1" -} - -is_no_new_line_format() { - test=$(echo "$1" | head -n1 ); - if [[ "$test" != "$1" ]]; then - check_result "$E_INVALID" "invalid value :: $1" - fi -} - - # Format validation controller is_format_valid() { for arg_name in $*; do @@ -856,7 +823,6 @@ is_format_valid() { case $arg_name in account) is_user_format_valid "$arg" "$arg_name";; action) is_fw_action_format_valid "$arg";; - alias) is_alias_format_valid "$arg" ;; aliases) is_alias_format_valid "$arg" ;; antispam) is_boolean_format_valid "$arg" 'antispam' ;; antivirus) is_boolean_format_valid "$arg" 'antivirus' ;; @@ -882,7 +848,6 @@ is_format_valid() { host) is_object_format_valid "$arg" "$arg_name" ;; hour) is_cron_format_valid "$arg" $arg_name ;; id) is_int_format_valid "$arg" 'id' ;; - interface) is_interface_format_valid "$arg" ;; ip) is_ip_format_valid "$arg" ;; ip_name) is_domain_format_valid "$arg" 'IP name';; ip_status) is_ip_status_format_valid "$arg" ;; @@ -968,85 +933,7 @@ format_aliases() { aliases=$(echo "$aliases" |tr -s '.') aliases=$(echo "$aliases" |sed -e "s/[.]*$//g") aliases=$(echo "$aliases" |sed -e "s/^[.]*//") - aliases=$(echo "$aliases" |sed -e "/^$/d") + aliases=$(echo "$aliases" |grep -v www.$domain |sed -e "/^$/d") aliases=$(echo "$aliases" |tr '\n' ',' |sed -e "s/,$//") fi } - -alter_web_counter() { - user=$1 - domain=$2 - USER_DATA=$VESTA/data/users/$user - - varc=$3 - vard="\$${varc}" - counter=$(get_object_value 'web' 'DOMAIN' "$domain" "$vard") - - if [ -z "$counter" ]; then - add_object_key "web" 'DOMAIN' "$domain" "$varc" "TIME" - counter=0 - fi - - ((counter++)) - backup_counter=$counter - - update_object_value 'web' 'DOMAIN' "$domain" "$vard" "$counter" - counter=$backup_counter - - echo $counter -} - -reset_web_counter() { - user=$1 - domain=$2 - USER_DATA=$VESTA/data/users/$user - - varc=$3 - vard="\$${varc}" - - update_object_value 'web' 'DOMAIN' "$domain" "$vard" "0" -} - -get_web_counter() { - user=$1 - domain=$2 - USER_DATA=$VESTA/data/users/$user - - varc=$3 - vard="\$${varc}" - counter=$(get_object_value 'web' 'DOMAIN' "$domain" "$vard") - - if [ -z "$counter" ]; then - counter=0 - fi - - echo $counter -} - -# Simple chmod wrapper that skips symlink files after glob expand -# Taken from HestiaCP -no_symlink_chmod() { - local filemode=$1; shift; - - for i in "$@"; do - [[ -L ${i} ]] && continue - - chmod "${filemode}" "${i}" - done -} - -# $1 = subject -# $2 = body -send_email_to_admin() { - email=$(grep CONTACT /usr/local/vesta/data/users/admin/user.conf) - email=$(echo "$email" | cut -f 2 -d "'") - if [ -z "$email" ]; then - if [ ! -z "$NOTIFY_ADMIN_FULL_BACKUP" ]; then - email=$NOTIFY_ADMIN_FULL_BACKUP - fi - fi - if [ -z "$email" ]; then - return; - fi - echo "$2" | $SENDMAIL -s "$1" "$email" 'yes' -} diff --git a/func/rebuild.sh b/func/rebuild.sh index b4df3d209..9a1c0f473 100644 --- a/func/rebuild.sh +++ b/func/rebuild.sh @@ -51,7 +51,7 @@ rebuild_user_conf() { mkdir -p $HOMEDIR/$user/conf chmod a+x $HOMEDIR/$user chmod a+x $HOMEDIR/$user/conf - chown --no-dereference $user:$user $HOMEDIR/$user + chown $user:$user $HOMEDIR/$user chown root:root $HOMEDIR/$user/conf # Update disk pipe @@ -80,7 +80,7 @@ rebuild_user_conf() { chmod 751 $HOMEDIR/$user/conf/web chmod 751 $HOMEDIR/$user/web chmod 771 $HOMEDIR/$user/tmp - chown --no-dereference $user:$user $HOMEDIR/$user/web + chown $user:$user $HOMEDIR/$user/web if [ -z "$create_user" ]; then $BIN/v-rebuild-web-domains $user $restart fi @@ -152,7 +152,7 @@ rebuild_web_domain_conf() { prepare_web_domain_values # Rebuilding domain directories - sudo -u $user mkdir -p $HOMEDIR/$user/web/$domain \ + mkdir -p $HOMEDIR/$user/web/$domain \ $HOMEDIR/$user/web/$domain/public_html \ $HOMEDIR/$user/web/$domain/public_shtml \ $HOMEDIR/$user/web/$domain/document_errors \ @@ -178,15 +178,14 @@ rebuild_web_domain_conf() { # Propagating html skeleton if [ ! -e "$WEBTPL/skel/document_errors/" ]; then - sudo -u $user cp -r $WEBTPL/skel/document_errors/ \ - $HOMEDIR/$user/web/$domain/ + cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/ fi # Set folder permissions - no_symlink_chmod 551 $HOMEDIR/$user/web/$domain \ + chmod 551 $HOMEDIR/$user/web/$domain \ $HOMEDIR/$user/web/$domain/stats \ $HOMEDIR/$user/web/$domain/logs - no_symlink_chmod 751 $HOMEDIR/$user/web/$domain/private \ + chmod 751 $HOMEDIR/$user/web/$domain/private \ $HOMEDIR/$user/web/$domain/cgi-bin \ $HOMEDIR/$user/web/$domain/public_html \ $HOMEDIR/$user/web/$domain/public_shtml \ @@ -194,7 +193,7 @@ rebuild_web_domain_conf() { chmod 640 /var/log/$WEB_SYSTEM/domains/$domain.* # Set ownership - chown --no-dereference $user:$user $HOMEDIR/$user/web/$domain \ + chown $user:$user $HOMEDIR/$user/web/$domain \ $HOMEDIR/$user/web/$domain/private \ $HOMEDIR/$user/web/$domain/cgi-bin \ $HOMEDIR/$user/web/$domain/public_html \ @@ -601,7 +600,7 @@ rebuild_pgsql_database() { exit $E_CONNECT fi - query="CREATE ROLE $DBUSER WITH LOGIN" + query="CREATE ROLE $DBUSER" psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1 query="UPDATE pg_authid SET rolpassword='$MD5' WHERE rolname='$DBUSER'" @@ -618,7 +617,7 @@ rebuild_pgsql_database() { query="GRANT ALL PRIVILEGES ON DATABASE $DB TO $DBUSER" psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1 - query="GRANT CONNECT ON DATABASE template1 to $DBUSER" + query="GRANT CONNECT ON DATABASE template1 to $dbuser" psql -h $HOST -U $USER -c "$query" > /dev/null 2>&1 } diff --git a/install/debian/7/nginx/nginx.conf b/install/debian/7/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/debian/7/nginx/nginx.conf +++ b/install/debian/7/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/debian/7/nginx/phpmyadmin.inc b/install/debian/7/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/debian/7/nginx/phpmyadmin.inc +++ b/install/debian/7/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/debian/7/nginx/phppgadmin.inc b/install/debian/7/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/debian/7/nginx/phppgadmin.inc +++ b/install/debian/7/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/debian/7/nginx/webmail.inc b/install/debian/7/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/debian/7/nginx/webmail.inc +++ b/install/debian/7/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/debian/7/pma/apache.conf b/install/debian/7/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/debian/7/pma/apache.conf +++ b/install/debian/7/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/debian/7/pma/config.inc.php b/install/debian/7/pma/config.inc.php index 4b6a3a6b2..a643a065b 100644 --- a/install/debian/7/pma/config.inc.php +++ b/install/debian/7/pma/config.inc.php @@ -137,13 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/debian/7/templates/web/apache2/basedir.stpl b/install/debian/7/templates/web/apache2/basedir.stpl index 379f87da1..dda3aa760 100644 --- a/install/debian/7/templates/web/apache2/basedir.stpl +++ b/install/debian/7/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/debian/7/templates/web/apache2/basedir.tpl b/install/debian/7/templates/web/apache2/basedir.tpl index bf87511bd..9449bc447 100644 --- a/install/debian/7/templates/web/apache2/basedir.tpl +++ b/install/debian/7/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/debian/7/templates/web/apache2/default.stpl b/install/debian/7/templates/web/apache2/default.stpl index 8c8b7a3a2..29acfcebb 100644 --- a/install/debian/7/templates/web/apache2/default.stpl +++ b/install/debian/7/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/7/templates/web/apache2/default.tpl b/install/debian/7/templates/web/apache2/default.tpl index 7fa97eb73..c24b12796 100644 --- a/install/debian/7/templates/web/apache2/default.tpl +++ b/install/debian/7/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/7/templates/web/apache2/hosting.stpl b/install/debian/7/templates/web/apache2/hosting.stpl index ffb9a998f..627325e06 100644 --- a/install/debian/7/templates/web/apache2/hosting.stpl +++ b/install/debian/7/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/7/templates/web/apache2/hosting.tpl b/install/debian/7/templates/web/apache2/hosting.tpl index 3ed5acd1c..0bdd6ea68 100644 --- a/install/debian/7/templates/web/apache2/hosting.tpl +++ b/install/debian/7/templates/web/apache2/hosting.tpl @@ -14,6 +14,7 @@ AllowOverride All Options +Includes -Indexes +ExecCGI + php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value upload_max_filesize 10M php_admin_value max_execution_time 20 php_admin_value post_max_size 8M @@ -23,7 +24,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/7/templates/web/apache2/phpcgi.stpl b/install/debian/7/templates/web/apache2/phpcgi.stpl index 7bbf5be59..aa807091a 100644 --- a/install/debian/7/templates/web/apache2/phpcgi.stpl +++ b/install/debian/7/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/debian/7/templates/web/apache2/phpcgi.tpl b/install/debian/7/templates/web/apache2/phpcgi.tpl index 8978bd127..fd603800b 100644 --- a/install/debian/7/templates/web/apache2/phpcgi.tpl +++ b/install/debian/7/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/debian/7/templates/web/apache2/phpfcgid.stpl b/install/debian/7/templates/web/apache2/phpfcgid.stpl index 7c49603d5..88cea0e64 100644 --- a/install/debian/7/templates/web/apache2/phpfcgid.stpl +++ b/install/debian/7/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/debian/7/templates/web/apache2/phpfcgid.tpl b/install/debian/7/templates/web/apache2/phpfcgid.tpl index 661f66bd3..335b9f620 100644 --- a/install/debian/7/templates/web/apache2/phpfcgid.tpl +++ b/install/debian/7/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/debian/7/templates/web/nginx/caching.stpl b/install/debian/7/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/debian/7/templates/web/nginx/caching.stpl +++ b/install/debian/7/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/debian/7/templates/web/nginx/default.stpl b/install/debian/7/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/debian/7/templates/web/nginx/default.stpl +++ b/install/debian/7/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/debian/7/templates/web/nginx/hosting.stpl b/install/debian/7/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/debian/7/templates/web/nginx/hosting.stpl +++ b/install/debian/7/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/debian/7/templates/web/nginx/http2.stpl b/install/debian/7/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/debian/7/templates/web/nginx/http2.stpl +++ b/install/debian/7/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/debian/7/templates/web/nginx/http2.tpl b/install/debian/7/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/debian/7/templates/web/nginx/http2.tpl +++ b/install/debian/7/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/debian/7/templates/web/nginx/php5-fpm/drupal6.stpl b/install/debian/7/templates/web/nginx/php5-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/debian/7/templates/web/nginx/php5-fpm/drupal6.stpl +++ b/install/debian/7/templates/web/nginx/php5-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/7/templates/web/nginx/php5-fpm/drupal6.tpl b/install/debian/7/templates/web/nginx/php5-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/debian/7/templates/web/nginx/php5-fpm/drupal6.tpl +++ b/install/debian/7/templates/web/nginx/php5-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/7/templates/web/nginx/php5-fpm/drupal7.stpl b/install/debian/7/templates/web/nginx/php5-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/debian/7/templates/web/nginx/php5-fpm/drupal7.stpl +++ b/install/debian/7/templates/web/nginx/php5-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/7/templates/web/nginx/php5-fpm/drupal7.tpl b/install/debian/7/templates/web/nginx/php5-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/debian/7/templates/web/nginx/php5-fpm/drupal7.tpl +++ b/install/debian/7/templates/web/nginx/php5-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/7/templates/web/nginx/php5-fpm/drupal8.stpl b/install/debian/7/templates/web/nginx/php5-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/debian/7/templates/web/nginx/php5-fpm/drupal8.stpl +++ b/install/debian/7/templates/web/nginx/php5-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/debian/7/templates/web/nginx/php5-fpm/drupal8.tpl b/install/debian/7/templates/web/nginx/php5-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/debian/7/templates/web/nginx/php5-fpm/drupal8.tpl +++ b/install/debian/7/templates/web/nginx/php5-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/debian/7/templates/web/nginx/php5-fpm/sendy.stpl b/install/debian/7/templates/web/nginx/php5-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/debian/7/templates/web/nginx/php5-fpm/sendy.stpl +++ b/install/debian/7/templates/web/nginx/php5-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_rewrite.stpl b/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_rewrite.stpl +++ b/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.stpl b/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.tpl b/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/debian/7/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/debian/7/templates/web/php5-fpm/default.tpl b/install/debian/7/templates/web/php5-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/debian/7/templates/web/php5-fpm/default.tpl +++ b/install/debian/7/templates/web/php5-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/debian/7/templates/web/php5-fpm/socket.tpl b/install/debian/7/templates/web/php5-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/debian/7/templates/web/php5-fpm/socket.tpl +++ b/install/debian/7/templates/web/php5-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/debian/7/templates/web/skel/public_html/index.html b/install/debian/7/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/debian/7/templates/web/skel/public_html/index.html +++ b/install/debian/7/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/debian/7/templates/web/skel/public_shtml/index.html b/install/debian/7/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/debian/7/templates/web/skel/public_shtml/index.html +++ b/install/debian/7/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/debian/8/nginx/nginx.conf b/install/debian/8/nginx/nginx.conf index e8967d8e8..1eef1672c 100644 --- a/install/debian/8/nginx/nginx.conf +++ b/install/debian/8/nginx/nginx.conf @@ -51,7 +51,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/debian/8/nginx/phpmyadmin.inc b/install/debian/8/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/debian/8/nginx/phpmyadmin.inc +++ b/install/debian/8/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/debian/8/nginx/phppgadmin.inc b/install/debian/8/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/debian/8/nginx/phppgadmin.inc +++ b/install/debian/8/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/debian/8/nginx/webmail.inc b/install/debian/8/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/debian/8/nginx/webmail.inc +++ b/install/debian/8/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/debian/8/pma/apache.conf b/install/debian/8/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/debian/8/pma/apache.conf +++ b/install/debian/8/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/debian/8/pma/config.inc.php b/install/debian/8/pma/config.inc.php index a38036974..eafc6d677 100644 --- a/install/debian/8/pma/config.inc.php +++ b/install/debian/8/pma/config.inc.php @@ -137,13 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/debian/8/templates/web/apache2/basedir.stpl b/install/debian/8/templates/web/apache2/basedir.stpl index 37c4a4b39..d978d4c43 100644 --- a/install/debian/8/templates/web/apache2/basedir.stpl +++ b/install/debian/8/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/debian/8/templates/web/apache2/basedir.tpl b/install/debian/8/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/debian/8/templates/web/apache2/basedir.tpl +++ b/install/debian/8/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/debian/8/templates/web/apache2/default.stpl b/install/debian/8/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/debian/8/templates/web/apache2/default.stpl +++ b/install/debian/8/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/default.tpl b/install/debian/8/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/debian/8/templates/web/apache2/default.tpl +++ b/install/debian/8/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/hosting.stpl b/install/debian/8/templates/web/apache2/hosting.stpl index dee0eda9c..8892072b1 100644 --- a/install/debian/8/templates/web/apache2/hosting.stpl +++ b/install/debian/8/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/hosting.tpl b/install/debian/8/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/debian/8/templates/web/apache2/hosting.tpl +++ b/install/debian/8/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/phpcgi.stpl b/install/debian/8/templates/web/apache2/phpcgi.stpl index 6cd15df00..731355bc1 100644 --- a/install/debian/8/templates/web/apache2/phpcgi.stpl +++ b/install/debian/8/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/debian/8/templates/web/apache2/phpcgi.tpl b/install/debian/8/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/debian/8/templates/web/apache2/phpcgi.tpl +++ b/install/debian/8/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/debian/8/templates/web/apache2/phpfcgid.stpl b/install/debian/8/templates/web/apache2/phpfcgid.stpl index 9c0ca5027..156c8a918 100644 --- a/install/debian/8/templates/web/apache2/phpfcgid.stpl +++ b/install/debian/8/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/debian/8/templates/web/apache2/phpfcgid.tpl b/install/debian/8/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/debian/8/templates/web/apache2/phpfcgid.tpl +++ b/install/debian/8/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/debian/8/templates/web/nginx/caching.stpl b/install/debian/8/templates/web/nginx/caching.stpl index 3c56004d3..52641dbef 100755 --- a/install/debian/8/templates/web/nginx/caching.stpl +++ b/install/debian/8/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/debian/8/templates/web/nginx/default.stpl b/install/debian/8/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/debian/8/templates/web/nginx/default.stpl +++ b/install/debian/8/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/debian/8/templates/web/nginx/hosting.stpl b/install/debian/8/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/debian/8/templates/web/nginx/hosting.stpl +++ b/install/debian/8/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/debian/8/templates/web/nginx/http2.stpl b/install/debian/8/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/debian/8/templates/web/nginx/http2.stpl +++ b/install/debian/8/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/debian/8/templates/web/nginx/http2.tpl b/install/debian/8/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/debian/8/templates/web/nginx/http2.tpl +++ b/install/debian/8/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/debian/8/templates/web/nginx/php5-fpm/drupal6.stpl b/install/debian/8/templates/web/nginx/php5-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/debian/8/templates/web/nginx/php5-fpm/drupal6.stpl +++ b/install/debian/8/templates/web/nginx/php5-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/8/templates/web/nginx/php5-fpm/drupal6.tpl b/install/debian/8/templates/web/nginx/php5-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/debian/8/templates/web/nginx/php5-fpm/drupal6.tpl +++ b/install/debian/8/templates/web/nginx/php5-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/8/templates/web/nginx/php5-fpm/drupal7.stpl b/install/debian/8/templates/web/nginx/php5-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/debian/8/templates/web/nginx/php5-fpm/drupal7.stpl +++ b/install/debian/8/templates/web/nginx/php5-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/8/templates/web/nginx/php5-fpm/drupal7.tpl b/install/debian/8/templates/web/nginx/php5-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/debian/8/templates/web/nginx/php5-fpm/drupal7.tpl +++ b/install/debian/8/templates/web/nginx/php5-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/8/templates/web/nginx/php5-fpm/drupal8.stpl b/install/debian/8/templates/web/nginx/php5-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/debian/8/templates/web/nginx/php5-fpm/drupal8.stpl +++ b/install/debian/8/templates/web/nginx/php5-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/debian/8/templates/web/nginx/php5-fpm/drupal8.tpl b/install/debian/8/templates/web/nginx/php5-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/debian/8/templates/web/nginx/php5-fpm/drupal8.tpl +++ b/install/debian/8/templates/web/nginx/php5-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/debian/8/templates/web/nginx/php5-fpm/sendy.stpl b/install/debian/8/templates/web/nginx/php5-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/debian/8/templates/web/nginx/php5-fpm/sendy.stpl +++ b/install/debian/8/templates/web/nginx/php5-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_rewrite.stpl b/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_rewrite.stpl +++ b/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.stpl b/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.tpl b/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/debian/8/templates/web/nginx/php5-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/debian/8/templates/web/php5-fpm/default.tpl b/install/debian/8/templates/web/php5-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/debian/8/templates/web/php5-fpm/default.tpl +++ b/install/debian/8/templates/web/php5-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/debian/8/templates/web/php5-fpm/socket.tpl b/install/debian/8/templates/web/php5-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/debian/8/templates/web/php5-fpm/socket.tpl +++ b/install/debian/8/templates/web/php5-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/debian/8/templates/web/skel/public_html/index.html b/install/debian/8/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/debian/8/templates/web/skel/public_html/index.html +++ b/install/debian/8/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/debian/8/templates/web/skel/public_shtml/index.html b/install/debian/8/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/debian/8/templates/web/skel/public_shtml/index.html +++ b/install/debian/8/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/debian/9/dovecot/conf.d/15-mailboxes.conf b/install/debian/9/dovecot/conf.d/15-mailboxes.conf deleted file mode 100644 index 7b2bab97a..000000000 --- a/install/debian/9/dovecot/conf.d/15-mailboxes.conf +++ /dev/null @@ -1,29 +0,0 @@ -## Mailbox definitions -## - - -# NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf. -namespace inbox { - mailbox Drafts { - special_use = \Drafts - auto = subscribe - } - - mailbox Junk { - special_use = \Junk - auto = subscribe - } - - mailbox Trash { - special_use = \Trash - auto = subscribe - } - - mailbox Sent { - special_use = \Sent - auto = subscribe - } - mailbox "Sent Messages" { - special_use = \Sent - } -} diff --git a/install/debian/9/exim/exim4.conf.template b/install/debian/9/exim/exim4.conf.template index 6c00ef05d..bfb98e0b8 100644 --- a/install/debian/9/exim/exim4.conf.template +++ b/install/debian/9/exim/exim4.conf.template @@ -138,7 +138,7 @@ acl_check_rcpt: acl_check_data: .ifdef CLAMD deny message = Message contains a virus ($malware_name) and has been rejected - malware = */defer_ok + malware = * condition = ${if eq{$acl_m0}{yes}{yes}{no}} .endif @@ -164,7 +164,7 @@ acl_check_data: acl_check_mime: deny message = Blacklisted file extension detected - condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh|\.jar)$\N}{1}{0}} + condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} accept diff --git a/install/debian/9/nginx/nginx.conf b/install/debian/9/nginx/nginx.conf index 3c664e08f..1eef1672c 100644 --- a/install/debian/9/nginx/nginx.conf +++ b/install/debian/9/nginx/nginx.conf @@ -51,7 +51,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; @@ -75,9 +74,7 @@ http { set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; - set_real_ip_from 104.16.0.0/13; - set_real_ip_from 104.24.0.0/14; - #set_real_ip_from 104.16.0.0/12; + set_real_ip_from 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; @@ -99,11 +96,11 @@ http { # SSL PCI Compliance - ssl_session_cache shared:SSL:20m; - ssl_protocols TLSv1.2 TLSv1.3; + ssl_session_cache shared:SSL:10m; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; - ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; - + ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; + # Error pages error_page 403 /error/403.html; diff --git a/install/debian/9/nginx/phpmyadmin.inc b/install/debian/9/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/debian/9/nginx/phpmyadmin.inc +++ b/install/debian/9/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/debian/9/nginx/phppgadmin.inc b/install/debian/9/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/debian/9/nginx/phppgadmin.inc +++ b/install/debian/9/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/debian/9/nginx/webmail.inc b/install/debian/9/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/debian/9/nginx/webmail.inc +++ b/install/debian/9/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/debian/9/pma/apache.conf b/install/debian/9/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/debian/9/pma/apache.conf +++ b/install/debian/9/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/debian/9/pma/config.inc.php b/install/debian/9/pma/config.inc.php index a38036974..eafc6d677 100644 --- a/install/debian/9/pma/config.inc.php +++ b/install/debian/9/pma/config.inc.php @@ -137,13 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/debian/9/templates/web/apache2/basedir.stpl b/install/debian/9/templates/web/apache2/basedir.stpl index 37c4a4b39..d978d4c43 100644 --- a/install/debian/9/templates/web/apache2/basedir.stpl +++ b/install/debian/9/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/debian/9/templates/web/apache2/basedir.tpl b/install/debian/9/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/debian/9/templates/web/apache2/basedir.tpl +++ b/install/debian/9/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/debian/9/templates/web/apache2/default.stpl b/install/debian/9/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/debian/9/templates/web/apache2/default.stpl +++ b/install/debian/9/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/default.tpl b/install/debian/9/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/debian/9/templates/web/apache2/default.tpl +++ b/install/debian/9/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/hosting.stpl b/install/debian/9/templates/web/apache2/hosting.stpl index dee0eda9c..8892072b1 100644 --- a/install/debian/9/templates/web/apache2/hosting.stpl +++ b/install/debian/9/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/hosting.tpl b/install/debian/9/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/debian/9/templates/web/apache2/hosting.tpl +++ b/install/debian/9/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/phpcgi.stpl b/install/debian/9/templates/web/apache2/phpcgi.stpl index 6cd15df00..731355bc1 100644 --- a/install/debian/9/templates/web/apache2/phpcgi.stpl +++ b/install/debian/9/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/debian/9/templates/web/apache2/phpcgi.tpl b/install/debian/9/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/debian/9/templates/web/apache2/phpcgi.tpl +++ b/install/debian/9/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/debian/9/templates/web/apache2/phpfcgid.stpl b/install/debian/9/templates/web/apache2/phpfcgid.stpl index 9c0ca5027..156c8a918 100644 --- a/install/debian/9/templates/web/apache2/phpfcgid.stpl +++ b/install/debian/9/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/debian/9/templates/web/apache2/phpfcgid.tpl b/install/debian/9/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/debian/9/templates/web/apache2/phpfcgid.tpl +++ b/install/debian/9/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/debian/9/templates/web/nginx/caching.stpl b/install/debian/9/templates/web/nginx/caching.stpl index 3c56004d3..52641dbef 100755 --- a/install/debian/9/templates/web/nginx/caching.stpl +++ b/install/debian/9/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/debian/9/templates/web/nginx/default.stpl b/install/debian/9/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/debian/9/templates/web/nginx/default.stpl +++ b/install/debian/9/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/debian/9/templates/web/nginx/hosting.stpl b/install/debian/9/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/debian/9/templates/web/nginx/hosting.stpl +++ b/install/debian/9/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/debian/9/templates/web/nginx/http2.stpl b/install/debian/9/templates/web/nginx/http2.stpl index f225becd2..72e72a90c 100644 --- a/install/debian/9/templates/web/nginx/http2.stpl +++ b/install/debian/9/templates/web/nginx/http2.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/debian/9/templates/web/nginx/php-fpm/drupal6.stpl b/install/debian/9/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/debian/9/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/debian/9/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/9/templates/web/nginx/php-fpm/drupal6.tpl b/install/debian/9/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/debian/9/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/debian/9/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/9/templates/web/nginx/php-fpm/drupal7.stpl b/install/debian/9/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/debian/9/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/debian/9/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/9/templates/web/nginx/php-fpm/drupal7.tpl b/install/debian/9/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/debian/9/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/debian/9/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/debian/9/templates/web/nginx/php-fpm/drupal8.stpl b/install/debian/9/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/debian/9/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/debian/9/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/debian/9/templates/web/nginx/php-fpm/drupal8.tpl b/install/debian/9/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/debian/9/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/debian/9/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/debian/9/templates/web/nginx/php-fpm/invoiceninja.stpl b/install/debian/9/templates/web/nginx/php-fpm/invoiceninja.stpl deleted file mode 100644 index 086e6a8e8..000000000 --- a/install/debian/9/templates/web/nginx/php-fpm/invoiceninja.stpl +++ /dev/null @@ -1,64 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/debian/9/templates/web/nginx/php-fpm/invoiceninja.tpl b/install/debian/9/templates/web/nginx/php-fpm/invoiceninja.tpl deleted file mode 100644 index fd06523a9..000000000 --- a/install/debian/9/templates/web/nginx/php-fpm/invoiceninja.tpl +++ /dev/null @@ -1,59 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/debian/9/templates/web/nginx/php-fpm/mautic.stpl b/install/debian/9/templates/web/nginx/php-fpm/mautic.stpl deleted file mode 100644 index a88e9b58f..000000000 --- a/install/debian/9/templates/web/nginx/php-fpm/mautic.stpl +++ /dev/null @@ -1,48 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/debian/9/templates/web/nginx/php-fpm/mautic.tpl b/install/debian/9/templates/web/nginx/php-fpm/mautic.tpl deleted file mode 100644 index 177d48757..000000000 --- a/install/debian/9/templates/web/nginx/php-fpm/mautic.tpl +++ /dev/null @@ -1,44 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/debian/9/templates/web/nginx/php-fpm/sendy.stpl b/install/debian/9/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/debian/9/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/debian/9/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/debian/9/templates/web/nginx/php-fpm/vbulletin5.stpl b/install/debian/9/templates/web/nginx/php-fpm/vbulletin5.stpl deleted file mode 100644 index eebb3e428..000000000 --- a/install/debian/9/templates/web/nginx/php-fpm/vbulletin5.stpl +++ /dev/null @@ -1,105 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - # legacy css being handled separate for performance - location = /css\.php { - rewrite ^ /core/css.php break; - } - - # make install available from presentation - location ^~ /install { - rewrite ^/install/ /core/install/ break; - } - - # any request to not existing item gets redirected through routestring - location / { - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - } - - # make admincp available from presentation - location ^~ /admincp { - if (!-f $request_filename) { - rewrite ^/admincp/(.*)$ /index.php?routestring=admincp/$1 last; - } - } - - # process any php scripts, not found gets redirected through routestring - location ~ \.php$ { - # handles legacy scripts - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 break; - } - - fastcgi_split_path_info ^(.+\.php)(.*)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_param QUERY_STRING $query_string; - fastcgi_param REQUEST_METHOD $request_method; - fastcgi_param CONTENT_TYPE $content_type; - fastcgi_param CONTENT_LENGTH $content_length; - fastcgi_intercept_errors on; - fastcgi_ignore_client_abort off; - fastcgi_connect_timeout 60; - fastcgi_send_timeout 180; - fastcgi_read_timeout 180; - fastcgi_buffers 256 16k; - fastcgi_buffer_size 32k; - fastcgi_temp_file_write_size 256k; - - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain_idn%.conf*; -} diff --git a/install/debian/9/templates/web/nginx/php-fpm/vbulletin5.tpl b/install/debian/9/templates/web/nginx/php-fpm/vbulletin5.tpl deleted file mode 100644 index 2c5c99880..000000000 --- a/install/debian/9/templates/web/nginx/php-fpm/vbulletin5.tpl +++ /dev/null @@ -1,100 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - # legacy css being handled separate for performance - location = /css\.php { - rewrite ^ /core/css.php break; - } - - # make install available from presentation - location ^~ /install { - rewrite ^/install/ /core/install/ break; - } - - # any request to not existing item gets redirected through routestring - location / { - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - } - - # make admincp available from presentation - location ^~ /admincp { - if (!-f $request_filename) { - rewrite ^/admincp/(.*)$ /index.php?routestring=admincp/$1 last; - } - } - - # process any php scripts, not found gets redirected through routestring - location ~ \.php$ { - # handles legacy scripts - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 break; - } - - fastcgi_split_path_info ^(.+\.php)(.*)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_param QUERY_STRING $query_string; - fastcgi_param REQUEST_METHOD $request_method; - fastcgi_param CONTENT_TYPE $content_type; - fastcgi_param CONTENT_LENGTH $content_length; - fastcgi_intercept_errors on; - fastcgi_ignore_client_abort off; - fastcgi_connect_timeout 60; - fastcgi_send_timeout 180; - fastcgi_read_timeout 180; - fastcgi_buffers 256 16k; - fastcgi_buffer_size 32k; - fastcgi_temp_file_write_size 256k; - - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain_idn%.conf*; -} diff --git a/install/debian/9/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/debian/9/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/debian/9/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/debian/9/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/debian/9/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/debian/9/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/debian/9/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/debian/9/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/debian/9/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/debian/9/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/debian/9/templates/web/php-fpm/default.tpl b/install/debian/9/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/debian/9/templates/web/php-fpm/default.tpl +++ b/install/debian/9/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/debian/9/templates/web/php-fpm/socket.tpl b/install/debian/9/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/debian/9/templates/web/php-fpm/socket.tpl +++ b/install/debian/9/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/debian/9/templates/web/skel/public_html/index.html b/install/debian/9/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/debian/9/templates/web/skel/public_html/index.html +++ b/install/debian/9/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/debian/9/templates/web/skel/public_shtml/index.html b/install/debian/9/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/debian/9/templates/web/skel/public_shtml/index.html +++ b/install/debian/9/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/debian/9/vsftpd/vsftpd.conf b/install/debian/9/vsftpd/vsftpd.conf index 63aceae87..1ca1a9923 100644 --- a/install/debian/9/vsftpd/vsftpd.conf +++ b/install/debian/9/vsftpd/vsftpd.conf @@ -24,16 +24,3 @@ pasv_enable=YES pasv_max_port=12100 pasv_min_port=12000 use_localtime=YES -ssl_enable=YES -allow_anon_ssl=YES -force_local_data_ssl=YES -force_local_logins_ssl=YES -ssl_tlsv1_2=YES -ssl_sslv2=NO -ssl_sslv3=NO -require_ssl_reuse=YES -ssl_ciphers=HIGH -idle_session_timeout=600 -data_connection_timeout=120 -rsa_cert_file=/usr/local/vesta/ssl/certificate.crt -rsa_private_key_file=/usr/local/vesta/ssl/certificate.key diff --git a/install/rhel/5/nginx/nginx.conf b/install/rhel/5/nginx/nginx.conf index 0a37ebbc3..e05750309 100644 --- a/install/rhel/5/nginx/nginx.conf +++ b/install/rhel/5/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/rhel/5/nginx/phpmyadmin.inc b/install/rhel/5/nginx/phpmyadmin.inc index ee0030072..efd6f4c41 100644 --- a/install/rhel/5/nginx/phpmyadmin.inc +++ b/install/rhel/5/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpMyAdmin; + alias /usr/share/phpMyAdmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/rhel/5/nginx/phppgadmin.inc b/install/rhel/5/nginx/phppgadmin.inc index 61dea1c9c..333e560a2 100644 --- a/install/rhel/5/nginx/phppgadmin.inc +++ b/install/rhel/5/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phpPgAdmin; + alias /usr/share/phpPgAdmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phpPgAdmin/$1; diff --git a/install/rhel/5/nginx/webmail.inc b/install/rhel/5/nginx/webmail.inc index d9cc181dc..2d0fbe293 100644 --- a/install/rhel/5/nginx/webmail.inc +++ b/install/rhel/5/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /usr/share/roundcubemail; + alias /usr/share/roundcubemail/; location ~ /(config|temp|logs) { return 404; diff --git a/install/rhel/5/pma/config.inc.conf b/install/rhel/5/pma/config.inc.conf index f7584089d..47ae207e4 100644 --- a/install/rhel/5/pma/config.inc.conf +++ b/install/rhel/5/pma/config.inc.conf @@ -16,12 +16,6 @@ */ $cfg['blowfish_secret'] = '%blowfish_secret%'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* * Servers configuration */ diff --git a/install/rhel/5/templates/web/httpd/basedir.stpl b/install/rhel/5/templates/web/httpd/basedir.stpl index ba4c1d91d..4ced9f381 100644 --- a/install/rhel/5/templates/web/httpd/basedir.stpl +++ b/install/rhel/5/templates/web/httpd/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/rhel/5/templates/web/httpd/basedir.tpl b/install/rhel/5/templates/web/httpd/basedir.tpl index f7d9b5283..566c9884c 100644 --- a/install/rhel/5/templates/web/httpd/basedir.tpl +++ b/install/rhel/5/templates/web/httpd/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/rhel/5/templates/web/httpd/default.stpl b/install/rhel/5/templates/web/httpd/default.stpl index 0ab22c39a..38d1634a6 100644 --- a/install/rhel/5/templates/web/httpd/default.stpl +++ b/install/rhel/5/templates/web/httpd/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/5/templates/web/httpd/default.tpl b/install/rhel/5/templates/web/httpd/default.tpl index 751b7c59b..94288db02 100644 --- a/install/rhel/5/templates/web/httpd/default.tpl +++ b/install/rhel/5/templates/web/httpd/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/5/templates/web/httpd/hosting.stpl b/install/rhel/5/templates/web/httpd/hosting.stpl index 49bf6a83c..f94ba1867 100644 --- a/install/rhel/5/templates/web/httpd/hosting.stpl +++ b/install/rhel/5/templates/web/httpd/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/5/templates/web/httpd/hosting.tpl b/install/rhel/5/templates/web/httpd/hosting.tpl index 089d623f2..1d3dd354b 100644 --- a/install/rhel/5/templates/web/httpd/hosting.tpl +++ b/install/rhel/5/templates/web/httpd/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/5/templates/web/httpd/phpcgi.stpl b/install/rhel/5/templates/web/httpd/phpcgi.stpl index 46c71f8f7..591693a42 100644 --- a/install/rhel/5/templates/web/httpd/phpcgi.stpl +++ b/install/rhel/5/templates/web/httpd/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/rhel/5/templates/web/httpd/phpcgi.tpl b/install/rhel/5/templates/web/httpd/phpcgi.tpl index b521a6e6f..114c6a52a 100644 --- a/install/rhel/5/templates/web/httpd/phpcgi.tpl +++ b/install/rhel/5/templates/web/httpd/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/rhel/5/templates/web/httpd/phpfcgid.stpl b/install/rhel/5/templates/web/httpd/phpfcgid.stpl index 41a14729a..3bb82cca3 100644 --- a/install/rhel/5/templates/web/httpd/phpfcgid.stpl +++ b/install/rhel/5/templates/web/httpd/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/rhel/5/templates/web/httpd/phpfcgid.tpl b/install/rhel/5/templates/web/httpd/phpfcgid.tpl index bb9d3b748..f4e4f4724 100644 --- a/install/rhel/5/templates/web/httpd/phpfcgid.tpl +++ b/install/rhel/5/templates/web/httpd/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/rhel/5/templates/web/nginx/caching.stpl b/install/rhel/5/templates/web/nginx/caching.stpl index 5e1ac757b..67b2f6c20 100755 --- a/install/rhel/5/templates/web/nginx/caching.stpl +++ b/install/rhel/5/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/rhel/5/templates/web/nginx/default.stpl b/install/rhel/5/templates/web/nginx/default.stpl index 22bbd55a6..53ad8d1b8 100755 --- a/install/rhel/5/templates/web/nginx/default.stpl +++ b/install/rhel/5/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/httpd/domains/%domain%.error.log error; diff --git a/install/rhel/5/templates/web/nginx/hosting.stpl b/install/rhel/5/templates/web/nginx/hosting.stpl index c3414149b..aca458a4b 100755 --- a/install/rhel/5/templates/web/nginx/hosting.stpl +++ b/install/rhel/5/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/httpd/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/rhel/5/templates/web/nginx/http2.stpl b/install/rhel/5/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/rhel/5/templates/web/nginx/http2.stpl +++ b/install/rhel/5/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/rhel/5/templates/web/nginx/http2.tpl b/install/rhel/5/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/rhel/5/templates/web/nginx/http2.tpl +++ b/install/rhel/5/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/rhel/5/templates/web/nginx/php-fpm/drupal6.stpl b/install/rhel/5/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/rhel/5/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/rhel/5/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/5/templates/web/nginx/php-fpm/drupal6.tpl b/install/rhel/5/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/rhel/5/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/rhel/5/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/5/templates/web/nginx/php-fpm/drupal7.stpl b/install/rhel/5/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/rhel/5/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/rhel/5/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/5/templates/web/nginx/php-fpm/drupal7.tpl b/install/rhel/5/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/rhel/5/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/rhel/5/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/5/templates/web/nginx/php-fpm/drupal8.stpl b/install/rhel/5/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/rhel/5/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/rhel/5/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/rhel/5/templates/web/nginx/php-fpm/drupal8.tpl b/install/rhel/5/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/rhel/5/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/rhel/5/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/rhel/5/templates/web/nginx/php-fpm/sendy.stpl b/install/rhel/5/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/rhel/5/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/rhel/5/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/rhel/5/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/rhel/5/templates/web/php-fpm/default.tpl b/install/rhel/5/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/rhel/5/templates/web/php-fpm/default.tpl +++ b/install/rhel/5/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/rhel/5/templates/web/php-fpm/socket.tpl b/install/rhel/5/templates/web/php-fpm/socket.tpl index c22d0e2cd..d05a29e42 100644 --- a/install/rhel/5/templates/web/php-fpm/socket.tpl +++ b/install/rhel/5/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/rhel/5/templates/web/skel/public_html/index.html b/install/rhel/5/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/rhel/5/templates/web/skel/public_html/index.html +++ b/install/rhel/5/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/rhel/5/templates/web/skel/public_shtml/index.html b/install/rhel/5/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/rhel/5/templates/web/skel/public_shtml/index.html +++ b/install/rhel/5/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/rhel/6/nginx/nginx.conf b/install/rhel/6/nginx/nginx.conf index 0a37ebbc3..e05750309 100644 --- a/install/rhel/6/nginx/nginx.conf +++ b/install/rhel/6/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/rhel/6/nginx/phpmyadmin.inc b/install/rhel/6/nginx/phpmyadmin.inc index 122823d70..9c5a68825 100644 --- a/install/rhel/6/nginx/phpmyadmin.inc +++ b/install/rhel/6/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpMyAdmin; + alias /usr/share/phpMyAdmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/rhel/6/nginx/phppgadmin.inc b/install/rhel/6/nginx/phppgadmin.inc index 61dea1c9c..333e560a2 100644 --- a/install/rhel/6/nginx/phppgadmin.inc +++ b/install/rhel/6/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phpPgAdmin; + alias /usr/share/phpPgAdmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phpPgAdmin/$1; diff --git a/install/rhel/6/nginx/webmail.inc b/install/rhel/6/nginx/webmail.inc index d9cc181dc..2d0fbe293 100644 --- a/install/rhel/6/nginx/webmail.inc +++ b/install/rhel/6/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /usr/share/roundcubemail; + alias /usr/share/roundcubemail/; location ~ /(config|temp|logs) { return 404; diff --git a/install/rhel/6/pma/config.inc.conf b/install/rhel/6/pma/config.inc.conf index f7584089d..47ae207e4 100644 --- a/install/rhel/6/pma/config.inc.conf +++ b/install/rhel/6/pma/config.inc.conf @@ -16,12 +16,6 @@ */ $cfg['blowfish_secret'] = '%blowfish_secret%'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* * Servers configuration */ diff --git a/install/rhel/6/templates/web/httpd/basedir.stpl b/install/rhel/6/templates/web/httpd/basedir.stpl index ba4c1d91d..4ced9f381 100644 --- a/install/rhel/6/templates/web/httpd/basedir.stpl +++ b/install/rhel/6/templates/web/httpd/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/rhel/6/templates/web/httpd/basedir.tpl b/install/rhel/6/templates/web/httpd/basedir.tpl index f7d9b5283..566c9884c 100644 --- a/install/rhel/6/templates/web/httpd/basedir.tpl +++ b/install/rhel/6/templates/web/httpd/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/rhel/6/templates/web/httpd/default.stpl b/install/rhel/6/templates/web/httpd/default.stpl index 0ab22c39a..38d1634a6 100644 --- a/install/rhel/6/templates/web/httpd/default.stpl +++ b/install/rhel/6/templates/web/httpd/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/6/templates/web/httpd/default.tpl b/install/rhel/6/templates/web/httpd/default.tpl index 751b7c59b..94288db02 100644 --- a/install/rhel/6/templates/web/httpd/default.tpl +++ b/install/rhel/6/templates/web/httpd/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/6/templates/web/httpd/hosting.stpl b/install/rhel/6/templates/web/httpd/hosting.stpl index f9246c8d3..f1c1c1111 100644 --- a/install/rhel/6/templates/web/httpd/hosting.stpl +++ b/install/rhel/6/templates/web/httpd/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/6/templates/web/httpd/hosting.tpl b/install/rhel/6/templates/web/httpd/hosting.tpl index 5eef2a35a..65bf20fd3 100644 --- a/install/rhel/6/templates/web/httpd/hosting.tpl +++ b/install/rhel/6/templates/web/httpd/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/6/templates/web/httpd/phpcgi.stpl b/install/rhel/6/templates/web/httpd/phpcgi.stpl index 46c71f8f7..591693a42 100644 --- a/install/rhel/6/templates/web/httpd/phpcgi.stpl +++ b/install/rhel/6/templates/web/httpd/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/rhel/6/templates/web/httpd/phpcgi.tpl b/install/rhel/6/templates/web/httpd/phpcgi.tpl index b521a6e6f..114c6a52a 100644 --- a/install/rhel/6/templates/web/httpd/phpcgi.tpl +++ b/install/rhel/6/templates/web/httpd/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/rhel/6/templates/web/httpd/phpfcgid.stpl b/install/rhel/6/templates/web/httpd/phpfcgid.stpl index 41a14729a..3bb82cca3 100644 --- a/install/rhel/6/templates/web/httpd/phpfcgid.stpl +++ b/install/rhel/6/templates/web/httpd/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/rhel/6/templates/web/httpd/phpfcgid.tpl b/install/rhel/6/templates/web/httpd/phpfcgid.tpl index bb9d3b748..f4e4f4724 100644 --- a/install/rhel/6/templates/web/httpd/phpfcgid.tpl +++ b/install/rhel/6/templates/web/httpd/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/rhel/6/templates/web/nginx/caching.stpl b/install/rhel/6/templates/web/nginx/caching.stpl index 5e1ac757b..67b2f6c20 100755 --- a/install/rhel/6/templates/web/nginx/caching.stpl +++ b/install/rhel/6/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/rhel/6/templates/web/nginx/default.stpl b/install/rhel/6/templates/web/nginx/default.stpl index 22bbd55a6..53ad8d1b8 100755 --- a/install/rhel/6/templates/web/nginx/default.stpl +++ b/install/rhel/6/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/httpd/domains/%domain%.error.log error; diff --git a/install/rhel/6/templates/web/nginx/hosting.stpl b/install/rhel/6/templates/web/nginx/hosting.stpl index c3414149b..aca458a4b 100755 --- a/install/rhel/6/templates/web/nginx/hosting.stpl +++ b/install/rhel/6/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/httpd/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/rhel/6/templates/web/nginx/http2.stpl b/install/rhel/6/templates/web/nginx/http2.stpl index cfdb9188d..40e79aef1 100644 --- a/install/rhel/6/templates/web/nginx/http2.stpl +++ b/install/rhel/6/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/rhel/6/templates/web/nginx/http2.tpl b/install/rhel/6/templates/web/nginx/http2.tpl index b20e2922d..826276bd2 100644 --- a/install/rhel/6/templates/web/nginx/http2.tpl +++ b/install/rhel/6/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/rhel/6/templates/web/nginx/php-fpm/drupal6.stpl b/install/rhel/6/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/rhel/6/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/rhel/6/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/6/templates/web/nginx/php-fpm/drupal6.tpl b/install/rhel/6/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/rhel/6/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/rhel/6/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/6/templates/web/nginx/php-fpm/drupal7.stpl b/install/rhel/6/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/rhel/6/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/rhel/6/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/6/templates/web/nginx/php-fpm/drupal7.tpl b/install/rhel/6/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/rhel/6/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/rhel/6/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/6/templates/web/nginx/php-fpm/drupal8.stpl b/install/rhel/6/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/rhel/6/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/rhel/6/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/rhel/6/templates/web/nginx/php-fpm/drupal8.tpl b/install/rhel/6/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/rhel/6/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/rhel/6/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/rhel/6/templates/web/nginx/php-fpm/invoiceninja.stpl b/install/rhel/6/templates/web/nginx/php-fpm/invoiceninja.stpl deleted file mode 100644 index 086e6a8e8..000000000 --- a/install/rhel/6/templates/web/nginx/php-fpm/invoiceninja.stpl +++ /dev/null @@ -1,64 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/rhel/6/templates/web/nginx/php-fpm/invoiceninja.tpl b/install/rhel/6/templates/web/nginx/php-fpm/invoiceninja.tpl deleted file mode 100644 index fd06523a9..000000000 --- a/install/rhel/6/templates/web/nginx/php-fpm/invoiceninja.tpl +++ /dev/null @@ -1,59 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/rhel/6/templates/web/nginx/php-fpm/mautic.stpl b/install/rhel/6/templates/web/nginx/php-fpm/mautic.stpl deleted file mode 100644 index a88e9b58f..000000000 --- a/install/rhel/6/templates/web/nginx/php-fpm/mautic.stpl +++ /dev/null @@ -1,48 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/rhel/6/templates/web/nginx/php-fpm/mautic.tpl b/install/rhel/6/templates/web/nginx/php-fpm/mautic.tpl deleted file mode 100644 index 177d48757..000000000 --- a/install/rhel/6/templates/web/nginx/php-fpm/mautic.tpl +++ /dev/null @@ -1,44 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/rhel/6/templates/web/nginx/php-fpm/sendy.stpl b/install/rhel/6/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/rhel/6/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/rhel/6/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/rhel/6/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/rhel/6/templates/web/php-fpm/default.tpl b/install/rhel/6/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/rhel/6/templates/web/php-fpm/default.tpl +++ b/install/rhel/6/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/rhel/6/templates/web/php-fpm/socket.tpl b/install/rhel/6/templates/web/php-fpm/socket.tpl index c22d0e2cd..d05a29e42 100644 --- a/install/rhel/6/templates/web/php-fpm/socket.tpl +++ b/install/rhel/6/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/rhel/6/templates/web/skel/public_html/index.html b/install/rhel/6/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/rhel/6/templates/web/skel/public_html/index.html +++ b/install/rhel/6/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/rhel/6/templates/web/skel/public_shtml/index.html b/install/rhel/6/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/rhel/6/templates/web/skel/public_shtml/index.html +++ b/install/rhel/6/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/rhel/7/dovecot/conf.d/15-mailboxes.conf b/install/rhel/7/dovecot/conf.d/15-mailboxes.conf deleted file mode 100644 index 7b2bab97a..000000000 --- a/install/rhel/7/dovecot/conf.d/15-mailboxes.conf +++ /dev/null @@ -1,29 +0,0 @@ -## Mailbox definitions -## - - -# NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf. -namespace inbox { - mailbox Drafts { - special_use = \Drafts - auto = subscribe - } - - mailbox Junk { - special_use = \Junk - auto = subscribe - } - - mailbox Trash { - special_use = \Trash - auto = subscribe - } - - mailbox Sent { - special_use = \Sent - auto = subscribe - } - mailbox "Sent Messages" { - special_use = \Sent - } -} diff --git a/install/rhel/7/nginx/nginx.conf b/install/rhel/7/nginx/nginx.conf index 99ef76ee6..e05750309 100644 --- a/install/rhel/7/nginx/nginx.conf +++ b/install/rhel/7/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; @@ -75,9 +74,7 @@ http { set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; - set_real_ip_from 104.16.0.0/13; - set_real_ip_from 104.24.0.0/14; - #set_real_ip_from 104.16.0.0/12; + set_real_ip_from 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; @@ -99,11 +96,11 @@ http { # SSL PCI Compliance - ssl_session_cache shared:SSL:20m; - ssl_protocols TLSv1.2 TLSv1.3; - ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; + ssl_session_cache shared:SSL:10m; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; - + ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; + # Error pages error_page 403 /error/403.html; diff --git a/install/rhel/7/nginx/phpmyadmin.inc b/install/rhel/7/nginx/phpmyadmin.inc index 79e17c58f..457ee11c2 100644 --- a/install/rhel/7/nginx/phpmyadmin.inc +++ b/install/rhel/7/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpMyAdmin; + alias /usr/share/phpMyAdmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/rhel/7/nginx/phppgadmin.inc b/install/rhel/7/nginx/phppgadmin.inc index 61dea1c9c..333e560a2 100644 --- a/install/rhel/7/nginx/phppgadmin.inc +++ b/install/rhel/7/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phpPgAdmin; + alias /usr/share/phpPgAdmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phpPgAdmin/$1; diff --git a/install/rhel/7/nginx/webmail.inc b/install/rhel/7/nginx/webmail.inc index 63679d35d..123e4af5c 100644 --- a/install/rhel/7/nginx/webmail.inc +++ b/install/rhel/7/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /usr/share/roundcubemail; + alias /usr/share/roundcubemail/; location ~ /(config|temp|logs) { return 404; diff --git a/install/rhel/7/pma/config.inc.conf b/install/rhel/7/pma/config.inc.conf index 1a65fd6cf..47ae207e4 100644 --- a/install/rhel/7/pma/config.inc.conf +++ b/install/rhel/7/pma/config.inc.conf @@ -4,32 +4,24 @@ * phpMyAdmin sample configuration, you can use it as base for * manual configuration. For easier setup you can use setup/ * - * All directives are explained in documentation in the doc/ folder - * or at . + * All directives are explained in Documentation.html and on phpMyAdmin + * wiki . * - * @package PhpMyAdmin + * @package phpMyAdmin */ -/** +/* * This is needed for cookie based authentication to encrypt password in - * cookie. Needs to be 32 chars long. + * cookie */ $cfg['blowfish_secret'] = '%blowfish_secret%'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ -/** -======= -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* * Servers configuration */ $i = 0; -/** +/* * First server */ $i++; @@ -37,64 +29,44 @@ $i++; $cfg['Servers'][$i]['auth_type'] = 'cookie'; /* Server parameters */ $cfg['Servers'][$i]['host'] = 'localhost'; +$cfg['Servers'][$i]['connect_type'] = 'tcp'; $cfg['Servers'][$i]['compress'] = false; +/* Select mysqli if your server has it */ +$cfg['Servers'][$i]['extension'] = 'mysql'; $cfg['Servers'][$i]['AllowNoPassword'] = false; -/** +/* * phpMyAdmin configuration storage settings. */ /* User used to manipulate with storage */ -$cfg['Servers'][$i]['controlhost'] = ''; -$cfg['Servers'][$i]['controlport'] = ''; -$cfg['Servers'][$i]['controluser'] = 'phpmyadmin'; -$cfg['Servers'][$i]['controlpass'] = '%phpmyadmin_pass%'; +// $cfg['Servers'][$i]['controluser'] = 'pma'; +// $cfg['Servers'][$i]['controlpass'] = 'pmapass'; /* Storage database and tables */ -$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; -$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; -$cfg['Servers'][$i]['relation'] = 'pma__relation'; -$cfg['Servers'][$i]['table_info'] = 'pma__table_info'; -$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; -$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; -$cfg['Servers'][$i]['column_info'] = 'pma__column_info'; -$cfg['Servers'][$i]['history'] = 'pma__history'; -$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; -$cfg['Servers'][$i]['tracking'] = 'pma__tracking'; -$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; -$cfg['Servers'][$i]['recent'] = 'pma__recent'; -$cfg['Servers'][$i]['favorite'] = 'pma__favorite'; -$cfg['Servers'][$i]['users'] = 'pma__users'; -$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; -$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; -$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; -$cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; -$cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; -$cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; +// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; +// $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark'; +// $cfg['Servers'][$i]['relation'] = 'pma_relation'; +// $cfg['Servers'][$i]['table_info'] = 'pma_table_info'; +// $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords'; +// $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages'; +// $cfg['Servers'][$i]['column_info'] = 'pma_column_info'; +// $cfg['Servers'][$i]['history'] = 'pma_history'; +// $cfg['Servers'][$i]['tracking'] = 'pma_tracking'; +// $cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords'; +// $cfg['Servers'][$i]['userconfig'] = 'pma_userconfig'; +/* Contrib / Swekey authentication */ +// $cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf'; -/** +/* * End of servers configuration */ -/** +/* * Directories for saving/loading files from server */ -$cfg['UploadDir'] = '/var/lib/phpMyAdmin/upload'; -$cfg['SaveDir'] = '/var/lib/phpMyAdmin/save'; - -/* - * Temp dir for faster beahivour - * -*/ -$cfg['TempDir'] = '/tmp'; - - -/** - * Whether to display icons or text or both icons and text in table row - * action segment. Value can be either of 'icons', 'text' or 'both'. - * default = 'both' - */ -//$cfg['RowActionType'] = 'icons'; +$cfg['UploadDir'] = ''; +$cfg['SaveDir'] = ''; /** * Defines whether a user should be displayed a "show all (records)" @@ -106,21 +78,25 @@ $cfg['TempDir'] = '/tmp'; /** * Number of rows displayed when browsing a result set. If the result * set contains more rows, "Previous" and "Next". - * Possible values: 25, 50, 100, 250, 500 - * default = 25 + * default = 30 */ //$cfg['MaxRows'] = 50; /** - * Disallow editing of binary fields - * valid values are: - * false allow editing - * 'blob' allow editing except for BLOB fields - * 'noblob' disallow editing except for BLOB fields - * 'all' disallow editing - * default = 'blob' + * Use graphically less intense menu tabs + * default = false */ -//$cfg['ProtectBinary'] = false; +//$cfg['LightTabs'] = true; + +/** + * disallow editing of binary fields + * valid values are: + * false allow editing + * 'blob' allow editing except for BLOB fields + * 'all' disallow editing + * default = blob + */ +//$cfg['ProtectBinary'] = 'false'; /** * Default language to use, if not browser-defined or user-defined @@ -131,6 +107,12 @@ $cfg['TempDir'] = '/tmp'; //$cfg['DefaultLang'] = 'en'; //$cfg['DefaultLang'] = 'de'; +/** + * default display direction (horizontal|vertical|horizontalflipped) + */ +//$cfg['DefaultDisplay'] = 'vertical'; + + /** * How many columns should be used for table display of a database? * (a value larger than 1 results in some information being hidden) @@ -149,21 +131,13 @@ $cfg['TempDir'] = '/tmp'; /** * When using DB-based query history, how many entries should be kept? + * * default = 25 */ //$cfg['QueryHistoryMax'] = 100; -/** - * Whether or not to query the user before sending the error report to - * the phpMyAdmin team when a JavaScript error occurs - * - * Available options - * ('ask' | 'always' | 'never') - * default = 'ask' - */ -//$cfg['SendErrorReports'] = 'always'; - -/** - * You can find more configuration options in the documentation - * in the doc/ folder or at . +/* + * You can find more configuration options in Documentation.html + * or here: http://wiki.phpmyadmin.net/pma/Config */ +?> diff --git a/install/rhel/7/templates/web/httpd/basedir.stpl b/install/rhel/7/templates/web/httpd/basedir.stpl index b0474cc0c..952215394 100644 --- a/install/rhel/7/templates/web/httpd/basedir.stpl +++ b/install/rhel/7/templates/web/httpd/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/rhel/7/templates/web/httpd/basedir.tpl b/install/rhel/7/templates/web/httpd/basedir.tpl index 2720a2525..e1f86c704 100644 --- a/install/rhel/7/templates/web/httpd/basedir.tpl +++ b/install/rhel/7/templates/web/httpd/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/rhel/7/templates/web/httpd/default.stpl b/install/rhel/7/templates/web/httpd/default.stpl index 1a982395f..632333ca7 100644 --- a/install/rhel/7/templates/web/httpd/default.stpl +++ b/install/rhel/7/templates/web/httpd/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/7/templates/web/httpd/default.tpl b/install/rhel/7/templates/web/httpd/default.tpl index 89700114a..558687619 100644 --- a/install/rhel/7/templates/web/httpd/default.tpl +++ b/install/rhel/7/templates/web/httpd/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/7/templates/web/httpd/hosting.stpl b/install/rhel/7/templates/web/httpd/hosting.stpl index 9da9c8ba7..673c9c017 100644 --- a/install/rhel/7/templates/web/httpd/hosting.stpl +++ b/install/rhel/7/templates/web/httpd/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/7/templates/web/httpd/hosting.tpl b/install/rhel/7/templates/web/httpd/hosting.tpl index 73970d4bc..25f8e3bf9 100644 --- a/install/rhel/7/templates/web/httpd/hosting.tpl +++ b/install/rhel/7/templates/web/httpd/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/rhel/7/templates/web/httpd/phpcgi.stpl b/install/rhel/7/templates/web/httpd/phpcgi.stpl index 1a7432d22..1f7b3547a 100644 --- a/install/rhel/7/templates/web/httpd/phpcgi.stpl +++ b/install/rhel/7/templates/web/httpd/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/rhel/7/templates/web/httpd/phpcgi.tpl b/install/rhel/7/templates/web/httpd/phpcgi.tpl index 67263035d..c0ae62082 100644 --- a/install/rhel/7/templates/web/httpd/phpcgi.tpl +++ b/install/rhel/7/templates/web/httpd/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/rhel/7/templates/web/httpd/phpfcgid.stpl b/install/rhel/7/templates/web/httpd/phpfcgid.stpl index 4c8ce9795..6d7e81df7 100644 --- a/install/rhel/7/templates/web/httpd/phpfcgid.stpl +++ b/install/rhel/7/templates/web/httpd/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/rhel/7/templates/web/httpd/phpfcgid.tpl b/install/rhel/7/templates/web/httpd/phpfcgid.tpl index 692530f86..79d26209b 100644 --- a/install/rhel/7/templates/web/httpd/phpfcgid.tpl +++ b/install/rhel/7/templates/web/httpd/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/rhel/7/templates/web/nginx/caching.stpl b/install/rhel/7/templates/web/nginx/caching.stpl index 5e1ac757b..67b2f6c20 100755 --- a/install/rhel/7/templates/web/nginx/caching.stpl +++ b/install/rhel/7/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/rhel/7/templates/web/nginx/default.stpl b/install/rhel/7/templates/web/nginx/default.stpl index 22bbd55a6..53ad8d1b8 100755 --- a/install/rhel/7/templates/web/nginx/default.stpl +++ b/install/rhel/7/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/httpd/domains/%domain%.error.log error; diff --git a/install/rhel/7/templates/web/nginx/hosting.stpl b/install/rhel/7/templates/web/nginx/hosting.stpl index c3414149b..aca458a4b 100755 --- a/install/rhel/7/templates/web/nginx/hosting.stpl +++ b/install/rhel/7/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/httpd/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/rhel/7/templates/web/nginx/http2.stpl b/install/rhel/7/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/rhel/7/templates/web/nginx/http2.stpl +++ b/install/rhel/7/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/rhel/7/templates/web/nginx/http2.tpl b/install/rhel/7/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/rhel/7/templates/web/nginx/http2.tpl +++ b/install/rhel/7/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/rhel/7/templates/web/nginx/php-fpm/drupal6.stpl b/install/rhel/7/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/rhel/7/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/rhel/7/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/7/templates/web/nginx/php-fpm/drupal6.tpl b/install/rhel/7/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/rhel/7/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/rhel/7/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/7/templates/web/nginx/php-fpm/drupal7.stpl b/install/rhel/7/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/rhel/7/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/rhel/7/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/7/templates/web/nginx/php-fpm/drupal7.tpl b/install/rhel/7/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/rhel/7/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/rhel/7/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/rhel/7/templates/web/nginx/php-fpm/drupal8.stpl b/install/rhel/7/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/rhel/7/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/rhel/7/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/rhel/7/templates/web/nginx/php-fpm/drupal8.tpl b/install/rhel/7/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/rhel/7/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/rhel/7/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/rhel/7/templates/web/nginx/php-fpm/freescout.stpl b/install/rhel/7/templates/web/nginx/php-fpm/freescout.stpl deleted file mode 100644 index 6e844da1b..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/freescout.stpl +++ /dev/null @@ -1,48 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - # Uncomment this location if you want to improve attachments downloading speed. - # Also make sure to set APP_DOWNLOAD_ATTACHMENTS_VIA=nginx in the .env file. - #location ^~ /storage/app/attachment/ { - # internal; - # alias /var/www/html/storage/app/attachment/; - #} - location ~* ^/storage/attachment/ { - expires 1M; - access_log off; - try_files $uri $uri/ /index.php?$query_string; - } - location ~* ^/(?:css|js)/.*\.(?:css|js)$ { - expires 2d; - access_log off; - add_header Cache-Control "public, must-revalidate"; - } - location ~* ^/(?:css|fonts|img|installer|js|modules|[^\\\]+\..*)$ { - expires 1M; - access_log off; - add_header Cache-Control "public"; - } - location ~ /\. { - deny all; - } -} diff --git a/install/rhel/7/templates/web/nginx/php-fpm/freescout.tpl b/install/rhel/7/templates/web/nginx/php-fpm/freescout.tpl deleted file mode 100644 index 1a9e6ffa6..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/freescout.tpl +++ /dev/null @@ -1,44 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - # Uncomment this location if you want to improve attachments downloading speed. - # Also make sure to set APP_DOWNLOAD_ATTACHMENTS_VIA=nginx in the .env file. - #location ^~ /storage/app/attachment/ { - # internal; - # alias /var/www/html/storage/app/attachment/; - #} - location ~* ^/storage/attachment/ { - expires 1M; - access_log off; - try_files $uri $uri/ /index.php?$query_string; - } - location ~* ^/(?:css|js)/.*\.(?:css|js)$ { - expires 2d; - access_log off; - add_header Cache-Control "public, must-revalidate"; - } - location ~* ^/(?:css|fonts|img|installer|js|modules|[^\\\]+\..*)$ { - expires 1M; - access_log off; - add_header Cache-Control "public"; - } - location ~ /\. { - deny all; - } -} diff --git a/install/rhel/7/templates/web/nginx/php-fpm/invoiceninja.stpl b/install/rhel/7/templates/web/nginx/php-fpm/invoiceninja.stpl deleted file mode 100644 index 086e6a8e8..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/invoiceninja.stpl +++ /dev/null @@ -1,64 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/rhel/7/templates/web/nginx/php-fpm/invoiceninja.tpl b/install/rhel/7/templates/web/nginx/php-fpm/invoiceninja.tpl deleted file mode 100644 index fd06523a9..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/invoiceninja.tpl +++ /dev/null @@ -1,59 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/rhel/7/templates/web/nginx/php-fpm/mautic.stpl b/install/rhel/7/templates/web/nginx/php-fpm/mautic.stpl deleted file mode 100644 index a88e9b58f..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/mautic.stpl +++ /dev/null @@ -1,48 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/rhel/7/templates/web/nginx/php-fpm/mautic.tpl b/install/rhel/7/templates/web/nginx/php-fpm/mautic.tpl deleted file mode 100644 index 177d48757..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/mautic.tpl +++ /dev/null @@ -1,44 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/rhel/7/templates/web/nginx/php-fpm/sendy.stpl b/install/rhel/7/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/rhel/7/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/rhel/7/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/rhel/7/templates/web/nginx/php-fpm/single_page_application.stpl b/install/rhel/7/templates/web/nginx/php-fpm/single_page_application.stpl deleted file mode 100644 index 6f8f36ab3..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/single_page_application.stpl +++ /dev/null @@ -1,58 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - location / { - try_files $uri $uri/ /index.html; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/rhel/7/templates/web/nginx/php-fpm/single_page_application.tpl b/install/rhel/7/templates/web/nginx/php-fpm/single_page_application.tpl deleted file mode 100644 index d3dbb548b..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/single_page_application.tpl +++ /dev/null @@ -1,54 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - location / { - try_files $uri $uri/ /index.html; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/rhel/7/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/rhel/7/templates/web/php-fpm/default.tpl b/install/rhel/7/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/rhel/7/templates/web/php-fpm/default.tpl +++ b/install/rhel/7/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/rhel/7/templates/web/php-fpm/socket.tpl b/install/rhel/7/templates/web/php-fpm/socket.tpl index c22d0e2cd..d05a29e42 100644 --- a/install/rhel/7/templates/web/php-fpm/socket.tpl +++ b/install/rhel/7/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/rhel/7/templates/web/skel/public_html/index.html b/install/rhel/7/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/rhel/7/templates/web/skel/public_html/index.html +++ b/install/rhel/7/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/rhel/7/templates/web/skel/public_shtml/index.html b/install/rhel/7/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/rhel/7/templates/web/skel/public_shtml/index.html +++ b/install/rhel/7/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/rhel/7/vsftpd/vsftpd.conf b/install/rhel/7/vsftpd/vsftpd.conf index 26efb9586..6e11268df 100644 --- a/install/rhel/7/vsftpd/vsftpd.conf +++ b/install/rhel/7/vsftpd/vsftpd.conf @@ -22,16 +22,3 @@ pasv_enable=YES pasv_max_port=12100 pasv_min_port=12000 use_localtime=YES -ssl_enable=YES -allow_anon_ssl=YES -force_local_data_ssl=YES -force_local_logins_ssl=YES -ssl_tlsv1_2=YES -ssl_sslv2=NO -ssl_sslv3=NO -require_ssl_reuse=YES -ssl_ciphers=HIGH -idle_session_timeout=600 -data_connection_timeout=120 -rsa_cert_file=/usr/local/vesta/ssl/certificate.crt -rsa_private_key_file=/usr/local/vesta/ssl/certificate.key diff --git a/install/rhel/8/vsftpd/vsftpd.conf b/install/rhel/8/vsftpd/vsftpd.conf deleted file mode 100644 index 75e0104fe..000000000 --- a/install/rhel/8/vsftpd/vsftpd.conf +++ /dev/null @@ -1,40 +0,0 @@ -anonymous_enable=NO -local_enable=YES -write_enable=YES -local_umask=022 -anon_umask=022 -anon_upload_enable=NO -dirmessage_enable=YES -xferlog_enable=YES -connect_from_port_20=YES -xferlog_std_format=YES -dual_log_enable=YES -chroot_local_user=YES -listen=YES -pam_service_name=vsftpd -userlist_enable=NO -tcp_wrappers=YES -force_dot_files=YES -ascii_upload_enable=YES -ascii_download_enable=YES -allow_writeable_chroot=YES -seccomp_sandbox=NO -pasv_enable=YES -pasv_promiscuous=YES -pasv_min_port=12000 -pasv_max_port=12100 -max_per_ip=10 -max_clients=100 -use_localtime=YES -utf8_filesystem=YES -ssl_enable=YES -allow_anon_ssl=NO -require_ssl_reuse=NO -ssl_ciphers=HIGH -ssl_tlsv1=YES -ssl_sslv2=NO -ssl_sslv3=NO -force_local_data_ssl=NO -force_local_logins_ssl=NO -rsa_cert_file=/usr/local/vesta/ssl/certificate.crt -rsa_private_key_file=/usr/local/vesta/ssl/certificate.key diff --git a/install/ubuntu/12.04/nginx/nginx.conf b/install/ubuntu/12.04/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/12.04/nginx/nginx.conf +++ b/install/ubuntu/12.04/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/12.04/nginx/phpmyadmin.inc b/install/ubuntu/12.04/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/12.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/12.04/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/12.04/nginx/phppgadmin.inc b/install/ubuntu/12.04/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/12.04/nginx/phppgadmin.inc +++ b/install/ubuntu/12.04/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/12.04/nginx/webmail.inc b/install/ubuntu/12.04/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/12.04/nginx/webmail.inc +++ b/install/ubuntu/12.04/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/12.04/pma/apache.conf b/install/ubuntu/12.04/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/ubuntu/12.04/pma/apache.conf +++ b/install/ubuntu/12.04/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/ubuntu/12.04/pma/config.inc.php b/install/ubuntu/12.04/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/12.04/pma/config.inc.php +++ b/install/ubuntu/12.04/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/12.04/templates/web/apache2/basedir.stpl b/install/ubuntu/12.04/templates/web/apache2/basedir.stpl index 379f87da1..dda3aa760 100644 --- a/install/ubuntu/12.04/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/12.04/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/12.04/templates/web/apache2/basedir.tpl b/install/ubuntu/12.04/templates/web/apache2/basedir.tpl index bf87511bd..9449bc447 100644 --- a/install/ubuntu/12.04/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/12.04/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/12.04/templates/web/apache2/default.stpl b/install/ubuntu/12.04/templates/web/apache2/default.stpl index 8c8b7a3a2..29acfcebb 100644 --- a/install/ubuntu/12.04/templates/web/apache2/default.stpl +++ b/install/ubuntu/12.04/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/12.04/templates/web/apache2/default.tpl b/install/ubuntu/12.04/templates/web/apache2/default.tpl index 7fa97eb73..c24b12796 100644 --- a/install/ubuntu/12.04/templates/web/apache2/default.tpl +++ b/install/ubuntu/12.04/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/12.04/templates/web/apache2/hosting.stpl b/install/ubuntu/12.04/templates/web/apache2/hosting.stpl index ffb9a998f..627325e06 100644 --- a/install/ubuntu/12.04/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/12.04/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/12.04/templates/web/apache2/hosting.tpl b/install/ubuntu/12.04/templates/web/apache2/hosting.tpl index 3ed5acd1c..3e30d737b 100644 --- a/install/ubuntu/12.04/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/12.04/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/12.04/templates/web/apache2/phpcgi.stpl b/install/ubuntu/12.04/templates/web/apache2/phpcgi.stpl index 7bbf5be59..aa807091a 100644 --- a/install/ubuntu/12.04/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/12.04/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/12.04/templates/web/apache2/phpcgi.tpl b/install/ubuntu/12.04/templates/web/apache2/phpcgi.tpl index 8978bd127..fd603800b 100644 --- a/install/ubuntu/12.04/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/12.04/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/12.04/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/12.04/templates/web/apache2/phpfcgid.stpl index 7c49603d5..88cea0e64 100644 --- a/install/ubuntu/12.04/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/12.04/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/12.04/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/12.04/templates/web/apache2/phpfcgid.tpl index 661f66bd3..335b9f620 100644 --- a/install/ubuntu/12.04/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/12.04/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/12.04/templates/web/nginx/caching.stpl b/install/ubuntu/12.04/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/12.04/templates/web/nginx/caching.stpl +++ b/install/ubuntu/12.04/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/12.04/templates/web/nginx/default.stpl b/install/ubuntu/12.04/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/12.04/templates/web/nginx/default.stpl +++ b/install/ubuntu/12.04/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/12.04/templates/web/nginx/hosting.stpl b/install/ubuntu/12.04/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/12.04/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/12.04/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/12.04/templates/web/nginx/http2.stpl b/install/ubuntu/12.04/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/12.04/templates/web/nginx/http2.stpl +++ b/install/ubuntu/12.04/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/12.04/templates/web/nginx/http2.tpl b/install/ubuntu/12.04/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/12.04/templates/web/nginx/http2.tpl +++ b/install/ubuntu/12.04/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/12.04/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/12.04/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/12.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/12.04/templates/web/php-fpm/default.tpl b/install/ubuntu/12.04/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/12.04/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/12.04/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/12.04/templates/web/php-fpm/socket.tpl b/install/ubuntu/12.04/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/12.04/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/12.04/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/12.04/templates/web/skel/public_html/index.html b/install/ubuntu/12.04/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/12.04/templates/web/skel/public_html/index.html +++ b/install/ubuntu/12.04/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/12.04/templates/web/skel/public_shtml/index.html b/install/ubuntu/12.04/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/12.04/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/12.04/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/12.10/nginx/nginx.conf b/install/ubuntu/12.10/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/12.10/nginx/nginx.conf +++ b/install/ubuntu/12.10/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/12.10/nginx/phpmyadmin.inc b/install/ubuntu/12.10/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/12.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/12.10/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/12.10/nginx/phppgadmin.inc b/install/ubuntu/12.10/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/12.10/nginx/phppgadmin.inc +++ b/install/ubuntu/12.10/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/12.10/nginx/webmail.inc b/install/ubuntu/12.10/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/12.10/nginx/webmail.inc +++ b/install/ubuntu/12.10/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/12.10/pma/apache.conf b/install/ubuntu/12.10/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/ubuntu/12.10/pma/apache.conf +++ b/install/ubuntu/12.10/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/ubuntu/12.10/pma/config.inc.php b/install/ubuntu/12.10/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/12.10/pma/config.inc.php +++ b/install/ubuntu/12.10/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/12.10/templates/web/apache2/basedir.stpl b/install/ubuntu/12.10/templates/web/apache2/basedir.stpl index 379f87da1..dda3aa760 100644 --- a/install/ubuntu/12.10/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/12.10/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/12.10/templates/web/apache2/basedir.tpl b/install/ubuntu/12.10/templates/web/apache2/basedir.tpl index bf87511bd..9449bc447 100644 --- a/install/ubuntu/12.10/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/12.10/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/12.10/templates/web/apache2/default.stpl b/install/ubuntu/12.10/templates/web/apache2/default.stpl index 8c8b7a3a2..29acfcebb 100644 --- a/install/ubuntu/12.10/templates/web/apache2/default.stpl +++ b/install/ubuntu/12.10/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/12.10/templates/web/apache2/default.tpl b/install/ubuntu/12.10/templates/web/apache2/default.tpl index 7fa97eb73..c24b12796 100644 --- a/install/ubuntu/12.10/templates/web/apache2/default.tpl +++ b/install/ubuntu/12.10/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/12.10/templates/web/apache2/hosting.stpl b/install/ubuntu/12.10/templates/web/apache2/hosting.stpl index ffb9a998f..627325e06 100644 --- a/install/ubuntu/12.10/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/12.10/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/12.10/templates/web/apache2/hosting.tpl b/install/ubuntu/12.10/templates/web/apache2/hosting.tpl index 3ed5acd1c..3e30d737b 100644 --- a/install/ubuntu/12.10/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/12.10/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/12.10/templates/web/apache2/phpcgi.stpl b/install/ubuntu/12.10/templates/web/apache2/phpcgi.stpl index 7bbf5be59..aa807091a 100644 --- a/install/ubuntu/12.10/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/12.10/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/12.10/templates/web/apache2/phpcgi.tpl b/install/ubuntu/12.10/templates/web/apache2/phpcgi.tpl index 8978bd127..fd603800b 100644 --- a/install/ubuntu/12.10/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/12.10/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/12.10/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/12.10/templates/web/apache2/phpfcgid.stpl index 7c49603d5..88cea0e64 100644 --- a/install/ubuntu/12.10/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/12.10/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/12.10/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/12.10/templates/web/apache2/phpfcgid.tpl index 661f66bd3..335b9f620 100644 --- a/install/ubuntu/12.10/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/12.10/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/12.10/templates/web/nginx/caching.stpl b/install/ubuntu/12.10/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/12.10/templates/web/nginx/caching.stpl +++ b/install/ubuntu/12.10/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/12.10/templates/web/nginx/default.stpl b/install/ubuntu/12.10/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/12.10/templates/web/nginx/default.stpl +++ b/install/ubuntu/12.10/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/12.10/templates/web/nginx/hosting.stpl b/install/ubuntu/12.10/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/12.10/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/12.10/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/12.10/templates/web/nginx/http2.stpl b/install/ubuntu/12.10/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/12.10/templates/web/nginx/http2.stpl +++ b/install/ubuntu/12.10/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/12.10/templates/web/nginx/http2.tpl b/install/ubuntu/12.10/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/12.10/templates/web/nginx/http2.tpl +++ b/install/ubuntu/12.10/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/12.10/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/12.10/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/12.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/12.10/templates/web/php-fpm/default.tpl b/install/ubuntu/12.10/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/12.10/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/12.10/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/12.10/templates/web/php-fpm/socket.tpl b/install/ubuntu/12.10/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/12.10/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/12.10/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/12.10/templates/web/skel/public_html/index.html b/install/ubuntu/12.10/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/12.10/templates/web/skel/public_html/index.html +++ b/install/ubuntu/12.10/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/12.10/templates/web/skel/public_shtml/index.html b/install/ubuntu/12.10/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/12.10/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/12.10/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/13.04/nginx/nginx.conf b/install/ubuntu/13.04/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/13.04/nginx/nginx.conf +++ b/install/ubuntu/13.04/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/13.04/nginx/phpmyadmin.inc b/install/ubuntu/13.04/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/13.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/13.04/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/13.04/nginx/phppgadmin.inc b/install/ubuntu/13.04/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/13.04/nginx/phppgadmin.inc +++ b/install/ubuntu/13.04/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/13.04/nginx/webmail.inc b/install/ubuntu/13.04/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/13.04/nginx/webmail.inc +++ b/install/ubuntu/13.04/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/13.04/pma/apache.conf b/install/ubuntu/13.04/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/ubuntu/13.04/pma/apache.conf +++ b/install/ubuntu/13.04/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/ubuntu/13.04/pma/config.inc.php b/install/ubuntu/13.04/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/13.04/pma/config.inc.php +++ b/install/ubuntu/13.04/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/13.04/templates/web/apache2/basedir.stpl b/install/ubuntu/13.04/templates/web/apache2/basedir.stpl index 379f87da1..dda3aa760 100644 --- a/install/ubuntu/13.04/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/13.04/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/13.04/templates/web/apache2/basedir.tpl b/install/ubuntu/13.04/templates/web/apache2/basedir.tpl index bf87511bd..9449bc447 100644 --- a/install/ubuntu/13.04/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/13.04/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/13.04/templates/web/apache2/default.stpl b/install/ubuntu/13.04/templates/web/apache2/default.stpl index 8c8b7a3a2..29acfcebb 100644 --- a/install/ubuntu/13.04/templates/web/apache2/default.stpl +++ b/install/ubuntu/13.04/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/13.04/templates/web/apache2/default.tpl b/install/ubuntu/13.04/templates/web/apache2/default.tpl index 7fa97eb73..c24b12796 100644 --- a/install/ubuntu/13.04/templates/web/apache2/default.tpl +++ b/install/ubuntu/13.04/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/13.04/templates/web/apache2/hosting.stpl b/install/ubuntu/13.04/templates/web/apache2/hosting.stpl index 907dc462e..ce0763ae8 100644 --- a/install/ubuntu/13.04/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/13.04/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/13.04/templates/web/apache2/hosting.tpl b/install/ubuntu/13.04/templates/web/apache2/hosting.tpl index 3382b6144..f3491a5fe 100644 --- a/install/ubuntu/13.04/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/13.04/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/13.04/templates/web/apache2/phpcgi.stpl b/install/ubuntu/13.04/templates/web/apache2/phpcgi.stpl index 7bbf5be59..aa807091a 100644 --- a/install/ubuntu/13.04/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/13.04/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/13.04/templates/web/apache2/phpcgi.tpl b/install/ubuntu/13.04/templates/web/apache2/phpcgi.tpl index 8978bd127..fd603800b 100644 --- a/install/ubuntu/13.04/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/13.04/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/13.04/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/13.04/templates/web/apache2/phpfcgid.stpl index 7c49603d5..88cea0e64 100644 --- a/install/ubuntu/13.04/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/13.04/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/13.04/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/13.04/templates/web/apache2/phpfcgid.tpl index 661f66bd3..335b9f620 100644 --- a/install/ubuntu/13.04/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/13.04/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/13.04/templates/web/nginx/caching.stpl b/install/ubuntu/13.04/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/13.04/templates/web/nginx/caching.stpl +++ b/install/ubuntu/13.04/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/13.04/templates/web/nginx/default.stpl b/install/ubuntu/13.04/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/13.04/templates/web/nginx/default.stpl +++ b/install/ubuntu/13.04/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/13.04/templates/web/nginx/hosting.stpl b/install/ubuntu/13.04/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/13.04/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/13.04/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/13.04/templates/web/nginx/http2.stpl b/install/ubuntu/13.04/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/13.04/templates/web/nginx/http2.stpl +++ b/install/ubuntu/13.04/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/13.04/templates/web/nginx/http2.tpl b/install/ubuntu/13.04/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/13.04/templates/web/nginx/http2.tpl +++ b/install/ubuntu/13.04/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/13.04/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/13.04/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/13.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/13.04/templates/web/php-fpm/default.tpl b/install/ubuntu/13.04/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/13.04/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/13.04/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/13.04/templates/web/php-fpm/socket.tpl b/install/ubuntu/13.04/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/13.04/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/13.04/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/13.04/templates/web/skel/public_html/index.html b/install/ubuntu/13.04/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/13.04/templates/web/skel/public_html/index.html +++ b/install/ubuntu/13.04/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/13.04/templates/web/skel/public_shtml/index.html b/install/ubuntu/13.04/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/13.04/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/13.04/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/13.10/nginx/nginx.conf b/install/ubuntu/13.10/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/13.10/nginx/nginx.conf +++ b/install/ubuntu/13.10/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/13.10/nginx/phpmyadmin.inc b/install/ubuntu/13.10/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/13.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/13.10/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/13.10/nginx/phppgadmin.inc b/install/ubuntu/13.10/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/13.10/nginx/phppgadmin.inc +++ b/install/ubuntu/13.10/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/13.10/nginx/webmail.inc b/install/ubuntu/13.10/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/13.10/nginx/webmail.inc +++ b/install/ubuntu/13.10/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/13.10/pma/apache.conf b/install/ubuntu/13.10/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/ubuntu/13.10/pma/apache.conf +++ b/install/ubuntu/13.10/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/ubuntu/13.10/pma/config.inc.php b/install/ubuntu/13.10/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/13.10/pma/config.inc.php +++ b/install/ubuntu/13.10/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/13.10/templates/web/apache2/basedir.stpl b/install/ubuntu/13.10/templates/web/apache2/basedir.stpl index 37c4a4b39..d978d4c43 100644 --- a/install/ubuntu/13.10/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/13.10/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/13.10/templates/web/apache2/basedir.tpl b/install/ubuntu/13.10/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/13.10/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/13.10/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/13.10/templates/web/apache2/default.stpl b/install/ubuntu/13.10/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/13.10/templates/web/apache2/default.stpl +++ b/install/ubuntu/13.10/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/13.10/templates/web/apache2/default.tpl b/install/ubuntu/13.10/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/13.10/templates/web/apache2/default.tpl +++ b/install/ubuntu/13.10/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/13.10/templates/web/apache2/hosting.stpl b/install/ubuntu/13.10/templates/web/apache2/hosting.stpl index dee0eda9c..8892072b1 100644 --- a/install/ubuntu/13.10/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/13.10/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/13.10/templates/web/apache2/hosting.tpl b/install/ubuntu/13.10/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/13.10/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/13.10/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/13.10/templates/web/apache2/phpcgi.stpl b/install/ubuntu/13.10/templates/web/apache2/phpcgi.stpl index 6cd15df00..731355bc1 100644 --- a/install/ubuntu/13.10/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/13.10/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/13.10/templates/web/apache2/phpcgi.tpl b/install/ubuntu/13.10/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/13.10/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/13.10/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/13.10/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/13.10/templates/web/apache2/phpfcgid.stpl index 9c0ca5027..156c8a918 100644 --- a/install/ubuntu/13.10/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/13.10/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/13.10/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/13.10/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/13.10/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/13.10/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/13.10/templates/web/nginx/caching.stpl b/install/ubuntu/13.10/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/13.10/templates/web/nginx/caching.stpl +++ b/install/ubuntu/13.10/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/13.10/templates/web/nginx/default.stpl b/install/ubuntu/13.10/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/13.10/templates/web/nginx/default.stpl +++ b/install/ubuntu/13.10/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/13.10/templates/web/nginx/hosting.stpl b/install/ubuntu/13.10/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/13.10/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/13.10/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/13.10/templates/web/nginx/http2.stpl b/install/ubuntu/13.10/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/13.10/templates/web/nginx/http2.stpl +++ b/install/ubuntu/13.10/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/13.10/templates/web/nginx/http2.tpl b/install/ubuntu/13.10/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/13.10/templates/web/nginx/http2.tpl +++ b/install/ubuntu/13.10/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/13.10/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/13.10/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/13.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/13.10/templates/web/php-fpm/default.tpl b/install/ubuntu/13.10/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/13.10/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/13.10/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/13.10/templates/web/php-fpm/socket.tpl b/install/ubuntu/13.10/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/13.10/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/13.10/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/13.10/templates/web/skel/public_html/index.html b/install/ubuntu/13.10/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/13.10/templates/web/skel/public_html/index.html +++ b/install/ubuntu/13.10/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/13.10/templates/web/skel/public_shtml/index.html b/install/ubuntu/13.10/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/13.10/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/13.10/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/14.04/nginx/nginx.conf b/install/ubuntu/14.04/nginx/nginx.conf index c44ab6502..1932d171f 100644 --- a/install/ubuntu/14.04/nginx/nginx.conf +++ b/install/ubuntu/14.04/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/14.04/nginx/phpmyadmin.inc b/install/ubuntu/14.04/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/14.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/14.04/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/14.04/nginx/phppgadmin.inc b/install/ubuntu/14.04/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/14.04/nginx/phppgadmin.inc +++ b/install/ubuntu/14.04/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/14.04/nginx/webmail.inc b/install/ubuntu/14.04/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/14.04/nginx/webmail.inc +++ b/install/ubuntu/14.04/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/14.04/pma/apache.conf b/install/ubuntu/14.04/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/ubuntu/14.04/pma/apache.conf +++ b/install/ubuntu/14.04/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/ubuntu/14.04/pma/config.inc.php b/install/ubuntu/14.04/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/14.04/pma/config.inc.php +++ b/install/ubuntu/14.04/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/14.04/templates/web/apache2/basedir.stpl b/install/ubuntu/14.04/templates/web/apache2/basedir.stpl index 37c4a4b39..d978d4c43 100644 --- a/install/ubuntu/14.04/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/14.04/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/14.04/templates/web/apache2/basedir.tpl b/install/ubuntu/14.04/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/14.04/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/14.04/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/14.04/templates/web/apache2/default.stpl b/install/ubuntu/14.04/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/14.04/templates/web/apache2/default.stpl +++ b/install/ubuntu/14.04/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/14.04/templates/web/apache2/default.tpl b/install/ubuntu/14.04/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/14.04/templates/web/apache2/default.tpl +++ b/install/ubuntu/14.04/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/14.04/templates/web/apache2/hosting.stpl b/install/ubuntu/14.04/templates/web/apache2/hosting.stpl index dee0eda9c..8892072b1 100644 --- a/install/ubuntu/14.04/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/14.04/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/14.04/templates/web/apache2/hosting.tpl b/install/ubuntu/14.04/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/14.04/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/14.04/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/14.04/templates/web/apache2/phpcgi.stpl b/install/ubuntu/14.04/templates/web/apache2/phpcgi.stpl index 6cd15df00..731355bc1 100644 --- a/install/ubuntu/14.04/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/14.04/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/14.04/templates/web/apache2/phpcgi.tpl b/install/ubuntu/14.04/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/14.04/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/14.04/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/14.04/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/14.04/templates/web/apache2/phpfcgid.stpl index 9c0ca5027..156c8a918 100644 --- a/install/ubuntu/14.04/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/14.04/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/14.04/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/14.04/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/14.04/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/14.04/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/14.04/templates/web/nginx/caching.stpl b/install/ubuntu/14.04/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/14.04/templates/web/nginx/caching.stpl +++ b/install/ubuntu/14.04/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/14.04/templates/web/nginx/default.stpl b/install/ubuntu/14.04/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/14.04/templates/web/nginx/default.stpl +++ b/install/ubuntu/14.04/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/14.04/templates/web/nginx/hosting.stpl b/install/ubuntu/14.04/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/14.04/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/14.04/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/14.04/templates/web/nginx/http2.stpl b/install/ubuntu/14.04/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/14.04/templates/web/nginx/http2.stpl +++ b/install/ubuntu/14.04/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/14.04/templates/web/nginx/http2.tpl b/install/ubuntu/14.04/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/14.04/templates/web/nginx/http2.tpl +++ b/install/ubuntu/14.04/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/14.04/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/invoiceninja.stpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/invoiceninja.stpl deleted file mode 100644 index 086e6a8e8..000000000 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/invoiceninja.stpl +++ /dev/null @@ -1,64 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/invoiceninja.tpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/invoiceninja.tpl deleted file mode 100644 index fd06523a9..000000000 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/invoiceninja.tpl +++ /dev/null @@ -1,59 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/14.04/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/14.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/14.04/templates/web/php-fpm/default.tpl b/install/ubuntu/14.04/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/14.04/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/14.04/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/14.04/templates/web/php-fpm/socket.tpl b/install/ubuntu/14.04/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/14.04/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/14.04/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/14.04/templates/web/skel/public_html/index.html b/install/ubuntu/14.04/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/14.04/templates/web/skel/public_html/index.html +++ b/install/ubuntu/14.04/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/14.04/templates/web/skel/public_shtml/index.html b/install/ubuntu/14.04/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/14.04/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/14.04/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/14.10/nginx/nginx.conf b/install/ubuntu/14.10/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/14.10/nginx/nginx.conf +++ b/install/ubuntu/14.10/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/14.10/nginx/phpmyadmin.inc b/install/ubuntu/14.10/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/14.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/14.10/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/14.10/nginx/phppgadmin.inc b/install/ubuntu/14.10/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/14.10/nginx/phppgadmin.inc +++ b/install/ubuntu/14.10/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/14.10/nginx/webmail.inc b/install/ubuntu/14.10/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/14.10/nginx/webmail.inc +++ b/install/ubuntu/14.10/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/14.10/pma/apache.conf b/install/ubuntu/14.10/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/ubuntu/14.10/pma/apache.conf +++ b/install/ubuntu/14.10/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/ubuntu/14.10/pma/config.inc.php b/install/ubuntu/14.10/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/14.10/pma/config.inc.php +++ b/install/ubuntu/14.10/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/14.10/templates/web/apache2/basedir.stpl b/install/ubuntu/14.10/templates/web/apache2/basedir.stpl index 37c4a4b39..d978d4c43 100644 --- a/install/ubuntu/14.10/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/14.10/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/14.10/templates/web/apache2/basedir.tpl b/install/ubuntu/14.10/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/14.10/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/14.10/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/14.10/templates/web/apache2/default.stpl b/install/ubuntu/14.10/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/14.10/templates/web/apache2/default.stpl +++ b/install/ubuntu/14.10/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/14.10/templates/web/apache2/default.tpl b/install/ubuntu/14.10/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/14.10/templates/web/apache2/default.tpl +++ b/install/ubuntu/14.10/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/14.10/templates/web/apache2/hosting.stpl b/install/ubuntu/14.10/templates/web/apache2/hosting.stpl index dee0eda9c..8892072b1 100644 --- a/install/ubuntu/14.10/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/14.10/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/14.10/templates/web/apache2/hosting.tpl b/install/ubuntu/14.10/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/14.10/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/14.10/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/14.10/templates/web/apache2/phpcgi.stpl b/install/ubuntu/14.10/templates/web/apache2/phpcgi.stpl index 6cd15df00..731355bc1 100644 --- a/install/ubuntu/14.10/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/14.10/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/14.10/templates/web/apache2/phpcgi.tpl b/install/ubuntu/14.10/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/14.10/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/14.10/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/14.10/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/14.10/templates/web/apache2/phpfcgid.stpl index 9c0ca5027..156c8a918 100644 --- a/install/ubuntu/14.10/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/14.10/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/14.10/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/14.10/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/14.10/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/14.10/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/14.10/templates/web/nginx/caching.stpl b/install/ubuntu/14.10/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/14.10/templates/web/nginx/caching.stpl +++ b/install/ubuntu/14.10/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/14.10/templates/web/nginx/default.stpl b/install/ubuntu/14.10/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/14.10/templates/web/nginx/default.stpl +++ b/install/ubuntu/14.10/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/14.10/templates/web/nginx/hosting.stpl b/install/ubuntu/14.10/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/14.10/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/14.10/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/14.10/templates/web/nginx/http2.stpl b/install/ubuntu/14.10/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/14.10/templates/web/nginx/http2.stpl +++ b/install/ubuntu/14.10/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/14.10/templates/web/nginx/http2.tpl b/install/ubuntu/14.10/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/14.10/templates/web/nginx/http2.tpl +++ b/install/ubuntu/14.10/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/14.10/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/14.10/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/14.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/14.10/templates/web/php-fpm/default.tpl b/install/ubuntu/14.10/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/14.10/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/14.10/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/14.10/templates/web/php-fpm/socket.tpl b/install/ubuntu/14.10/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/14.10/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/14.10/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/14.10/templates/web/skel/public_html/index.html b/install/ubuntu/14.10/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/14.10/templates/web/skel/public_html/index.html +++ b/install/ubuntu/14.10/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/14.10/templates/web/skel/public_shtml/index.html b/install/ubuntu/14.10/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/14.10/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/14.10/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/15.04/nginx/nginx.conf b/install/ubuntu/15.04/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/15.04/nginx/nginx.conf +++ b/install/ubuntu/15.04/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/15.04/nginx/phpmyadmin.inc b/install/ubuntu/15.04/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/15.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/15.04/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/15.04/nginx/phppgadmin.inc b/install/ubuntu/15.04/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/15.04/nginx/phppgadmin.inc +++ b/install/ubuntu/15.04/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/15.04/nginx/webmail.inc b/install/ubuntu/15.04/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/15.04/nginx/webmail.inc +++ b/install/ubuntu/15.04/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/15.04/pma/apache.conf b/install/ubuntu/15.04/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/ubuntu/15.04/pma/apache.conf +++ b/install/ubuntu/15.04/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/ubuntu/15.04/pma/config.inc.php b/install/ubuntu/15.04/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/15.04/pma/config.inc.php +++ b/install/ubuntu/15.04/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/15.04/templates/web/apache2/basedir.stpl b/install/ubuntu/15.04/templates/web/apache2/basedir.stpl index 37c4a4b39..d978d4c43 100644 --- a/install/ubuntu/15.04/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/15.04/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/15.04/templates/web/apache2/basedir.tpl b/install/ubuntu/15.04/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/15.04/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/15.04/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/15.04/templates/web/apache2/default.stpl b/install/ubuntu/15.04/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/15.04/templates/web/apache2/default.stpl +++ b/install/ubuntu/15.04/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/15.04/templates/web/apache2/default.tpl b/install/ubuntu/15.04/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/15.04/templates/web/apache2/default.tpl +++ b/install/ubuntu/15.04/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/15.04/templates/web/apache2/hosting.stpl b/install/ubuntu/15.04/templates/web/apache2/hosting.stpl index dee0eda9c..8892072b1 100644 --- a/install/ubuntu/15.04/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/15.04/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/15.04/templates/web/apache2/hosting.tpl b/install/ubuntu/15.04/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/15.04/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/15.04/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/15.04/templates/web/apache2/phpcgi.stpl b/install/ubuntu/15.04/templates/web/apache2/phpcgi.stpl index 6cd15df00..731355bc1 100644 --- a/install/ubuntu/15.04/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/15.04/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/15.04/templates/web/apache2/phpcgi.tpl b/install/ubuntu/15.04/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/15.04/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/15.04/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/15.04/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/15.04/templates/web/apache2/phpfcgid.stpl index 9c0ca5027..156c8a918 100644 --- a/install/ubuntu/15.04/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/15.04/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/15.04/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/15.04/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/15.04/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/15.04/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/15.04/templates/web/nginx/caching.stpl b/install/ubuntu/15.04/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/15.04/templates/web/nginx/caching.stpl +++ b/install/ubuntu/15.04/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/15.04/templates/web/nginx/default.stpl b/install/ubuntu/15.04/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/15.04/templates/web/nginx/default.stpl +++ b/install/ubuntu/15.04/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/15.04/templates/web/nginx/hosting.stpl b/install/ubuntu/15.04/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/15.04/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/15.04/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/15.04/templates/web/nginx/http2.stpl b/install/ubuntu/15.04/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/15.04/templates/web/nginx/http2.stpl +++ b/install/ubuntu/15.04/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/15.04/templates/web/nginx/http2.tpl b/install/ubuntu/15.04/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/15.04/templates/web/nginx/http2.tpl +++ b/install/ubuntu/15.04/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/15.04/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/15.04/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/15.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/15.04/templates/web/php-fpm/default.tpl b/install/ubuntu/15.04/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/15.04/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/15.04/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/15.04/templates/web/php-fpm/socket.tpl b/install/ubuntu/15.04/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/15.04/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/15.04/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/15.04/templates/web/skel/public_html/index.html b/install/ubuntu/15.04/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/15.04/templates/web/skel/public_html/index.html +++ b/install/ubuntu/15.04/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/15.04/templates/web/skel/public_shtml/index.html b/install/ubuntu/15.04/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/15.04/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/15.04/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/15.10/nginx/nginx.conf b/install/ubuntu/15.10/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/15.10/nginx/nginx.conf +++ b/install/ubuntu/15.10/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/15.10/nginx/phpmyadmin.inc b/install/ubuntu/15.10/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/15.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/15.10/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/15.10/nginx/phppgadmin.inc b/install/ubuntu/15.10/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/15.10/nginx/phppgadmin.inc +++ b/install/ubuntu/15.10/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/15.10/nginx/webmail.inc b/install/ubuntu/15.10/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/15.10/nginx/webmail.inc +++ b/install/ubuntu/15.10/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/15.10/pma/apache.conf b/install/ubuntu/15.10/pma/apache.conf index ce2a9fe2b..2a8f69e25 100644 --- a/install/ubuntu/15.10/pma/apache.conf +++ b/install/ubuntu/15.10/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext diff --git a/install/ubuntu/15.10/pma/config.inc.php b/install/ubuntu/15.10/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/15.10/pma/config.inc.php +++ b/install/ubuntu/15.10/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/15.10/templates/web/apache2/basedir.stpl b/install/ubuntu/15.10/templates/web/apache2/basedir.stpl index 37c4a4b39..d978d4c43 100644 --- a/install/ubuntu/15.10/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/15.10/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/15.10/templates/web/apache2/basedir.tpl b/install/ubuntu/15.10/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/15.10/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/15.10/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/15.10/templates/web/apache2/default.stpl b/install/ubuntu/15.10/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/15.10/templates/web/apache2/default.stpl +++ b/install/ubuntu/15.10/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/15.10/templates/web/apache2/default.tpl b/install/ubuntu/15.10/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/15.10/templates/web/apache2/default.tpl +++ b/install/ubuntu/15.10/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/15.10/templates/web/apache2/hosting.stpl b/install/ubuntu/15.10/templates/web/apache2/hosting.stpl index dee0eda9c..8892072b1 100644 --- a/install/ubuntu/15.10/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/15.10/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/15.10/templates/web/apache2/hosting.tpl b/install/ubuntu/15.10/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/15.10/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/15.10/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/15.10/templates/web/apache2/phpcgi.stpl b/install/ubuntu/15.10/templates/web/apache2/phpcgi.stpl index 6cd15df00..731355bc1 100644 --- a/install/ubuntu/15.10/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/15.10/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/15.10/templates/web/apache2/phpcgi.tpl b/install/ubuntu/15.10/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/15.10/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/15.10/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/15.10/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/15.10/templates/web/apache2/phpfcgid.stpl index 9c0ca5027..156c8a918 100644 --- a/install/ubuntu/15.10/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/15.10/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/15.10/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/15.10/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/15.10/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/15.10/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/15.10/templates/web/nginx/caching.stpl b/install/ubuntu/15.10/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/15.10/templates/web/nginx/caching.stpl +++ b/install/ubuntu/15.10/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/15.10/templates/web/nginx/default.stpl b/install/ubuntu/15.10/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/15.10/templates/web/nginx/default.stpl +++ b/install/ubuntu/15.10/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/15.10/templates/web/nginx/hosting.stpl b/install/ubuntu/15.10/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/15.10/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/15.10/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/15.10/templates/web/nginx/http2.stpl b/install/ubuntu/15.10/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/15.10/templates/web/nginx/http2.stpl +++ b/install/ubuntu/15.10/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/15.10/templates/web/nginx/http2.tpl b/install/ubuntu/15.10/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/15.10/templates/web/nginx/http2.tpl +++ b/install/ubuntu/15.10/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/15.10/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/15.10/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/15.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/15.10/templates/web/php-fpm/default.tpl b/install/ubuntu/15.10/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/15.10/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/15.10/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/15.10/templates/web/php-fpm/socket.tpl b/install/ubuntu/15.10/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/15.10/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/15.10/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/15.10/templates/web/skel/public_html/index.html b/install/ubuntu/15.10/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/15.10/templates/web/skel/public_html/index.html +++ b/install/ubuntu/15.10/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/15.10/templates/web/skel/public_shtml/index.html b/install/ubuntu/15.10/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/15.10/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/15.10/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/16.04/dovecot/dovecot.conf b/install/ubuntu/16.04/dovecot/dovecot.conf index 163460bab..311a33517 100644 --- a/install/ubuntu/16.04/dovecot/dovecot.conf +++ b/install/ubuntu/16.04/dovecot/dovecot.conf @@ -3,7 +3,7 @@ listen = *, :: base_dir = /var/run/dovecot/ !include conf.d/*.conf -namespace inbox { +namespace { type = private separator = / prefix = diff --git a/install/ubuntu/16.04/nginx/nginx.conf b/install/ubuntu/16.04/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/16.04/nginx/nginx.conf +++ b/install/ubuntu/16.04/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/16.04/nginx/phpmyadmin.inc b/install/ubuntu/16.04/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/16.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/16.04/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/16.04/nginx/phppgadmin.inc b/install/ubuntu/16.04/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/16.04/nginx/phppgadmin.inc +++ b/install/ubuntu/16.04/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/16.04/nginx/webmail.inc b/install/ubuntu/16.04/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/16.04/nginx/webmail.inc +++ b/install/ubuntu/16.04/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/16.04/pma/apache.conf b/install/ubuntu/16.04/pma/apache.conf index 81c1743a3..4da6ce849 100644 --- a/install/ubuntu/16.04/pma/apache.conf +++ b/install/ubuntu/16.04/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext:/usr/share/javascript/ diff --git a/install/ubuntu/16.04/pma/config.inc.php b/install/ubuntu/16.04/pma/config.inc.php index fb131d65f..d8a903e40 100644 --- a/install/ubuntu/16.04/pma/config.inc.php +++ b/install/ubuntu/16.04/pma/config.inc.php @@ -139,12 +139,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/16.04/templates/web/apache2/basedir.stpl b/install/ubuntu/16.04/templates/web/apache2/basedir.stpl index 37c4a4b39..d978d4c43 100644 --- a/install/ubuntu/16.04/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/16.04/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/16.04/templates/web/apache2/basedir.tpl b/install/ubuntu/16.04/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/16.04/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/16.04/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/16.04/templates/web/apache2/default.stpl b/install/ubuntu/16.04/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/16.04/templates/web/apache2/default.stpl +++ b/install/ubuntu/16.04/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/16.04/templates/web/apache2/default.tpl b/install/ubuntu/16.04/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/16.04/templates/web/apache2/default.tpl +++ b/install/ubuntu/16.04/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/16.04/templates/web/apache2/hosting.stpl b/install/ubuntu/16.04/templates/web/apache2/hosting.stpl index dee0eda9c..8892072b1 100644 --- a/install/ubuntu/16.04/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/16.04/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/16.04/templates/web/apache2/hosting.tpl b/install/ubuntu/16.04/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/16.04/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/16.04/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/16.04/templates/web/apache2/phpcgi.stpl b/install/ubuntu/16.04/templates/web/apache2/phpcgi.stpl index 6cd15df00..731355bc1 100644 --- a/install/ubuntu/16.04/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/16.04/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/16.04/templates/web/apache2/phpcgi.tpl b/install/ubuntu/16.04/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/16.04/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/16.04/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/16.04/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/16.04/templates/web/apache2/phpfcgid.stpl index 9c0ca5027..156c8a918 100644 --- a/install/ubuntu/16.04/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/16.04/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/16.04/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/16.04/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/16.04/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/16.04/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/16.04/templates/web/nginx/caching.stpl b/install/ubuntu/16.04/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/16.04/templates/web/nginx/caching.stpl +++ b/install/ubuntu/16.04/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/16.04/templates/web/nginx/default.stpl b/install/ubuntu/16.04/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/16.04/templates/web/nginx/default.stpl +++ b/install/ubuntu/16.04/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/16.04/templates/web/nginx/hosting.stpl b/install/ubuntu/16.04/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/16.04/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/16.04/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/16.04/templates/web/nginx/http2.stpl b/install/ubuntu/16.04/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/16.04/templates/web/nginx/http2.stpl +++ b/install/ubuntu/16.04/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/16.04/templates/web/nginx/http2.tpl b/install/ubuntu/16.04/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/16.04/templates/web/nginx/http2.tpl +++ b/install/ubuntu/16.04/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/16.04/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/invoiceninja.stpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/invoiceninja.stpl deleted file mode 100644 index 086e6a8e8..000000000 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/invoiceninja.stpl +++ /dev/null @@ -1,64 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/invoiceninja.tpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/invoiceninja.tpl deleted file mode 100644 index fd06523a9..000000000 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/invoiceninja.tpl +++ /dev/null @@ -1,59 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/mautic.stpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/mautic.stpl deleted file mode 100644 index a88e9b58f..000000000 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/mautic.stpl +++ /dev/null @@ -1,48 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/mautic.tpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/mautic.tpl deleted file mode 100644 index 177d48757..000000000 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/mautic.tpl +++ /dev/null @@ -1,44 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/16.04/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/16.04/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/16.04/templates/web/php-fpm/default.tpl b/install/ubuntu/16.04/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/16.04/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/16.04/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/16.04/templates/web/php-fpm/socket.tpl b/install/ubuntu/16.04/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/16.04/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/16.04/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/16.04/templates/web/skel/public_html/index.html b/install/ubuntu/16.04/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/16.04/templates/web/skel/public_html/index.html +++ b/install/ubuntu/16.04/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/16.04/templates/web/skel/public_shtml/index.html b/install/ubuntu/16.04/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/16.04/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/16.04/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/16.10/nginx/nginx.conf b/install/ubuntu/16.10/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/16.10/nginx/nginx.conf +++ b/install/ubuntu/16.10/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/16.10/nginx/phpmyadmin.inc b/install/ubuntu/16.10/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/16.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/16.10/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/16.10/nginx/phppgadmin.inc b/install/ubuntu/16.10/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/16.10/nginx/phppgadmin.inc +++ b/install/ubuntu/16.10/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/16.10/nginx/webmail.inc b/install/ubuntu/16.10/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/16.10/nginx/webmail.inc +++ b/install/ubuntu/16.10/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/16.10/pma/apache.conf b/install/ubuntu/16.10/pma/apache.conf index 81c1743a3..4da6ce849 100644 --- a/install/ubuntu/16.10/pma/apache.conf +++ b/install/ubuntu/16.10/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext:/usr/share/javascript/ diff --git a/install/ubuntu/16.10/pma/config.inc.php b/install/ubuntu/16.10/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/16.10/pma/config.inc.php +++ b/install/ubuntu/16.10/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/16.10/templates/web/apache2/basedir.stpl b/install/ubuntu/16.10/templates/web/apache2/basedir.stpl index 37c4a4b39..d978d4c43 100644 --- a/install/ubuntu/16.10/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/16.10/templates/web/apache2/basedir.stpl @@ -15,9 +15,8 @@ AllowOverride All SSLRequireSSL Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/16.10/templates/web/apache2/basedir.tpl b/install/ubuntu/16.10/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/16.10/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/16.10/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/16.10/templates/web/apache2/default.stpl b/install/ubuntu/16.10/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/16.10/templates/web/apache2/default.stpl +++ b/install/ubuntu/16.10/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/16.10/templates/web/apache2/default.tpl b/install/ubuntu/16.10/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/16.10/templates/web/apache2/default.tpl +++ b/install/ubuntu/16.10/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/16.10/templates/web/apache2/hosting.stpl b/install/ubuntu/16.10/templates/web/apache2/hosting.stpl index dee0eda9c..8892072b1 100644 --- a/install/ubuntu/16.10/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/16.10/templates/web/apache2/hosting.stpl @@ -22,9 +22,8 @@ php_admin_flag mysql.allow_persistent off php_admin_flag safe_mode off php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube + php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/16.10/templates/web/apache2/hosting.tpl b/install/ubuntu/16.10/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/16.10/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/16.10/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/16.10/templates/web/apache2/phpcgi.stpl b/install/ubuntu/16.10/templates/web/apache2/phpcgi.stpl index 6cd15df00..731355bc1 100644 --- a/install/ubuntu/16.10/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/16.10/templates/web/apache2/phpcgi.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/16.10/templates/web/apache2/phpcgi.tpl b/install/ubuntu/16.10/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/16.10/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/16.10/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/16.10/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/16.10/templates/web/apache2/phpfcgid.stpl index 9c0ca5027..156c8a918 100644 --- a/install/ubuntu/16.10/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/16.10/templates/web/apache2/phpfcgid.stpl @@ -15,9 +15,8 @@ SSLRequireSSL AllowOverride All Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp + php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/16.10/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/16.10/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/16.10/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/16.10/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/16.10/templates/web/nginx/caching.stpl b/install/ubuntu/16.10/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/16.10/templates/web/nginx/caching.stpl +++ b/install/ubuntu/16.10/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/16.10/templates/web/nginx/default.stpl b/install/ubuntu/16.10/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/16.10/templates/web/nginx/default.stpl +++ b/install/ubuntu/16.10/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/16.10/templates/web/nginx/hosting.stpl b/install/ubuntu/16.10/templates/web/nginx/hosting.stpl index 62620789a..d778d6333 100755 --- a/install/ubuntu/16.10/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/16.10/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; @@ -30,7 +31,7 @@ server { location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} - disable_symlinks if_not_owner from=%sdocroot%; + disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; } diff --git a/install/ubuntu/16.10/templates/web/nginx/http2.stpl b/install/ubuntu/16.10/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/16.10/templates/web/nginx/http2.stpl +++ b/install/ubuntu/16.10/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/16.10/templates/web/nginx/http2.tpl b/install/ubuntu/16.10/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/16.10/templates/web/nginx/http2.tpl +++ b/install/ubuntu/16.10/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/16.10/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/sendy.stpl index e7f3dcc6b..0b3510004 100644 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/sendy.stpl +++ b/install/ubuntu/16.10/templates/web/nginx/php-fpm/sendy.stpl @@ -3,7 +3,7 @@ server { server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 0d9793aeb..0d933b306 100644 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,7 +1,7 @@ server { listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; - root %sdocroot%; + root %docroot%; index index.php index.html index.htm; access_log /var/log/nginx/domains/%domain%.log combined; access_log /var/log/nginx/domains/%domain%.bytes bytes; diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl deleted file mode 100644 index f33ed5070..000000000 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index-https.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl b/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl deleted file mode 100644 index c0a5239e0..000000000 --- a/install/ubuntu/16.10/templates/web/nginx/php-fpm/wordpress2_wp_super_cache.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - set $cache_uri $request_uri; - - if ($request_method = POST) { - set $cache_uri 'null cache'; - } - - if ($query_string != "") { - set $cache_uri 'null cache'; - } - - if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php - |wp-.*.php|/feed/|index.php|wp-comments-popup.php - |wp-links-opml.php|wp-locations.php |sitemap(_index)?.xml - |[a-z0-9_-]+-sitemap([0-9]+)?.xml)") { - set $cache_uri 'null cache'; - } - - if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+ - |wp-postpass|wordpress_logged_in|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_") { - set $cache_uri 'null cache'; - } - - location / { - try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/16.10/templates/web/php-fpm/default.tpl b/install/ubuntu/16.10/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/16.10/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/16.10/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/16.10/templates/web/php-fpm/socket.tpl b/install/ubuntu/16.10/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/16.10/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/16.10/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/16.10/templates/web/skel/public_html/index.html b/install/ubuntu/16.10/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/16.10/templates/web/skel/public_html/index.html +++ b/install/ubuntu/16.10/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/16.10/templates/web/skel/public_shtml/index.html b/install/ubuntu/16.10/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/16.10/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/16.10/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/17.04/nginx/nginx.conf b/install/ubuntu/17.04/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/17.04/nginx/nginx.conf +++ b/install/ubuntu/17.04/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/17.04/nginx/phpmyadmin.inc b/install/ubuntu/17.04/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/17.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/17.04/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/17.04/nginx/phppgadmin.inc b/install/ubuntu/17.04/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/17.04/nginx/phppgadmin.inc +++ b/install/ubuntu/17.04/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/17.04/nginx/webmail.inc b/install/ubuntu/17.04/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/17.04/nginx/webmail.inc +++ b/install/ubuntu/17.04/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/17.04/pma/apache.conf b/install/ubuntu/17.04/pma/apache.conf index 81c1743a3..4da6ce849 100644 --- a/install/ubuntu/17.04/pma/apache.conf +++ b/install/ubuntu/17.04/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext:/usr/share/javascript/ diff --git a/install/ubuntu/17.04/pma/config.inc.php b/install/ubuntu/17.04/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/17.04/pma/config.inc.php +++ b/install/ubuntu/17.04/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/17.04/templates/web/apache2/basedir.stpl b/install/ubuntu/17.04/templates/web/apache2/basedir.stpl index 04c39fcf6..d978d4c43 100644 --- a/install/ubuntu/17.04/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/17.04/templates/web/apache2/basedir.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/17.04/templates/web/apache2/basedir.tpl b/install/ubuntu/17.04/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/17.04/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/17.04/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/17.04/templates/web/apache2/default.stpl b/install/ubuntu/17.04/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/17.04/templates/web/apache2/default.stpl +++ b/install/ubuntu/17.04/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/17.04/templates/web/apache2/default.tpl b/install/ubuntu/17.04/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/17.04/templates/web/apache2/default.tpl +++ b/install/ubuntu/17.04/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/17.04/templates/web/apache2/hosting.stpl b/install/ubuntu/17.04/templates/web/apache2/hosting.stpl index 6d99c97c9..8892072b1 100644 --- a/install/ubuntu/17.04/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/17.04/templates/web/apache2/hosting.stpl @@ -24,7 +24,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/17.04/templates/web/apache2/hosting.tpl b/install/ubuntu/17.04/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/17.04/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/17.04/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/17.04/templates/web/apache2/phpcgi.stpl b/install/ubuntu/17.04/templates/web/apache2/phpcgi.stpl index b7bd884ee..731355bc1 100644 --- a/install/ubuntu/17.04/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/17.04/templates/web/apache2/phpcgi.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/17.04/templates/web/apache2/phpcgi.tpl b/install/ubuntu/17.04/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/17.04/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/17.04/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/17.04/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/17.04/templates/web/apache2/phpfcgid.stpl index 37865a5ba..156c8a918 100644 --- a/install/ubuntu/17.04/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/17.04/templates/web/apache2/phpfcgid.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/17.04/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/17.04/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/17.04/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/17.04/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/17.04/templates/web/nginx/caching.stpl b/install/ubuntu/17.04/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/17.04/templates/web/nginx/caching.stpl +++ b/install/ubuntu/17.04/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/17.04/templates/web/nginx/default.stpl b/install/ubuntu/17.04/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/17.04/templates/web/nginx/default.stpl +++ b/install/ubuntu/17.04/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/17.04/templates/web/nginx/hosting.stpl b/install/ubuntu/17.04/templates/web/nginx/hosting.stpl index 1ef8994b6..d778d6333 100755 --- a/install/ubuntu/17.04/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/17.04/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/17.04/templates/web/nginx/http2.stpl b/install/ubuntu/17.04/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/17.04/templates/web/nginx/http2.stpl +++ b/install/ubuntu/17.04/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/17.04/templates/web/nginx/http2.tpl b/install/ubuntu/17.04/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/17.04/templates/web/nginx/http2.tpl +++ b/install/ubuntu/17.04/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/17.04/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/invoiceninja.stpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/invoiceninja.stpl deleted file mode 100644 index 086e6a8e8..000000000 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/invoiceninja.stpl +++ /dev/null @@ -1,64 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/invoiceninja.tpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/invoiceninja.tpl deleted file mode 100644 index fd06523a9..000000000 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/invoiceninja.tpl +++ /dev/null @@ -1,59 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/mautic.stpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/mautic.stpl deleted file mode 100644 index a88e9b58f..000000000 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/mautic.stpl +++ /dev/null @@ -1,48 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/17.04/templates/web/nginx/php-fpm/mautic.tpl b/install/ubuntu/17.04/templates/web/nginx/php-fpm/mautic.tpl deleted file mode 100644 index 177d48757..000000000 --- a/install/ubuntu/17.04/templates/web/nginx/php-fpm/mautic.tpl +++ /dev/null @@ -1,44 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/17.04/templates/web/php-fpm/default.tpl b/install/ubuntu/17.04/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/17.04/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/17.04/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/17.04/templates/web/php-fpm/socket.tpl b/install/ubuntu/17.04/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/17.04/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/17.04/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/17.04/templates/web/skel/public_html/index.html b/install/ubuntu/17.04/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/17.04/templates/web/skel/public_html/index.html +++ b/install/ubuntu/17.04/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/17.04/templates/web/skel/public_shtml/index.html b/install/ubuntu/17.04/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/17.04/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/17.04/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/17.10/nginx/nginx.conf b/install/ubuntu/17.10/nginx/nginx.conf index 6bc999f95..e7256de78 100644 --- a/install/ubuntu/17.10/nginx/nginx.conf +++ b/install/ubuntu/17.10/nginx/nginx.conf @@ -50,7 +50,6 @@ http { # Compression gzip on; - gzip_vary on; gzip_comp_level 9; gzip_min_length 512; gzip_buffers 8 64k; diff --git a/install/ubuntu/17.10/nginx/phpmyadmin.inc b/install/ubuntu/17.10/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/17.10/nginx/phpmyadmin.inc +++ b/install/ubuntu/17.10/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/17.10/nginx/phppgadmin.inc b/install/ubuntu/17.10/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/17.10/nginx/phppgadmin.inc +++ b/install/ubuntu/17.10/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/17.10/nginx/webmail.inc b/install/ubuntu/17.10/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/17.10/nginx/webmail.inc +++ b/install/ubuntu/17.10/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/17.10/pma/apache.conf b/install/ubuntu/17.10/pma/apache.conf index 81c1743a3..4da6ce849 100644 --- a/install/ubuntu/17.10/pma/apache.conf +++ b/install/ubuntu/17.10/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext:/usr/share/javascript/ diff --git a/install/ubuntu/17.10/pma/config.inc.php b/install/ubuntu/17.10/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/17.10/pma/config.inc.php +++ b/install/ubuntu/17.10/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/17.10/templates/web/apache2/basedir.stpl b/install/ubuntu/17.10/templates/web/apache2/basedir.stpl index 04c39fcf6..d978d4c43 100644 --- a/install/ubuntu/17.10/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/17.10/templates/web/apache2/basedir.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/17.10/templates/web/apache2/basedir.tpl b/install/ubuntu/17.10/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/17.10/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/17.10/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/17.10/templates/web/apache2/default.stpl b/install/ubuntu/17.10/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/17.10/templates/web/apache2/default.stpl +++ b/install/ubuntu/17.10/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/17.10/templates/web/apache2/default.tpl b/install/ubuntu/17.10/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/17.10/templates/web/apache2/default.tpl +++ b/install/ubuntu/17.10/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/17.10/templates/web/apache2/hosting.stpl b/install/ubuntu/17.10/templates/web/apache2/hosting.stpl index 6d99c97c9..8892072b1 100644 --- a/install/ubuntu/17.10/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/17.10/templates/web/apache2/hosting.stpl @@ -24,7 +24,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/17.10/templates/web/apache2/hosting.tpl b/install/ubuntu/17.10/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/17.10/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/17.10/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/17.10/templates/web/apache2/phpcgi.stpl b/install/ubuntu/17.10/templates/web/apache2/phpcgi.stpl index b7bd884ee..731355bc1 100644 --- a/install/ubuntu/17.10/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/17.10/templates/web/apache2/phpcgi.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/17.10/templates/web/apache2/phpcgi.tpl b/install/ubuntu/17.10/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/17.10/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/17.10/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/17.10/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/17.10/templates/web/apache2/phpfcgid.stpl index 37865a5ba..156c8a918 100644 --- a/install/ubuntu/17.10/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/17.10/templates/web/apache2/phpfcgid.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/17.10/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/17.10/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/17.10/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/17.10/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/17.10/templates/web/nginx/caching.stpl b/install/ubuntu/17.10/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/17.10/templates/web/nginx/caching.stpl +++ b/install/ubuntu/17.10/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/17.10/templates/web/nginx/default.stpl b/install/ubuntu/17.10/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/17.10/templates/web/nginx/default.stpl +++ b/install/ubuntu/17.10/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/17.10/templates/web/nginx/hosting.stpl b/install/ubuntu/17.10/templates/web/nginx/hosting.stpl index 1ef8994b6..d778d6333 100755 --- a/install/ubuntu/17.10/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/17.10/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/17.10/templates/web/nginx/http2.stpl b/install/ubuntu/17.10/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/17.10/templates/web/nginx/http2.stpl +++ b/install/ubuntu/17.10/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/17.10/templates/web/nginx/http2.tpl b/install/ubuntu/17.10/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/17.10/templates/web/nginx/http2.tpl +++ b/install/ubuntu/17.10/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal6.stpl index 9d9840006..0af7ce84a 100644 --- a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal6.stpl @@ -10,53 +10,63 @@ server { ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal7.stpl index 0d7930fae..030ea9527 100644 --- a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal7.stpl @@ -11,56 +11,62 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal8.stpl index 6fd64db6b..030ea9527 100644 --- a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal8.stpl @@ -11,62 +11,63 @@ server { ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/17.10/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/17.10/templates/web/php-fpm/default.tpl b/install/ubuntu/17.10/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/17.10/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/17.10/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/17.10/templates/web/php-fpm/socket.tpl b/install/ubuntu/17.10/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/17.10/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/17.10/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/17.10/templates/web/skel/public_html/index.html b/install/ubuntu/17.10/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/17.10/templates/web/skel/public_html/index.html +++ b/install/ubuntu/17.10/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/17.10/templates/web/skel/public_shtml/index.html b/install/ubuntu/17.10/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/17.10/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/17.10/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/18.04/dovecot/conf.d/10-mail.conf b/install/ubuntu/18.04/dovecot/conf.d/10-mail.conf index 7a20878ae..55313419e 100644 --- a/install/ubuntu/18.04/dovecot/conf.d/10-mail.conf +++ b/install/ubuntu/18.04/dovecot/conf.d/10-mail.conf @@ -2,8 +2,3 @@ mail_privileged_group = mail mail_access_groups = mail mail_location = maildir:%h/mail/%d/%n pop3_uidl_format = %08Xu%08Xv -namespace inbox { - inbox = yes -} -first_valid_uid = 1000 -mbox_write_locks = fcntl diff --git a/install/ubuntu/18.04/dovecot/conf.d/15-mailboxes.conf b/install/ubuntu/18.04/dovecot/conf.d/15-mailboxes.conf deleted file mode 100644 index 7b2bab97a..000000000 --- a/install/ubuntu/18.04/dovecot/conf.d/15-mailboxes.conf +++ /dev/null @@ -1,29 +0,0 @@ -## Mailbox definitions -## - - -# NOTE: Assumes "namespace inbox" has been defined in 10-mail.conf. -namespace inbox { - mailbox Drafts { - special_use = \Drafts - auto = subscribe - } - - mailbox Junk { - special_use = \Junk - auto = subscribe - } - - mailbox Trash { - special_use = \Trash - auto = subscribe - } - - mailbox Sent { - special_use = \Sent - auto = subscribe - } - mailbox "Sent Messages" { - special_use = \Sent - } -} diff --git a/install/ubuntu/18.04/dovecot/dovecot.conf b/install/ubuntu/18.04/dovecot/dovecot.conf index 0a8553510..311a33517 100644 --- a/install/ubuntu/18.04/dovecot/dovecot.conf +++ b/install/ubuntu/18.04/dovecot/dovecot.conf @@ -2,3 +2,23 @@ protocols = imap pop3 listen = *, :: base_dir = /var/run/dovecot/ !include conf.d/*.conf + +namespace { + type = private + separator = / + prefix = + inbox = yes + + mailbox Sent { + auto = subscribe + special_use = \Sent + } + mailbox Drafts { + auto = subscribe + special_use = \Drafts + } + mailbox Trash { + auto = subscribe + special_use = \Trash + } +} diff --git a/install/ubuntu/18.04/nginx/nginx.conf b/install/ubuntu/18.04/nginx/nginx.conf index ecf42842e..790aee495 100644 --- a/install/ubuntu/18.04/nginx/nginx.conf +++ b/install/ubuntu/18.04/nginx/nginx.conf @@ -75,9 +75,7 @@ http { set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; - set_real_ip_from 104.16.0.0/13; - set_real_ip_from 104.24.0.0/14; - #set_real_ip_from 104.16.0.0/12; + set_real_ip_from 104.16.0.0/12; set_real_ip_from 108.162.192.0/18; set_real_ip_from 131.0.72.0/22; set_real_ip_from 141.101.64.0/18; @@ -99,10 +97,10 @@ http { # SSL PCI Compliance - ssl_session_cache shared:SSL:20m; - ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; - ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; + ssl_session_cache shared:SSL:10m; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; + ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; # Error pages diff --git a/install/ubuntu/18.04/nginx/phpmyadmin.inc b/install/ubuntu/18.04/nginx/phpmyadmin.inc index cdfc93c4d..1feb85468 100644 --- a/install/ubuntu/18.04/nginx/phpmyadmin.inc +++ b/install/ubuntu/18.04/nginx/phpmyadmin.inc @@ -1,5 +1,5 @@ location /phpmyadmin { - alias /usr/share/phpmyadmin; + alias /usr/share/phpmyadmin/; location ~ /(libraries|setup) { return 404; diff --git a/install/ubuntu/18.04/nginx/phppgadmin.inc b/install/ubuntu/18.04/nginx/phppgadmin.inc index 47cfcf4e2..cd1e5806b 100644 --- a/install/ubuntu/18.04/nginx/phppgadmin.inc +++ b/install/ubuntu/18.04/nginx/phppgadmin.inc @@ -1,5 +1,5 @@ location /phppgadmin { - alias /usr/share/phppgadmin; + alias /usr/share/phppgadmin/; location ~ ^/phppgadmin/(.*\.php)$ { alias /usr/share/phppgadmin/$1; diff --git a/install/ubuntu/18.04/nginx/webmail.inc b/install/ubuntu/18.04/nginx/webmail.inc index 768c90495..ad66895bc 100644 --- a/install/ubuntu/18.04/nginx/webmail.inc +++ b/install/ubuntu/18.04/nginx/webmail.inc @@ -1,5 +1,5 @@ location /webmail { - alias /var/lib/roundcube; + alias /var/lib/roundcube/; location ~ /(config|temp|logs) { return 404; diff --git a/install/ubuntu/18.04/pma/apache.conf b/install/ubuntu/18.04/pma/apache.conf index 81c1743a3..4da6ce849 100644 --- a/install/ubuntu/18.04/pma/apache.conf +++ b/install/ubuntu/18.04/pma/apache.conf @@ -15,7 +15,6 @@ Alias /phpmyadmin /usr/share/phpmyadmin php_admin_flag allow_url_fopen Off php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext:/usr/share/javascript/ diff --git a/install/ubuntu/18.04/pma/config.inc.php b/install/ubuntu/18.04/pma/config.inc.php index 36093369b..a643a065b 100644 --- a/install/ubuntu/18.04/pma/config.inc.php +++ b/install/ubuntu/18.04/pma/config.inc.php @@ -137,12 +137,6 @@ if (!empty($dbname)) { $cfg['UploadDir'] = ''; $cfg['SaveDir'] = ''; -/* - * Temp dir for faster beahivour - * - */ -$cfg['TempDir'] = '/tmp'; - /* Support additional configurations */ foreach (glob('/etc/phpmyadmin/conf.d/*.php') as $filename) { diff --git a/install/ubuntu/18.04/templates/web/apache2/basedir.stpl b/install/ubuntu/18.04/templates/web/apache2/basedir.stpl index 04c39fcf6..d978d4c43 100644 --- a/install/ubuntu/18.04/templates/web/apache2/basedir.stpl +++ b/install/ubuntu/18.04/templates/web/apache2/basedir.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%"
diff --git a/install/ubuntu/18.04/templates/web/apache2/basedir.tpl b/install/ubuntu/18.04/templates/web/apache2/basedir.tpl index a9d05ee66..96c94a1bd 100644 --- a/install/ubuntu/18.04/templates/web/apache2/basedir.tpl +++ b/install/ubuntu/18.04/templates/web/apache2/basedir.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" diff --git a/install/ubuntu/18.04/templates/web/apache2/default.stpl b/install/ubuntu/18.04/templates/web/apache2/default.stpl index a5c509a9e..ec34c2799 100644 --- a/install/ubuntu/18.04/templates/web/apache2/default.stpl +++ b/install/ubuntu/18.04/templates/web/apache2/default.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/18.04/templates/web/apache2/default.tpl b/install/ubuntu/18.04/templates/web/apache2/default.tpl index e591a1cf1..3a2270156 100644 --- a/install/ubuntu/18.04/templates/web/apache2/default.tpl +++ b/install/ubuntu/18.04/templates/web/apache2/default.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/18.04/templates/web/apache2/hosting.stpl b/install/ubuntu/18.04/templates/web/apache2/hosting.stpl index 6d99c97c9..8892072b1 100644 --- a/install/ubuntu/18.04/templates/web/apache2/hosting.stpl +++ b/install/ubuntu/18.04/templates/web/apache2/hosting.stpl @@ -24,7 +24,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/18.04/templates/web/apache2/hosting.tpl b/install/ubuntu/18.04/templates/web/apache2/hosting.tpl index b7c12699d..1eb269103 100644 --- a/install/ubuntu/18.04/templates/web/apache2/hosting.tpl +++ b/install/ubuntu/18.04/templates/web/apache2/hosting.tpl @@ -23,7 +23,6 @@ php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/ubuntu/18.04/templates/web/apache2/phpcgi.stpl b/install/ubuntu/18.04/templates/web/apache2/phpcgi.stpl index b7bd884ee..731355bc1 100644 --- a/install/ubuntu/18.04/templates/web/apache2/phpcgi.stpl +++ b/install/ubuntu/18.04/templates/web/apache2/phpcgi.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/18.04/templates/web/apache2/phpcgi.tpl b/install/ubuntu/18.04/templates/web/apache2/phpcgi.tpl index 9d04361da..c6796d29c 100644 --- a/install/ubuntu/18.04/templates/web/apache2/phpcgi.tpl +++ b/install/ubuntu/18.04/templates/web/apache2/phpcgi.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp Action phpcgi-script /cgi-bin/php diff --git a/install/ubuntu/18.04/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/18.04/templates/web/apache2/phpfcgid.stpl index 37865a5ba..156c8a918 100644 --- a/install/ubuntu/18.04/templates/web/apache2/phpfcgid.stpl +++ b/install/ubuntu/18.04/templates/web/apache2/phpfcgid.stpl @@ -17,7 +17,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/18.04/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/18.04/templates/web/apache2/phpfcgid.tpl index 152e7c694..a4c012690 100644 --- a/install/ubuntu/18.04/templates/web/apache2/phpfcgid.tpl +++ b/install/ubuntu/18.04/templates/web/apache2/phpfcgid.tpl @@ -16,7 +16,6 @@ Options +Includes -Indexes +ExecCGI php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp SetHandler fcgid-script diff --git a/install/ubuntu/18.04/templates/web/nginx/caching.stpl b/install/ubuntu/18.04/templates/web/nginx/caching.stpl index e149b98b5..5e0e40641 100755 --- a/install/ubuntu/18.04/templates/web/nginx/caching.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/caching.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/18.04/templates/web/nginx/default.stpl b/install/ubuntu/18.04/templates/web/nginx/default.stpl index 0e669b3dc..fa5380606 100755 --- a/install/ubuntu/18.04/templates/web/nginx/default.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/default.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/18.04/templates/web/nginx/hosting.stpl b/install/ubuntu/18.04/templates/web/nginx/hosting.stpl index 1ef8994b6..d778d6333 100755 --- a/install/ubuntu/18.04/templates/web/nginx/hosting.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/hosting.stpl @@ -1,6 +1,7 @@ server { - listen %ip%:%proxy_ssl_port% ssl; + listen %ip%:%proxy_ssl_port%; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; diff --git a/install/ubuntu/18.04/templates/web/nginx/http2.stpl b/install/ubuntu/18.04/templates/web/nginx/http2.stpl index f225becd2..76dd2f8ec 100644 --- a/install/ubuntu/18.04/templates/web/nginx/http2.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/http2.stpl @@ -1,16 +1,17 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% http2; server_name %domain_idn% %alias_idn%; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/18.04/templates/web/nginx/http2.tpl b/install/ubuntu/18.04/templates/web/nginx/http2.tpl index 4d5c774bc..c1fec114f 100644 --- a/install/ubuntu/18.04/templates/web/nginx/http2.tpl +++ b/install/ubuntu/18.04/templates/web/nginx/http2.tpl @@ -1,14 +1,14 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; + error_log /var/log/httpd/domains/%domain%.error.log error; location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + access_log /var/log/httpd/domains/%domain%.log combined; + access_log /var/log/httpd/domains/%domain%.bytes bytes; expires max; try_files $uri @fallback; } diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/cms_made_simple.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/cms_made_simple.stpl index 003e91807..d85bcce38 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/cms_made_simple.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/cms_made_simple.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/codeigniter2.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/codeigniter2.stpl index 51f1f4085..9c24c3ea8 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/codeigniter2.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/codeigniter2.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/codeigniter3.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/codeigniter3.stpl index e8dd8bf64..d71863141 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/codeigniter3.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/codeigniter3.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/cs-cart.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/cs-cart.stpl deleted file mode 100644 index 9348a2690..000000000 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/cs-cart.stpl +++ /dev/null @@ -1,227 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - ############################################################################ - - # Default encoding - charset utf-8; - - ############################################################################ - - # Compression - gzip on; - gzip_disable "msie6"; - gzip_comp_level 6; - gzip_min_length 1100; - gzip_buffers 16 8k; - gzip_proxied any; - gzip_types text/plain application/xml - application/javascript - text/css - text/js - text/xml - application/x-javascript - text/javascript - application/json - application/xml+rss; - - ############################################################################ - - # Other settings - client_max_body_size 100m; - client_body_buffer_size 128k; - client_header_timeout 3m; - client_body_timeout 3m; - send_timeout 3m; - client_header_buffer_size 1k; - large_client_header_buffers 4 16k; - - ############################################################################ - - error_page 598 = @backend; - - ############################################################################ - - location @backend { - try_files $uri $uri/ /$2$3 /$3 /index.php =404; - # The path to the PHP-FPM daemon socket - fastcgi_pass unix:/var/run/php/%domain%.sock; - # - fastcgi_index index.php; - fastcgi_read_timeout 360; - # Including the contents of fastcgi_params.conf - ################################################################################ - fastcgi_param QUERY_STRING $query_string; - fastcgi_param REQUEST_METHOD $request_method; - fastcgi_param CONTENT_TYPE $content_type; - fastcgi_param CONTENT_LENGTH $content_length; - fastcgi_param SCRIPT_NAME $fastcgi_script_name; - fastcgi_param REQUEST_URI $request_uri; - fastcgi_param DOCUMENT_URI $document_uri; - fastcgi_param DOCUMENT_ROOT $document_root; - fastcgi_param SERVER_PROTOCOL $server_protocol; - fastcgi_param HTTPS $https if_not_empty; - fastcgi_param GATEWAY_INTERFACE CGI/1.1; - fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; - fastcgi_param REMOTE_ADDR $remote_addr; - fastcgi_param REMOTE_PORT $remote_port; - fastcgi_param SERVER_ADDR $server_addr; - fastcgi_param SERVER_PORT $server_port; - fastcgi_param SERVER_NAME $server_name; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param REDIRECT_STATUS 200; - ################################################################################ - } - - ############################################################################ - - location / { - index index.php index.html index.htm; - try_files $uri $uri/ /index.php?$args; - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?api/ { - rewrite ^/(\w+/)?(\w+/)?api/(.*)$ /api.php?_d=$3&ajax_custom=1&$args last; - rewrite_log off; - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?var/database/ { - return 404; - } - - location ~ ^/(\w+/)?(\w+/)?var/backups/ { - return 404; - } - - location ~ ^/(\w+/)?(\w+/)?var/restore/ { - return 404; - } - - location ~ ^/(\w+/)?(\w+/)?var/themes_repository/ { - allow all; - location ~* \.(tpl|php.?)$ { - return 404; - } - } - - location ~ ^/(\w+/)?(\w+/)?var/ { - return 404; - location ~* /(\w+/)?(\w+/)?(.+\.(js|css|png|jpe?g|gz|yml|xml))$ { - try_files $uri $uri/ /$2$3 /$3 /index.php?$args; - allow all; - access_log off; - expires 1M; - add_header Cache-Control public; - add_header Access-Control-Allow-Origin *; - } - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?app/payments/ { - return 404; - location ~ \.php$ { - return 598; - } - } - - location ~ ^/(\w+/)?(\w+/)?app/addons/rus_exim_1c/ { - return 404; - location ~ \.php$ { - return 598; - } - } - - location ~ ^/(\w+/)?(\w+/)?app/ { - return 404; - } - - ############################################################################ - - location ~ ^/(favicon|apple-touch-icon-|homescreen-|firefox-icon-|coast-icon-|mstile-).*\.(png|ico)$ { - access_log off; - try_files $uri =404; - expires max; - add_header Access-Control-Allow-Origin *; - add_header Cache-Control public; - } - - location ~* /(\w+/)?(\w+/)?(.+\.(jpe?g|jpg|ico|gif|png|css|js|pdf|txt|tar|woff|svg|ttf|eot|csv|zip|xml|yml))$ { - access_log off; - try_files $uri $uri/ /$2$3 /$3 /index.php?$args; - expires max; - add_header Access-Control-Allow-Origin *; - add_header Cache-Control public; - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?design/ { - allow all; - location ~* \.(tpl|php.?)$ { - return 404; - } - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?images/ { - allow all; - location ~* \.(php.?)$ { - return 404; - } - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?js/ { - allow all; - location ~* \.(php.?)$ { - return 404; - } - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?init.php { - return 404; - } - - location ~* \.(tpl.?)$ { - return 404; - } - - location ~ /\.(ht|git) { - return 404; - } - - location ~* \.php$ { - return 598 ; - } - - ################################################################################ - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/cs-cart.tpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/cs-cart.tpl deleted file mode 100644 index 2fef4068c..000000000 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/cs-cart.tpl +++ /dev/null @@ -1,224 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ############################################################################ - - # Default encoding - charset utf-8; - - ############################################################################ - - # Compression - gzip on; - gzip_disable "msie6"; - gzip_comp_level 6; - gzip_min_length 1100; - gzip_buffers 16 8k; - gzip_proxied any; - gzip_types text/plain application/xml - application/javascript - text/css - text/js - text/xml - application/x-javascript - text/javascript - application/json - application/xml+rss; - - ############################################################################ - - # Other settings - client_max_body_size 100m; - client_body_buffer_size 128k; - client_header_timeout 3m; - client_body_timeout 3m; - send_timeout 3m; - client_header_buffer_size 1k; - large_client_header_buffers 4 16k; - - ############################################################################ - - error_page 598 = @backend; - - ############################################################################ - - location @backend { - try_files $uri $uri/ /$2$3 /$3 /index.php =404; - # The path to the PHP-FPM daemon socket - fastcgi_pass unix:/var/run/php/%domain%.sock; - # - fastcgi_index index.php; - fastcgi_read_timeout 360; - # Including the contents of fastcgi_params.conf - ################################################################################ - fastcgi_param QUERY_STRING $query_string; - fastcgi_param REQUEST_METHOD $request_method; - fastcgi_param CONTENT_TYPE $content_type; - fastcgi_param CONTENT_LENGTH $content_length; - fastcgi_param SCRIPT_NAME $fastcgi_script_name; - fastcgi_param REQUEST_URI $request_uri; - fastcgi_param DOCUMENT_URI $document_uri; - fastcgi_param DOCUMENT_ROOT $document_root; - fastcgi_param SERVER_PROTOCOL $server_protocol; - fastcgi_param HTTPS $https if_not_empty; - fastcgi_param GATEWAY_INTERFACE CGI/1.1; - fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; - fastcgi_param REMOTE_ADDR $remote_addr; - fastcgi_param REMOTE_PORT $remote_port; - fastcgi_param SERVER_ADDR $server_addr; - fastcgi_param SERVER_PORT $server_port; - fastcgi_param SERVER_NAME $server_name; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param REDIRECT_STATUS 200; - ################################################################################ - } - - ############################################################################ - - location / { - index index.php index.html index.htm; - try_files $uri $uri/ /index.php?$args; - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?api/ { - rewrite ^/(\w+/)?(\w+/)?api/(.*)$ /api.php?_d=$3&ajax_custom=1&$args last; - rewrite_log off; - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?var/database/ { - return 404; - } - - location ~ ^/(\w+/)?(\w+/)?var/backups/ { - return 404; - } - - location ~ ^/(\w+/)?(\w+/)?var/restore/ { - return 404; - } - - location ~ ^/(\w+/)?(\w+/)?var/themes_repository/ { - allow all; - location ~* \.(tpl|php.?)$ { - return 404; - } - } - - location ~ ^/(\w+/)?(\w+/)?var/ { - return 404; - location ~* /(\w+/)?(\w+/)?(.+\.(js|css|png|jpe?g|gz|yml|xml))$ { - try_files $uri $uri/ /$2$3 /$3 /index.php?$args; - allow all; - access_log off; - expires 1M; - add_header Cache-Control public; - add_header Access-Control-Allow-Origin *; - } - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?app/payments/ { - return 404; - location ~ \.php$ { - return 598; - } - } - - location ~ ^/(\w+/)?(\w+/)?app/addons/rus_exim_1c/ { - return 404; - location ~ \.php$ { - return 598; - } - } - - location ~ ^/(\w+/)?(\w+/)?app/ { - return 404; - } - - ############################################################################ - - location ~ ^/(favicon|apple-touch-icon-|homescreen-|firefox-icon-|coast-icon-|mstile-).*\.(png|ico)$ { - access_log off; - try_files $uri =404; - expires max; - add_header Access-Control-Allow-Origin *; - add_header Cache-Control public; - } - - location ~* /(\w+/)?(\w+/)?(.+\.(jpe?g|jpg|ico|gif|png|css|js|pdf|txt|tar|woff|svg|ttf|eot|csv|zip|xml|yml))$ { - access_log off; - try_files $uri $uri/ /$2$3 /$3 /index.php?$args; - expires max; - add_header Access-Control-Allow-Origin *; - add_header Cache-Control public; - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?design/ { - allow all; - location ~* \.(tpl|php.?)$ { - return 404; - } - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?images/ { - allow all; - location ~* \.(php.?)$ { - return 404; - } - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?js/ { - allow all; - location ~* \.(php.?)$ { - return 404; - } - } - - ############################################################################ - - location ~ ^/(\w+/)?(\w+/)?init.php { - return 404; - } - - location ~* \.(tpl.?)$ { - return 404; - } - - location ~ /\.(ht|git) { - return 404; - } - - location ~* \.php$ { - return 598 ; - } - - ################################################################################ - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/datalife_engine.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/datalife_engine.stpl index 96495ee85..4f0b9ec7b 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/datalife_engine.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/datalife_engine.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/default.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/default.stpl index 38de83d29..5cb553119 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/default.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/default.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/dokuwiki.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/dokuwiki.stpl index c9387bfb4..f85032bae 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/dokuwiki.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/dokuwiki.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal6.stpl index 6b20ba9d9..0af7ce84a 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal6.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal6.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,55 +7,66 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - + + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + + location / { + try_files $uri @rewrite; + } + location @rewrite { rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + } + + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal6.tpl index 0ae7568bb..d1096bff5 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal6.tpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal6.tpl @@ -7,52 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri @rewrite; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location @rewrite { + rewrite ^/(.*)$ /index.php?q=$1; + } - try_files $uri @rewrite; + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ ^/sites/.*/files/imagecache/ { + try_files $uri @rewrite; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal7.stpl index 041ebba05..030ea9527 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal7.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal7.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,59 +7,66 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; } location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } + try_files $uri /index.php?$query_string; + } - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ \..*/.*\.php$ { - return 403; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~ ^/sites/.*/private/ { - return 403; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal7.tpl index 6b41f319c..c97297957 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal7.tpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal7.tpl @@ -7,56 +7,62 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - try_files $uri /index.php?$query_string; + } - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; } error_page 403 /error/404.html; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal8.stpl index 231d9441b..030ea9527 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal8.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal8.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,65 +7,67 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; + location = /favicon.ico { + log_not_found off; + access_log off; } - + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; + } - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } error_page 403 /error/404.html; error_page 404 /error/404.html; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal8.tpl index 452aa9e6f..c97297957 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal8.tpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/drupal8.tpl @@ -7,63 +7,64 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location ~* \.(txt|log)$ { + allow 192.168.0.0/16; + deny all; + } + + location ~ \..*/.*\.php$ { + return 403; + } + + location ~ ^/sites/.*/private/ { + return 403; + } + + location ~ ^/sites/[^/]+/files/.*\.php$ { + deny all; + } + location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } + } - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } + location ~ /vendor/.*\.php$ { + deny all; + return 404; } + location ~ ^/sites/.*/files/styles/ { + try_files $uri @rewrite; + } + + location ~ ^(/[a-z\-]+)?/system/files/ { + try_files $uri /index.php?$query_string; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + try_files $uri @rewrite; + expires max; + log_not_found off; + } + + location ~ '\.php$|^/update.php' { + fastcgi_split_path_info ^(.+?\.php)(|/.*)$; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass %backend_lsnr%; + include /etc/nginx/fastcgi_params; + } + error_page 403 /error/404.html; error_page 404 /error/404.html; error_page 500 502 503 504 /error/50x.html; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/invoiceninja.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/invoiceninja.stpl deleted file mode 100644 index 086e6a8e8..000000000 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/invoiceninja.stpl +++ /dev/null @@ -1,64 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/invoiceninja.tpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/invoiceninja.tpl deleted file mode 100644 index fd06523a9..000000000 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/invoiceninja.tpl +++ /dev/null @@ -1,59 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /favicon.ico { access_log off; log_not_found off; } - location = /robots.txt { access_log off; log_not_found off; } - - sendfile off; - - location ~ \.php$ { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - - fastcgi_intercept_errors off; - fastcgi_buffer_size 16k; - fastcgi_buffers 4 16k; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/joomla.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/joomla.stpl index 886b586ec..704405f37 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/joomla.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/joomla.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/laravel.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/laravel.stpl index 8e6e87744..477f6f01b 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/laravel.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/laravel.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%/public; index index.php index.html index.htm; @@ -8,6 +8,7 @@ server { error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/magento.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/magento.stpl index 5d05ea725..fdab43aae 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/magento.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/magento.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%/pub; @@ -9,6 +9,7 @@ server { error_page 404 403 = /errors/404.php; add_header "X-UA-Compatible" "IE=Edge"; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/mautic.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/mautic.stpl deleted file mode 100644 index a88e9b58f..000000000 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/mautic.stpl +++ /dev/null @@ -1,48 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/mautic.tpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/mautic.tpl deleted file mode 100644 index 177d48757..000000000 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/mautic.tpl +++ /dev/null @@ -1,44 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri /index.php?$query_string; - } - - location ~ '\.php$' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/modx.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/modx.stpl index 23ce8eb88..f410ab77c 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/modx.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/modx.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; # if you need to rewrite www to non-www uncomment bellow diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/moodle.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/moodle.stpl index 10629c65f..f15a68c57 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/moodle.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/moodle.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/no-php.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/no-php.stpl index 7b3aff96d..bc8b53a37 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/no-php.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/no-php.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/odoo.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/odoo.stpl index 223eb97a2..d6697d7a9 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/odoo.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/odoo.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/opencart.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/opencart.stpl index 5b6e55e8f..908b9aeb8 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/opencart.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/opencart.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/owncloud.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/owncloud.stpl index b43fdc755..891566b93 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/owncloud.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/owncloud.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/piwik.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/piwik.stpl index 0a4a412f6..78c1bb784 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/piwik.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/piwik.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/pyrocms.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/pyrocms.stpl index c9f918541..5ffc9ed5c 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/pyrocms.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/pyrocms.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%/public; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/vbulletin5.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/vbulletin5.stpl deleted file mode 100644 index eebb3e428..000000000 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/vbulletin5.stpl +++ /dev/null @@ -1,105 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - # legacy css being handled separate for performance - location = /css\.php { - rewrite ^ /core/css.php break; - } - - # make install available from presentation - location ^~ /install { - rewrite ^/install/ /core/install/ break; - } - - # any request to not existing item gets redirected through routestring - location / { - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - } - - # make admincp available from presentation - location ^~ /admincp { - if (!-f $request_filename) { - rewrite ^/admincp/(.*)$ /index.php?routestring=admincp/$1 last; - } - } - - # process any php scripts, not found gets redirected through routestring - location ~ \.php$ { - # handles legacy scripts - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 break; - } - - fastcgi_split_path_info ^(.+\.php)(.*)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_param QUERY_STRING $query_string; - fastcgi_param REQUEST_METHOD $request_method; - fastcgi_param CONTENT_TYPE $content_type; - fastcgi_param CONTENT_LENGTH $content_length; - fastcgi_intercept_errors on; - fastcgi_ignore_client_abort off; - fastcgi_connect_timeout 60; - fastcgi_send_timeout 180; - fastcgi_read_timeout 180; - fastcgi_buffers 256 16k; - fastcgi_buffer_size 32k; - fastcgi_temp_file_write_size 256k; - - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain_idn%.conf*; -} diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/vbulletin5.tpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/vbulletin5.tpl deleted file mode 100644 index 2c5c99880..000000000 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/vbulletin5.tpl +++ /dev/null @@ -1,100 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - # legacy css being handled separate for performance - location = /css\.php { - rewrite ^ /core/css.php break; - } - - # make install available from presentation - location ^~ /install { - rewrite ^/install/ /core/install/ break; - } - - # any request to not existing item gets redirected through routestring - location / { - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - } - - # make admincp available from presentation - location ^~ /admincp { - if (!-f $request_filename) { - rewrite ^/admincp/(.*)$ /index.php?routestring=admincp/$1 last; - } - } - - # process any php scripts, not found gets redirected through routestring - location ~ \.php$ { - # handles legacy scripts - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 break; - } - - fastcgi_split_path_info ^(.+\.php)(.*)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_param QUERY_STRING $query_string; - fastcgi_param REQUEST_METHOD $request_method; - fastcgi_param CONTENT_TYPE $content_type; - fastcgi_param CONTENT_LENGTH $content_length; - fastcgi_intercept_errors on; - fastcgi_ignore_client_abort off; - fastcgi_connect_timeout 60; - fastcgi_send_timeout 180; - fastcgi_read_timeout 180; - fastcgi_buffers 256 16k; - fastcgi_buffer_size 32k; - fastcgi_temp_file_write_size 256k; - - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain_idn%.conf*; -} diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress.stpl index 38de83d29..5cb553119 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress2.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress2.stpl index 39cce361a..e0aeb524a 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress2.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress2.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %sdocroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl index 264ca01ae..0d933b306 100644 --- a/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ b/install/ubuntu/18.04/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%web_ssl_port% ssl; + listen %ip%:%web_ssl_port%; server_name %domain_idn% %alias_idn%; root %docroot%; index index.php index.html index.htm; @@ -7,6 +7,7 @@ server { access_log /var/log/nginx/domains/%domain%.bytes bytes; error_log /var/log/nginx/domains/%domain%.error.log error; + ssl on; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; diff --git a/install/ubuntu/18.04/templates/web/php-fpm/default.tpl b/install/ubuntu/18.04/templates/web/php-fpm/default.tpl index 816fa21f9..209e1e437 100644 --- a/install/ubuntu/18.04/templates/web/php-fpm/default.tpl +++ b/install/ubuntu/18.04/templates/web/php-fpm/default.tpl @@ -11,7 +11,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/18.04/templates/web/php-fpm/socket.tpl b/install/ubuntu/18.04/templates/web/php-fpm/socket.tpl index e427045ce..a0151084f 100644 --- a/install/ubuntu/18.04/templates/web/php-fpm/socket.tpl +++ b/install/ubuntu/18.04/templates/web/php-fpm/socket.tpl @@ -14,7 +14,6 @@ pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status -php_admin_value[sys_temp_dir] = /home/%user%/tmp php_admin_value[upload_tmp_dir] = /home/%user%/tmp php_admin_value[session.save_path] = /home/%user%/tmp diff --git a/install/ubuntu/18.04/templates/web/skel/public_html/index.html b/install/ubuntu/18.04/templates/web/skel/public_html/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/18.04/templates/web/skel/public_html/index.html +++ b/install/ubuntu/18.04/templates/web/skel/public_html/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/18.04/templates/web/skel/public_shtml/index.html b/install/ubuntu/18.04/templates/web/skel/public_shtml/index.html index 1144ade96..4f5bb7244 100755 --- a/install/ubuntu/18.04/templates/web/skel/public_shtml/index.html +++ b/install/ubuntu/18.04/templates/web/skel/public_shtml/index.html @@ -18,7 +18,7 @@

%domain%

diff --git a/install/ubuntu/18.10/apache2/apache2.conf b/install/ubuntu/18.10/apache2/apache2.conf deleted file mode 100644 index 2756132ae..000000000 --- a/install/ubuntu/18.10/apache2/apache2.conf +++ /dev/null @@ -1,94 +0,0 @@ -# It is split into several files forming the configuration hierarchy outlined -# below, all located in the /etc/apache2/ directory: -# -# /etc/apache2/ -# |-- apache2.conf -# | `-- ports.conf -# |-- mods-enabled -# | |-- *.load -# | `-- *.conf -# |-- conf.d -# | `-- * - -# Global configuration -PidFile ${APACHE_PID_FILE} -Timeout 30 -KeepAlive Off -MaxKeepAliveRequests 100 -KeepAliveTimeout 10 - - - StartServers 8 - MinSpareServers 5 - MaxSpareServers 20 - ServerLimit 256 - MaxClients 200 - MaxRequestsPerChild 4000 - - - - StartServers 2 - MinSpareThreads 25 - MaxSpareThreads 75 - ThreadLimit 64 - ThreadsPerChild 25 - MaxClients 200 - MaxRequestsPerChild 4000 - - - - StartServers 2 - MinSpareThreads 25 - MaxSpareThreads 75 - ThreadLimit 64 - ThreadsPerChild 25 - MaxClients 200 - MaxRequestsPerChild 4000 - - -# These need to be set in /etc/apache2/envvars -User ${APACHE_RUN_USER} -Group ${APACHE_RUN_GROUP} -#User www-data -#Group www-data - -AccessFileName .htaccess - - - Order allow,deny - Deny from all - Satisfy all - - -DefaultType None -HostnameLookups Off - -ErrorLog ${APACHE_LOG_DIR}/error.log -LogLevel warn - -# Include module configuration: -Include mods-enabled/*.load -Include mods-enabled/*.conf - -# Include list of ports to listen on and which to use for name based vhosts -Include ports.conf - -LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined -LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined -LogFormat "%h %l %u %t \"%r\" %>s %O" common -LogFormat "%{Referer}i -> %U" referer -LogFormat "%{User-agent}i" agent -LogFormat "%b" bytes - -Include conf.d/ - -# Include the virtual host configurations: -#Include sites-enabled/ - -ErrorDocument 403 /error/403.html -ErrorDocument 404 /error/404.html -ErrorDocument 500 /error/50x.html -ErrorDocument 501 /error/50x.html -ErrorDocument 502 /error/50x.html -ErrorDocument 503 /error/50x.html -ErrorDocument 506 /error/50x.html diff --git a/install/ubuntu/18.10/apache2/status.conf b/install/ubuntu/18.10/apache2/status.conf deleted file mode 100644 index da9d96333..000000000 --- a/install/ubuntu/18.10/apache2/status.conf +++ /dev/null @@ -1,8 +0,0 @@ -Listen 127.0.0.1:8081 - - SetHandler server-status - Order deny,allow - Deny from all - Allow from 127.0.0.1 - Allow from all - diff --git a/install/ubuntu/18.10/bind/named.conf b/install/ubuntu/18.10/bind/named.conf deleted file mode 100644 index ed6ece885..000000000 --- a/install/ubuntu/18.10/bind/named.conf +++ /dev/null @@ -1,12 +0,0 @@ -// This is the primary configuration file for the BIND DNS server named. -// -// Please read /usr/share/doc/bind9/README.Debian.gz for information on the -// structure of BIND configuration files in Debian, *BEFORE* you customize -// this configuration file. -// -// If you are just adding zones, please do that in /etc/bind/named.conf.local - -include "/etc/bind/named.conf.options"; -include "/etc/bind/named.conf.local"; -include "/etc/bind/named.conf.default-zones"; - diff --git a/install/ubuntu/18.10/clamav/clamd.conf b/install/ubuntu/18.10/clamav/clamd.conf deleted file mode 100644 index 4e04356ea..000000000 --- a/install/ubuntu/18.10/clamav/clamd.conf +++ /dev/null @@ -1,61 +0,0 @@ -#Automatically Generated by clamav-base postinst -#To reconfigure clamd run #dpkg-reconfigure clamav-base -#Please read /usr/share/doc/clamav-base/README.Debian.gz for details -LocalSocket /var/run/clamav/clamd.ctl -FixStaleSocket true -LocalSocketGroup clamav -LocalSocketMode 666 -# TemporaryDirectory is not set to its default /tmp here to make overriding -# the default with environment variables TMPDIR/TMP/TEMP possible -User clamav -# AllowSupplementaryGroups true -ScanMail true -ScanArchive true -ArchiveBlockEncrypted false -MaxDirectoryRecursion 15 -FollowDirectorySymlinks false -FollowFileSymlinks false -ReadTimeout 180 -MaxThreads 12 -MaxConnectionQueueLength 15 -LogSyslog false -LogFacility LOG_LOCAL6 -LogClean false -LogVerbose true -PidFile /var/run/clamav/clamd.pid -DatabaseDirectory /var/lib/clamav -SelfCheck 3600 -Foreground false -Debug false -ScanPE true -ScanOLE2 true -ScanHTML true -DetectBrokenExecutables false -ExitOnOOM false -LeaveTemporaryFiles false -AlgorithmicDetection true -ScanELF true -IdleTimeout 30 -PhishingSignatures true -PhishingScanURLs true -PhishingAlwaysBlockSSLMismatch false -PhishingAlwaysBlockCloak false -DetectPUA false -ScanPartialMessages false -HeuristicScanPrecedence false -StructuredDataDetection false -CommandReadTimeout 5 -SendBufTimeout 200 -MaxQueue 100 -ExtendedDetectionInfo true -OLE2BlockMacros false -StreamMaxLength 25M -LogFile /var/log/clamav/clamav.log -LogTime true -LogFileUnlock false -LogFileMaxSize 0 -Bytecode true -BytecodeSecurity TrustSigned -BytecodeTimeout 60000 -OfficialDatabaseOnly false -CrossFilesystems true diff --git a/install/ubuntu/18.10/deb_signing.key b/install/ubuntu/18.10/deb_signing.key deleted file mode 100644 index 2ad2db8bc..000000000 --- a/install/ubuntu/18.10/deb_signing.key +++ /dev/null @@ -1,30 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.12 (GNU/Linux) - -mQENBFJIGbEBCAC8SHOOFo7iDTbnC2GhNZ+uBGCh226Dn1QPoFZNFM/DNakHZ6rD -G3wzr8++eKz4fJual/VLllE2N9XDPuxbozb3LLkcyY1WzJqtIXbXhFGQ/SuIeT+x -QY90XU6t2Ckze2c+zUniAWmJ8GSyVmXOoc9JxAQ1u47wvGXLzrjWXc8u8PNRYXuf -fZplTL+dFu9P0d6lP8FGsV+r9wXvvazpRTz3+H8PKrGCYT55ZQIEdG9Jgamylto2 -oVPFXkwGML+TLw6oeCIBuz2y2vtivphW4MJ3ifQjDj7k3n+DTIxfDFs8lB6VRhhY -2nMHCrcZC6U2mhmXmr6O4s1fu6irBVx05ejPABEBAAG0IFNlcmdoZXkgUm9kaW4g -PHNraWRAdmVzdGFjcC5jb20+iQE4BBMBAgAiBQJSSBmxAhsDBgsJCAcDAgYVCAIJ -CgsEFgIDAQIeAQIXgAAKCRBCxbITCh93FPdqB/93GjV9g+wBfeZYLHQK9MDU2wBb -VloYOJJae6IvYKYQVAJayD3PbHdpxrF8s9e23vdnmb9jKu6jX6oV54EIyqP2HPiN -QYc8wcea+eSHerznBixCtoQh8mtdWGFeN71zU/ig7L5qlOVF/EmxDVZTFUeivFxh -IV6qyBnktQKktE45585yKZyyLtfGoXA54DGK69OtJFh+wdkKEMmUXocMl7wUrxW6 -Cx2CuKeEXEgvwu8mRHQi3S3T9XP456qWEn5dWyMVcP660IzEuZfSJApZusNK7zG3 -WMy0/EuX7xHNY3mcNxTOUN1LsO7iHnhHD9+iKWJo9parGkMZzc92MpjDK/g7uQEN -BFJIGbEBCAC7k5QEA9WQM7E3ceNaeLMrA9lXfuzaNCcySq7ONdVAa5PxzbSKdHvz -QFoL1VFqBTYQ038lbil1XqnoM0zvIfAI3LcpS8sq92El/vPxp6jZh2Ari9Uw7x95 -k2cZMgI67g+zQMGdjVRA155nFQRCgg000xU4F7JA6+WsuLlVUmccsDv7YWJExMtC -YPxiuz5DFu8RALnw4Ckts+dbwsrcvUHhkm9b6RAsdCKjjRpUZjLgdltjH83gUVvt -i1YmdjjsVpt95dtsaG+ad852g/Rk8EdxNMkjPF6HLA67CLADP9wYaj80yPcPtylS -ycvPtcclVeHkFBRVM8xZpQd4iD19MWI1ABEBAAGJAR8EGAECAAkFAlJIGbECGwwA -CgkQQsWyEwofdxQ7tQgAhB0FwTs7L8Qr63DHC2yAnXVxgtTAY1/36CccNXVculyR -+EkLcwahms9AKhz7eQb+Mud+5vH0GRohLp2npgO38CjVUfIP5d+Y6dsthmrkF6p8 -XdV1dVK9vWX+i/YZSw/Mded30Cq4P2Yhq9EaemMT0rtli8lz2NnkZ9dFJZk1lzJC -CZmRpbjSNWqRU4f7qyh21lYk/OC/0XE8fh8CaO23TZ+6gBionoCztwb7NyC9OArN -qYlNnbmh9iNqdblykPS3bkjf34n2xyMgnIehNrM89tk8PY4UfNPhgT1TMD9W3Svq -ynNZvLuF/FIDwDeC1qcfjGbfDn9fXO/lMIIRooQYKQ== -=J2HJ ------END PGP PUBLIC KEY BLOCK----- diff --git a/install/ubuntu/18.10/dovecot/conf.d/10-auth.conf b/install/ubuntu/18.10/dovecot/conf.d/10-auth.conf deleted file mode 100644 index dfcc83110..000000000 --- a/install/ubuntu/18.10/dovecot/conf.d/10-auth.conf +++ /dev/null @@ -1,4 +0,0 @@ -disable_plaintext_auth = no -auth_verbose = yes -auth_mechanisms = plain login -!include auth-passwdfile.conf.ext diff --git a/install/ubuntu/18.10/dovecot/conf.d/10-logging.conf b/install/ubuntu/18.10/dovecot/conf.d/10-logging.conf deleted file mode 100644 index a5f207d51..000000000 --- a/install/ubuntu/18.10/dovecot/conf.d/10-logging.conf +++ /dev/null @@ -1 +0,0 @@ -log_path = /var/log/dovecot.log diff --git a/install/ubuntu/18.10/dovecot/conf.d/10-mail.conf b/install/ubuntu/18.10/dovecot/conf.d/10-mail.conf deleted file mode 100644 index 7a20878ae..000000000 --- a/install/ubuntu/18.10/dovecot/conf.d/10-mail.conf +++ /dev/null @@ -1,9 +0,0 @@ -mail_privileged_group = mail -mail_access_groups = mail -mail_location = maildir:%h/mail/%d/%n -pop3_uidl_format = %08Xu%08Xv -namespace inbox { - inbox = yes -} -first_valid_uid = 1000 -mbox_write_locks = fcntl diff --git a/install/ubuntu/18.10/dovecot/conf.d/10-master.conf b/install/ubuntu/18.10/dovecot/conf.d/10-master.conf deleted file mode 100644 index a75a9aaa4..000000000 --- a/install/ubuntu/18.10/dovecot/conf.d/10-master.conf +++ /dev/null @@ -1,29 +0,0 @@ -service imap-login { - inet_listener imap { - } - inet_listener imaps { - } -} - -service pop3-login { - inet_listener pop3 { - } - inet_listener pop3s { - } -} - - -service imap { -} - -service pop3 { -} - -service auth { - unix_listener auth-client { - group = mail - mode = 0660 - user = dovecot - } - user = dovecot -} diff --git a/install/ubuntu/18.10/dovecot/conf.d/10-ssl.conf b/install/ubuntu/18.10/dovecot/conf.d/10-ssl.conf deleted file mode 100644 index 24cbf3e26..000000000 --- a/install/ubuntu/18.10/dovecot/conf.d/10-ssl.conf +++ /dev/null @@ -1,5 +0,0 @@ -ssl = yes -ssl_protocols = !SSLv2 !SSLv3 - -ssl_cert = = 2.1.4) : %v.%u - # Dovecot v0.99.x : %v.%u - # tpop3d : %Mf - # - # Note that Outlook 2003 seems to have problems with %v.%u format which was - # Dovecot's default, so if you're building a new server it would be a good - # idea to change this. %08Xu%08Xv should be pretty fail-safe. - # - #pop3_uidl_format = %08Xu%08Xv - - # Permanently save UIDLs sent to POP3 clients, so pop3_uidl_format changes - # won't change those UIDLs. Currently this works only with Maildir. - #pop3_save_uidl = no - - # What to do about duplicate UIDLs if they exist? - # allow: Show duplicates to clients. - # rename: Append a temporary -2, -3, etc. counter after the UIDL. - #pop3_uidl_duplicates = allow - - # POP3 logout format string: - # %i - total number of bytes read from client - # %o - total number of bytes sent to client - # %t - number of TOP commands - # %p - number of bytes sent to client as a result of TOP command - # %r - number of RETR commands - # %b - number of bytes sent to client as a result of RETR command - # %d - number of deleted messages - # %m - number of messages (before deletion) - # %s - mailbox size in bytes (before deletion) - # %u - old/new UIDL hash. may help finding out if UIDLs changed unexpectedly - #pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s - - # Maximum number of POP3 connections allowed for a user from each IP address. - # NOTE: The username is compared case-sensitively. - #mail_max_userip_connections = 10 - - # Space separated list of plugins to load (default is global mail_plugins). - #mail_plugins = $mail_plugins - - # Workarounds for various client bugs: - # outlook-no-nuls: - # Outlook and Outlook Express hang if mails contain NUL characters. - # This setting replaces them with 0x80 character. - # oe-ns-eoh: - # Outlook Express and Netscape Mail breaks if end of headers-line is - # missing. This option simply sends it if it's missing. - # The list is space-separated. - #pop3_client_workarounds = -} diff --git a/install/ubuntu/18.10/dovecot/conf.d/auth-passwdfile.conf.ext b/install/ubuntu/18.10/dovecot/conf.d/auth-passwdfile.conf.ext deleted file mode 100644 index 75e6e1152..000000000 --- a/install/ubuntu/18.10/dovecot/conf.d/auth-passwdfile.conf.ext +++ /dev/null @@ -1,9 +0,0 @@ -passdb { - driver = passwd-file - args = scheme=MD5-CRYPT username_format=%n /etc/exim4/domains/%d/passwd -} - -userdb { - driver = passwd-file - args = username_format=%n /etc/exim4/domains/%d/passwd -} diff --git a/install/ubuntu/18.10/dovecot/dovecot.conf b/install/ubuntu/18.10/dovecot/dovecot.conf deleted file mode 100644 index 0a8553510..000000000 --- a/install/ubuntu/18.10/dovecot/dovecot.conf +++ /dev/null @@ -1,4 +0,0 @@ -protocols = imap pop3 -listen = *, :: -base_dir = /var/run/dovecot/ -!include conf.d/*.conf diff --git a/install/ubuntu/18.10/exim/dnsbl.conf b/install/ubuntu/18.10/exim/dnsbl.conf deleted file mode 100644 index 5166b255e..000000000 --- a/install/ubuntu/18.10/exim/dnsbl.conf +++ /dev/null @@ -1,2 +0,0 @@ -bl.spamcop.net -zen.spamhaus.org diff --git a/install/ubuntu/18.10/exim/exim4.conf.template b/install/ubuntu/18.10/exim/exim4.conf.template deleted file mode 100644 index c904441fb..000000000 --- a/install/ubuntu/18.10/exim/exim4.conf.template +++ /dev/null @@ -1,382 +0,0 @@ -###################################################################### -# # -# Exim configuration file for Vesta Control Panel # -# # -###################################################################### - -#SPAMASSASSIN = yes -#SPAM_SCORE = 50 -#CLAMD = yes - -add_environment = <; PATH=/bin:/usr/bin -keep_environment = -disable_ipv6 = true - -domainlist local_domains = dsearch;/etc/exim4/domains/ -domainlist relay_to_domains = dsearch;/etc/exim4/domains/ -hostlist relay_from_hosts = 127.0.0.1 -hostlist whitelist = net-iplsearch;/etc/exim4/white-blocks.conf -hostlist spammers = net-iplsearch;/etc/exim4/spam-blocks.conf -no_local_from_check -untrusted_set_sender = * -acl_smtp_connect = acl_check_spammers -acl_smtp_mail = acl_check_mail -acl_smtp_rcpt = acl_check_rcpt -acl_smtp_data = acl_check_data -acl_smtp_mime = acl_check_mime - -.ifdef SPAMASSASSIN -spamd_address = 127.0.0.1 783 -.endif - -.ifdef CLAMD -av_scanner = clamd: /var/run/clamav/clamd.ctl -.endif - -tls_advertise_hosts = * -tls_certificate = /usr/local/vesta/ssl/certificate.crt -tls_privatekey = /usr/local/vesta/ssl/certificate.key - -daemon_smtp_ports = 25 : 465 : 587 : 2525 -tls_on_connect_ports = 465 -never_users = root -host_lookup = * -rfc1413_hosts = * -rfc1413_query_timeout = 5s -ignore_bounce_errors_after = 2d -timeout_frozen_after = 7d - -DKIM_DOMAIN = ${lc:${domain:$h_from:}} -DKIM_FILE = /etc/exim4/domains/${lc:${domain:$h_from:}}/dkim.pem -DKIM_PRIVATE_KEY = ${if exists{DKIM_FILE}{DKIM_FILE}{0}} - - - -###################################################################### -# ACL CONFIGURATION # -# Specifies access control lists for incoming SMTP mail # -###################################################################### -begin acl - -acl_check_spammers: - accept hosts = +whitelist - - drop message = Your host in blacklist on this server. - log_message = Host in blacklist - hosts = +spammers - - accept - - -acl_check_mail: - deny condition = ${if eq{$sender_helo_name}{}} - message = HELO required before MAIL - - drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid - condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} - condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} - delay = 45s - - drop condition = ${if isip{$sender_helo_name}} - message = Access denied - Invalid HELO name (See RFC2821 4.1.3) - - drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} - message = $interface_address is _my_ address - - accept - - -acl_check_rcpt: - accept hosts = : - - deny message = Restricted characters in address - domains = +local_domains - local_parts = ^[.] : ^.*[@%!/|] - - deny message = Restricted characters in address - domains = !+local_domains - local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./ - - require verify = sender - - accept hosts = +relay_from_hosts - control = submission - - accept authenticated = * - control = submission/domain= - - deny message = Rejected because $sender_host_address is in a black list at $dnslist_domain\n$dnslist_text - hosts = !+whitelist - dnslists = ${readfile {/etc/exim4/dnsbl.conf}{:}} - - require message = relay not permitted - domains = +local_domains : +relay_to_domains - - deny message = smtp auth required - sender_domains = +local_domains - !authenticated = * - - require verify = recipient - -.ifdef CLAMD - warn set acl_m0 = no - - warn condition = ${if exists {/etc/exim4/domains/$domain/antivirus}{yes}{no}} - set acl_m0 = yes -.endif - -.ifdef SPAMASSASSIN - warn set acl_m1 = no - - warn condition = ${if exists {/etc/exim4/domains/$domain/antispam}{yes}{no}} - set acl_m1 = yes -.endif - - accept - - -acl_check_data: -.ifdef CLAMD - deny message = Message contains a virus ($malware_name) and has been rejected - malware = * - condition = ${if eq{$acl_m0}{yes}{yes}{no}} -.endif - -.ifdef SPAMASSASSIN - warn !authenticated = * - hosts = !+relay_from_hosts - condition = ${if < {$message_size}{1024K}} - condition = ${if eq{$acl_m1}{yes}{yes}{no}} - spam = debian-spamd:true/defer_ok - add_header = X-Spam-Score: $spam_score_int - add_header = X-Spam-Bar: $spam_bar - add_header = X-Spam-Report: $spam_report - set acl_m2 = $spam_score_int - - warn condition = ${if !eq{$acl_m2}{} {yes}{no}} - condition = ${if >{$acl_m2}{SPAM_SCORE} {yes}{no}} - add_header = X-Spam-Status: Yes - message = SpamAssassin detected spam (from $sender_address to $recipients). -.endif - - accept - - -acl_check_mime: - deny message = Blacklisted file extension detected - condition = ${if match {${lc:$mime_filename}}{\N(\.ade|\.adp|\.bat|\.chm|\.cmd|\.com|\.cpl|\.exe|\.hta|\.ins|\.isp|\.jse|\.lib|\.lnk|\.mde|\.msc|\.msp|\.mst|\.pif|\.scr|\.sct|\.shb|\.sys|\.vb|\.vbe|\.vbs|\.vxd|\.wsc|\.wsf|\.wsh)$\N}{1}{0}} - - accept - - - -###################################################################### -# AUTHENTICATION CONFIGURATION # -###################################################################### -begin authenticators - -dovecot_plain: - driver = dovecot - public_name = PLAIN - server_socket = /var/run/dovecot/auth-client - server_set_id = $auth1 - -dovecot_login: - driver = dovecot - public_name = LOGIN - server_socket = /var/run/dovecot/auth-client - server_set_id = $auth1 - - - -###################################################################### -# ROUTERS CONFIGURATION # -# Specifies how addresses are handled # -###################################################################### -begin routers - -#smarthost: -# driver = manualroute -# domains = ! +local_domains -# transport = remote_smtp -# route_list = * smartrelay.vestacp.com -# no_more -# no_verify - -dnslookup: - driver = dnslookup - domains = !+local_domains - transport = remote_smtp - no_more - -userforward: - driver = redirect - check_local_user - file = $home/.forward - allow_filter - no_verify - no_expn - check_ancestor - file_transport = address_file - pipe_transport = address_pipe - reply_transport = address_reply - -procmail: - driver = accept - check_local_user - require_files = ${local_part}:+${home}/.procmailrc:/usr/bin/procmail - transport = procmail - no_verify - -autoreplay: - driver = accept - require_files = /etc/exim4/domains/$domain/autoreply.${local_part}.msg - condition = ${if exists{/etc/exim4/domains/$domain/autoreply.${local_part}.msg}{yes}{no}} - retry_use_local_part - transport = userautoreply - unseen - -aliases: - driver = redirect - headers_add = X-redirected: yes - data = ${extract{1}{:}{${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}}}} - require_files = /etc/exim4/domains/$domain/aliases - redirect_router = dnslookup - pipe_transport = address_pipe - unseen - -localuser_fwd_only: - driver = accept - transport = devnull - condition = ${if exists{/etc/exim4/domains/$domain/fwd_only}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/fwd_only}{true}{false}}}} - -localuser_spam: - driver = accept - transport = local_spam_delivery - condition = ${if eq {${if match{$h_X-Spam-Status:}{\N^Yes\N}{yes}{no}}} {${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}{yes}{no_such_user}}}} - -localuser: - driver = accept - transport = local_delivery - condition = ${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}{true}{false}} - -catchall: - driver = redirect - headers_add = X-redirected: yes - require_files = /etc/exim4/domains/$domain/aliases - data = ${extract{1}{:}{${lookup{*@$domain}lsearch{/etc/exim4/domains/$domain/aliases}}}} - file_transport = local_delivery - redirect_router = dnslookup - -terminate_alias: - driver = accept - transport = devnull - condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}} - - - -###################################################################### -# TRANSPORTS CONFIGURATION # -###################################################################### -begin transports - -remote_smtp: - driver = smtp - #helo_data = $sender_address_domain - dkim_domain = DKIM_DOMAIN - dkim_selector = mail - dkim_private_key = DKIM_PRIVATE_KEY - dkim_canon = relaxed - dkim_strict = 0 - -procmail: - driver = pipe - command = "/usr/bin/procmail -d $local_part" - return_path_add - delivery_date_add - envelope_to_add - user = $local_part - initgroups - return_output - -local_delivery: - driver = appendfile - maildir_format - maildir_use_size_file - user = ${extract{2}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}} - group = mail - create_directory - directory_mode = 770 - mode = 660 - use_lockfile = no - delivery_date_add - envelope_to_add - return_path_add - directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part" - quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}M - quota_warn_threshold = 75% - -local_spam_delivery: - driver = appendfile - maildir_format - maildir_use_size_file - user = ${extract{2}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}} - group = mail - create_directory - directory_mode = 770 - mode = 660 - use_lockfile = no - delivery_date_add - envelope_to_add - return_path_add - directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part/.Spam" - quota = ${extract{6}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}M - quota_directory = "${extract{5}{:}{${lookup{$local_part}lsearch{/etc/exim4/domains/$domain/passwd}}}}/mail/$domain/$local_part" - quota_warn_threshold = 75% - -address_pipe: - driver = pipe - return_output - -address_file: - driver = appendfile - delivery_date_add - envelope_to_add - return_path_add - -address_reply: - driver = autoreply - -userautoreply: - driver = autoreply - file = /etc/exim4/domains/$domain/autoreply.${local_part}.msg - from = "${local_part}@${domain}" - headers = Content-Type: text/plain; charset=utf-8;\nContent-Transfer-Encoding: 8bit - subject = "${if def:h_Subject: {Autoreply: \"${rfc2047:$h_Subject:}\"} {Autoreply Message}}" - to = "${sender_address}" - -devnull: - driver = appendfile - file = /dev/null - - - -###################################################################### -# RETRY CONFIGURATION # -###################################################################### -begin retry - -# Address or Domain Error Retries -# ----------------- ----- ------- -* * F,2h,15m; G,16h,1h,1.5; F,4d,6h - - - -###################################################################### -# REWRITE CONFIGURATION # -###################################################################### -begin rewrite - - - -###################################################################### diff --git a/install/ubuntu/18.10/exim/spam-blocks.conf b/install/ubuntu/18.10/exim/spam-blocks.conf deleted file mode 100644 index e69de29bb..000000000 diff --git a/install/ubuntu/18.10/fail2ban/action.d/vesta.conf b/install/ubuntu/18.10/fail2ban/action.d/vesta.conf deleted file mode 100644 index 0edfc3491..000000000 --- a/install/ubuntu/18.10/fail2ban/action.d/vesta.conf +++ /dev/null @@ -1,9 +0,0 @@ -# Fail2Ban configuration file for vesta - -[Definition] - -actionstart = /usr/local/vesta/bin/v-add-firewall-chain -actionstop = /usr/local/vesta/bin/v-delete-firewall-chain -actioncheck = iptables -n -L INPUT | grep -q 'fail2ban-[ \t]' -actionban = /usr/local/vesta/bin/v-add-firewall-ban -actionunban = /usr/local/vesta/bin/v-delete-firewall-ban diff --git a/install/ubuntu/18.10/fail2ban/filter.d/vesta.conf b/install/ubuntu/18.10/fail2ban/filter.d/vesta.conf deleted file mode 100644 index 69670a56e..000000000 --- a/install/ubuntu/18.10/fail2ban/filter.d/vesta.conf +++ /dev/null @@ -1,10 +0,0 @@ -# Fail2Ban filter for unsuccesfull Vesta authentication attempts -# - -[INCLUDES] -before = common.conf - -[Definition] -failregex = .* failed to login -ignoreregex = - diff --git a/install/ubuntu/18.10/fail2ban/jail.local b/install/ubuntu/18.10/fail2ban/jail.local deleted file mode 100644 index 013f81c46..000000000 --- a/install/ubuntu/18.10/fail2ban/jail.local +++ /dev/null @@ -1,51 +0,0 @@ -[DEFAULT] -ignoreip = 127.0.0.1/8 - -[ssh-iptables] -enabled = true -filter = sshd -action = vesta[name=SSH] -logpath = /var/log/auth.log -maxretry = 5 - -[vsftpd-iptables] -enabled = false -filter = vsftpd -action = vesta[name=FTP] -logpath = /var/log/vsftpd.log -maxretry = 5 - -[exim-iptables] -enabled = true -filter = exim -action = vesta[name=MAIL] -logpath = /var/log/exim4/mainlog -maxretry = 5 - -[dovecot-iptables] -enabled = true -filter = dovecot -action = vesta[name=MAIL] -logpath = /var/log/dovecot.log -maxretry = 5 - -[mysqld-iptables] -enabled = false -filter = mysqld-auth -action = vesta[name=DB] -logpath = /var/log/mysql.log -maxretry = 5 - -[vesta-iptables] -enabled = true -filter = vesta -action = vesta[name=VESTA] -logpath = /var/log/vesta/auth.log -maxretry = 5 - -[roundcube-auth] -enabled = false -filter = roundcube-auth -port = http,https -logpath = /var/log/roundcube/errors -maxretry = 5 diff --git a/install/ubuntu/18.10/firewall/ports.conf b/install/ubuntu/18.10/firewall/ports.conf deleted file mode 100644 index b730d012c..000000000 --- a/install/ubuntu/18.10/firewall/ports.conf +++ /dev/null @@ -1,17 +0,0 @@ -PROTOCOL='TCP' PORT='20' -PROTOCOL='TCP' PORT='21' -PROTOCOL='TCP' PORT='22' -PROTOCOL='TCP' PORT='25' -PROTOCOL='TCP' PORT='53' -PROTOCOL='UDP' PORT='53' -PROTOCOL='TCP' PORT='80' -PROTOCOL='TCP' PORT='443' -PROTOCOL='TCP' PORT='110' -PROTOCOL='UDP' PORT='123' -PROTOCOL='TCP' PORT='143' -PROTOCOL='TCP' PORT='3306' -PROTOCOL='TCP' PORT='5432' -PROTOCOL='TCP' PORT='8080' -PROTOCOL='TCP' PORT='8433' -PROTOCOL='TCP' PORT='8083' -PROTOCOL='TCP' PORT='12000:12100' diff --git a/install/ubuntu/18.10/firewall/rules.conf b/install/ubuntu/18.10/firewall/rules.conf deleted file mode 100644 index fba98e1e4..000000000 --- a/install/ubuntu/18.10/firewall/rules.conf +++ /dev/null @@ -1,11 +0,0 @@ -RULE='1' ACTION='ACCEPT' PROTOCOL='ICMP' PORT='0' IP='0.0.0.0/0' COMMENT='PING' SUSPENDED='no' TIME='17:13:48' DATE='2014-09-16' -RULE='2' ACTION='ACCEPT' PROTOCOL='TCP' PORT='8083' IP='0.0.0.0/0' COMMENT='VESTA' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25' -RULE='3' ACTION='ACCEPT' PROTOCOL='TCP' PORT='3306,5432' IP='0.0.0.0/0' COMMENT='DB' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25' -RULE='4' ACTION='ACCEPT' PROTOCOL='TCP' PORT='143,993' IP='0.0.0.0/0' COMMENT='IMAP' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25' -RULE='5' ACTION='ACCEPT' PROTOCOL='TCP' PORT='110,995' IP='0.0.0.0/0' COMMENT='POP3' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25' -RULE='6' ACTION='ACCEPT' PROTOCOL='TCP' PORT='25,465,587,2525' IP='0.0.0.0/0' COMMENT='SMTP' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25' -RULE='7' ACTION='ACCEPT' PROTOCOL='TCP' PORT='53' IP='0.0.0.0/0' COMMENT='DNS' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25' -RULE='8' ACTION='ACCEPT' PROTOCOL='UDP' PORT='53' IP='0.0.0.0/0' COMMENT='DNS' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25' -RULE='9' ACTION='ACCEPT' PROTOCOL='TCP' PORT='21,12000-12100' IP='0.0.0.0/0' COMMENT='FTP' SUSPENDED='no' TIME='07:40:16' DATE='2014-05-25' -RULE='10' ACTION='ACCEPT' PROTOCOL='TCP' PORT='80,443' IP='0.0.0.0/0' COMMENT='WEB' SUSPENDED='no' TIME='17:04:27' DATE='2014-09-24' -RULE='11' ACTION='ACCEPT' PROTOCOL='TCP' PORT='22' IP='0.0.0.0/0' COMMENT='SSH' SUSPENDED='no' TIME='17:14:41' DATE='2014-09-16' diff --git a/install/ubuntu/18.10/logrotate/apache2 b/install/ubuntu/18.10/logrotate/apache2 deleted file mode 100644 index 27629d0dd..000000000 --- a/install/ubuntu/18.10/logrotate/apache2 +++ /dev/null @@ -1,19 +0,0 @@ -/var/log/apache2/*.log /var/log/apache2/domains/*log { - weekly - missingok - rotate 52 - compress - delaycompress - notifempty - create 640 root adm - sharedscripts - postrotate - /etc/init.d/apache2 reload > /dev/null || true - [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` - endscript - prerotate - if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ - run-parts /etc/logrotate.d/httpd-prerotate; \ - fi; \ - endscript -} diff --git a/install/ubuntu/18.10/logrotate/dovecot b/install/ubuntu/18.10/logrotate/dovecot deleted file mode 100644 index ac4fd6e9f..000000000 --- a/install/ubuntu/18.10/logrotate/dovecot +++ /dev/null @@ -1,12 +0,0 @@ -/var/log/dovecot*.log { - weekly - rotate 4 - missingok - notifempty - compress - delaycompress - sharedscripts - postrotate - doveadm log reopen - endscript -} diff --git a/install/ubuntu/18.10/logrotate/nginx b/install/ubuntu/18.10/logrotate/nginx deleted file mode 100644 index d667f2135..000000000 --- a/install/ubuntu/18.10/logrotate/nginx +++ /dev/null @@ -1,13 +0,0 @@ -/var/log/nginx/*log /var/log/nginx/domains/*log { - daily - missingok - rotate 52 - compress - delaycompress - notifempty - create 640 nginx adm - sharedscripts - postrotate - [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` - endscript -} diff --git a/install/ubuntu/18.10/logrotate/vesta b/install/ubuntu/18.10/logrotate/vesta deleted file mode 100644 index 027a34396..000000000 --- a/install/ubuntu/18.10/logrotate/vesta +++ /dev/null @@ -1,7 +0,0 @@ -/usr/local/vesta/log/*.log { - missingok - notifempty - size 30k - yearly - create 0600 root root -} diff --git a/install/ubuntu/18.10/mysql/my-large.cnf b/install/ubuntu/18.10/mysql/my-large.cnf deleted file mode 100644 index 7201377cd..000000000 --- a/install/ubuntu/18.10/mysql/my-large.cnf +++ /dev/null @@ -1,41 +0,0 @@ -[client] -port=3306 -socket=/var/run/mysqld/mysqld.sock - -[mysqld_safe] -socket=/var/run/mysqld/mysqld.sock - -[mysqld] -user=mysql -pid-file=/var/run/mysqld/mysqld.pid -socket=/var/run/mysqld/mysqld.sock -port=3306 -basedir=/usr -datadir=/var/lib/mysql -tmpdir=/tmp -lc-messages-dir=/usr/share/mysql -log_error=/var/log/mysql/error.log - -symbolic-links=0 - -skip-external-locking -key_buffer_size = 256M -max_allowed_packet = 32M -table_open_cache = 256 -sort_buffer_size = 1M -read_buffer_size = 1M -read_rnd_buffer_size = 4M -myisam_sort_buffer_size = 64M -thread_cache_size = 8 -query_cache_size= 16M - -#innodb_use_native_aio = 0 -innodb_file_per_table - -max_connections=200 -max_user_connections=50 -wait_timeout=10 -interactive_timeout=50 -long_query_time=5 - -!includedir /etc/mysql/conf.d/ diff --git a/install/ubuntu/18.10/mysql/my-medium.cnf b/install/ubuntu/18.10/mysql/my-medium.cnf deleted file mode 100644 index 1c10ab9a6..000000000 --- a/install/ubuntu/18.10/mysql/my-medium.cnf +++ /dev/null @@ -1,40 +0,0 @@ -[client] -port=3306 -socket=/var/run/mysqld/mysqld.sock - -[mysqld_safe] -socket=/var/run/mysqld/mysqld.sock - -[mysqld] -user=mysql -pid-file=/var/run/mysqld/mysqld.pid -socket=/var/run/mysqld/mysqld.sock -port=3306 -basedir=/usr -datadir=/var/lib/mysql -tmpdir=/tmp -lc-messages-dir=/usr/share/mysql -log_error=/var/log/mysql/error.log - -symbolic-links=0 - -skip-external-locking -key_buffer_size = 16M -max_allowed_packet = 16M -table_open_cache = 64 -sort_buffer_size = 512K -net_buffer_length = 8K -read_buffer_size = 256K -read_rnd_buffer_size = 512K -myisam_sort_buffer_size = 8M - -#innodb_use_native_aio = 0 -innodb_file_per_table - -max_connections=70 -max_user_connections=30 -wait_timeout=10 -interactive_timeout=50 -long_query_time=5 - -!includedir /etc/mysql/conf.d/ diff --git a/install/ubuntu/18.10/mysql/my-small.cnf b/install/ubuntu/18.10/mysql/my-small.cnf deleted file mode 100644 index 26a804781..000000000 --- a/install/ubuntu/18.10/mysql/my-small.cnf +++ /dev/null @@ -1,40 +0,0 @@ -[client] -port=3306 -socket=/var/run/mysqld/mysqld.sock - -[mysqld_safe] -socket=/var/run/mysqld/mysqld.sock - -[mysqld] -user=mysql -pid-file=/var/run/mysqld/mysqld.pid -socket=/var/run/mysqld/mysqld.sock -port=3306 -basedir=/usr -datadir=/var/lib/mysql -tmpdir=/tmp -lc-messages-dir=/usr/share/mysql -log_error=/var/log/mysql/error.log - -symbolic-links=0 - -skip-external-locking -key_buffer_size = 16K -max_allowed_packet = 1M -table_open_cache = 4 -sort_buffer_size = 64K -read_buffer_size = 256K -read_rnd_buffer_size = 256K -net_buffer_length = 2K -thread_stack = 240K - -#innodb_use_native_aio = 0 -innodb_file_per_table - -max_connections=30 -max_user_connections=20 -wait_timeout=10 -interactive_timeout=50 -long_query_time=5 - -!includedir /etc/mysql/conf.d/ diff --git a/install/ubuntu/18.10/nginx/nginx.conf b/install/ubuntu/18.10/nginx/nginx.conf deleted file mode 100644 index 3b954e440..000000000 --- a/install/ubuntu/18.10/nginx/nginx.conf +++ /dev/null @@ -1,140 +0,0 @@ -# Server globals -user www-data; -worker_processes auto; -worker_rlimit_nofile 65535; -error_log /var/log/nginx/error.log; -pid /var/run/nginx.pid; - - -# Worker config -events { - worker_connections 1024; - use epoll; - multi_accept on; -} - - -http { - # Main settings - sendfile on; - tcp_nopush on; - tcp_nodelay on; - client_header_timeout 60s; - client_body_timeout 60s; - client_header_buffer_size 2k; - client_body_buffer_size 256k; - client_max_body_size 256m; - large_client_header_buffers 4 8k; - send_timeout 60s; - keepalive_timeout 30s; - reset_timedout_connection on; - server_tokens off; - server_name_in_redirect off; - server_names_hash_max_size 512; - server_names_hash_bucket_size 512; - - - # Log format - log_format main '$remote_addr - $remote_user [$time_local] $request ' - '"$status" $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - log_format bytes '$body_bytes_sent'; - #access_log /var/log/nginx/access.log main; - access_log off; - - - # Mime settings - include /etc/nginx/mime.types; - default_type application/octet-stream; - - - # Compression - gzip on; - gzip_static on; - gzip_vary on; - gzip_comp_level 6; - gzip_min_length 1024; - gzip_buffers 16 8k; - gzip_types text/plain text/css text/javascript text/js text/xml application/json application/javascript application/x-javascript application/xml application/xml+rss application/x-font-ttf image/svg+xml font/opentype; - gzip_proxied any; - gzip_disable "MSIE [1-6]\."; - - # Proxy settings - proxy_redirect off; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_pass_header Set-Cookie; - proxy_buffers 32 4k; - proxy_connect_timeout 30s; - proxy_send_timeout 90s; - proxy_read_timeout 90s; - - - # Cloudflare https://www.cloudflare.com/ips - set_real_ip_from 103.21.244.0/22; - set_real_ip_from 103.22.200.0/22; - set_real_ip_from 103.31.4.0/22; - set_real_ip_from 104.16.0.0/13; - set_real_ip_from 104.24.0.0/14; - #set_real_ip_from 104.16.0.0/12; - set_real_ip_from 108.162.192.0/18; - set_real_ip_from 131.0.72.0/22; - set_real_ip_from 141.101.64.0/18; - set_real_ip_from 162.158.0.0/15; - set_real_ip_from 172.64.0.0/13; - set_real_ip_from 173.245.48.0/20; - set_real_ip_from 188.114.96.0/20; - set_real_ip_from 190.93.240.0/20; - set_real_ip_from 197.234.240.0/22; - set_real_ip_from 198.41.128.0/17; - #set_real_ip_from 2400:cb00::/32; - #set_real_ip_from 2606:4700::/32; - #set_real_ip_from 2803:f800::/32; - #set_real_ip_from 2405:b500::/32; - #set_real_ip_from 2405:8100::/32; - #set_real_ip_from 2c0f:f248::/32; - #set_real_ip_from 2a06:98c0::/29; - real_ip_header CF-Connecting-IP; - - - # SSL PCI Compliance - ssl_session_cache shared:SSL:20m; - ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; - ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS"; - ssl_prefer_server_ciphers on; - - - # Error pages - error_page 403 /error/403.html; - error_page 404 /error/404.html; - error_page 502 503 504 /error/50x.html; - - - # Cache settings - proxy_cache_path /var/cache/nginx levels=2 keys_zone=cache:10m inactive=60m max_size=1024m; - proxy_cache_key "$host$request_uri $cookie_user"; - proxy_temp_path /var/cache/nginx/temp; - proxy_ignore_headers Expires Cache-Control; - proxy_cache_use_stale error timeout invalid_header http_502; - proxy_cache_valid any 1d; - - - # Cache bypass - map $http_cookie $no_cache { - default 0; - ~SESS 1; - ~wordpress_logged_in 1; - } - - - # File cache settings - open_file_cache max=10000 inactive=30s; - open_file_cache_valid 60s; - open_file_cache_min_uses 2; - open_file_cache_errors off; - - - # Wildcard include - include /etc/nginx/conf.d/*.conf; -} diff --git a/install/ubuntu/18.10/nginx/phpmyadmin.inc b/install/ubuntu/18.10/nginx/phpmyadmin.inc deleted file mode 100644 index cdfc93c4d..000000000 --- a/install/ubuntu/18.10/nginx/phpmyadmin.inc +++ /dev/null @@ -1,18 +0,0 @@ -location /phpmyadmin { - alias /usr/share/phpmyadmin; - - location ~ /(libraries|setup) { - return 404; - } - - location ~ ^/phpmyadmin/(.*\.php)$ { - alias /usr/share/phpmyadmin/$1; - fastcgi_pass 127.0.0.1:9000; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $request_filename; - } - location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { - root /usr/share/; - } -} diff --git a/install/ubuntu/18.10/nginx/phppgadmin.inc b/install/ubuntu/18.10/nginx/phppgadmin.inc deleted file mode 100644 index 47cfcf4e2..000000000 --- a/install/ubuntu/18.10/nginx/phppgadmin.inc +++ /dev/null @@ -1,11 +0,0 @@ -location /phppgadmin { - alias /usr/share/phppgadmin; - - location ~ ^/phppgadmin/(.*\.php)$ { - alias /usr/share/phppgadmin/$1; - fastcgi_pass 127.0.0.1:9000; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $request_filename; - } -} diff --git a/install/ubuntu/18.10/nginx/status.conf b/install/ubuntu/18.10/nginx/status.conf deleted file mode 100644 index c0bcd0691..000000000 --- a/install/ubuntu/18.10/nginx/status.conf +++ /dev/null @@ -1,9 +0,0 @@ -server { - listen 127.0.0.1:8084 default; - server_name _; - server_name_in_redirect off; - location / { - stub_status on; - access_log off; - } -} diff --git a/install/ubuntu/18.10/nginx/webmail.inc b/install/ubuntu/18.10/nginx/webmail.inc deleted file mode 100644 index 768c90495..000000000 --- a/install/ubuntu/18.10/nginx/webmail.inc +++ /dev/null @@ -1,15 +0,0 @@ -location /webmail { - alias /var/lib/roundcube; - - location ~ /(config|temp|logs) { - return 404; - } - - location ~ ^/webmail/(.*\.php)$ { - alias /var/lib/roundcube/$1; - fastcgi_pass 127.0.0.1:9000; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $request_filename; - } -} diff --git a/install/ubuntu/18.10/packages/default.pkg b/install/ubuntu/18.10/packages/default.pkg deleted file mode 100644 index c2a935743..000000000 --- a/install/ubuntu/18.10/packages/default.pkg +++ /dev/null @@ -1,18 +0,0 @@ -WEB_TEMPLATE='default' -PROXY_TEMPLATE='default' -DNS_TEMPLATE='default' -WEB_DOMAINS='100' -WEB_ALIASES='100' -DNS_DOMAINS='100' -DNS_RECORDS='100' -MAIL_DOMAINS='100' -MAIL_ACCOUNTS='100' -DATABASES='100' -CRON_JOBS='100' -DISK_QUOTA='unlimited' -BANDWIDTH='100000' -NS='ns1.domain.tld,ns2.domain.tld' -SHELL='nologin' -BACKUPS='3' -TIME='18:00:00' -DATE='2017-12-28' diff --git a/install/ubuntu/18.10/packages/gainsboro.pkg b/install/ubuntu/18.10/packages/gainsboro.pkg deleted file mode 100644 index 76d7dae2a..000000000 --- a/install/ubuntu/18.10/packages/gainsboro.pkg +++ /dev/null @@ -1,18 +0,0 @@ -WEB_TEMPLATE='default' -PROXY_TEMPLATE='default' -DNS_TEMPLATE='default' -WEB_DOMAINS='10' -WEB_ALIASES='10' -DNS_DOMAINS='10' -DNS_RECORDS='10' -MAIL_DOMAINS='10' -MAIL_ACCOUNTS='10' -DATABASES='10' -CRON_JOBS='10' -DISK_QUOTA='10000' -BANDWIDTH='10000' -NS='ns1.domain.tld,ns2.domain.tld' -SHELL='nologin' -BACKUPS='1' -TIME='18:00:00' -DATE='2017-12-28' diff --git a/install/ubuntu/18.10/packages/palegreen.pkg b/install/ubuntu/18.10/packages/palegreen.pkg deleted file mode 100644 index 3db5fe57e..000000000 --- a/install/ubuntu/18.10/packages/palegreen.pkg +++ /dev/null @@ -1,18 +0,0 @@ -WEB_TEMPLATE='hosting' -PROXY_TEMPLATE='hosting' -DNS_TEMPLATE='default' -WEB_DOMAINS='50' -WEB_ALIASES='50' -DNS_DOMAINS='50' -DNS_RECORDS='50' -MAIL_DOMAINS='50' -MAIL_ACCOUNTS='50' -DATABASES='50' -CRON_JOBS='50' -DISK_QUOTA='50000' -BANDWIDTH='50000' -NS='ns1.domain.tld,ns2.domain.tld' -SHELL='nologin' -BACKUPS='5' -TIME='18:00:00' -DATE='2017-12-28' diff --git a/install/ubuntu/18.10/packages/slategrey.pkg b/install/ubuntu/18.10/packages/slategrey.pkg deleted file mode 100644 index d89e796fd..000000000 --- a/install/ubuntu/18.10/packages/slategrey.pkg +++ /dev/null @@ -1,18 +0,0 @@ -WEB_TEMPLATE='default' -PROXY_TEMPLATE='default' -DNS_TEMPLATE='default' -WEB_DOMAINS='100' -WEB_ALIASES='100' -DNS_DOMAINS='100' -DNS_RECORDS='100' -MAIL_DOMAINS='100' -MAIL_ACCOUNTS='100' -DATABASES='100' -CRON_JOBS='100' -DISK_QUOTA='10000' -BANDWIDTH='100000' -NS='ns1.domain.tld,ns2.domain.tld' -SHELL='nologin' -BACKUPS='3' -TIME='18:00:00' -DATE='2017-12-28' diff --git a/install/ubuntu/18.10/pga/config.inc.php b/install/ubuntu/18.10/pga/config.inc.php deleted file mode 100644 index 1eec9776c..000000000 --- a/install/ubuntu/18.10/pga/config.inc.php +++ /dev/null @@ -1,159 +0,0 @@ - diff --git a/install/ubuntu/18.10/pga/phppgadmin.conf b/install/ubuntu/18.10/pga/phppgadmin.conf deleted file mode 100644 index f39247d6f..000000000 --- a/install/ubuntu/18.10/pga/phppgadmin.conf +++ /dev/null @@ -1,31 +0,0 @@ -Alias /phppgadmin /usr/share/phppgadmin - - - -DirectoryIndex index.php -AllowOverride None - -order deny,allow -deny from all -allow from 127.0.0.0/255.0.0.0 ::1/128 -allow from all - - - php_flag magic_quotes_gpc Off - php_flag track_vars On - php_value include_path . - - - - - AddType application/x-httpd-php .php - Action application/x-httpd-php /cgi-bin/php - - - AddType application/x-httpd-php .php - Action application/x-httpd-php /cgi-bin/php - - - - - diff --git a/install/ubuntu/18.10/php-fpm/www.conf b/install/ubuntu/18.10/php-fpm/www.conf deleted file mode 100644 index 3c87f33cc..000000000 --- a/install/ubuntu/18.10/php-fpm/www.conf +++ /dev/null @@ -1,11 +0,0 @@ -[www] -listen = 127.0.0.1:9000 -listen.allowed_clients = 127.0.0.1 - -user = www-data -group = www-data - -pm = ondemand -pm.max_children = 2 -pm.max_requests = 4000 -pm.process_idle_timeout = 10s diff --git a/install/ubuntu/18.10/pma/apache.conf b/install/ubuntu/18.10/pma/apache.conf deleted file mode 100644 index 81c1743a3..000000000 --- a/install/ubuntu/18.10/pma/apache.conf +++ /dev/null @@ -1,43 +0,0 @@ -# phpMyAdmin default Apache configuration - -Alias /phpmyadmin /usr/share/phpmyadmin - - - Options FollowSymLinks - DirectoryIndex index.php - - - AddType application/x-httpd-php .php - - php_flag magic_quotes_gpc Off - php_flag track_vars On - php_flag register_globals Off - php_admin_flag allow_url_fopen Off - php_value include_path . - php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp - php_admin_value sys_temp_dir /var/lib/phpmyadmin/tmp - php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext:/usr/share/javascript/ - - - - -# Authorize for setup - - - AuthType Basic - AuthName "phpMyAdmin Setup" - AuthUserFile /etc/phpmyadmin/htpasswd.setup - - Require valid-user - - -# Disallow web access to directories that don't need it - - Order Deny,Allow - Deny from All - - - Order Deny,Allow - Deny from All - - diff --git a/install/ubuntu/18.10/pma/config.inc.php b/install/ubuntu/18.10/pma/config.inc.php deleted file mode 100644 index a643a065b..000000000 --- a/install/ubuntu/18.10/pma/config.inc.php +++ /dev/null @@ -1,146 +0,0 @@ - - VRootEngine on - VRootAlias /etc/security/pam_env.conf etc/security/pam_env.conf - - -AuthPAMConfig proftpd -AuthOrder mod_auth_pam.c* mod_auth_unix.c -UseReverseDNS off -User proftpd -Group nogroup -MaxInstances 20 -UseSendfile off -LogFormat default "%h %l %u %t \"%r\" %s %b" -LogFormat auth "%v [%P] %h %t \"%r\" %s" -ListOptions -a -RequireValidShell off -PassivePorts 12000 12100 - - - Umask 002 - IdentLookups off - AllowOverwrite yes - - AllowAll - - diff --git a/install/ubuntu/18.10/roundcube/apache.conf b/install/ubuntu/18.10/roundcube/apache.conf deleted file mode 100644 index a0c87bcc6..000000000 --- a/install/ubuntu/18.10/roundcube/apache.conf +++ /dev/null @@ -1,40 +0,0 @@ -Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/ -Alias /roundcube /var/lib/roundcube -Alias /webmail /var/lib/roundcube - -# Access to tinymce files - - Options Indexes MultiViews FollowSymLinks - AllowOverride None - Order allow,deny - allow from all - - - - Options +FollowSymLinks - # This is needed to parse /var/lib/roundcube/.htaccess. See its - # content before setting AllowOverride to None. - AllowOverride All - order allow,deny - allow from all - - -# Protecting basic directories: - - Options -FollowSymLinks - AllowOverride None - - - - Options -FollowSymLinks - AllowOverride None - Order allow,deny - Deny from all - - - - Options -FollowSymLinks - AllowOverride None - Order allow,deny - Deny from all - diff --git a/install/ubuntu/18.10/roundcube/config.inc.php b/install/ubuntu/18.10/roundcube/config.inc.php deleted file mode 100644 index 0c82b1bc1..000000000 --- a/install/ubuntu/18.10/roundcube/config.inc.php +++ /dev/null @@ -1,33 +0,0 @@ - diff --git a/install/ubuntu/18.10/roundcube/main.inc.php b/install/ubuntu/18.10/roundcube/main.inc.php deleted file mode 100644 index 32e0d4734..000000000 --- a/install/ubuntu/18.10/roundcube/main.inc.php +++ /dev/null @@ -1,850 +0,0 @@ -/sendmail or to syslog -$rcmail_config['smtp_log'] = true; - -// Log successful logins to /userlogins or to syslog -$rcmail_config['log_logins'] = false; - -// Log session authentication errors to /session or to syslog -$rcmail_config['log_session'] = false; - -// Log SQL queries to /sql or to syslog -$rcmail_config['sql_debug'] = false; - -// Log IMAP conversation to /imap or to syslog -$rcmail_config['imap_debug'] = false; - -// Log LDAP conversation to /ldap or to syslog -$rcmail_config['ldap_debug'] = false; - -// Log SMTP conversation to /smtp or to syslog -$rcmail_config['smtp_debug'] = false; - -// ---------------------------------- -// IMAP -// ---------------------------------- - -// the mail host chosen to perform the log-in -// leave blank to show a textbox at login, give a list of hosts -// to display a pulldown menu or set one host as string. -// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// -// Supported replacement variables: -// %n - http hostname ($_SERVER['SERVER_NAME']) -// %d - domain (http hostname without the first part) -// %s - domain name after the '@' from e-mail address provided at login screen -// For example %n = mail.domain.tld, %d = domain.tld -$rcmail_config['default_host'] = 'localhost'; - -// TCP port used for IMAP connections -$rcmail_config['default_port'] = 143; - -// IMAP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use -// best server supported one) -$rcmail_config['imap_auth_type'] = null; - -// If you know your imap's folder delimiter, you can specify it here. -// Otherwise it will be determined automatically -$rcmail_config['imap_delimiter'] = null; - -// If IMAP server doesn't support NAMESPACE extension, but you're -// using shared folders or personal root folder is non-empty, you'll need to -// set these options. All can be strings or arrays of strings. -// Folders need to be ended with directory separator, e.g. "INBOX." -// (special directory "~" is an exception to this rule) -// These can be used also to overwrite server's namespaces -$rcmail_config['imap_ns_personal'] = null; -$rcmail_config['imap_ns_other'] = null; -$rcmail_config['imap_ns_shared'] = null; - -// By default IMAP capabilities are readed after connection to IMAP server -// In some cases, e.g. when using IMAP proxy, there's a need to refresh the list -// after login. Set to True if you've got this case. -$rcmail_config['imap_force_caps'] = false; - -// By default list of subscribed folders is determined using LIST-EXTENDED -// extension if available. Some servers (dovecot 1.x) returns wrong results -// for shared namespaces in this case. http://trac.roundcube.net/ticket/1486225 -// Enable this option to force LSUB command usage instead. -$rcmail_config['imap_force_lsub'] = false; - -// Some server configurations (e.g. Courier) doesn't list folders in all namespaces -// Enable this option to force listing of folders in all namespaces -$rcmail_config['imap_force_ns'] = false; - -// IMAP connection timeout, in seconds. Default: 0 (no limit) -$rcmail_config['imap_timeout'] = 0; - -// Optional IMAP authentication identifier to be used as authorization proxy -$rcmail_config['imap_auth_cid'] = null; - -// Optional IMAP authentication password to be used for imap_auth_cid -$rcmail_config['imap_auth_pw'] = null; - -// Type of IMAP indexes cache. Supported values: 'db', 'apc' and 'memcache'. -$rcmail_config['imap_cache'] = null; - -// Enables messages cache. Only 'db' cache is supported. -$rcmail_config['messages_cache'] = false; - - -// ---------------------------------- -// SMTP -// ---------------------------------- - -// SMTP server host (for sending mails). -// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls:// -// If left blank, the PHP mail() function is used -// Supported replacement variables: -// %h - user's IMAP hostname -// %n - http hostname ($_SERVER['SERVER_NAME']) -// %d - domain (http hostname without the first part) -// %z - IMAP domain (IMAP hostname without the first part) -// For example %n = mail.domain.tld, %d = domain.tld -$rcmail_config['smtp_server'] = ''; - -// SMTP port (default is 25; use 587 for STARTTLS or 465 for the -// deprecated SSL over SMTP (aka SMTPS)) -$rcmail_config['smtp_port'] = 25; - -// SMTP username (if required) if you use %u as the username Roundcube -// will use the current username for login -$rcmail_config['smtp_user'] = ''; - -// SMTP password (if required) if you use %p as the password Roundcube -// will use the current user's password for login -$rcmail_config['smtp_pass'] = ''; - -// SMTP AUTH type (DIGEST-MD5, CRAM-MD5, LOGIN, PLAIN or empty to use -// best server supported one) -$rcmail_config['smtp_auth_type'] = ''; - -// Optional SMTP authentication identifier to be used as authorization proxy -$rcmail_config['smtp_auth_cid'] = null; - -// Optional SMTP authentication password to be used for smtp_auth_cid -$rcmail_config['smtp_auth_pw'] = null; - -// SMTP HELO host -// Hostname to give to the remote server for SMTP 'HELO' or 'EHLO' messages -// Leave this blank and you will get the server variable 'server_name' or -// localhost if that isn't defined. -$rcmail_config['smtp_helo_host'] = ''; - -// SMTP connection timeout, in seconds. Default: 0 (no limit) -$rcmail_config['smtp_timeout'] = 0; - -// ---------------------------------- -// SYSTEM -// ---------------------------------- -include_once("/etc/roundcube/debian-db-roundcube.php"); - - -// THIS OPTION WILL ALLOW THE INSTALLER TO RUN AND CAN EXPOSE SENSITIVE CONFIG DATA. -// ONLY ENABLE IT IF YOU'RE REALLY SURE WHAT YOU'RE DOING! -$rcmail_config['enable_installer'] = false; - -// provide an URL where a user can get support for this Roundcube installation -// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE! -$rcmail_config['support_url'] = ''; - -// replace Roundcube logo with this image -// specify an URL relative to the document root of this Roundcube installation -$rcmail_config['skin_logo'] = null; - -// automatically create a new Roundcube user when log-in the first time. -// a new user will be created once the IMAP login succeeds. -// set to false if only registered users can use this service -$rcmail_config['auto_create_user'] = true; - -// use this folder to store log files (must be writeable for apache user) -// This is used by the 'file' log driver. -$rcmail_config['log_dir'] = '/var/log/roundcube/'; - -// use this folder to store temp files (must be writeable for apache user) -$rcmail_config['temp_dir'] = '/tmp'; - -// lifetime of message cache -// possible units: s, m, h, d, w -$rcmail_config['message_cache_lifetime'] = '10d'; - -// enforce connections over https -// with this option enabled, all non-secure connections will be redirected. -// set the port for the ssl connection as value of this option if it differs from the default 443 -$rcmail_config['force_https'] = false; - -// tell PHP that it should work as under secure connection -// even if it doesn't recognize it as secure ($_SERVER['HTTPS'] is not set) -// e.g. when you're running Roundcube behind a https proxy -// this option is mutually exclusive to 'force_https' and only either one of them should be set to true. -$rcmail_config['use_https'] = false; - -// Allow browser-autocompletion on login form. -// 0 - disabled, 1 - username and host only, 2 - username, host, password -$rcmail_config['login_autocomplete'] = 0; - -// Forces conversion of logins to lower case. -// 0 - disabled, 1 - only domain part, 2 - domain and local part. -// If users authentication is not case-sensitive this must be enabled. -// After enabling it all user records need to be updated, e.g. with query: -// UPDATE users SET username = LOWER(username); -$rcmail_config['login_lc'] = 0; - -// Includes should be interpreted as PHP files -$rcmail_config['skin_include_php'] = false; - -// display software version on login screen -$rcmail_config['display_version'] = false; - -// Session lifetime in minutes -// must be greater than 'keep_alive'/60 -$rcmail_config['session_lifetime'] = 10; - -// session domain: .example.org -$rcmail_config['session_domain'] = ''; - -// session name. Default: 'roundcube_sessid' -$rcmail_config['session_name'] = null; - -// Backend to use for session storage. Can either be 'db' (default) or 'memcache' -// If set to memcache, a list of servers need to be specified in 'memcache_hosts' -// Make sure the Memcache extension (http://pecl.php.net/package/memcache) version >= 2.0.0 is installed -$rcmail_config['session_storage'] = 'db'; - -// Use these hosts for accessing memcached -// Define any number of hosts in the form of hostname:port or unix:///path/to/sock.file -$rcmail_config['memcache_hosts'] = null; // e.g. array( 'localhost:11211', '192.168.1.12:11211', 'unix:///var/tmp/memcached.sock' ); - -// check client IP in session athorization -$rcmail_config['ip_check'] = false; - -// check referer of incoming requests -$rcmail_config['referer_check'] = false; - -// X-Frame-Options HTTP header value sent to prevent from Clickjacking. -// Possible values: sameorigin|deny. Set to false in order to disable sending them -$rcmail_config['x_frame_options'] = 'sameorigin'; - -// this key is used to encrypt the users imap password which is stored -// in the session record (and the client cookie if remember password is enabled). -// please provide a string of exactly 24 chars. -$rcmail_config['des_key'] = 'vtIOjLZo9kffJoqzpSbm5r1r'; - -// Automatically add this domain to user names for login -// Only for IMAP servers that require full e-mail addresses for login -// Specify an array with 'host' => 'domain' values to support multiple hosts -// Supported replacement variables: -// %h - user's IMAP hostname -// %n - http hostname ($_SERVER['SERVER_NAME']) -// %d - domain (http hostname without the first part) -// %z - IMAP domain (IMAP hostname without the first part) -// For example %n = mail.domain.tld, %d = domain.tld -$rcmail_config['username_domain'] = ''; - -// This domain will be used to form e-mail addresses of new users -// Specify an array with 'host' => 'domain' values to support multiple hosts -// Supported replacement variables: -// %h - user's IMAP hostname -// %n - http hostname ($_SERVER['SERVER_NAME']) -// %d - domain (http hostname without the first part) -// %z - IMAP domain (IMAP hostname without the first part) -// For example %n = mail.domain.tld, %d = domain.tld -$rcmail_config['mail_domain'] = ''; - -// Password charset. -// Use it if your authentication backend doesn't support UTF-8. -// Defaults to ISO-8859-1 for backward compatibility -$rcmail_config['password_charset'] = 'ISO-8859-1'; - -// How many seconds must pass between emails sent by a user -$rcmail_config['sendmail_delay'] = 0; - -// Maximum number of recipients per message. Default: 0 (no limit) -$rcmail_config['max_recipients'] = 0; - -// Maximum allowednumber of members of an address group. Default: 0 (no limit) -// If 'max_recipients' is set this value should be less or equal -$rcmail_config['max_group_members'] = 0; - -// add this user-agent to message headers when sending -$rcmail_config['useragent'] = 'Roundcube Webmail'; - -// use this name to compose page titles -$rcmail_config['product_name'] = 'Roundcube Webmail'; - -// try to load host-specific configuration -// see http://trac.roundcube.net/wiki/Howto_Config for more details -$rcmail_config['include_host_config'] = false; - -// path to a text file which will be added to each sent message -// paths are relative to the Roundcube root folder -$rcmail_config['generic_message_footer'] = ''; - -// path to a text file which will be added to each sent HTML message -// paths are relative to the Roundcube root folder -$rcmail_config['generic_message_footer_html'] = ''; - -// add a received header to outgoing mails containing the creators IP and hostname -$rcmail_config['http_received_header'] = false; - -// Whether or not to encrypt the IP address and the host name -// these could, in some circles, be considered as sensitive information; -// however, for the administrator, these could be invaluable help -// when tracking down issues. -$rcmail_config['http_received_header_encrypt'] = false; - -// This string is used as a delimiter for message headers when sending -// a message via mail() function. Leave empty for auto-detection -$rcmail_config['mail_header_delimiter'] = NULL; - -// number of chars allowed for line when wrapping text. -// text wrapping is done when composing/sending messages -$rcmail_config['line_length'] = 72; - -// send plaintext messages as format=flowed -$rcmail_config['send_format_flowed'] = true; - -// don't allow these settings to be overriden by the user -$rcmail_config['dont_override'] = array(); - -// Set identities access level: -// 0 - many identities with possibility to edit all params -// 1 - many identities with possibility to edit all params but not email address -// 2 - one identity with possibility to edit all params -// 3 - one identity with possibility to edit all params but not email address -$rcmail_config['identities_level'] = 0; - -// Mimetypes supported by the browser. -// attachments of these types will open in a preview window -// either a comma-separated list or an array: 'text/plain,text/html,text/xml,image/jpeg,image/gif,image/png,application/pdf' -$rcmail_config['client_mimetypes'] = null; # null == default - -// mime magic database -$rcmail_config['mime_magic'] = null; - -// path to imagemagick identify binary -$rcmail_config['im_identify_path'] = null; - -// path to imagemagick convert binary -$rcmail_config['im_convert_path'] = null; - -// maximum size of uploaded contact photos in pixel -$rcmail_config['contact_photo_size'] = 160; - -// Enable DNS checking for e-mail address validation -$rcmail_config['email_dns_check'] = false; - -// ---------------------------------- -// PLUGINS -// ---------------------------------- - -// List of active plugins (in plugins/ directory) -$rcmail_config['plugins'] = array('password'); - -// ---------------------------------- -// USER INTERFACE -// ---------------------------------- - -// default messages sort column. Use empty value for default server's sorting, -// or 'arrival', 'date', 'subject', 'from', 'to', 'fromto', 'size', 'cc' -$rcmail_config['message_sort_col'] = ''; - -// default messages sort order -$rcmail_config['message_sort_order'] = 'DESC'; - -// These cols are shown in the message list. Available cols are: -// subject, from, to, fromto, cc, replyto, date, size, status, flag, attachment, 'priority' -$rcmail_config['list_cols'] = array('subject', 'status', 'fromto', 'date', 'size', 'flag', 'attachment'); - -// the default locale setting (leave empty for auto-detection) -// RFC1766 formatted language name like en_US, de_DE, de_CH, fr_FR, pt_BR -$rcmail_config['language'] = null; - -// use this format for date display (date or strftime format) -$rcmail_config['date_format'] = 'Y-m-d'; - -// give this choice of date formats to the user to select from -$rcmail_config['date_formats'] = array('Y-m-d', 'd-m-Y', 'Y/m/d', 'm/d/Y', 'd/m/Y', 'd.m.Y', 'j.n.Y'); - -// use this format for time display (date or strftime format) -$rcmail_config['time_format'] = 'H:i'; - -// give this choice of time formats to the user to select from -$rcmail_config['time_formats'] = array('G:i', 'H:i', 'g:i a', 'h:i A'); - -// use this format for short date display (derived from date_format and time_format) -$rcmail_config['date_short'] = 'D H:i'; - -// use this format for detailed date/time formatting (derived from date_format and time_format) -$rcmail_config['date_long'] = 'Y-m-d H:i'; - -// store draft message is this mailbox -// leave blank if draft messages should not be stored -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['drafts_mbox'] = 'Drafts'; - -// store spam messages in this mailbox -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['junk_mbox'] = 'Spam'; - -// store sent message is this mailbox -// leave blank if sent messages should not be stored -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['sent_mbox'] = 'Sent'; - -// move messages to this folder when deleting them -// leave blank if they should be deleted directly -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['trash_mbox'] = 'Trash'; - -// display these folders separately in the mailbox list. -// these folders will also be displayed with localized names -// NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) -$rcmail_config['default_folders'] = array('INBOX', 'Drafts', 'Sent', 'Spam', 'Trash'); -$rcmail_config['default_imap_folders'] = array('INBOX', 'Drafts', 'Sent', 'Spam', 'Trash'); - -// automatically create the above listed default folders on first login -$rcmail_config['create_default_folders'] = true; - -// protect the default folders from renames, deletes, and subscription changes -$rcmail_config['protect_default_folders'] = true; - -// if in your system 0 quota means no limit set this option to true -$rcmail_config['quota_zero_as_unlimited'] = true; - -// Make use of the built-in spell checker. It is based on GoogieSpell. -// Since Google only accepts connections over https your PHP installatation -// requires to be compiled with Open SSL support -$rcmail_config['enable_spellcheck'] = true; - -// Enables spellchecker exceptions dictionary. -// Setting it to 'shared' will make the dictionary shared by all users. -$rcmail_config['spellcheck_dictionary'] = false; - -// Set the spell checking engine. 'googie' is the default. 'pspell' is also available, -// but requires the Pspell extensions. When using Nox Spell Server, also set 'googie' here. -$rcmail_config['spellcheck_engine'] = 'googie'; - -// For a locally installed Nox Spell Server, please specify the URI to call it. -// Get Nox Spell Server from http://orangoo.com/labs/?page_id=72 -// Leave empty to use the Google spell checking service, what means -// that the message content will be sent to Google in order to check spelling -$rcmail_config['spellcheck_uri'] = ''; - -// These languages can be selected for spell checking. -// Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch'); -// Leave empty for default set of available language. -$rcmail_config['spellcheck_languages'] = NULL; - -// Makes that words with all letters capitalized will be ignored (e.g. GOOGLE) -$rcmail_config['spellcheck_ignore_caps'] = false; - -// Makes that words with numbers will be ignored (e.g. g00gle) -$rcmail_config['spellcheck_ignore_nums'] = false; - -// Makes that words with symbols will be ignored (e.g. g@@gle) -$rcmail_config['spellcheck_ignore_syms'] = false; - -// Use this char/string to separate recipients when composing a new message -$rcmail_config['recipients_separator'] = ','; - -// don't let users set pagesize to more than this value if set -$rcmail_config['max_pagesize'] = 200; - -// Minimal value of user's 'keep_alive' setting (in seconds) -// Must be less than 'session_lifetime' -$rcmail_config['min_keep_alive'] = 60; - -// Enables files upload indicator. Requires APC installed and enabled apc.rfc1867 option. -// By default refresh time is set to 1 second. You can set this value to true -// or any integer value indicating number of seconds. -$rcmail_config['upload_progress'] = false; - -// Specifies for how many seconds the Undo button will be available -// after object delete action. Currently used with supporting address book sources. -// Setting it to 0, disables the feature. -$rcmail_config['undo_timeout'] = 0; - -// ---------------------------------- -// ADDRESSBOOK SETTINGS -// ---------------------------------- - -// This indicates which type of address book to use. Possible choises: -// 'sql' (default) and 'ldap'. -// If set to 'ldap' then it will look at using the first writable LDAP -// address book as the primary address book and it will not display the -// SQL address book in the 'Address Book' view. -$rcmail_config['address_book_type'] = 'sql'; - -// In order to enable public ldap search, configure an array like the Verisign -// example further below. if you would like to test, simply uncomment the example. -// Array key must contain only safe characters, ie. a-zA-Z0-9_ -$rcmail_config['ldap_public'] = array(); - -// If you are going to use LDAP for individual address books, you will need to -// set 'user_specific' to true and use the variables to generate the appropriate DNs to access it. -// -// The recommended directory structure for LDAP is to store all the address book entries -// under the users main entry, e.g.: -// -// o=root -// ou=people -// uid=user@domain -// mail=contact@contactdomain -// -// So the base_dn would be uid=%fu,ou=people,o=root -// The bind_dn would be the same as based_dn or some super user login. -/* - * example config for Verisign directory - * -$rcmail_config['ldap_public']['Verisign'] = array( - 'name' => 'Verisign.com', - // Replacement variables supported in host names: - // %h - user's IMAP hostname - // %n - http hostname ($_SERVER['SERVER_NAME']) - // %d - domain (http hostname without the first part) - // %z - IMAP domain (IMAP hostname without the first part) - // For example %n = mail.domain.tld, %d = domain.tld - 'hosts' => array('directory.verisign.com'), - 'port' => 389, - 'use_tls' => false, - 'ldap_version' => 3, // using LDAPv3 - 'user_specific' => false, // If true the base_dn, bind_dn and bind_pass default to the user's IMAP login. - // %fu - The full username provided, assumes the username is an email - // address, uses the username_domain value if not an email address. - // %u - The username prior to the '@'. - // %d - The domain name after the '@'. - // %dc - The domain name hierarchal string e.g. "dc=test,dc=domain,dc=com" - // %dn - DN found by ldap search when search_filter/search_base_dn are used - 'base_dn' => '', - 'bind_dn' => '', - 'bind_pass' => '', - // It's possible to bind for an individual address book - // The login name is used to search for the DN to bind with - 'search_base_dn' => '', - 'search_filter' => '', // e.g. '(&(objectClass=posixAccount)(uid=%u))' - // DN and password to bind as before searching for bind DN, if anonymous search is not allowed - 'search_bind_dn' => '', - 'search_bind_pw' => '', - // Default for %dn variable if search doesn't return DN value - 'search_dn_default' => '', - // Optional authentication identifier to be used as SASL authorization proxy - // bind_dn need to be empty - 'auth_cid' => '', - // SASL authentication method (for proxy auth), e.g. DIGEST-MD5 - 'auth_method' => '', - // Indicates if the addressbook shall be hidden from the list. - // With this option enabled you can still search/view contacts. - 'hidden' => false, - // Indicates if the addressbook shall not list contacts but only allows searching. - 'searchonly' => false, - // Indicates if we can write to the LDAP directory or not. - // If writable is true then these fields need to be populated: - // LDAP_Object_Classes, required_fields, LDAP_rdn - 'writable' => false, - // To create a new contact these are the object classes to specify - // (or any other classes you wish to use). - 'LDAP_Object_Classes' => array('top', 'inetOrgPerson'), - // The RDN field that is used for new entries, this field needs - // to be one of the search_fields, the base of base_dn is appended - // to the RDN to insert into the LDAP directory. - 'LDAP_rdn' => 'cn', - // The required fields needed to build a new contact as required by - // the object classes (can include additional fields not required by the object classes). - 'required_fields' => array('cn', 'sn', 'mail'), - 'search_fields' => array('mail', 'cn'), // fields to search in - // mapping of contact fields to directory attributes - // for every attribute one can specify the number of values (limit) allowed. - // default is 1, a wildcard * means unlimited - 'fieldmap' => array( - // Roundcube => LDAP:limit - 'name' => 'cn', - 'surname' => 'sn', - 'firstname' => 'givenName', - 'title' => 'title', - 'email' => 'mail:*', - 'phone:home' => 'homePhone', - 'phone:work' => 'telephoneNumber', - 'phone:mobile' => 'mobile', - 'phone:pager' => 'pager', - 'street' => 'street', - 'zipcode' => 'postalCode', - 'region' => 'st', - 'locality' => 'l', -// if you uncomment country, you need to modify 'sub_fields' above -// 'country' => 'c', - 'department' => 'departmentNumber', - 'notes' => 'description', -// these currently don't work: -// 'phone:workfax' => 'facsimileTelephoneNumber', -// 'photo' => 'jpegPhoto', -// 'organization' => 'o', -// 'manager' => 'manager', -// 'assistant' => 'secretary', - ), - // Map of contact sub-objects (attribute name => objectClass(es)), e.g. 'c' => 'country' - 'sub_fields' => array(), - 'sort' => 'cn', // The field to sort the listing by. - 'scope' => 'sub', // search mode: sub|base|list - 'filter' => '(objectClass=inetOrgPerson)', // used for basic listing (if not empty) and will be &'d with search queries. example: status=act - 'fuzzy_search' => true, // server allows wildcard search - 'vlv' => false, // Enable Virtual List View to more efficiently fetch paginated data (if server supports it) - 'numsub_filter' => '(objectClass=organizationalUnit)', // with VLV, we also use numSubOrdinates to query the total number of records. Set this filter to get all numSubOrdinates attributes for counting - 'sizelimit' => '0', // Enables you to limit the count of entries fetched. Setting this to 0 means no limit. - 'timelimit' => '0', // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit. - 'referrals' => true|false, // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups - - // definition for contact groups (uncomment if no groups are supported) - // for the groups base_dn, the user replacements %fu, %u, $d and %dc work as for base_dn (see above) - // if the groups base_dn is empty, the contact base_dn is used for the groups as well - // -> in this case, assure that groups and contacts are separated due to the concernig filters! - 'groups' => array( - 'base_dn' => '', - 'scope' => 'sub', // search mode: sub|base|list - 'filter' => '(objectClass=groupOfNames)', - 'object_classes' => array("top", "groupOfNames"), - 'member_attr' => 'member', // name of the member attribute, e.g. uniqueMember - 'name_attr' => 'cn', // attribute to be used as group name - ), -); -*/ - -// An ordered array of the ids of the addressbooks that should be searched -// when populating address autocomplete fields server-side. ex: array('sql','Verisign'); -$rcmail_config['autocomplete_addressbooks'] = array('sql'); - -// The minimum number of characters required to be typed in an autocomplete field -// before address books will be searched. Most useful for LDAP directories that -// may need to do lengthy results building given overly-broad searches -$rcmail_config['autocomplete_min_length'] = 1; - -// Number of parallel autocomplete requests. -// If there's more than one address book, n parallel (async) requests will be created, -// where each request will search in one address book. By default (0), all address -// books are searched in one request. -$rcmail_config['autocomplete_threads'] = 0; - -// Max. numer of entries in autocomplete popup. Default: 15. -$rcmail_config['autocomplete_max'] = 15; - -// show address fields in this order -// available placeholders: {street}, {locality}, {zipcode}, {country}, {region} -$rcmail_config['address_template'] = '{street}
{locality} {zipcode}
{country} {region}'; - -// Matching mode for addressbook search (including autocompletion) -// 0 - partial (*abc*), default -// 1 - strict (abc) -// 2 - prefix (abc*) -// Note: For LDAP sources fuzzy_search must be enabled to use 'partial' or 'prefix' mode -$rcmail_config['addressbook_search_mode'] = 0; - -// ---------------------------------- -// USER PREFERENCES -// ---------------------------------- - -// Use this charset as fallback for message decoding -//$rcmail_config['default_charset'] = 'ISO-8859-1'; -$rcmail_config['default_charset'] = 'UTF-8'; - -// skin name: folder from skins/ -$rcmail_config['skin'] = 'larry'; - -// show up to X items in messages list view -$rcmail_config['mail_pagesize'] = 50; - -// show up to X items in contacts list view -$rcmail_config['addressbook_pagesize'] = 50; - -// sort contacts by this col (preferably either one of name, firstname, surname) -$rcmail_config['addressbook_sort_col'] = 'surname'; - -// the way how contact names are displayed in the list -// 0: display name -// 1: (prefix) firstname middlename surname (suffix) -// 2: (prefix) surname firstname middlename (suffix) -// 3: (prefix) surname, firstname middlename (suffix) -$rcmail_config['addressbook_name_listing'] = 0; - -// use this timezone to display date/time -// valid timezone identifers are listed here: php.net/manual/en/timezones.php -// 'auto' will use the browser's timezone settings -$rcmail_config['timezone'] = 'auto'; - -// prefer displaying HTML messages -$rcmail_config['prefer_html'] = true; - -// display remote inline images -// 0 - Never, always ask -// 1 - Ask if sender is not in address book -// 2 - Always show inline images -$rcmail_config['show_images'] = 0; - -// compose html formatted messages by default -// 0 - never, 1 - always, 2 - on reply to HTML message only -$rcmail_config['htmleditor'] = 0; - -// show pretty dates as standard -$rcmail_config['prettydate'] = true; - -// save compose message every 30 seconds -$rcmail_config['draft_autosave'] = 30; - -// default setting if preview pane is enabled -$rcmail_config['preview_pane'] = false; - -// Mark as read when viewed in preview pane (delay in seconds) -// Set to -1 if messages in preview pane should not be marked as read -$rcmail_config['preview_pane_mark_read'] = 0; - -// Clear Trash on logout -$rcmail_config['logout_purge'] = false; - -// Compact INBOX on logout -$rcmail_config['logout_expunge'] = false; - -// Display attached images below the message body -$rcmail_config['inline_images'] = true; - -// Encoding of long/non-ascii attachment names: -// 0 - Full RFC 2231 compatible -// 1 - RFC 2047 for 'name' and RFC 2231 for 'filename' parameter (Thunderbird's default) -// 2 - Full 2047 compatible -$rcmail_config['mime_param_folding'] = 1; - -// Set true if deleted messages should not be displayed -// This will make the application run slower -$rcmail_config['skip_deleted'] = false; - -// Set true to Mark deleted messages as read as well as deleted -// False means that a message's read status is not affected by marking it as deleted -$rcmail_config['read_when_deleted'] = true; - -// Set to true to never delete messages immediately -// Use 'Purge' to remove messages marked as deleted -$rcmail_config['flag_for_deletion'] = false; - -// Default interval for keep-alive/check-recent requests (in seconds) -// Must be greater than or equal to 'min_keep_alive' and less than 'session_lifetime' -$rcmail_config['keep_alive'] = 60; - -// If true all folders will be checked for recent messages -$rcmail_config['check_all_folders'] = false; - -// If true, after message delete/move, the next message will be displayed -$rcmail_config['display_next'] = false; - -// 0 - Do not expand threads -// 1 - Expand all threads automatically -// 2 - Expand only threads with unread messages -$rcmail_config['autoexpand_threads'] = 0; - -// When replying place cursor above original message (top posting) -$rcmail_config['top_posting'] = false; - -// When replying strip original signature from message -$rcmail_config['strip_existing_sig'] = true; - -// Show signature: -// 0 - Never -// 1 - Always -// 2 - New messages only -// 3 - Forwards and Replies only -$rcmail_config['show_sig'] = 1; - -// When replying or forwarding place sender's signature above existing message -$rcmail_config['sig_above'] = false; - -// Use MIME encoding (quoted-printable) for 8bit characters in message body -$rcmail_config['force_7bit'] = false; - -// Defaults of the search field configuration. -// The array can contain a per-folder list of header fields which should be considered when searching -// The entry with key '*' stands for all folders which do not have a specific list set. -// Please note that folder names should to be in sync with $rcmail_config['default_folders'] -$rcmail_config['search_mods'] = null; // Example: array('*' => array('subject'=>1, 'from'=>1), 'Sent' => array('subject'=>1, 'to'=>1)); - -// Defaults of the addressbook search field configuration. -$rcmail_config['addressbook_search_mods'] = null; // Example: array('name'=>1, 'firstname'=>1, 'surname'=>1, 'email'=>1, '*'=>1); - -// 'Delete always' -// This setting reflects if mail should be always deleted -// when moving to Trash fails. This is necessary in some setups -// when user is over quota and Trash is included in the quota. -$rcmail_config['delete_always'] = false; - -// Directly delete messages in Junk instead of moving to Trash -$rcmail_config['delete_junk'] = true; - -// Behavior if a received message requests a message delivery notification (read receipt) -// 0 = ask the user, 1 = send automatically, 2 = ignore (never send or ask) -// 3 = send automatically if sender is in addressbook, otherwise ask the user -// 4 = send automatically if sender is in addressbook, otherwise ignore -$rcmail_config['mdn_requests'] = 0; - -// Return receipt checkbox default state -$rcmail_config['mdn_default'] = 0; - -// Delivery Status Notification checkbox default state -$rcmail_config['dsn_default'] = 0; - -// Place replies in the folder of the message being replied to -$rcmail_config['reply_same_folder'] = false; - -// Sets default mode of Forward feature to "forward as attachment" -$rcmail_config['forward_attachment'] = false; - -// Defines address book (internal index) to which new contacts will be added -// By default it is the first writeable addressbook. -// Note: Use '0' for built-in address book. -$rcmail_config['default_addressbook'] = null; - -// Enables spell checking before sending a message. -$rcmail_config['spellcheck_before_send'] = false; - -// Skip alternative email addresses in autocompletion (show one address per contact) -$rcmail_config['autocomplete_single'] = false; - -// Default font for composed HTML message. -// Supported values: Andale Mono, Arial, Arial Black, Book Antiqua, Courier New, -// Georgia, Helvetica, Impact, Tahoma, Terminal, Times New Roman, Trebuchet MS, Verdana -$rcmail_config['default_font'] = ''; - -// end of config file diff --git a/install/ubuntu/18.10/roundcube/vesta.php b/install/ubuntu/18.10/roundcube/vesta.php deleted file mode 100644 index b4a2a6b6c..000000000 --- a/install/ubuntu/18.10/roundcube/vesta.php +++ /dev/null @@ -1,72 +0,0 @@ - - */ -class rcube_vesta_password { - function save($curpass, $passwd) - { - $rcmail = rcmail::get_instance(); - $vesta_host = $rcmail->config->get('password_vesta_host'); - - if (empty($vesta_host)) - { - $vesta_host = 'localhost'; - } - - $vesta_port = $rcmail->config->get('password_vesta_port'); - if (empty($vesta_port)) - { - $vesta_port = '8083'; - } - - $postvars = array( - 'email' => $_SESSION['username'], - 'password' => $curpass, - 'new' => $passwd - ); - - $postdata = http_build_query($postvars); - - $send = 'POST /reset/mail/ HTTP/1.1' . PHP_EOL; - $send .= 'Host: ' . $vesta_host . PHP_EOL; - $send .= 'User-Agent: PHP Script' . PHP_EOL; - $send .= 'Content-length: ' . strlen($postdata) . PHP_EOL; - $send .= 'Content-type: application/x-www-form-urlencoded' . PHP_EOL; - $send .= 'Connection: close' . PHP_EOL; - $send .= PHP_EOL; - $send .= $postdata . PHP_EOL . PHP_EOL; - - //$fp = fsockopen('ssl://' . $vesta_host, $vesta_port); - $errno = ""; - $errstr = ""; - $context = stream_context_create(); - $result = stream_context_set_option($context, 'ssl', 'verify_peer', false); - $result = stream_context_set_option($context, 'ssl', 'verify_peer_name', false); - $result = stream_context_set_option($context, 'ssl', 'verify_host', false); - $result = stream_context_set_option($context, 'ssl', 'allow_self_signed', true); - - $fp = stream_socket_client('ssl://' . $vesta_host . ':'.$vesta_port, $errno, $errstr, 60, STREAM_CLIENT_CONNECT, $context); - fputs($fp, $send); - $result = fread($fp, 2048); - fclose($fp); - - $fp = fopen("/tmp/roundcube.log", 'w'); - fwrite($fp, "test ok"); - fwrite($fp, "\n"); - fclose($fp); - - - if(strpos($result, 'ok') && !strpos($result, 'error')) - { - return PASSWORD_SUCCESS; - } - else { - return PASSWORD_ERROR; - } - - } -} \ No newline at end of file diff --git a/install/ubuntu/18.10/sudo/admin b/install/ubuntu/18.10/sudo/admin deleted file mode 100644 index 331fa1f2d..000000000 --- a/install/ubuntu/18.10/sudo/admin +++ /dev/null @@ -1,8 +0,0 @@ -# Created by vesta installer -Defaults env_keep="VESTA" -Defaults:admin !syslog -Defaults:admin !requiretty -Defaults:root !requiretty - -# sudo is limited to vesta scripts -admin ALL=NOPASSWD:/usr/local/vesta/bin/* diff --git a/install/ubuntu/18.10/templates/dns/child-ns.tpl b/install/ubuntu/18.10/templates/dns/child-ns.tpl deleted file mode 100755 index 42c046e4f..000000000 --- a/install/ubuntu/18.10/templates/dns/child-ns.tpl +++ /dev/null @@ -1,14 +0,0 @@ -ID='1' RECORD='@' TYPE='NS' PRIORITY='' VALUE='ns1.%domain%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='2' RECORD='@' TYPE='NS' PRIORITY='' VALUE='ns2.%domain%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='3' RECORD='@' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='4' RECORD='ns1' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='5' RECORD='ns2' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='6' RECORD='www' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='7' RECORD='ftp' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='8' RECORD='mail' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='9' RECORD='smtp' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='10' RECORD='pop' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='11' RECORD='imap' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='12' RECORD='@' TYPE='MX' PRIORITY='10' VALUE='mail.%domain%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='13' RECORD='@' TYPE='TXT' PRIORITY='' VALUE='"v=spf1 a mx ip4:%ip% ~all"' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='14' RECORD='_dmarc' TYPE='TXT' PRIORITY='' VALUE='"v=DMARC1; p=none"' SUSPENDED='no' TIME='%time%' DATE='%date%' diff --git a/install/ubuntu/18.10/templates/dns/default.tpl b/install/ubuntu/18.10/templates/dns/default.tpl deleted file mode 100755 index e0a37e628..000000000 --- a/install/ubuntu/18.10/templates/dns/default.tpl +++ /dev/null @@ -1,18 +0,0 @@ -ID='1' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns1%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='2' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns2%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='3' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns3%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='4' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns4%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='5' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns5%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='6' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns6%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='7' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns7%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='8' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns8%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='9' RECORD='@' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='10' RECORD='www' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='11' RECORD='ftp' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='12' RECORD='mail' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='13' RECORD='smtp' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='14' RECORD='pop' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='15' RECORD='imap' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='16' RECORD='@' TYPE='MX' PRIORITY='10' VALUE='mail.%domain%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='17' RECORD='@' TYPE='TXT' PRIORITY='' VALUE='"v=spf1 a mx ip4:%ip% ~all"' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='18' RECORD='_dmarc' TYPE='TXT' PRIORITY='' VALUE='"v=DMARC1; p=none"' SUSPENDED='no' TIME='%time%' DATE='%date%' diff --git a/install/ubuntu/18.10/templates/dns/gmail.tpl b/install/ubuntu/18.10/templates/dns/gmail.tpl deleted file mode 100755 index 219c9d24e..000000000 --- a/install/ubuntu/18.10/templates/dns/gmail.tpl +++ /dev/null @@ -1,12 +0,0 @@ -ID='1' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns1%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='2' RECORD='@' TYPE='NS' PRIORITY='' VALUE='%ns2%.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='3' RECORD='@' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='4' RECORD='ftp' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='5' RECORD='localhost' TYPE='A' PRIORITY='' VALUE='127.0.0.1' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='6' RECORD='www' TYPE='A' PRIORITY='' VALUE='%ip%' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='7' RECORD='@' TYPE='MX' PRIORITY='1' VALUE='ASPMX.L.GOOGLE.COM.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='8' RECORD='@' TYPE='MX' PRIORITY='5' VALUE='ALT1.ASPMX.L.GOOGLE.COM.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='9' RECORD='@' TYPE='MX' PRIORITY='5' VALUE='ALT2.ASPMX.L.GOOGLE.COM.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='10' RECORD='@' TYPE='MX' PRIORITY='10' VALUE='ALT3.ASPMX.L.GOOGLE.COM.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='11' RECORD='@' TYPE='MX' PRIORITY='10' VALUE='ALT4.ASPMX.L.GOOGLE.COM.' SUSPENDED='no' TIME='%time%' DATE='%date%' -ID='12' RECORD='@' TYPE='TXT' PRIORITY='' VALUE='"v=spf1 a mx ip4:%ip% include:_spf.google.com ~all"' SUSPENDED='no' TIME='%time%' DATE='%date%' diff --git a/install/ubuntu/18.10/templates/web/apache2/basedir.stpl b/install/ubuntu/18.10/templates/web/apache2/basedir.stpl deleted file mode 100644 index 04c39fcf6..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/basedir.stpl +++ /dev/null @@ -1,45 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %sdocroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - #SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - AllowOverride All - SSLRequireSSL - Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %docroot%:%home%/%user%/tmp - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - - - AllowOverride All - - SSLEngine on - SSLVerifyClient none - SSLCertificateFile %ssl_crt% - SSLCertificateKeyFile %ssl_key% - %ssl_ca_str%SSLCertificateChainFile %ssl_ca% - - - RMode config - RUidGid %user% %group% - RGroups www-data - - - AssignUserID %user% %group% - - - IncludeOptional %home%/%user%/conf/web/s%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/apache2/basedir.tpl b/install/ubuntu/18.10/templates/web/apache2/basedir.tpl deleted file mode 100644 index a9d05ee66..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/basedir.tpl +++ /dev/null @@ -1,39 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %docroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - #SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - AllowOverride All - Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %docroot%:%home%/%user%/tmp - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - - - AllowOverride All - - - - RMode config - RUidGid %user% %group% - RGroups www-data - - - AssignUserID %user% %group% - - - IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/apache2/default.stpl b/install/ubuntu/18.10/templates/web/apache2/default.stpl deleted file mode 100644 index a5c509a9e..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/default.stpl +++ /dev/null @@ -1,44 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %sdocroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - #SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - AllowOverride All - SSLRequireSSL - Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - - - AllowOverride All - - SSLEngine on - SSLVerifyClient none - SSLCertificateFile %ssl_crt% - SSLCertificateKeyFile %ssl_key% - %ssl_ca_str%SSLCertificateChainFile %ssl_ca% - - - RMode config - RUidGid %user% %group% - RGroups www-data - - - AssignUserID %user% %group% - - - IncludeOptional %home%/%user%/conf/web/s%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/apache2/default.tpl b/install/ubuntu/18.10/templates/web/apache2/default.tpl deleted file mode 100644 index e591a1cf1..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/default.tpl +++ /dev/null @@ -1,38 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %docroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - #SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - AllowOverride All - Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %docroot%:%home%/%user%/tmp - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - - - AllowOverride All - - - - RMode config - RUidGid %user% %group% - RGroups www-data - - - AssignUserID %user% %group% - - - IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/apache2/hosting.stpl b/install/ubuntu/18.10/templates/web/apache2/hosting.stpl deleted file mode 100644 index 6d99c97c9..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/hosting.stpl +++ /dev/null @@ -1,50 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %sdocroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - #SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - AllowOverride All - SSLRequireSSL - Options +Includes -Indexes +ExecCGI - php_admin_value upload_max_filesize 10M - php_admin_value max_execution_time 20 - php_admin_value post_max_size 8M - php_admin_value memory_limit 32M - php_admin_flag mysql.allow_persistent off - php_admin_flag safe_mode off - php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - - - AllowOverride All - - SSLEngine on - SSLVerifyClient none - SSLCertificateFile %ssl_crt% - SSLCertificateKeyFile %ssl_key% - %ssl_ca_str%SSLCertificateChainFile %ssl_ca% - - RMode config - RUidGid %user% %group% - RGroups www-data - - - AssignUserID %user% %group% - - - IncludeOptional %home%/%user%/conf/web/s%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/apache2/hosting.tpl b/install/ubuntu/18.10/templates/web/apache2/hosting.tpl deleted file mode 100644 index b7c12699d..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/hosting.tpl +++ /dev/null @@ -1,44 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %docroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - #SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - AllowOverride All - Options +Includes -Indexes +ExecCGI - php_admin_value upload_max_filesize 10M - php_admin_value max_execution_time 20 - php_admin_value post_max_size 8M - php_admin_value memory_limit 32M - php_admin_flag mysql.allow_persistent off - php_admin_flag safe_mode off - php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f info@%domain_idn%" - php_admin_value open_basedir %docroot%:%home%/%user%/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpMyAdmin:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcubemail:/etc/roundcube:/var/lib/roundcube - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - - - AllowOverride All - - - RMode config - RUidGid %user% %group% - RGroups www-data - - - AssignUserID %user% %group% - - - IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/apache2/phpcgi.sh b/install/ubuntu/18.10/templates/web/apache2/phpcgi.sh deleted file mode 100755 index 6565e103d..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/phpcgi.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -# Adding php wrapper -user="$1" -domain="$2" -ip="$3" -home_dir="$4" -docroot="$5" - -wrapper_script='#!/usr/bin/php-cgi -cphp5-cgi.ini' -wrapper_file="$home_dir/$user/web/$domain/cgi-bin/php" - -echo "$wrapper_script" > $wrapper_file -chown $user:$user $wrapper_file -chmod -f 751 $wrapper_file - -exit 0 diff --git a/install/ubuntu/18.10/templates/web/apache2/phpcgi.stpl b/install/ubuntu/18.10/templates/web/apache2/phpcgi.stpl deleted file mode 100644 index b7bd884ee..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/phpcgi.stpl +++ /dev/null @@ -1,39 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %sdocroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - SSLRequireSSL - AllowOverride All - Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %docroot%:%home%/%user%/tmp - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - Action phpcgi-script /cgi-bin/php - - SetHandler phpcgi-script - - - - AllowOverride All - - SSLEngine on - SSLVerifyClient none - SSLCertificateFile %ssl_crt% - SSLCertificateKeyFile %ssl_key% - %ssl_ca_str%SSLCertificateChainFile %ssl_ca% - - IncludeOptional %home%/%user%/conf/web/s%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/apache2/phpcgi.tpl b/install/ubuntu/18.10/templates/web/apache2/phpcgi.tpl deleted file mode 100644 index 9d04361da..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/phpcgi.tpl +++ /dev/null @@ -1,32 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %docroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - AllowOverride All - Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %docroot%:%home%/%user%/tmp - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - Action phpcgi-script /cgi-bin/php - - SetHandler phpcgi-script - - - - AllowOverride All - - IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/apache2/phpfcgid.sh b/install/ubuntu/18.10/templates/web/apache2/phpfcgid.sh deleted file mode 100755 index e80582492..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/phpfcgid.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash -# Adding php wrapper -user="$1" -domain="$2" -ip="$3" -home_dir="$4" -docroot="$5" - -wrapper_script="#!/bin/sh -PHPRC=/usr/local/lib -export PHPRC -export PHP_FCGI_MAX_REQUESTS=1000 -export PHP_FCGI_CHILDREN=20 -exec /usr/bin/php-cgi -" -wrapper_file="$home_dir/$user/web/$domain/cgi-bin/fcgi-starter" - -echo "$wrapper_script" > $wrapper_file -chown $user:$user $wrapper_file -chmod -f 751 $wrapper_file - -exit 0 diff --git a/install/ubuntu/18.10/templates/web/apache2/phpfcgid.stpl b/install/ubuntu/18.10/templates/web/apache2/phpfcgid.stpl deleted file mode 100644 index 37865a5ba..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/phpfcgid.stpl +++ /dev/null @@ -1,40 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %sdocroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - SSLRequireSSL - AllowOverride All - Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %docroot%:%home%/%user%/tmp - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - - SetHandler fcgid-script - - FCGIWrapper %home%/%user%/web/%domain%/cgi-bin/fcgi-starter .php - - - AllowOverride All - - php_admin_value open_basedir none - SSLEngine on - SSLVerifyClient none - SSLCertificateFile %ssl_crt% - SSLCertificateKeyFile %ssl_key% - %ssl_ca_str%SSLCertificateChainFile %ssl_ca% - - IncludeOptional %home%/%user%/conf/web/s%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/apache2/phpfcgid.tpl b/install/ubuntu/18.10/templates/web/apache2/phpfcgid.tpl deleted file mode 100644 index 152e7c694..000000000 --- a/install/ubuntu/18.10/templates/web/apache2/phpfcgid.tpl +++ /dev/null @@ -1,32 +0,0 @@ - - - ServerName %domain_idn% - %alias_string% - ServerAdmin %email% - DocumentRoot %docroot% - ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ - Alias /vstats/ %home%/%user%/web/%domain%/stats/ - Alias /error/ %home%/%user%/web/%domain%/document_errors/ - SuexecUserGroup %user% %group% - CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes - CustomLog /var/log/%web_system%/domains/%domain%.log combined - ErrorLog /var/log/%web_system%/domains/%domain%.error.log - - AllowOverride All - Options +Includes -Indexes +ExecCGI - php_admin_value open_basedir %docroot%:%home%/%user%/tmp - php_admin_value upload_tmp_dir %home%/%user%/tmp - php_admin_value sys_temp_dir %home%/%user%/tmp - php_admin_value session.save_path %home%/%user%/tmp - - SetHandler fcgid-script - - FCGIWrapper %home%/%user%/web/%domain%/cgi-bin/fcgi-starter .php - - - AllowOverride All - - IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.conf* - - - diff --git a/install/ubuntu/18.10/templates/web/awstats/awstats.tpl b/install/ubuntu/18.10/templates/web/awstats/awstats.tpl deleted file mode 100755 index 9a92e0fd4..000000000 --- a/install/ubuntu/18.10/templates/web/awstats/awstats.tpl +++ /dev/null @@ -1,133 +0,0 @@ -LogFile="/var/log/%web_system%/domains/%domain%.log" -LogType=W -LogFormat=1 -LogSeparator=" " -SiteDomain="%domain_idn%" -HostAliases="%alias_idn%" -DirData="%home%/%user%/web/%domain%/stats" -DirCgi="/vstats" -DirIcons="/vstats/icon" -AllowToUpdateStatsFromBrowser=0 -AllowFullYearView=2 -EnableLockForUpdate=1 -DNSStaticCacheFile="dnscache.txt" -DNSLastUpdateCacheFile="dnscachelastupdate.txt" -SkipDNSLookupFor="" -AllowAccessFromWebToAuthenticatedUsersOnly=0 -AllowAccessFromWebToFollowingAuthenticatedUsers="" -AllowAccessFromWebToFollowingIPAddresses="" -CreateDirDataIfNotExists=0 -BuildHistoryFormat=text -BuildReportFormat=html -SaveDatabaseFilesWithPermissionsForEveryone=0 -PurgeLogFile=0 -ArchiveLogRecords=0 -KeepBackupOfHistoricFiles=1 -DefaultFile="index.php index.html" -SkipHosts="127.0.0.1 -SkipUserAgents="" -SkipFiles="" -SkipReferrersBlackList="" -OnlyHosts="" -OnlyUserAgents="" -OnlyUsers="" -OnlyFiles="" -NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" -ValidHTTPCodes="200 304" -ValidSMTPCodes="1 250" -AuthenticatedUsersNotCaseSensitive=0 -URLNotCaseSensitive=0 -URLWithAnchor=0 -URLQuerySeparators="?;" -URLWithQuery=0 -URLWithQueryWithOnlyFollowingParameters="" -URLWithQueryWithoutFollowingParameters="" -URLReferrerWithQuery=0 -WarningMessages=1 -ErrorMessages="" -DebugMessages=0 -NbOfLinesForCorruptedLog=50 -WrapperScript="" -DecodeUA=0 -MiscTrackerUrl="/js/awstats_misc_tracker.js" -UseFramesWhenCGI=1 -DetailedReportsOnNewWindows=1 -Expires=3600 -MaxRowsInHTMLOutput=1000 -Lang="auto" -DirLang="./lang" -ShowMenu=1 -ShowSummary=UVPHB -ShowMonthStats=UVPHB -ShowDaysOfMonthStats=VPHB -ShowDaysOfWeekStats=PHB -ShowHoursStats=PHB -ShowDomainsStats=PHB -ShowHostsStats=PHBL -ShowAuthenticatedUsers=0 -ShowRobotsStats=HBL -ShowWormsStats=0 -ShowEMailSenders=0 -ShowEMailReceivers=0 -ShowSessionsStats=1 -ShowPagesStats=PBEX -ShowFileTypesStats=HB -ShowFileSizesStats=0 -ShowDownloadsStats=HB -ShowOSStats=1 -ShowBrowsersStats=1 -ShowScreenSizeStats=0 -ShowOriginStats=PH -ShowKeyphrasesStats=1 -ShowKeywordsStats=1 -ShowMiscStats=a -ShowHTTPErrorsStats=1 -ShowSMTPErrorsStats=0 -ShowClusterStats=0 -AddDataArrayMonthStats=1 -AddDataArrayShowDaysOfMonthStats=1 -AddDataArrayShowDaysOfWeekStats=1 -AddDataArrayShowHoursStats=1 -IncludeInternalLinksInOriginSection=0 -MaxNbOfDomain = 10 -MinHitDomain = 1 -MaxNbOfHostsShown = 10 -MinHitHost = 1 -MaxNbOfLoginShown = 10 -MinHitLogin = 1 -MaxNbOfRobotShown = 10 -MinHitRobot = 1 -MaxNbOfDownloadsShown = 10 -MinHitDownloads = 1 -MaxNbOfPageShown = 10 -MinHitFile = 1 -MaxNbOfOsShown = 10 -MinHitOs = 1 -MaxNbOfBrowsersShown = 10 -MinHitBrowser = 1 -MaxNbOfScreenSizesShown = 5 -MinHitScreenSize = 1 -MaxNbOfWindowSizesShown = 5 -MinHitWindowSize = 1 -MaxNbOfRefererShown = 10 -MinHitRefer = 1 -MaxNbOfKeyphrasesShown = 10 -MinHitKeyphrase = 1 -MaxNbOfKeywordsShown = 10 -MinHitKeyword = 1 -MaxNbOfEMailsShown = 20 -MinHitEMail = 1 -FirstDayOfWeek=0 -ShowFlagLinks="" -ShowLinksOnUrl=1 -UseHTTPSLinkForUrl="" -MaxLengthOfShownURL=64 -HTMLHeadSection="" -HTMLEndSection="" -MetaRobot=0 -Logo="awstats_logo6.png" -LogoLink="http://awstats.sourceforge.net" -BarWidth = 260 -BarHeight = 90 -StyleSheet="" -ExtraTrackedRowsLimit=500 diff --git a/install/ubuntu/18.10/templates/web/awstats/index.tpl b/install/ubuntu/18.10/templates/web/awstats/index.tpl deleted file mode 100755 index 9df9bb5cb..000000000 --- a/install/ubuntu/18.10/templates/web/awstats/index.tpl +++ /dev/null @@ -1,10 +0,0 @@ - - - - Awstats log analyzer - - - - - - diff --git a/install/ubuntu/18.10/templates/web/awstats/nav.tpl b/install/ubuntu/18.10/templates/web/awstats/nav.tpl deleted file mode 100755 index f29bed68b..000000000 --- a/install/ubuntu/18.10/templates/web/awstats/nav.tpl +++ /dev/null @@ -1,23 +0,0 @@ - - - Awstats navigation - - - - - - - - -
vesta
- -
-
- - diff --git a/install/ubuntu/18.10/templates/web/nginx/caching.sh b/install/ubuntu/18.10/templates/web/nginx/caching.sh deleted file mode 100755 index 09d8efe75..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/caching.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -user=$1 -domain=$2 -ip=$3 -home=$4 -docroot=$5 - -str="proxy_cache_path /var/cache/nginx/$domain levels=2" -str="$str keys_zone=$domain:10m inactive=60m max_size=512m;" -conf='/etc/nginx/conf.d/01_caching_pool.conf' -if [ -e "$conf" ]; then - if [ -z "$(grep "=${domain}:" $conf)" ]; then - echo "$str" >> $conf - fi -else - echo "$str" >> $conf -fi - diff --git a/install/ubuntu/18.10/templates/web/nginx/caching.stpl b/install/ubuntu/18.10/templates/web/nginx/caching.stpl deleted file mode 100755 index e149b98b5..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/caching.stpl +++ /dev/null @@ -1,43 +0,0 @@ -server { - listen %ip%:%proxy_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - location / { - proxy_pass https://%ip%:%web_ssl_port%; - - proxy_cache cache; - proxy_cache_valid 15m; - proxy_cache_valid 404 1m; - proxy_no_cache $no_cache; - proxy_cache_bypass $no_cache; - proxy_cache_bypass $cookie_session $http_x_update; - - location ~* ^.+\.(%proxy_extentions%)$ { - proxy_cache off; - root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass https://%ip%:%web_ssl_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/caching.tpl b/install/ubuntu/18.10/templates/web/nginx/caching.tpl deleted file mode 100755 index 36761b65c..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/caching.tpl +++ /dev/null @@ -1,41 +0,0 @@ -server { - listen %ip%:%proxy_port%; - server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - location / { - proxy_pass http://%ip%:%web_port%; - - proxy_cache cache; - proxy_cache_valid 15m; - proxy_cache_valid 404 1m; - proxy_no_cache $no_cache; - proxy_cache_bypass $no_cache; - proxy_cache_bypass $cookie_session $http_x_update; - - location ~* ^.+\.(%proxy_extentions%)$ { - proxy_cache off; - root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass http://%ip%:%web_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/default.stpl b/install/ubuntu/18.10/templates/web/nginx/default.stpl deleted file mode 100755 index 0e669b3dc..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/default.stpl +++ /dev/null @@ -1,35 +0,0 @@ -server { - listen %ip%:%proxy_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - location / { - proxy_pass https://%ip%:%web_ssl_port%; - location ~* ^.+\.(%proxy_extentions%)$ { - root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass https://%ip%:%web_ssl_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} - diff --git a/install/ubuntu/18.10/templates/web/nginx/default.tpl b/install/ubuntu/18.10/templates/web/nginx/default.tpl deleted file mode 100755 index 4d5c774bc..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/default.tpl +++ /dev/null @@ -1,33 +0,0 @@ -server { - listen %ip%:%proxy_port%; - server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - location / { - proxy_pass http://%ip%:%web_port%; - location ~* ^.+\.(%proxy_extentions%)$ { - root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass http://%ip%:%web_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} - diff --git a/install/ubuntu/18.10/templates/web/nginx/hosting.sh b/install/ubuntu/18.10/templates/web/nginx/hosting.sh deleted file mode 100755 index eeed37ef9..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/hosting.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -# Changing public_html permission -user="$1" -domain="$2" -ip="$3" -home_dir="$4" -docroot="$5" - -chmod 755 $docroot - -exit 0 diff --git a/install/ubuntu/18.10/templates/web/nginx/hosting.stpl b/install/ubuntu/18.10/templates/web/nginx/hosting.stpl deleted file mode 100755 index 1ef8994b6..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/hosting.stpl +++ /dev/null @@ -1,37 +0,0 @@ -server { - listen %ip%:%proxy_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - location / { - proxy_pass https://%ip%:%web_ssl_port%; - location ~* ^.+\.(%proxy_extentions%)$ { - root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass https://%ip%:%web_ssl_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - disable_symlinks if_not_owner from=%docroot%; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} - diff --git a/install/ubuntu/18.10/templates/web/nginx/hosting.tpl b/install/ubuntu/18.10/templates/web/nginx/hosting.tpl deleted file mode 100755 index 15961c95c..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/hosting.tpl +++ /dev/null @@ -1,35 +0,0 @@ -server { - listen %ip%:%proxy_port%; - server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - location / { - proxy_pass http://%ip%:%web_port%; - location ~* ^.+\.(%proxy_extentions%)$ { - root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass http://%ip%:%web_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - disable_symlinks if_not_owner from=%docroot%; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} - diff --git a/install/ubuntu/18.10/templates/web/nginx/http2.stpl b/install/ubuntu/18.10/templates/web/nginx/http2.stpl deleted file mode 100644 index f225becd2..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/http2.stpl +++ /dev/null @@ -1,35 +0,0 @@ -server { - listen %ip%:%proxy_ssl_port% ssl http2; - server_name %domain_idn% %alias_idn%; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - location / { - proxy_pass https://%ip%:%web_ssl_port%; - location ~* ^.+\.(%proxy_extentions%)$ { - root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass https://%ip%:%web_ssl_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} - diff --git a/install/ubuntu/18.10/templates/web/nginx/http2.tpl b/install/ubuntu/18.10/templates/web/nginx/http2.tpl deleted file mode 100644 index 4d5c774bc..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/http2.tpl +++ /dev/null @@ -1,33 +0,0 @@ -server { - listen %ip%:%proxy_port%; - server_name %domain_idn% %alias_idn%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - location / { - proxy_pass http://%ip%:%web_port%; - location ~* ^.+\.(%proxy_extentions%)$ { - root %docroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass http://%ip%:%web_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} - diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/cms_made_simple.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/cms_made_simple.stpl deleted file mode 100644 index 003e91807..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/cms_made_simple.stpl +++ /dev/null @@ -1,55 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?page=$request_uri; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/cms_made_simple.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/cms_made_simple.tpl deleted file mode 100644 index f9e90393e..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/cms_made_simple.tpl +++ /dev/null @@ -1,52 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?page=$request_uri; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter2.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter2.stpl deleted file mode 100644 index 51f1f4085..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter2.stpl +++ /dev/null @@ -1,60 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /index.php { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME /var/www/html/ci$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - } - - location ~ \.php$ { - return 444; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter2.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter2.tpl deleted file mode 100644 index d2422be2e..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter2.tpl +++ /dev/null @@ -1,57 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location = /index.php { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME /var/www/html/ci$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - } - - location ~ \.php$ { - return 444; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter3.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter3.stpl deleted file mode 100644 index e8dd8bf64..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter3.stpl +++ /dev/null @@ -1,55 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter3.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter3.tpl deleted file mode 100644 index 54f81b998..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/codeigniter3.tpl +++ /dev/null @@ -1,52 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/datalife_engine.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/datalife_engine.stpl deleted file mode 100644 index 96495ee85..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/datalife_engine.stpl +++ /dev/null @@ -1,126 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - rewrite "^/page/([0-9]+)(/?)$" /index.php?cstart=$1 last; - - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 last; - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last; - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$" /engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last; - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 last; - - rewrite "^/([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 last; - rewrite "^/([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 last; - rewrite "^/([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 last; - rewrite "^/([^.]+)/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&seourl=$3&seocat=$1 last; - - rewrite "^/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 last; - rewrite "^/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&news_page=$1&seourl=$3 last; - rewrite "^/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$1&newsid=$2&seourl=$3 last; - rewrite "^/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$1&seourl=$2 last; - - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2&day=$3 last; - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&day=$3&cstart=$4 last; - - rewrite "^/([0-9]{4})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2 last; - rewrite "^/([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&cstart=$3 last; - - rewrite "^/([0-9]{4})(/?)+$" /index.php?year=$1 last; - rewrite "^/([0-9]{4})/page/([0-9]+)(/?)+$" /index.php?year=$1&cstart=$2 last; - - rewrite "^/tags/([^/]*)(/?)+$" /index.php?do=tags&tag=$1 last; - rewrite "^/tags/([^/]*)/page/([0-9]+)(/?)+$" /index.php?do=tags&tag=$1&cstart=$2 last; - - rewrite "^/xfsearch/([^/]*)(/?)+$" /index.php?do=xfsearch&xf=$1 last; - rewrite "^/xfsearch/([^/]*)/page/([0-9]+)(/?)+$" /index.php?do=xfsearch&xf=$1&cstart=$2 last; - - rewrite "^/user/([^/]*)/rss.xml$" /engine/rss.php?subaction=allnews&user=$1 last; - rewrite "^/user/([^/]*)(/?)+$" /index.php?subaction=userinfo&user=$1 last; - rewrite "^/user/([^/]*)/page/([0-9]+)(/?)+$" /index.php?subaction=userinfo&user=$1&cstart=$2 last; - rewrite "^/user/([^/]*)/news(/?)+$" /index.php?subaction=allnews&user=$1 last; - rewrite "^/user/([^/]*)/news/page/([0-9]+)(/?)+$" /index.php?subaction=allnews&user=$1&cstart=$2 last; - rewrite "^/user/([^/]*)/news/rss.xml(/?)+$" /engine/rss.php?subaction=allnews&user=$1 last; - - rewrite "^/lastnews(/?)+$" /index.php?do=lastnews last; - rewrite "^/lastnews/page/([0-9]+)(/?)+$" /index.php?do=lastnews&cstart=$1 last; - - rewrite "^/catalog/([^/]*)/rss.xml$" /engine/rss.php?catalog=$1 last; - rewrite "^/catalog/([^/]*)(/?)+$" /index.php?catalog=$1 last; - rewrite "^/catalog/([^/]*)/page/([0-9]+)(/?)+$" /index.php?catalog=$1&cstart=$2 last; - - rewrite "^/newposts(/?)+$" /index.php?subaction=newposts last; - rewrite "^/newposts/page/([0-9]+)(/?)+$" /index.php?subaction=newposts&cstart=$1 last; - - rewrite "^/favorites(/?)+$" /index.php?do=favorites last; - rewrite "^/favorites/page/([0-9]+)(/?)+$" /index.php?do=favorites&cstart=$1 last; - - rewrite "^/rules.html$" /index.php?do=rules last; - rewrite "^/statistics.html$" /index.php?do=stats last; - rewrite "^/addnews.html$" /index.php?do=addnews last; - rewrite "^/rss.xml$" /engine/rss.php last; - rewrite "^/sitemap.xml$" /uploads/sitemap.xml last; - - if (!-d $request_filename) { - rewrite "^/([^.]+)/page/([0-9]+)(/?)+$" /index.php?do=cat&category=$1&cstart=$2 last; - rewrite "^/([^.]+)/?$" /index.php?do=cat&category=$1 last; - } - - if (!-f $request_filename) { - rewrite "^/([^.]+)/rss.xml$" /engine/rss.php?do=cat&category=$1 last; - rewrite "^/page,([0-9]+),([^/]+).html$" /index.php?do=static&page=$2&news_page=$1 last; - rewrite "^/print:([^/]+).html$" /engine/print.php?do=static&page=$1 last; - } - - if (!-f $request_filename) { - rewrite "^/([^/]+).html$" /index.php?do=static&page=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/datalife_engine.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/datalife_engine.tpl deleted file mode 100644 index 3ea453471..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/datalife_engine.tpl +++ /dev/null @@ -1,123 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - rewrite "^/page/([0-9]+)(/?)$" /index.php?cstart=$1 last; - - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 last; - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last; - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$" /engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last; - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 last; - - rewrite "^/([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 last; - rewrite "^/([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 last; - rewrite "^/([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 last; - rewrite "^/([^.]+)/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&seourl=$3&seocat=$1 last; - - rewrite "^/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 last; - rewrite "^/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&news_page=$1&seourl=$3 last; - rewrite "^/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$1&newsid=$2&seourl=$3 last; - rewrite "^/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$1&seourl=$2 last; - - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2&day=$3 last; - rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&day=$3&cstart=$4 last; - - rewrite "^/([0-9]{4})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2 last; - rewrite "^/([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&cstart=$3 last; - - rewrite "^/([0-9]{4})(/?)+$" /index.php?year=$1 last; - rewrite "^/([0-9]{4})/page/([0-9]+)(/?)+$" /index.php?year=$1&cstart=$2 last; - - rewrite "^/tags/([^/]*)(/?)+$" /index.php?do=tags&tag=$1 last; - rewrite "^/tags/([^/]*)/page/([0-9]+)(/?)+$" /index.php?do=tags&tag=$1&cstart=$2 last; - - rewrite "^/xfsearch/([^/]*)(/?)+$" /index.php?do=xfsearch&xf=$1 last; - rewrite "^/xfsearch/([^/]*)/page/([0-9]+)(/?)+$" /index.php?do=xfsearch&xf=$1&cstart=$2 last; - - rewrite "^/user/([^/]*)/rss.xml$" /engine/rss.php?subaction=allnews&user=$1 last; - rewrite "^/user/([^/]*)(/?)+$" /index.php?subaction=userinfo&user=$1 last; - rewrite "^/user/([^/]*)/page/([0-9]+)(/?)+$" /index.php?subaction=userinfo&user=$1&cstart=$2 last; - rewrite "^/user/([^/]*)/news(/?)+$" /index.php?subaction=allnews&user=$1 last; - rewrite "^/user/([^/]*)/news/page/([0-9]+)(/?)+$" /index.php?subaction=allnews&user=$1&cstart=$2 last; - rewrite "^/user/([^/]*)/news/rss.xml(/?)+$" /engine/rss.php?subaction=allnews&user=$1 last; - - rewrite "^/lastnews(/?)+$" /index.php?do=lastnews last; - rewrite "^/lastnews/page/([0-9]+)(/?)+$" /index.php?do=lastnews&cstart=$1 last; - - rewrite "^/catalog/([^/]*)/rss.xml$" /engine/rss.php?catalog=$1 last; - rewrite "^/catalog/([^/]*)(/?)+$" /index.php?catalog=$1 last; - rewrite "^/catalog/([^/]*)/page/([0-9]+)(/?)+$" /index.php?catalog=$1&cstart=$2 last; - - rewrite "^/newposts(/?)+$" /index.php?subaction=newposts last; - rewrite "^/newposts/page/([0-9]+)(/?)+$" /index.php?subaction=newposts&cstart=$1 last; - - rewrite "^/favorites(/?)+$" /index.php?do=favorites last; - rewrite "^/favorites/page/([0-9]+)(/?)+$" /index.php?do=favorites&cstart=$1 last; - - rewrite "^/rules.html$" /index.php?do=rules last; - rewrite "^/statistics.html$" /index.php?do=stats last; - rewrite "^/addnews.html$" /index.php?do=addnews last; - rewrite "^/rss.xml$" /engine/rss.php last; - rewrite "^/sitemap.xml$" /uploads/sitemap.xml last; - - if (!-d $request_filename) { - rewrite "^/([^.]+)/page/([0-9]+)(/?)+$" /index.php?do=cat&category=$1&cstart=$2 last; - rewrite "^/([^.]+)/?$" /index.php?do=cat&category=$1 last; - } - - if (!-f $request_filename) { - rewrite "^/([^.]+)/rss.xml$" /engine/rss.php?do=cat&category=$1 last; - rewrite "^/page,([0-9]+),([^/]+).html$" /index.php?do=static&page=$2&news_page=$1 last; - rewrite "^/print:([^/]+).html$" /engine/print.php?do=static&page=$1 last; - } - - if (!-f $request_filename) { - rewrite "^/([^/]+).html$" /index.php?do=static&page=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/default.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/default.stpl deleted file mode 100644 index 38de83d29..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/default.stpl +++ /dev/null @@ -1,54 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/default.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/default.tpl deleted file mode 100644 index a8909efbe..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/default.tpl +++ /dev/null @@ -1,51 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/dokuwiki.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/dokuwiki.stpl deleted file mode 100644 index c9387bfb4..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/dokuwiki.stpl +++ /dev/null @@ -1,71 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - index doku.php; - try_files $uri $uri/ @dokuwiki; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - } - - location ~ ^/lib.*\.(gif|png|ico|jpg)$ { - expires 30d; - } - - location ^~ /conf/ { return 403; } - location ^~ /data/ { return 403; } - - location @dokuwiki { - rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; - rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; - rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; - rewrite ^/(.*) /doku.php?id=$1 last; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/dokuwiki.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/dokuwiki.tpl deleted file mode 100644 index 0a9a75ed2..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/dokuwiki.tpl +++ /dev/null @@ -1,67 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - index doku.php; - try_files $uri $uri/ @dokuwiki; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - } - - location ~ ^/lib.*\.(gif|png|ico|jpg)$ { - expires 30d; - } - - location ^~ /conf/ { return 403; } - location ^~ /data/ { return 403; } - location @dokuwiki { - rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; - rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; - rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; - rewrite ^/(.*) /doku.php?id=$1 last; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal6.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal6.stpl deleted file mode 100644 index 6b20ba9d9..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal6.stpl +++ /dev/null @@ -1,84 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - try_files $uri @rewrite; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal6.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal6.tpl deleted file mode 100644 index 0ae7568bb..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal6.tpl +++ /dev/null @@ -1,81 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - try_files $uri @rewrite; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ ^/sites/.*/files/imagecache/ { - try_files $uri @rewrite; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal7.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal7.stpl deleted file mode 100644 index 041ebba05..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal7.stpl +++ /dev/null @@ -1,88 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal7.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal7.tpl deleted file mode 100644 index 6b41f319c..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal7.tpl +++ /dev/null @@ -1,85 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal8.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal8.stpl deleted file mode 100644 index 231d9441b..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal8.stpl +++ /dev/null @@ -1,93 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal8.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal8.tpl deleted file mode 100644 index 452aa9e6f..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/drupal8.tpl +++ /dev/null @@ -1,90 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - - location / { - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - location ~ ^/sites/.*/private/ { - return 403; - } - - location ~ ^/sites/[^/]+/files/.*\.php$ { - deny all; - } - - location ~ /vendor/.*\.php$ { - deny all; - return 404; - } - - try_files $uri /index.php?$query_string; - - location ~ ^/sites/.*/files/styles/ { - try_files $uri @rewrite; - } - - location ~ ^(/[a-z\-]+)?/system/files/ { - try_files $uri /index.php?$query_string; - } - - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { - try_files $uri @rewrite; - expires max; - log_not_found off; - } - - location ~ '\.php$|^/update.php' { - fastcgi_split_path_info ^(.+?\.php)(|/.*)$; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/joomla.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/joomla.stpl deleted file mode 100644 index 886b586ec..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/joomla.stpl +++ /dev/null @@ -1,62 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - # deny running scripts inside writable directories - location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ { - return 403; - error_page 403 /403_error.html; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/joomla.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/joomla.tpl deleted file mode 100644 index 91b7a8f16..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/joomla.tpl +++ /dev/null @@ -1,59 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - try_files $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - # deny running scripts inside writable directories - location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ { - return 403; - error_page 403 /403_error.html; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/laravel.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/laravel.stpl deleted file mode 100644 index 8e6e87744..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/laravel.stpl +++ /dev/null @@ -1,55 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ /index.php?$query_string; - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/laravel.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/laravel.tpl deleted file mode 100644 index d14b0173b..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/laravel.tpl +++ /dev/null @@ -1,50 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - location / { - try_files $uri $uri/ /index.php?$query_string; - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/magento.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/magento.stpl deleted file mode 100644 index 5d05ea725..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/magento.stpl +++ /dev/null @@ -1,197 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - - root %sdocroot%/pub; - index index.php; - autoindex off; - charset UTF-8; - error_page 404 403 = /errors/404.php; - add_header "X-UA-Compatible" "IE=Edge"; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - # PHP entry point for setup application - location ~* ^/setup($|/) { - root %sdocroot%; - - location ~ ^/setup/index.php { - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - - location ~ ^/setup/(?!pub/). { - deny all; - } - - location ~ ^/setup/pub/ { - add_header X-Frame-Options "SAMEORIGIN"; - } - } - - # PHP entry point for update application - location ~* ^/update($|/) { - root %sdocroot%; - - location ~ ^/update/index.php { - fastcgi_split_path_info ^(/update/index.php)(/.+)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param PATH_INFO $fastcgi_path_info; - include /etc/nginx/fastcgi_params; - } - - # Deny everything but index.php - location ~ ^/update/(?!pub/). { - deny all; - } - - location ~ ^/update/pub/ { - add_header X-Frame-Options "SAMEORIGIN"; - } - } - - location / { - try_files $uri $uri/ /index.php?$args; - } - - location /pub/ { - location ~ ^/pub/media/(downloadable|customer|import|theme_customization/.*\.xml) { - deny all; - } - - alias %sdocroot%/pub/; - add_header X-Frame-Options "SAMEORIGIN"; - } - - location /static/ { - # Uncomment the following line in production mode - # expires max; - - # Remove signature of the static files that is used to overcome the browser cache - location ~ ^/static/version { - rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last; - } - - location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ { - add_header Cache-Control "public"; - add_header X-Frame-Options "SAMEORIGIN"; - expires +1y; - - if (!-f $request_filename) { - rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last; - } - } - - location ~* \.(zip|gz|gzip|bz2|csv|xml)$ { - add_header Cache-Control "no-store"; - add_header X-Frame-Options "SAMEORIGIN"; - expires off; - - if (!-f $request_filename) { - rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last; - } - } - - if (!-f $request_filename) { - rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last; - } - - add_header X-Frame-Options "SAMEORIGIN"; - } - - location /media/ { - try_files $uri $uri/ /get.php?$args; - - location ~ ^/media/theme_customization/.*\.xml { - deny all; - } - - location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ { - add_header Cache-Control "public"; - add_header X-Frame-Options "SAMEORIGIN"; - expires +1y; - try_files $uri $uri/ /get.php?$args; - } - - location ~* \.(zip|gz|gzip|bz2|csv|xml)$ { - add_header Cache-Control "no-store"; - add_header X-Frame-Options "SAMEORIGIN"; - expires off; - try_files $uri $uri/ /get.php?$args; - } - - add_header X-Frame-Options "SAMEORIGIN"; - } - - location /media/customer/ { - deny all; - } - - location /media/downloadable/ { - deny all; - } - - location /media/import/ { - deny all; - } - - # PHP entry point for main application - location ~ (index|get|static|report|404|503)\.php$ { - try_files $uri =404; - - fastcgi_pass %backend_lsnr%; - fastcgi_buffers 1024 4k; - fastcgi_read_timeout 600s; - fastcgi_connect_timeout 600s; - - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - - gzip on; - gzip_disable "msie6"; - - gzip_comp_level 6; - gzip_min_length 1100; - gzip_buffers 16 8k; - gzip_proxied any; - gzip_types - text/plain - text/css - text/js - text/xml - text/javascript - application/javascript - application/x-javascript - application/json - application/xml - application/xml+rss - image/svg+xml; - gzip_vary on; - - # Banned locations (only reached if the earlier PHP entry point regexes don't match) - location ~* (\.php$|\.htaccess$|\.git) { - deny all; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/magento.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/magento.tpl deleted file mode 100644 index 3f292fff2..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/magento.tpl +++ /dev/null @@ -1,194 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - - root %docroot%/pub; - index index.php; - autoindex off; - charset UTF-8; - error_page 404 403 = /errors/404.php; - add_header "X-UA-Compatible" "IE=Edge"; - - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - # PHP entry point for setup application - location ~* ^/setup($|/) { - root %docroot%; - - location ~ ^/setup/index.php { - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - - location ~ ^/setup/(?!pub/). { - deny all; - } - - location ~ ^/setup/pub/ { - add_header X-Frame-Options "SAMEORIGIN"; - } - } - - # PHP entry point for update application - location ~* ^/update($|/) { - root %docroot%; - - location ~ ^/update/index.php { - fastcgi_split_path_info ^(/update/index.php)(/.+)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param PATH_INFO $fastcgi_path_info; - include /etc/nginx/fastcgi_params; - } - - # Deny everything but index.php - location ~ ^/update/(?!pub/). { - deny all; - } - - location ~ ^/update/pub/ { - add_header X-Frame-Options "SAMEORIGIN"; - } - } - - location / { - try_files $uri $uri/ /index.php?$args; - } - - location /pub/ { - location ~ ^/pub/media/(downloadable|customer|import|theme_customization/.*\.xml) { - deny all; - } - - alias %docroot%/pub/; - add_header X-Frame-Options "SAMEORIGIN"; - } - - location /static/ { - # Uncomment the following line in production mode - # expires max; - - # Remove signature of the static files that is used to overcome the browser cache - location ~ ^/static/version { - rewrite ^/static/(version\d*/)?(.*)$ /static/$2 last; - } - - location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ { - add_header Cache-Control "public"; - add_header X-Frame-Options "SAMEORIGIN"; - expires +1y; - - if (!-f $request_filename) { - rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last; - } - } - - location ~* \.(zip|gz|gzip|bz2|csv|xml)$ { - add_header Cache-Control "no-store"; - add_header X-Frame-Options "SAMEORIGIN"; - expires off; - - if (!-f $request_filename) { - rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last; - } - } - - if (!-f $request_filename) { - rewrite ^/static/(version\d*/)?(.*)$ /static.php?resource=$2 last; - } - - add_header X-Frame-Options "SAMEORIGIN"; - } - - location /media/ { - try_files $uri $uri/ /get.php?$args; - - location ~ ^/media/theme_customization/.*\.xml { - deny all; - } - - location ~* \.(ico|jpg|jpeg|png|gif|svg|js|css|swf|eot|ttf|otf|woff|woff2)$ { - add_header Cache-Control "public"; - add_header X-Frame-Options "SAMEORIGIN"; - expires +1y; - try_files $uri $uri/ /get.php?$args; - } - - location ~* \.(zip|gz|gzip|bz2|csv|xml)$ { - add_header Cache-Control "no-store"; - add_header X-Frame-Options "SAMEORIGIN"; - expires off; - try_files $uri $uri/ /get.php?$args; - } - - add_header X-Frame-Options "SAMEORIGIN"; - } - - location /media/customer/ { - deny all; - } - - location /media/downloadable/ { - deny all; - } - - location /media/import/ { - deny all; - } - - # PHP entry point for main application - location ~ (index|get|static|report|404|503)\.php$ { - try_files $uri =404; - - fastcgi_pass %backend_lsnr%; - fastcgi_buffers 1024 4k; - fastcgi_read_timeout 600s; - fastcgi_connect_timeout 600s; - - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - - gzip on; - gzip_disable "msie6"; - - gzip_comp_level 6; - gzip_min_length 1100; - gzip_buffers 16 8k; - gzip_proxied any; - gzip_types - text/plain - text/css - text/js - text/xml - text/javascript - application/javascript - application/x-javascript - application/json - application/xml - application/xml+rss - image/svg+xml; - gzip_vary on; - - # Banned locations (only reached if the earlier PHP entry point regexes don't match) - location ~* (\.php$|\.htaccess$|\.git) { - deny all; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/modx.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/modx.stpl deleted file mode 100644 index 23ce8eb88..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/modx.stpl +++ /dev/null @@ -1,68 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; -# if you need to rewrite www to non-www uncomment bellow -# if ($host != '%domain%' ) { -# rewrite ^/(.*)$ https://%domain%/$1 permanent; -# } - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location / { - try_files $uri $uri/ @rewrite; - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - } - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - - location ~ \.php$ { - try_files $uri =404; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $request_filename; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/modx.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/modx.tpl deleted file mode 100644 index 342d3ecf3..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/modx.tpl +++ /dev/null @@ -1,65 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; -# if you need to rewrite www to non-www uncomment bellow -# if ($host != '%domain%' ) { -# rewrite ^/(.*)$ http://%domain%/$1 permanent; -# } - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location / { - try_files $uri $uri/ @rewrite; - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - } - location @rewrite { - rewrite ^/(.*)$ /index.php?q=$1; - } - - location ~ \.php$ { - try_files $uri =404; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $request_filename; - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/moodle.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/moodle.stpl deleted file mode 100644 index 10629c65f..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/moodle.stpl +++ /dev/null @@ -1,89 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - rewrite ^/(.*\.php)(/)(.*)$ /$1?file=/$3 last; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~* \.(txt|log)$ { - allow 192.168.0.0/16; - deny all; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - # No no for private - location ~ ^/sites/.*/private/ { - return 403; - } - - # Block access to "hidden" files and directories whose names begin with a - # period. This includes directories used by version control systems such - # as Subversion or Git to store control files. - location ~ (^|/)\. { - return 403; - } - - location / { - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $request_filename; - fastcgi_intercept_errors on; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/moodle.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/moodle.tpl deleted file mode 100644 index c20ba6482..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/moodle.tpl +++ /dev/null @@ -1,87 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - rewrite ^/(.*\.php)(/)(.*)$ /$1?file=/$3 last; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - # Very rarely should these ever be accessed outside of your lan - location ~* \.(txt|log)$ { - allow 192.168.0.0/16; - deny all; - } - - location ~ \..*/.*\.php$ { - return 403; - } - - # No no for private - location ~ ^/sites/.*/private/ { - return 403; - } - - # Block access to "hidden" files and directories whose names begin with a - # period. This includes directories used by version control systems such - # as Subversion or Git to store control files. - location ~ (^|/)\. { - return 403; - } - - location / { - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $request_filename; - fastcgi_intercept_errors on; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/no-php.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/no-php.stpl deleted file mode 100644 index 7b3aff96d..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/no-php.stpl +++ /dev/null @@ -1,46 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - types { - text/html html htm shtml php php5; - } - - location / { - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/no-php.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/no-php.tpl deleted file mode 100644 index 7ff8aa1d9..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/no-php.tpl +++ /dev/null @@ -1,43 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - types { - text/html html htm shtml php php5; - } - - location / { - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/odoo.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/odoo.stpl deleted file mode 100644 index 223eb97a2..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/odoo.stpl +++ /dev/null @@ -1,69 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; - proxy_redirect off; - - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Real-IP $remote_addr; - - proxy_connect_timeout 720; - proxy_send_timeout 720; - proxy_read_timeout 720; - send_timeout 720; - - # Allow "Well-Known URIs" as per RFC 5785 - location ~* ^/.well-known/ { - allow all; - } - - location / { - proxy_pass http://127.0.0.1:8069; - } - - location /longpolling { - proxy_pass http://127.0.0.1:8072; - } - - location ~* /web/static/ { - proxy_cache_valid 200 60m; - proxy_buffering on; - expires 864000; - proxy_pass http://127.0.0.1:8069; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/odoo.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/odoo.tpl deleted file mode 100644 index b1240aae0..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/odoo.tpl +++ /dev/null @@ -1,66 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; - proxy_redirect off; - - proxy_set_header X-Forwarded-Host $host; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Real-IP $remote_addr; - - proxy_connect_timeout 720; - proxy_send_timeout 720; - proxy_read_timeout 720; - send_timeout 720; - - # Allow "Well-Known URIs" as per RFC 5785 - location ~* ^/.well-known/ { - allow all; - } - - location / { - proxy_pass http://127.0.0.1:8069; - } - - location /longpolling { - proxy_pass http://127.0.0.1:8072; - } - - location ~* /web/static/ { - proxy_cache_valid 200 60m; - proxy_buffering on; - expires 864000; - proxy_pass http://127.0.0.1:8069; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/opencart.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/opencart.stpl deleted file mode 100644 index 5b6e55e8f..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/opencart.stpl +++ /dev/null @@ -1,58 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - try_files $uri $uri/ @opencart; - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - location @opencart { - rewrite ^/(.+)$ /index.php?_route_=$1 last; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/opencart.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/opencart.tpl deleted file mode 100644 index d0a9060b0..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/opencart.tpl +++ /dev/null @@ -1,54 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - location / { - try_files $uri $uri/ @opencart; - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - location @opencart { - rewrite ^/(.+)$ /index.php?_route_=$1 last; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/owncloud.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/owncloud.stpl deleted file mode 100644 index b43fdc755..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/owncloud.stpl +++ /dev/null @@ -1,84 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect; - rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect; - rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect; - - error_page 403 = /core/templates/403.php; - error_page 404 = /core/templates/404.php; - - location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){ - deny all; - } - - location / { - # The following 2 rules are only needed with webfinger - rewrite ^/.well-known/host-meta /public.php?service=host-meta last; - rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last; - rewrite ^/.well-known/carddav /remote.php/carddav/ redirect; - rewrite ^/.well-known/caldav /remote.php/caldav/ redirect; - rewrite ^(/core/doc/[^\/]+/)$ $1/index.html; - try_files $uri $uri/ /index.php; - - location ~ \.php(?:$|/) { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - include /etc/nginx/fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param PATH_INFO $fastcgi_path_info; - #fastcgi_param HTTPS on; - fastcgi_pass %backend_lsnr%; - } - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - # Some basic cache-control for static files to be sent to the browser - add_header Pragma public; - add_header Cache-Control "public, must-revalidate, proxy-revalidate"; - } - - #error_page 403 /error/404.html; - #error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/owncloud.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/owncloud.tpl deleted file mode 100644 index e3ec31de8..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/owncloud.tpl +++ /dev/null @@ -1,81 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect; - rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect; - rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect; - - error_page 403 = /core/templates/403.php; - error_page 404 = /core/templates/404.php; - - location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){ - deny all; - } - - location / { - # The following 2 rules are only needed with webfinger - rewrite ^/.well-known/host-meta /public.php?service=host-meta last; - rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last; - rewrite ^/.well-known/carddav /remote.php/carddav/ redirect; - rewrite ^/.well-known/caldav /remote.php/caldav/ redirect; - rewrite ^(/core/doc/[^\/]+/)$ $1/index.html; - try_files $uri $uri/ /index.php; - - location ~ \.php(?:$|/) { - fastcgi_split_path_info ^(.+\.php)(/.+)$; - include /etc/nginx/fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param PATH_INFO $fastcgi_path_info; - #fastcgi_param HTTPS on; - fastcgi_pass %backend_lsnr%; - } - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - # Some basic cache-control for static files to be sent to the browser - add_header Pragma public; - add_header Cache-Control "public, must-revalidate, proxy-revalidate"; - } - - #error_page 403 /error/404.html; - #error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/piwik.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/piwik.stpl deleted file mode 100644 index 0a4a412f6..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/piwik.stpl +++ /dev/null @@ -1,72 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - try_files /favicon.ico =204; - } - - location / { - try_files $uri /index.php; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - valid_referers none blocked %domain_idn% %alias_idn%; - if ($invalid_referer) { - return 444; - } - expires max; - } - - location ~* ^/(?:index|piwik)\.php$ { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } - - # Any other attempt to access PHP files returns a 404. - location ~* ^.+\.php$ { - return 404; - } - - # Return a 404 for all text files. - location ~* ^/(?:README|LICENSE[^.]*|LEGALNOTICE)(?:\.txt)*$ { - return 404; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/piwik.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/piwik.tpl deleted file mode 100644 index f94fb7de5..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/piwik.tpl +++ /dev/null @@ -1,69 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - try_files /favicon.ico =204; - } - - location / { - try_files $uri /index.php; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - valid_referers none blocked %domain_idn% %alias_idn%; - if ($invalid_referer) { - return 444; - } - expires max; - } - - location ~* ^/(?:index|piwik)\.php$ { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - include /etc/nginx/fastcgi_params; - } - } - - # Any other attempt to access PHP files returns a 404. - location ~* ^.+\.php$ { - return 404; - } - - # Return a 404 for all text files. - location ~* ^/(?:README|LICENSE[^.]*|LEGALNOTICE)(?:\.txt)*$ { - return 404; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/pyrocms.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/pyrocms.stpl deleted file mode 100644 index c9f918541..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/pyrocms.stpl +++ /dev/null @@ -1,65 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location /installer { - try_files $uri $uri/ /installer/index.php?$query_string; - } - - location / { - try_files $uri $uri/ /index.php; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - } - - location = /robots.txt { access_log off; log_not_found off; } - location = /favicon.ico { access_log off; log_not_found off; } - location ~ /\. { access_log off; log_not_found off; deny all; } - location ~ ~$ { access_log off; log_not_found off; deny all; } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/pyrocms.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/pyrocms.tpl deleted file mode 100644 index 297fe0e85..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/pyrocms.tpl +++ /dev/null @@ -1,62 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%/public; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location /installer { - try_files $uri $uri/ /installer/index.php?$query_string; - } - - location / { - try_files $uri $uri/ /index.php; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include /etc/nginx/fastcgi_params; - } - } - - location = /robots.txt { access_log off; log_not_found off; } - location = /favicon.ico { access_log off; log_not_found off; } - location ~ /\. { access_log off; log_not_found off; deny all; } - location ~ ~$ { access_log off; log_not_found off; deny all; } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/sendy.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/sendy.stpl deleted file mode 100644 index 0b3510004..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/sendy.stpl +++ /dev/null @@ -1,88 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl http2; - server_name %domain_idn% %alias_idn%; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~* "/\.(htaccess|htpasswd|git|svn|DS_Store)$" { - deny all; - } - - location ~ /(readme.html|license.txt) { - deny all; - } - - if (!-f $request_filename){ - rewrite ^/([a-zA-Z0-9-]+)$ /$1.php last; - } - - location / { - try_files $uri $uri/ /index.php?$args; - location ~* ^.+\.(ogg|ogv|svg|svgz|swf|eot|otf|woff|mov|mp3|mp4|webm|flv|ttf|rss|atom|jpg|jpeg|gif|png|ico|bmp|mid|midi|wav|rtf|css|js|jar|pdf)$ { - expires 1d; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - try_files $uri =404; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - - location /l/ { - rewrite ^/l/([a-zA-Z0-9/]+)$ /l.php?i=$1 last; - } - - location /t/ { - rewrite ^/t/([a-zA-Z0-9/]+)$ /t.php?i=$1 last; - } - - location /w/ { - rewrite ^/w/([a-zA-Z0-9/]+)$ /w.php?i=$1 last; - } - - location /unsubscribe/ { - rewrite ^/unsubscribe/(.*)$ /unsubscribe.php?i=$1 last; - } - - location /subscribe/ { - rewrite ^/subscribe/(.*)$ /subscribe.php?i=$1 last; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/sendy.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/sendy.tpl deleted file mode 100644 index b27b427dd..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/sendy.tpl +++ /dev/null @@ -1,86 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location ~* "/\.(htaccess|htpasswd|git|svn|DS_Store)$" { - deny all; - } - - location ~ /(readme.html|license.txt) { - deny all; - } - - if (!-f $request_filename){ - rewrite ^/([a-zA-Z0-9-]+)$ /$1.php last; - } - - location / { - try_files $uri $uri/ /index.php?$args; - location ~* ^.+\.(ogg|ogv|svg|svgz|swf|eot|otf|woff|mov|mp3|mp4|webm|flv|ttf|rss|atom|jpg|jpeg|gif|png|ico|bmp|mid|midi|wav|rtf|css|js|jar|pdf)$ { - expires 1d; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - try_files $uri =404; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - - location /l/ { - rewrite ^/l/([a-zA-Z0-9/]+)$ /l.php?i=$1 last; - } - - location /t/ { - rewrite ^/t/([a-zA-Z0-9/]+)$ /t.php?i=$1 last; - } - - location /w/ { - rewrite ^/w/([a-zA-Z0-9/]+)$ /w.php?i=$1 last; - } - - location /unsubscribe/ { - rewrite ^/unsubscribe/(.*)$ /unsubscribe.php?i=$1 last; - } - - location /subscribe/ { - rewrite ^/subscribe/(.*)$ /subscribe.php?i=$1 last; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/vbulletin5.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/vbulletin5.stpl deleted file mode 100644 index eebb3e428..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/vbulletin5.stpl +++ /dev/null @@ -1,105 +0,0 @@ -server { - listen %ip%:%web_ssl_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl on; - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - # legacy css being handled separate for performance - location = /css\.php { - rewrite ^ /core/css.php break; - } - - # make install available from presentation - location ^~ /install { - rewrite ^/install/ /core/install/ break; - } - - # any request to not existing item gets redirected through routestring - location / { - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - } - - # make admincp available from presentation - location ^~ /admincp { - if (!-f $request_filename) { - rewrite ^/admincp/(.*)$ /index.php?routestring=admincp/$1 last; - } - } - - # process any php scripts, not found gets redirected through routestring - location ~ \.php$ { - # handles legacy scripts - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 break; - } - - fastcgi_split_path_info ^(.+\.php)(.*)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_param QUERY_STRING $query_string; - fastcgi_param REQUEST_METHOD $request_method; - fastcgi_param CONTENT_TYPE $content_type; - fastcgi_param CONTENT_LENGTH $content_length; - fastcgi_intercept_errors on; - fastcgi_ignore_client_abort off; - fastcgi_connect_timeout 60; - fastcgi_send_timeout 180; - fastcgi_read_timeout 180; - fastcgi_buffers 256 16k; - fastcgi_buffer_size 32k; - fastcgi_temp_file_write_size 256k; - - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain_idn%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/vbulletin5.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/vbulletin5.tpl deleted file mode 100644 index 2c5c99880..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/vbulletin5.tpl +++ /dev/null @@ -1,100 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - # legacy css being handled separate for performance - location = /css\.php { - rewrite ^ /core/css.php break; - } - - # make install available from presentation - location ^~ /install { - rewrite ^/install/ /core/install/ break; - } - - # any request to not existing item gets redirected through routestring - location / { - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - } - - # make admincp available from presentation - location ^~ /admincp { - if (!-f $request_filename) { - rewrite ^/admincp/(.*)$ /index.php?routestring=admincp/$1 last; - } - } - - # process any php scripts, not found gets redirected through routestring - location ~ \.php$ { - # handles legacy scripts - if (!-f $request_filename) { - rewrite ^/(.*)$ /index.php?routestring=$1 break; - } - - fastcgi_split_path_info ^(.+\.php)(.*)$; - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_param QUERY_STRING $query_string; - fastcgi_param REQUEST_METHOD $request_method; - fastcgi_param CONTENT_TYPE $content_type; - fastcgi_param CONTENT_LENGTH $content_length; - fastcgi_intercept_errors on; - fastcgi_ignore_client_abort off; - fastcgi_connect_timeout 60; - fastcgi_send_timeout 180; - fastcgi_read_timeout 180; - fastcgi_buffers 256 16k; - fastcgi_buffer_size 32k; - fastcgi_temp_file_write_size 256k; - - include /etc/nginx/fastcgi_params; - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain_idn%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress.stpl deleted file mode 100644 index 38de83d29..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress.stpl +++ /dev/null @@ -1,54 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location / { - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress.tpl deleted file mode 100644 index a8909efbe..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress.tpl +++ /dev/null @@ -1,51 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location / { - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2.stpl deleted file mode 100644 index 39cce361a..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2.stpl +++ /dev/null @@ -1,66 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %sdocroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location / { - try_files $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2.tpl deleted file mode 100644 index bccb8b3db..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2.tpl +++ /dev/null @@ -1,63 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location / { - try_files $uri $uri/ /index.php?$args; - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/conf/web/%domain%.auth*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl deleted file mode 100644 index 264ca01ae..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2_rewrite.stpl +++ /dev/null @@ -1,71 +0,0 @@ -server { - listen %ip%:%web_ssl_port% ssl; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location / { - try_files $uri $uri/ /index.php?$args; - - if (!-e $request_filename) - { - rewrite ^(.+)$ /index.php?q=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain_idn%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2_rewrite.tpl b/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2_rewrite.tpl deleted file mode 100644 index 39e366b73..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/php-fpm/wordpress2_rewrite.tpl +++ /dev/null @@ -1,67 +0,0 @@ -server { - listen %ip%:%web_port%; - server_name %domain_idn% %alias_idn%; - root %docroot%; - index index.php index.html index.htm; - access_log /var/log/nginx/domains/%domain%.log combined; - access_log /var/log/nginx/domains/%domain%.bytes bytes; - error_log /var/log/nginx/domains/%domain%.error.log error; - location = /favicon.ico { - log_not_found off; - access_log off; - } - - location = /robots.txt { - allow all; - log_not_found off; - access_log off; - } - - location / { - try_files $uri $uri/ /index.php?$args; - - if (!-e $request_filename) - { - rewrite ^(.+)$ /index.php?q=$1 last; - } - - location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ { - expires max; - } - - location ~ [^/]\.php(/|$) { - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - if (!-f $document_root$fastcgi_script_name) { - return 404; - } - - fastcgi_pass %backend_lsnr%; - fastcgi_index index.php; - include /etc/nginx/fastcgi_params; - } - } - - error_page 403 /error/404.html; - error_page 404 /error/404.html; - error_page 500 502 503 504 /error/50x.html; - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location ~* "/\.(htaccess|htpasswd)$" { - deny all; - return 404; - } - - location /vstats/ { - alias %home%/%user%/web/%domain%/stats/; - include %home%/%user%/web/%domain%/stats/auth.conf*; - } - - include /etc/nginx/conf.d/phpmyadmin.inc*; - include /etc/nginx/conf.d/phppgadmin.inc*; - include /etc/nginx/conf.d/webmail.inc*; - - include %home%/%user%/conf/web/nginx.%domain_idn%.conf*; -} diff --git a/install/ubuntu/18.10/templates/web/nginx/proxy_ip.tpl b/install/ubuntu/18.10/templates/web/nginx/proxy_ip.tpl deleted file mode 100755 index ae1956173..000000000 --- a/install/ubuntu/18.10/templates/web/nginx/proxy_ip.tpl +++ /dev/null @@ -1,9 +0,0 @@ -server { - listen %ip%:%proxy_port% default; - server_name _; - #access_log /var/log/nginx/%ip%.log main; - location / { - proxy_pass http://%ip%:%web_port%; - } -} - diff --git a/install/ubuntu/18.10/templates/web/php-fpm/default.tpl b/install/ubuntu/18.10/templates/web/php-fpm/default.tpl deleted file mode 100644 index 816fa21f9..000000000 --- a/install/ubuntu/18.10/templates/web/php-fpm/default.tpl +++ /dev/null @@ -1,22 +0,0 @@ -[%backend%] -listen = 127.0.0.1:%backend_port% -listen.allowed_clients = 127.0.0.1 - -user = %user% -group = %user% - -pm = ondemand -pm.max_children = 4 -pm.max_requests = 4000 -pm.process_idle_timeout = 10s -pm.status_path = /status - -php_admin_value[sys_temp_dir] = /home/%user%/tmp -php_admin_value[upload_tmp_dir] = /home/%user%/tmp -php_admin_value[session.save_path] = /home/%user%/tmp - -env[HOSTNAME] = $HOSTNAME -env[PATH] = /usr/local/bin:/usr/bin:/bin -env[TMP] = /home/%user%/tmp -env[TMPDIR] = /home/%user%/tmp -env[TEMP] = /home/%user%/tmp diff --git a/install/ubuntu/18.10/templates/web/php-fpm/no-php.tpl b/install/ubuntu/18.10/templates/web/php-fpm/no-php.tpl deleted file mode 100644 index 047c33edc..000000000 --- a/install/ubuntu/18.10/templates/web/php-fpm/no-php.tpl +++ /dev/null @@ -1,20 +0,0 @@ -;[%backend%] -;listen = /dev/null - -;user = %user% -;group = %user% - -;listen.owner = %user% -;listen.group = www-data - -;pm = ondemand -;pm.max_children = 4 -;pm.max_requests = 4000 -;pm.process_idle_timeout = 10s -;pm.status_path = /status - -;env[HOSTNAME] = $HOSTNAME -;env[PATH] = /usr/local/bin:/usr/bin:/bin -;env[TMP] = /home/%user%/tmp -;env[TMPDIR] = /home/%user%/tmp -;env[TEMP] = /home/%user%/tmp diff --git a/install/ubuntu/18.10/templates/web/php-fpm/socket.tpl b/install/ubuntu/18.10/templates/web/php-fpm/socket.tpl deleted file mode 100644 index e427045ce..000000000 --- a/install/ubuntu/18.10/templates/web/php-fpm/socket.tpl +++ /dev/null @@ -1,25 +0,0 @@ -[%backend%] -listen = /var/run/php/%backend%.sock -listen.allowed_clients = 127.0.0.1 - -user = %user% -group = %user% - -listen.owner = %user% -listen.group = www-data - -pm = ondemand -pm.max_children = 4 -pm.max_requests = 4000 -pm.process_idle_timeout = 10s -pm.status_path = /status - -php_admin_value[sys_temp_dir] = /home/%user%/tmp -php_admin_value[upload_tmp_dir] = /home/%user%/tmp -php_admin_value[session.save_path] = /home/%user%/tmp - -env[HOSTNAME] = $HOSTNAME -env[PATH] = /usr/local/bin:/usr/bin:/bin -env[TMP] = /home/%user%/tmp -env[TMPDIR] = /home/%user%/tmp -env[TEMP] = /home/%user%/tmp diff --git a/install/ubuntu/18.10/templates/web/skel/document_errors/403.html b/install/ubuntu/18.10/templates/web/skel/document_errors/403.html deleted file mode 100755 index 9c3f6baab..000000000 --- a/install/ubuntu/18.10/templates/web/skel/document_errors/403.html +++ /dev/null @@ -1,29 +0,0 @@ - - - 403 — Forbidden - - - - - - -

%domain%

- -

403

-

Forbidden

-
- Unfortunately, you do not have permission to view this -
- - - diff --git a/install/ubuntu/18.10/templates/web/skel/document_errors/404.html b/install/ubuntu/18.10/templates/web/skel/document_errors/404.html deleted file mode 100755 index 2cee77084..000000000 --- a/install/ubuntu/18.10/templates/web/skel/document_errors/404.html +++ /dev/null @@ -1,28 +0,0 @@ - - - 404 — Not Found - - - - - - -

%domain%

-

404

-

Page Not Found

-
- It seems that the page you were trying to reach does not exist anymore, or maybe it has just moved. - You can start again from the home or go back to previous page. -
- - diff --git a/install/ubuntu/18.10/templates/web/skel/document_errors/50x.html b/install/ubuntu/18.10/templates/web/skel/document_errors/50x.html deleted file mode 100755 index 85ba648b7..000000000 --- a/install/ubuntu/18.10/templates/web/skel/document_errors/50x.html +++ /dev/null @@ -1,29 +0,0 @@ - - - 500 — Internal Sever Error - - - - - - -

%domain%

- -

500

-

Internal Server Error

-
- Sorry, something went wrong :( -
- - - diff --git a/install/ubuntu/18.10/templates/web/skel/public_html/index.html b/install/ubuntu/18.10/templates/web/skel/public_html/index.html deleted file mode 100755 index 1144ade96..000000000 --- a/install/ubuntu/18.10/templates/web/skel/public_html/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - %domain% — Coming Soon - - - - - - -

%domain%

- - - - - diff --git a/install/ubuntu/18.10/templates/web/skel/public_html/robots.txt b/install/ubuntu/18.10/templates/web/skel/public_html/robots.txt deleted file mode 100755 index 00ee83dcf..000000000 --- a/install/ubuntu/18.10/templates/web/skel/public_html/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# vestacp autogenerated robots.txt -User-agent: * -Crawl-delay: 10 diff --git a/install/ubuntu/18.10/templates/web/skel/public_shtml/index.html b/install/ubuntu/18.10/templates/web/skel/public_shtml/index.html deleted file mode 100755 index 1144ade96..000000000 --- a/install/ubuntu/18.10/templates/web/skel/public_shtml/index.html +++ /dev/null @@ -1,26 +0,0 @@ - - - %domain% — Coming Soon - - - - - - -

%domain%

- - - - - diff --git a/install/ubuntu/18.10/templates/web/skel/public_shtml/robots.txt b/install/ubuntu/18.10/templates/web/skel/public_shtml/robots.txt deleted file mode 100755 index 00ee83dcf..000000000 --- a/install/ubuntu/18.10/templates/web/skel/public_shtml/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# vestacp autogenerated robots.txt -User-agent: * -Crawl-delay: 10 diff --git a/install/ubuntu/18.10/templates/web/suspend/.htaccess b/install/ubuntu/18.10/templates/web/suspend/.htaccess deleted file mode 100755 index 5a6df83fb..000000000 --- a/install/ubuntu/18.10/templates/web/suspend/.htaccess +++ /dev/null @@ -1,2 +0,0 @@ -ErrorDocument 403 /index.html -ErrorDocument 404 /index.html diff --git a/install/ubuntu/18.10/templates/web/suspend/index.html b/install/ubuntu/18.10/templates/web/suspend/index.html deleted file mode 100755 index f2d04e1f0..000000000 --- a/install/ubuntu/18.10/templates/web/suspend/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - Website Suspended - - - - - -

SUSPENDED

-

This website has been suspended.

-
- Please contact the technical support department. -
- - diff --git a/install/ubuntu/18.10/templates/web/webalizer/webalizer.tpl b/install/ubuntu/18.10/templates/web/webalizer/webalizer.tpl deleted file mode 100755 index 068adcfb9..000000000 --- a/install/ubuntu/18.10/templates/web/webalizer/webalizer.tpl +++ /dev/null @@ -1,110 +0,0 @@ -HostName %domain_idn% -LogFile /var/log/%web_system%/domains/%domain%.log -OutputDir %home%/%user%/web/%domain%/stats -HistoryName %home%/%user%/web/%domain%/stats/%domain%.hist -Incremental yes -IncrementalName %home%/%user%/web/%domain%/stats/%domain%.current -PageType htm* -PageType cgi -PageType php -PageType shtml -DNSCache /var/lib/webalizer/dns_cache.db -DNSChildren 10 -Quiet yes -FoldSeqErr yes -IndexAlias index.php -HideURL *.gif -HideURL *.GIF -HideURL *.jpg -HideURL *.JPG -HideURL *.png -HideURL *.PNG -HideURL *.ra -SearchEngine abcsearch. terms= -SearchEngine alexa. q= -SearchEngine alltheweb. q= -SearchEngine alltheweb. query= -SearchEngine alot. q= -SearchEngine altavista. q= -SearchEngine aolsearch. query= -SearchEngine aport.ru r= -SearchEngine ask. q= -SearchEngine atlas.cz q= -SearchEngine bbc. q= -SearchEngine bing. q= -SearchEngine blingo. q= -SearchEngine blogs.yandex.ru text= -SearchEngine btopenworld query= -SearchEngine buscador.ya.com q= -SearchEngine busca. q= -SearchEngine business. query= -SearchEngine centrum.cz q= -SearchEngine chiff. q= -SearchEngine clusty. query= -SearchEngine comcast. q= -SearchEngine crawler. q= -SearchEngine cuil. q= -SearchEngine dmoz. search= -SearchEngine dogpile.com q= -SearchEngine dpxml qkw= -SearchEngine eureka. searchword= -SearchEngine euroseek. string= -SearchEngine exalead. q= -SearchEngine excite search= -SearchEngine ezilon. q= -SearchEngine fastbrowsersearch. q= -SearchEngine feedster.com q= -SearchEngine fireball.de q= -SearchEngine fireball. keyword= -SearchEngine freeserve. q= -SearchEngine gigablast. q= -SearchEngine gogo.ru q= -SearchEngine go.mail.ru q= -SearchEngine google. q= -SearchEngine hakia. q= -SearchEngine hotbot. query= -SearchEngine infoseek. qt= -SearchEngine iwon searchfor= -SearchEngine ixquick.com query= -SearchEngine joeant. keywords= -SearchEngine jyxo.cz s= -SearchEngine looksmart. key= -SearchEngine lycos. query= -SearchEngine mamma. q= -SearchEngine metacrawler q= -SearchEngine msn. MT= -SearchEngine msxml qkw= -SearchEngine mysearch. searchfor= -SearchEngine mywebsearch. searchfor= -SearchEngine netscape. q= -SearchEngine nigma.ru q= -SearchEngine northernlight. qr= -SearchEngine ntlworld. q= -SearchEngine orange. q= -SearchEngine overture. Keywords= -SearchEngine punto.ru text= -SearchEngine rambler. keyword= -SearchEngine search.aol. q= -SearchEngine search.babylon. q= -SearchEngine search.centrum. phrase= -SearchEngine search.conduit. q= -SearchEngine search.earthlink q= -SearchEngine search.icq. q= -SearchEngine search.live.com q= -SearchEngine search.rambler.ru words= -SearchEngine search.winamp. q= -SearchEngine searchy. q= -SearchEngine seznam.cz w= -SearchEngine snap. query= -SearchEngine teoma. q= -SearchEngine teradex.com q= -SearchEngine ukplus key= -SearchEngine verizon. q= -SearchEngine virginmedia. q= -SearchEngine voila. rdata= -SearchEngine webcrawler searchText= -SearchEngine web.search.naver. query= -SearchEngine wisenut q= -SearchEngine yahoo. p= -SearchEngine yandex. text= -SearchEngine yodao. q= diff --git a/install/ubuntu/18.10/vsftpd/vsftpd.conf b/install/ubuntu/18.10/vsftpd/vsftpd.conf deleted file mode 100644 index 75e0104fe..000000000 --- a/install/ubuntu/18.10/vsftpd/vsftpd.conf +++ /dev/null @@ -1,40 +0,0 @@ -anonymous_enable=NO -local_enable=YES -write_enable=YES -local_umask=022 -anon_umask=022 -anon_upload_enable=NO -dirmessage_enable=YES -xferlog_enable=YES -connect_from_port_20=YES -xferlog_std_format=YES -dual_log_enable=YES -chroot_local_user=YES -listen=YES -pam_service_name=vsftpd -userlist_enable=NO -tcp_wrappers=YES -force_dot_files=YES -ascii_upload_enable=YES -ascii_download_enable=YES -allow_writeable_chroot=YES -seccomp_sandbox=NO -pasv_enable=YES -pasv_promiscuous=YES -pasv_min_port=12000 -pasv_max_port=12100 -max_per_ip=10 -max_clients=100 -use_localtime=YES -utf8_filesystem=YES -ssl_enable=YES -allow_anon_ssl=NO -require_ssl_reuse=NO -ssl_ciphers=HIGH -ssl_tlsv1=YES -ssl_sslv2=NO -ssl_sslv3=NO -force_local_data_ssl=NO -force_local_logins_ssl=NO -rsa_cert_file=/usr/local/vesta/ssl/certificate.crt -rsa_private_key_file=/usr/local/vesta/ssl/certificate.key diff --git a/install/vst-install-amazon.sh b/install/vst-install-amazon.sh index 9efdc29ad..8dbdaa143 100644 --- a/install/vst-install-amazon.sh +++ b/install/vst-install-amazon.sh @@ -23,7 +23,7 @@ software="nginx httpd mod_ssl mod_ruid2 mod_fcgid mod_extract_forwarded php php-common php-cli php-bcmath php-gd php-imap php-mbstring php-mcrypt php-mysql php-pdo php-soap php-tidy php-xml php-xmlrpc php-fpm php-pgsql awstats webalizer vsftpd proftpd bind bind-utils bind-libs exim dovecot - clamd clamav-update spamassassin mysql mysql-server phpMyAdmin postgresql + clamd spamassassin mysql mysql-server phpMyAdmin postgresql postgresql-server postgresql-contrib phpPgAdmin e2fsprogs openssh-clients ImageMagick curl mc screen ftp zip unzip flex sqlite pcre sudo bc jwhois mailx lsof tar telnet rrdtool net-tools ntp GeoIP freetype fail2ban @@ -33,29 +33,28 @@ software="nginx httpd mod_ssl mod_ruid2 mod_fcgid mod_extract_forwarded # Defining help function help() { echo "Usage: $0 [OPTIONS] - -a, --apache Install Apache [yes|no] default: yes - -n, --nginx Install Nginx [yes|no] default: yes - -w, --phpfpm Install PHP-FPM [yes|no] default: no - -v, --vsftpd Install Vsftpd [yes|no] default: yes - -j, --proftpd Install ProFTPD [yes|no] default: no - -k, --named Install Bind [yes|no] default: yes - -m, --mysql Install MySQL [yes|no] default: yes - -g, --postgresql Install PostgreSQL [yes|no] default: no - -x, --exim Install Exim [yes|no] default: yes - -z, --dovecot Install Dovecot [yes|no] default: yes - -c, --clamav Install ClamAV [yes|no] default: yes - -t, --spamassassin Install SpamAssassin [yes|no] default: yes - -i, --iptables Install Iptables [yes|no] default: yes - -b, --fail2ban Install Fail2ban [yes|no] default: yes - -r, --remi Install Remi repo [yes|no] default: yes - -o, --softaculous Install Softaculous [yes|no] default: yes - -q, --quota Filesystem Quota [yes|no] default: no + -a, --apache Install Apache [yes|no] default: yes + -n, --nginx Install Nginx [yes|no] default: yes + -w, --phpfpm Install PHP-FPM [yes|no] default: no + -v, --vsftpd Install Vsftpd [yes|no] default: yes + -j, --proftpd Install ProFTPD [yes|no] default: no + -k, --named Install Bind [yes|no] default: yes + -m, --mysql Install MySQL [yes|no] default: yes + -g, --postgresql Install PostgreSQL [yes|no] default: no + -d, --mongodb Install MongoDB [yes|no] unsupported + -x, --exim Install Exim [yes|no] default: yes + -z, --dovecot Install Dovecot [yes|no] default: yes + -c, --clamav Install ClamAV [yes|no] default: yes + -t, --spamassassin Install SpamAssassin [yes|no] default: yes + -i, --iptables Install Iptables [yes|no] default: yes + -b, --fail2ban Install Fail2ban [yes|no] default: yes + -r, --remi Install Remi repo [yes|no] default: yes + -o, --softaculous Install Softaculous [yes|no] default: yes + -q, --quota Filesystem Quota [yes|no] default: no -l, --lang Default language default: en - -y, --interactive Interactive install [yes|no] default: yes + -y, --interactive Interactive install [yes|no] default: yes -s, --hostname Set hostname - -u, --ssl Add LE SSL for hostname [yes|no] default: no -e, --email Set admin email - -d, --port Set Vesta port -p, --password Set admin password -f, --force Force installation -h, --help Print this help @@ -75,9 +74,6 @@ gen_pass() { echo "$PASS" } -# Defining 32 char blowfish_secret -blowfish_secret=`openssl rand -base64 32`; - # Defining return code check function check_result() { if [ $1 -ne 0 ]; then @@ -129,6 +125,7 @@ for arg; do --named) args="${args}-k " ;; --mysql) args="${args}-m " ;; --postgresql) args="${args}-g " ;; + --mongodb) args="${args}-d " ;; --exim) args="${args}-x " ;; --dovecot) args="${args}-z " ;; --clamav) args="${args}-c " ;; @@ -141,9 +138,7 @@ for arg; do --lang) args="${args}-l " ;; --interactive) args="${args}-y " ;; --hostname) args="${args}-s " ;; - --ssl) args="${args}-u " ;; --email) args="${args}-e " ;; - --port) args="${args}-d " ;; --password) args="${args}-p " ;; --force) args="${args}-f " ;; --help) args="${args}-h " ;; @@ -154,7 +149,7 @@ done eval set -- "$args" # Parsing arguments -while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do +while getopts "a:n:w:v:j:k:m:g:d:x:z:c:t:i:b:r:o:q:l:y:s:e:p:fh" Option; do case $Option in a) apache=$OPTARG ;; # Apache n) nginx=$OPTARG ;; # Nginx @@ -164,6 +159,7 @@ while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do k) named=$OPTARG ;; # Named m) mysql=$OPTARG ;; # MySQL g) postgresql=$OPTARG ;; # PostgreSQL + d) mongodb=$OPTARG ;; # MongoDB (unsupported) x) exim=$OPTARG ;; # Exim z) dovecot=$OPTARG ;; # Dovecot c) clamd=$OPTARG ;; # ClamAV @@ -176,9 +172,7 @@ while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do l) lang=$OPTARG ;; # Language y) interactive=$OPTARG ;; # Interactive install s) servername=$OPTARG ;; # Hostname - u) ssl=$OPTARG ;; # Add Let's Encrypt SSL for hostname e) email=$OPTARG ;; # Admin email - d) port=$OPTARG ;; # Vesta port p) vpass=$OPTARG ;; # Admin password f) force='yes' ;; # Force install h) help ;; # Help @@ -211,7 +205,6 @@ set_default_value 'remi' 'yes' set_default_value 'softaculous' 'yes' set_default_value 'quota' 'no' set_default_value 'interactive' 'yes' -set_default_value 'ssl' 'no' set_default_lang 'en' # Checking software conflicts @@ -357,11 +350,6 @@ if [ "$proftpd" = 'yes' ]; then echo ' - ProFTPD FTP Server' fi -# LE SSL for hostname -if [ "$ssl" = 'yes' ]; then - echo ' - LE SSL for hostname' -fi - # Softaculous if [ "$softaculous" = 'yes' ]; then echo ' - Softaculous Plugin' @@ -389,11 +377,6 @@ if [ "$interactive" = 'yes' ]; then read -p 'Please enter admin email address: ' email fi - # Asking for Vesta port - if [ -z "$port" ]; then - read -p 'Please enter Vesta port number (press enter for 8083): ' port - fi - # Asking to set FQDN hostname if [ -z "$servername" ]; then read -p "Please enter FQDN hostname [$(hostname)]: " servername @@ -427,11 +410,6 @@ if [ -z "$email" ]; then email="admin@$servername" fi -# Set port if it wasn't set -if [ -z "$port" ]; then - port="8083" -fi - # Defining backup directory vst_backups="/root/vst_install_backups/$(date +%s)" echo "Installation backup directory: $vst_backups" @@ -530,7 +508,7 @@ service exim stop > /dev/null 2>&1 cp -r /etc/exim/* $vst_backups/exim >/dev/null 2>&1 # Backup ClamAV configuration -service clamd.scan stop > /dev/null 2>&1 +service clamd stop > /dev/null 2>&1 cp /etc/clamd.conf $vst_backups/clamd >/dev/null 2>&1 cp -r /etc/clamd.d $vst_backups/clamd >/dev/null 2>&1 @@ -648,6 +626,7 @@ if [ "$exim" != 'no' ]; then check_result $? "yum install failed" fi + #----------------------------------------------------------# # Configure system # #----------------------------------------------------------# @@ -789,7 +768,7 @@ fi if [ "$exim" = 'yes' ]; then echo "MAIL_SYSTEM='exim'" >> $VESTA/conf/vesta.conf if [ "$clamd" = 'yes' ]; then - echo "ANTIVIRUS_SYSTEM='clamd.scan'" >> $VESTA/conf/vesta.conf + echo "ANTIVIRUS_SYSTEM='clamav'" >> $VESTA/conf/vesta.conf fi if [ "$spamd" = 'yes' ]; then echo "ANTISPAM_SYSTEM='spamassassin'" >> $VESTA/conf/vesta.conf @@ -1044,7 +1023,7 @@ if [ "$mysql" = 'yes' ]; then cp -f $vestacp/pma/phpMyAdmin.conf /etc/httpd/conf.d/ fi cp -f $vestacp/pma/config.inc.conf /etc/phpMyAdmin/config.inc.php - sed -i "s#%blowfish_secret#$blowfish_secret#g" /etc/phpMyAdmin/config.inc.php + sed -i "s/%blowfish_secret%/$(gen_pass)/g" /etc/phpMyAdmin/config.inc.php fi @@ -1146,12 +1125,10 @@ if [ "$clamd" = 'yes' ]; then useradd clam -s /sbin/nologin -d /var/lib/clamav 2>/dev/null gpasswd -a clam exim gpasswd -a clam mail - cp -r /etc/clamd.d $vst_backups/clamd >/dev/null 2>&1 - cp -f $vestacp/clamav/clamd.conf /etc/clamd.conf - ln -sf /etc/clamd.conf /etc/clamd.d/scan.conf + cp -f $vestacp/clamav/clamd.conf /etc/ cp -f $vestacp/clamav/freshclam.conf /etc/ - mkdir -p /var/log/clamav /var/run/clamav /var/run/clamd.scan - chown clam:clam /var/log/clamav /var/run/clamav /var/run/clamd.scan + mkdir -p /var/log/clamav /var/run/clamav + chown clam:clam /var/log/clamav /var/run/clamav chown -R clam:clam /var/lib/clamav if [ "$release" -ge '7' ]; then cp -f $vestacp/clamav/clamd.service /usr/lib/systemd/system/ @@ -1162,8 +1139,8 @@ if [ "$clamd" = 'yes' ]; then sed -i "s/nofork/foreground/" /usr/lib/systemd/system/clamd.service systemctl daemon-reload fi - chkconfig clamd.scan on - service clamd.scan start + chkconfig clamd on + service clamd start #check_result $? "clamd start failed" fi @@ -1352,79 +1329,22 @@ $VESTA/upd/add_notifications.sh # Adding cronjob for autoupdates $VESTA/bin/v-add-cron-vesta-autoupdate -if [ "$port" != "8083" ]; then - echo "=== Set Vesta port: $port" - $VESTA/bin/v-change-vesta-port $port -fi - -echo "NOTIFY_ADMIN_FULL_BACKUP='$email'" >> $VESTA/conf/vesta.conf #----------------------------------------------------------# # Vesta Access Info # #----------------------------------------------------------# -# Comparing hostname and ip - -if [ "$ssl" = 'no' ]; then +# Comparing hostname and IP host_ip=$(host $servername |head -n 1 |awk '{print $NF}') if [ "$host_ip" = "$ip" ]; then ip="$servername" fi -fi - -if [ "$ssl" = 'yes' ]; then -make_ssl=0 -host_ip=$(host $servername | head -n 1 | awk '{print $NF}') -if [ "$host_ip" != "$pub_ip" ]; then - echo "***** PROBLEM: Hostname $servername is not pointing to your server (IP address $ip)" - echo "Without pointing your hostname to your IP, LetsEncrypt SSL will not be generated for your server hostname." - echo "Try to setup an A record in your DNS, pointing your hostname $servername to IP address $ip and then press ENTER." - echo "(or register ns1.$servername and ns2.$servername as DNS Nameservers and put those Nameservers on $servername domain)" - echo "If we detect that hostname is still not pointing to your IP, installer will not add LetsEncrypt SSL certificate to your hosting panel (unsigned SSL will be used instead)." - read -p "To force to try anyway to add LetsEncrypt, press f and then ENTER." answer - host_ip=$(host $servername | head -n 1 | awk '{print $NF}') -fi -if [ "$answer" = "f" ]; then - make_ssl=1 -fi -if [ "$host_ip" = "$ip" ]; then - ip="$servername" - make_ssl=1 -fi - -if [ $make_ssl -eq 1 ]; then - # Check if www is also pointing to our IP - www_host="www.$servername" - www_host_ip=$(host $www_host | head -n 1 | awk '{print $NF}') - if [ "$www_host_ip" != "$pub_ip" ]; then - if [ "$named" = 'yes' ]; then - echo "=== Deleting www to server hostname" - $VESTA/bin/v-delete-web-domain-alias 'admin' "$servername" "$www_host" 'no' - $VESTA/bin/v-delete-dns-on-web-alias 'admin' "$servername" "$www_host" 'no' - fi - www_host="" - fi -fi - -echo "===" -echo "Hostname $servername is pointing to $host_ip" - -if [ $make_ssl -eq 1 ]; then - echo "=== Generating HOSTNAME SSL" - $VESTA/bin/v-add-letsencrypt-domain 'admin' "$servername" "$www_host" 'yes' - $VESTA/bin/v-update-host-certificate 'admin' "$servername" -else - echo "We will not generate SSL because of this" -fi -echo "===" -echo "UPDATE_HOSTNAME_SSL='yes'" >> $VESTA/conf/vesta.conf -fi # Sending notification to admin email echo -e "Congratulations, you have just successfully installed \ Vesta Control Panel - https://$ip:$port + https://$ip:8083 username: admin password: $vpass diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index 0f87f2309..47f36142d 100644 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -16,7 +16,7 @@ arch=$(uname -i) os='debian' release=$(cat /etc/debian_version|grep -o [0-9]|head -n1) codename="$(cat /etc/os-release |grep VERSION= |cut -f 2 -d \(|cut -f 1 -d \))" -vestacp="$VESTA/install/$VERSION/$release" +vestacp="http://$CHOST/$VERSION/$release" if [ "$release" -eq 9 ]; then software="nginx apache2 apache2-utils apache2-suexec-custom @@ -29,7 +29,7 @@ if [ "$release" -eq 9 ]; then flex whois rssh git idn zip sudo bc ftp lsof ntpdate rrdtool quota e2fslibs bsdutils e2fsprogs curl imagemagick fail2ban dnsutils bsdmainutils cron vesta vesta-nginx vesta-php expect libmail-dkim-perl - unrar-free vim-common vesta-ioncube vesta-softaculous net-tools unzip" + unrar-free vim-common vesta-ioncube vesta-softaculous net-tools" elif [ "$release" -eq 8 ]; then software="nginx apache2 apache2-utils apache2.2-common apache2-suexec-custom libapache2-mod-ruid2 @@ -42,7 +42,7 @@ elif [ "$release" -eq 8 ]; then flex whois rssh git idn zip sudo bc ftp lsof ntpdate rrdtool quota e2fslibs bsdutils e2fsprogs curl imagemagick fail2ban dnsutils bsdmainutils cron vesta vesta-nginx vesta-php expect libmail-dkim-perl - unrar-free vim-common vesta-ioncube vesta-softaculous net-tools unzip" + unrar-free vim-common vesta-ioncube vesta-softaculous net-tools" else software="nginx apache2 apache2-utils apache2.2-common apache2-suexec-custom libapache2-mod-ruid2 @@ -55,35 +55,33 @@ else flex whois rssh git idn zip sudo bc ftp lsof ntpdate rrdtool quota e2fslibs bsdutils e2fsprogs curl imagemagick fail2ban dnsutils bsdmainutils cron vesta vesta-nginx vesta-php expect unrar-free - vim-common vesta-ioncube vesta-softaculous net-tools unzip" + vim-common vesta-ioncube vesta-softaculous net-tools" fi # Defining help function help() { echo "Usage: $0 [OPTIONS] - -a, --apache Install Apache [yes|no] default: yes - -n, --nginx Install Nginx [yes|no] default: yes - -w, --phpfpm Install PHP-FPM [yes|no] default: no - -v, --vsftpd Install Vsftpd [yes|no] default: yes - -j, --proftpd Install ProFTPD [yes|no] default: no - -k, --named Install Bind [yes|no] default: yes - -m, --mysql Install MySQL [yes|no] default: yes - -g, --postgresql Install PostgreSQL [yes|no] default: no - -x, --exim Install Exim [yes|no] default: yes - -z, --dovecot Install Dovecot [yes|no] default: yes - -c, --clamav Install ClamAV [yes|no] default: yes - -t, --spamassassin Install SpamAssassin [yes|no] default: yes - -i, --iptables Install Iptables [yes|no] default: yes - -b, --fail2ban Install Fail2ban [yes|no] default: yes - -r, --remi Install Remi repo [yes|no] default: yes - -o, --softaculous Install Softaculous [yes|no] default: yes - -q, --quota Filesystem Quota [yes|no] default: no + -a, --apache Install Apache [yes|no] default: yes + -n, --nginx Install Nginx [yes|no] default: yes + -w, --phpfpm Install PHP-FPM [yes|no] default: no + -v, --vsftpd Install Vsftpd [yes|no] default: yes + -j, --proftpd Install ProFTPD [yes|no] default: no + -k, --named Install Bind [yes|no] default: yes + -m, --mysql Install MySQL [yes|no] default: yes + -g, --postgresql Install PostgreSQL [yes|no] default: no + -d, --mongodb Install MongoDB [yes|no] unsupported + -x, --exim Install Exim [yes|no] default: yes + -z, --dovecot Install Dovecot [yes|no] default: yes + -c, --clamav Install ClamAV [yes|no] default: yes + -t, --spamassassin Install SpamAssassin [yes|no] default: yes + -i, --iptables Install Iptables [yes|no] default: yes + -b, --fail2ban Install Fail2ban [yes|no] default: yes + -o, --softaculous Install Softaculous [yes|no] default: yes + -q, --quota Filesystem Quota [yes|no] default: no -l, --lang Default language default: en - -y, --interactive Interactive install [yes|no] default: yes + -y, --interactive Interactive install [yes|no] default: yes -s, --hostname Set hostname - -u, --ssl Add LE SSL for hostname [yes|no] default: no -e, --email Set admin email - -d, --port Set Vesta port -p, --password Set admin password -f, --force Force installation -h, --help Print this help @@ -158,6 +156,7 @@ for arg; do --named) args="${args}-k " ;; --mysql) args="${args}-m " ;; --postgresql) args="${args}-g " ;; + --mongodb) args="${args}-d " ;; --exim) args="${args}-x " ;; --dovecot) args="${args}-z " ;; --clamav) args="${args}-c " ;; @@ -170,9 +169,7 @@ for arg; do --lang) args="${args}-l " ;; --interactive) args="${args}-y " ;; --hostname) args="${args}-s " ;; - --ssl) args="${args}-u " ;; --email) args="${args}-e " ;; - --port) args="${args}-d " ;; --password) args="${args}-p " ;; --force) args="${args}-f " ;; --help) args="${args}-h " ;; @@ -183,7 +180,7 @@ done eval set -- "$args" # Parsing arguments -while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do +while getopts "a:n:w:v:j:k:m:g:d:x:z:c:t:i:b:r:o:q:l:y:s:e:p:fh" Option; do case $Option in a) apache=$OPTARG ;; # Apache n) nginx=$OPTARG ;; # Nginx @@ -193,6 +190,7 @@ while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do k) named=$OPTARG ;; # Named m) mysql=$OPTARG ;; # MySQL g) postgresql=$OPTARG ;; # PostgreSQL + d) mongodb=$OPTARG ;; # MongoDB (unsupported) x) exim=$OPTARG ;; # Exim z) dovecot=$OPTARG ;; # Dovecot c) clamd=$OPTARG ;; # ClamAV @@ -205,9 +203,7 @@ while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do l) lang=$OPTARG ;; # Language y) interactive=$OPTARG ;; # Interactive install s) servername=$OPTARG ;; # Hostname - u) ssl=$OPTARG ;; # Add Let's Encrypt SSL for hostname e) email=$OPTARG ;; # Admin email - d) port=$OPTARG ;; # Vesta port p) vpass=$OPTARG ;; # Admin password f) force='yes' ;; # Force install h) help ;; # Help @@ -239,7 +235,6 @@ set_default_value 'fail2ban' 'yes' set_default_value 'softaculous' 'yes' set_default_value 'quota' 'no' set_default_value 'interactive' 'yes' -set_default_value 'ssl' 'no' set_default_lang 'en' # Checking software conflicts @@ -265,7 +260,7 @@ if [ "x$(id -u)" != 'x0' ]; then fi # Checking admin user account -if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ -z "$force" ]; then +if [ ! -z "$(grep ^admin: /etc/passwd /etc/group)" ] && [ -z "$force" ]; then echo 'Please remove admin user account before proceeding.' echo 'If you want to do it automatically run installer with -f option:' echo -e "Example: bash $0 --force\n" @@ -279,7 +274,7 @@ if [ ! -e '/usr/bin/wget' ]; then fi # Checking repository availability -wget -q "c.vestacp.com/deb_signing.key" -O /dev/null +wget -q "$vestacp/deb_signing.key" -O /dev/null check_result $? "No access to Vesta repository" # Check installed packages @@ -381,11 +376,6 @@ if [ "$proftpd" = 'yes' ]; then echo ' - ProFTPD FTP Server' fi -# LE SSL for hostname -if [ "$ssl" = 'yes' ]; then - echo ' - LE SSL for hostname' -fi - # Softaculous if [ "$softaculous" = 'yes' ]; then echo ' - Softaculous Plugin' @@ -413,11 +403,6 @@ if [ "$interactive" = 'yes' ]; then read -p 'Please enter admin email address: ' email fi - # Asking for Vesta port - if [ -z "$port" ]; then - read -p 'Please enter Vesta port number (press enter for 8083): ' port - fi - # Asking to set FQDN hostname if [ -z "$servername" ]; then read -p "Please enter FQDN hostname [$(hostname)]: " servername @@ -451,11 +436,6 @@ if [ -z "$email" ]; then email="admin@$servername" fi -# Set port if it wasn't set -if [ -z "$port" ]; then - port="8083" -fi - # Defining backup directory vst_backups="/root/vst_install_backups/$(date +%s)" echo "Installation backup directory: $vst_backups" @@ -498,17 +478,6 @@ echo "deb http://$RHOST/$codename/ $codename vesta" > $apt/vesta.list wget $CHOST/deb_signing.key -O deb_signing.key apt-key add deb_signing.key -# Installing jessie backports -if [ "$release" -eq 8 ]; then - if [ ! -e /etc/apt/apt.conf ]; then - echo 'Acquire::Check-Valid-Until "false";' >> /etc/apt/apt.conf - fi - if [ ! -e /etc/apt/sources.list.d/backports.list ]; then - echo "deb http://archive.debian.org/debian jessie-backports main" >\ - /etc/apt/sources.list.d/backports.list - fi -fi - #----------------------------------------------------------# # Backup # @@ -588,7 +557,7 @@ rm -rf $VESTA > /dev/null 2>&1 # Excluding packages if [ "$nginx" = 'no' ]; then - software=$(echo "$software" | sed -e "s/ nginx/ /") + software=$(echo "$software" | sed -e "s/^nginx//") fi if [ "$apache" = 'no' ]; then software=$(echo "$software" | sed -e "s/apache2 //") @@ -713,9 +682,9 @@ chmod 755 /usr/bin/rssh # Configure VESTA # #----------------------------------------------------------# -# Installing sudo configuration +# Downloading sudo configuration mkdir -p /etc/sudoers.d -cp -f $vestacp/sudo/admin /etc/sudoers.d/ +wget $vestacp/sudo/admin -O /etc/sudoers.d/admin chmod 440 /etc/sudoers.d/admin # Configuring system env @@ -726,8 +695,8 @@ echo 'PATH=$PATH:'$VESTA'/bin' >> /root/.bash_profile echo 'export PATH' >> /root/.bash_profile source /root/.bash_profile -# Configuring logrotate for Vesta logs -cp -f $vestacp/logrotate/vesta /etc/logrotate.d/ +# Configuring logrotate for vesta logs +wget $vestacp/logrotate/vesta -O /etc/logrotate.d/vesta # Building directory tree and creating some blank files for vesta mkdir -p $VESTA/conf $VESTA/log $VESTA/ssl $VESTA/data/ips \ @@ -742,6 +711,7 @@ chmod -R 750 $VESTA/data/queue chmod 660 $VESTA/log/* rm -f /var/log/vesta ln -s $VESTA/log /var/log/vesta +chown admin:admin $VESTA/data/sessions chmod 770 $VESTA/data/sessions # Generating vesta configuration @@ -838,18 +808,25 @@ echo "LANGUAGE='$lang'" >> $VESTA/conf/vesta.conf # Version echo "VERSION='0.9.8'" >> $VESTA/conf/vesta.conf -# Installing hosting packages -cp -rf $vestacp/packages $VESTA/data/ +# Downloading hosting packages +cd $VESTA/data +wget $vestacp/packages.tar.gz -O packages.tar.gz +tar -xzf packages.tar.gz +rm -f packages.tar.gz -# Installing templates -cp -rf $vestacp/templates $VESTA/data/ +# Downloading templates +wget $vestacp/templates.tar.gz -O templates.tar.gz +tar -xzf templates.tar.gz +rm -f templates.tar.gz # Copying index.html to default documentroot -cp $VESTA/data/templates/web/skel/public_html/index.html /var/www/ +cp templates/web/skel/public_html/index.html /var/www/ sed -i 's/%domain%/It worked!/g' /var/www/index.html -# Installing firewall rules -cp -rf $vestacp/firewall $VESTA/data/ +# Downloading firewall rules +wget $vestacp/firewall.tar.gz -O firewall.tar.gz +tar -xzf firewall.tar.gz +rm -f firewall.tar.gz # Configuring server hostname $VESTA/bin/v-change-sys-hostname $servername 2>/dev/null @@ -878,12 +855,12 @@ rm /tmp/vst.pem if [ "$nginx" = 'yes' ]; then rm -f /etc/nginx/conf.d/*.conf - cp -f $vestacp/nginx/nginx.conf /etc/nginx/ - cp -f $vestacp/nginx/status.conf /etc/nginx/conf.d/ - cp -f $vestacp/nginx/phpmyadmin.inc /etc/nginx/conf.d/ - cp -f $vestacp/nginx/phppgadmin.inc /etc/nginx/conf.d/ - cp -f $vestacp/nginx/webmail.inc /etc/nginx/conf.d/ - cp -f $vestacp/logrotate/nginx /etc/logrotate.d/ + wget $vestacp/nginx/nginx.conf -O /etc/nginx/nginx.conf + wget $vestacp/nginx/status.conf -O /etc/nginx/conf.d/status.conf + wget $vestacp/nginx/phpmyadmin.inc -O /etc/nginx/conf.d/phpmyadmin.inc + wget $vestacp/nginx/phppgadmin.inc -O /etc/nginx/conf.d/phppgadmin.inc + wget $vestacp/nginx/webmail.inc -O /etc/nginx/conf.d/webmail.inc + wget $vestacp/logrotate/nginx -O /etc/logrotate.d/nginx echo > /etc/nginx/conf.d/vesta.conf mkdir -p /var/log/nginx/domains update-rc.d nginx defaults @@ -897,9 +874,9 @@ fi #----------------------------------------------------------# if [ "$apache" = 'yes' ]; then - cp -f $vestacp/apache2/apache2.conf /etc/apache2/ - cp -f $vestacp/apache2/status.conf /etc/apache2/mods-enabled/ - cp -f $vestacp/logrotate/apache2 /etc/logrotate.d/ + wget $vestacp/apache2/apache2.conf -O /etc/apache2/apache2.conf + wget $vestacp/apache2/status.conf -O /etc/apache2/mods-enabled/status.conf + wget $vestacp/logrotate/apache2 -O /etc/logrotate.d/apache2 a2enmod rewrite a2enmod suexec a2enmod ssl @@ -908,9 +885,9 @@ if [ "$apache" = 'yes' ]; then a2enmod headers mkdir -p /etc/apache2/conf.d echo > /etc/apache2/conf.d/vesta.conf - echo "# Server control panel by VESTA" > /etc/apache2/sites-available/default - echo "# Server control panel by VESTA" > /etc/apache2/sites-available/default-ssl - echo "# Server control panel by VESTA" > /etc/apache2/ports.conf + echo "# Powered by vesta" > /etc/apache2/sites-available/default + echo "# Powered by vesta" > /etc/apache2/sites-available/default-ssl + echo "# Powered by vesta" > /etc/apache2/ports.conf echo -e "/home\npublic_html/cgi-bin" > /etc/apache2/suexec/www-data touch /var/log/apache2/access.log /var/log/apache2/error.log mkdir -p /var/log/apache2/domains @@ -932,12 +909,12 @@ fi if [ "$phpfpm" = 'yes' ]; then if [ "$release" -eq 9 ]; then - cp -f $vestacp/php-fpm/www.conf /etc/php/7.0/fpm/pool.d/www.conf + wget $vestacp/php-fpm/www.conf -O /etc/php/7.0/fpm/pool.d/www.conf update-rc.d php7.0-fpm defaults service php7.0-fpm start check_result $? "php-fpm start failed" else - cp -f $vestacp/php5-fpm/www.conf /etc/php5/fpm/pool.d/www.conf + wget $vestacp/php5-fpm/www.conf -O /etc/php5/fpm/pool.d/www.conf update-rc.d php5-fpm defaults service php5-fpm start check_result $? "php-fpm start failed" @@ -964,7 +941,7 @@ done #----------------------------------------------------------# if [ "$vsftpd" = 'yes' ]; then - cp -f $vestacp/vsftpd/vsftpd.conf /etc/ + wget $vestacp/vsftpd/vsftpd.conf -O /etc/vsftpd.conf update-rc.d vsftpd defaults service vsftpd start check_result $? "vsftpd start failed" @@ -980,7 +957,7 @@ fi if [ "$proftpd" = 'yes' ]; then echo "127.0.0.1 $servername" >> /etc/hosts - cp -f $vestacp/proftpd/proftpd.conf /etc/proftpd/ + wget $vestacp/proftpd/proftpd.conf -O /etc/proftpd/proftpd.conf update-rc.d proftpd defaults service proftpd start check_result $? "proftpd start failed" @@ -1001,7 +978,7 @@ if [ "$mysql" = 'yes' ]; then fi # MySQL configuration - cp -f $vestacp/mysql/$mycnf /etc/mysql/my.cnf + wget $vestacp/mysql/$mycnf -O /etc/mysql/my.cnf mysql_install_db update-rc.d mysql defaults service mysql start @@ -1020,10 +997,10 @@ if [ "$mysql" = 'yes' ]; then # Configuring phpMyAdmin if [ "$apache" = 'yes' ]; then - cp -f $vestacp/pma/apache.conf /etc/phpmyadmin/ + wget $vestacp/pma/apache.conf -O /etc/phpmyadmin/apache.conf ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf fi - cp -f $vestacp/pma/config.inc.php /etc/phpmyadmin/ + wget $vestacp/pma/config.inc.php -O /etc/phpmyadmin/config.inc.php chmod 777 /var/lib/phpmyadmin/tmp fi @@ -1033,15 +1010,16 @@ fi if [ "$postgresql" = 'yes' ]; then ppass=$(gen_pass) - cp -f $vestacp/postgresql/pg_hba.conf /etc/postgresql/*/main/ + wget $vestacp/postgresql/pg_hba.conf -O /etc/postgresql/*/main/pg_hba.conf service postgresql restart sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '$ppass'" # Configuring phpPgAdmin if [ "$apache" = 'yes' ]; then - cp -f $vestacp/pga/phppgadmin.conf /etc/apache2/conf.d/ + wget $vestacp/pga/phppgadmin.conf \ + -O /etc/apache2/conf.d/phppgadmin.conf fi - cp -f $vestacp/pga/config.inc.php /etc/phppgadmin/ + wget $vestacp/pga/config.inc.php -O /etc/phppgadmin/config.inc.php fi @@ -1050,7 +1028,7 @@ fi #----------------------------------------------------------# if [ "$named" = 'yes' ]; then - cp -f $vestacp/bind/named.conf /etc/bind/ + wget $vestacp/bind/named.conf -O /etc/bind/named.conf sed -i "s%listen-on%//listen%" /etc/bind/named.conf.options chown root:bind /etc/bind/named.conf chmod 640 /etc/bind/named.conf @@ -1071,9 +1049,9 @@ fi if [ "$exim" = 'yes' ]; then gpasswd -a Debian-exim mail - cp -f $vestacp/exim/exim4.conf.template /etc/exim4/ - cp -f $vestacp/exim/dnsbl.conf /etc/exim4/ - cp -f $vestacp/exim/spam-blocks.conf /etc/exim4/ + wget $vestacp/exim/exim4.conf.template -O /etc/exim4/exim4.conf.template + wget $vestacp/exim/dnsbl.conf -O /etc/exim4/dnsbl.conf + wget $vestacp/exim/spam-blocks.conf -O /etc/exim4/spam-blocks.conf touch /etc/exim4/white-blocks.conf if [ "$spamd" = 'yes' ]; then @@ -1106,12 +1084,13 @@ fi if [ "$dovecot" = 'yes' ]; then gpasswd -a dovecot mail - cp -rf $vestacp/dovecot /etc/ - cp -f $vestacp/logrotate/dovecot /etc/logrotate.d/ + wget $vestacp/dovecot.tar.gz -O /etc/dovecot.tar.gz + wget $vestacp/logrotate/dovecot -O /etc/logrotate.d/dovecot + cd /etc + rm -rf dovecot dovecot.conf + tar -xzf dovecot.tar.gz + rm -f dovecot.tar.gz chown -R root:root /etc/dovecot* - if [ "$release" -eq 9 ]; then - sed -i "s#namespace inbox {#namespace inbox {\n inbox = yes#" /etc/dovecot/conf.d/15-mailboxes.conf - fi update-rc.d dovecot defaults service dovecot start check_result $? "dovecot start failed" @@ -1125,7 +1104,7 @@ fi if [ "$clamd" = 'yes' ]; then gpasswd -a clamav mail gpasswd -a clamav Debian-exim - cp -f $vestacp/clamav/clamd.conf /etc/clamav/ + wget $vestacp/clamav/clamd.conf -O /etc/clamav/clamd.conf /usr/bin/freshclam update-rc.d clamav-daemon defaults if [ ! -d "/var/run/clamav" ]; then @@ -1166,18 +1145,19 @@ fi if [ "$exim" = 'yes' ] && [ "$mysql" = 'yes' ]; then if [ "$apache" = 'yes' ]; then - cp -f $vestacp/roundcube/apache.conf /etc/roundcube/ + wget $vestacp/roundcube/apache.conf -O /etc/roundcube/apache.conf ln -s /etc/roundcube/apache.conf /etc/apache2/conf.d/roundcube.conf fi - cp -f $vestacp/roundcube/main.inc.php /etc/roundcube/ - cp -f $vestacp/roundcube/db.inc.php /etc/roundcube/ + wget $vestacp/roundcube/main.inc.php -O /etc/roundcube/main.inc.php + wget $vestacp/roundcube/db.inc.php -O /etc/roundcube/db.inc.php chmod 640 /etc/roundcube/debian-db-roundcube.php chmod 640 /etc/roundcube/config.inc.php chown root:www-data /etc/roundcube/debian-db-roundcube.php chown root:www-data /etc/roundcube/config.inc.php - cp -f $vestacp/roundcube/vesta.php \ - /usr/share/roundcube/plugins/password/drivers/ - cp -f $vestacp/roundcube/config.inc.php /etc/roundcube/plugins/password/ + wget $vestacp/roundcube/vesta.php -O \ + /usr/share/roundcube/plugins/password/drivers/vesta.php + wget $vestacp/roundcube/config.inc.php -O \ + /etc/roundcube/plugins/password/config.inc.php r="$(gen_pass)" mysql -e "CREATE DATABASE roundcube" mysql -e "GRANT ALL ON roundcube.* @@ -1228,7 +1208,10 @@ fi #----------------------------------------------------------# if [ "$fail2ban" = 'yes' ]; then - cp -rf $vestacp/fail2ban /etc/ + cd /etc + wget $vestacp/fail2ban.tar.gz -O fail2ban.tar.gz + tar -xzf fail2ban.tar.gz + rm -f fail2ban.tar.gz if [ "$dovecot" = 'no' ]; then fline=$(cat /etc/fail2ban/jail.local |grep -n dovecot-iptables -A 2) fline=$(echo "$fline" |grep enabled |tail -n1 |cut -f 1 -d -) @@ -1239,15 +1222,6 @@ if [ "$fail2ban" = 'yes' ]; then fline=$(echo "$fline" |grep enabled |tail -n1 |cut -f 1 -d -) sed -i "${fline}s/true/false/" /etc/fail2ban/jail.local fi - if [ "$vsftpd" = 'yes' ]; then - #Create vsftpd Log File - if [ ! -f "/var/log/vsftpd.log" ]; then - touch /var/log/vsftpd.log - fi - fline=$(cat /etc/fail2ban/jail.local |grep -n vsftpd-iptables -A 2) - fline=$(echo "$fline" |grep enabled |tail -n1 |cut -f 1 -d -) - sed -i "${fline}s/false/true/" /etc/fail2ban/jail.local - fi update-rc.d fail2ban defaults service fail2ban start check_result $? "fail2ban start failed" @@ -1266,7 +1240,7 @@ if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ "$force" = 'yes' ]; then mv -f /home/admin $vst_backups/home/ >/dev/null 2>&1 rm -f /tmp/sess_* >/dev/null 2>&1 fi -if [ ! -z "$(grep ^admin: /etc/group)" ]; then +if [ ! -z "$(grep ^admin: /etc/group)" ] && [ "$force" = 'yes' ]; then groupdel admin > /dev/null 2>&1 fi @@ -1382,79 +1356,22 @@ $VESTA/upd/add_notifications.sh # Adding cronjob for autoupdates $VESTA/bin/v-add-cron-vesta-autoupdate -if [ "$port" != "8083" ]; then - echo "=== Set Vesta port: $port" - $VESTA/bin/v-change-vesta-port $port -fi - -echo "NOTIFY_ADMIN_FULL_BACKUP='$email'" >> $VESTA/conf/vesta.conf #----------------------------------------------------------# # Vesta Access Info # #----------------------------------------------------------# # Comparing hostname and ip - -if [ "$ssl" = 'no' ]; then -host_ip=$(host $servername |head -n 1 |awk '{print $NF}') +host_ip=$(host $servername| head -n 1 | awk '{print $NF}') if [ "$host_ip" = "$ip" ]; then ip="$servername" fi -fi - -if [ "$ssl" = 'yes' ]; then -make_ssl=0 -host_ip=$(host $servername | head -n 1 | awk '{print $NF}') -if [ "$host_ip" != "$pub_ip" ]; then - echo "***** PROBLEM: Hostname $servername is not pointing to your server (IP address $ip)" - echo "Without pointing your hostname to your IP, LetsEncrypt SSL will not be generated for your server hostname." - echo "Try to setup an A record in your DNS, pointing your hostname $servername to IP address $ip and then press ENTER." - echo "(or register ns1.$servername and ns2.$servername as DNS Nameservers and put those Nameservers on $servername domain)" - echo "If we detect that hostname is still not pointing to your IP, installer will not add LetsEncrypt SSL certificate to your hosting panel (unsigned SSL will be used instead)." - read -p "To force to try anyway to add LetsEncrypt, press f and then ENTER." answer - host_ip=$(host $servername | head -n 1 | awk '{print $NF}') -fi -if [ "$answer" = "f" ]; then - make_ssl=1 -fi -if [ "$host_ip" = "$ip" ]; then - ip="$servername" - make_ssl=1 -fi - -if [ $make_ssl -eq 1 ]; then - # Check if www is also pointing to our IP - www_host="www.$servername" - www_host_ip=$(host $www_host | head -n 1 | awk '{print $NF}') - if [ "$www_host_ip" != "$pub_ip" ]; then - if [ "$named" = 'yes' ]; then - echo "=== Deleting www to server hostname" - $VESTA/bin/v-delete-web-domain-alias 'admin' "$servername" "$www_host" 'no' - $VESTA/bin/v-delete-dns-on-web-alias 'admin' "$servername" "$www_host" 'no' - fi - www_host="" - fi -fi - -echo "===" -echo "Hostname $servername is pointing to $host_ip" - -if [ $make_ssl -eq 1 ]; then - echo "=== Generating HOSTNAME SSL" - $VESTA/bin/v-add-letsencrypt-domain 'admin' "$servername" "$www_host" 'yes' - $VESTA/bin/v-update-host-certificate 'admin' "$servername" -else - echo "We will not generate SSL because of this" -fi -echo "===" -echo "UPDATE_HOSTNAME_SSL='yes'" >> $VESTA/conf/vesta.conf -fi # Sending notification to admin email echo -e "Congratulations, you have just successfully installed \ Vesta Control Panel - https://$ip:$port + https://$ip:8083 username: admin password: $vpass diff --git a/install/vst-install-rhel.sh b/install/vst-install-rhel.sh index 140317182..3aaad8084 100755 --- a/install/vst-install-rhel.sh +++ b/install/vst-install-rhel.sh @@ -19,10 +19,10 @@ codename="${os}_$release" vestacp="$VESTA/install/$VERSION/$release" # Defining software pack for all distros -software="nginx awstats bc bind bind-libs bind-utils clamav-server clamav-update +software="awstats bc bind bind-libs bind-utils clamav-server clamav-update curl dovecot e2fsprogs exim expect fail2ban flex freetype ftp GeoIP httpd ImageMagick iptables-services jwhois lsof mailx mariadb mariadb-server mc - mod_fcgid mod_ruid2 mod_ssl net-tools ntp openssh-clients pcre php + mod_fcgid mod_ruid2 mod_ssl net-tools nginx ntp openssh-clients pcre php php-bcmath php-cli php-common php-fpm php-gd php-imap php-mbstring php-mcrypt phpMyAdmin php-mysql php-pdo phpPgAdmin php-pgsql php-soap php-tidy php-xml php-xmlrpc postgresql postgresql-contrib @@ -42,29 +42,28 @@ fi # Defining help function help() { echo "Usage: $0 [OPTIONS] - -a, --apache Install Apache [yes|no] default: yes - -n, --nginx Install Nginx [yes|no] default: yes - -w, --phpfpm Install PHP-FPM [yes|no] default: no - -v, --vsftpd Install Vsftpd [yes|no] default: yes - -j, --proftpd Install ProFTPD [yes|no] default: no - -k, --named Install Bind [yes|no] default: yes - -m, --mysql Install MySQL [yes|no] default: yes - -g, --postgresql Install PostgreSQL [yes|no] default: no - -x, --exim Install Exim [yes|no] default: yes - -z, --dovecot Install Dovecot [yes|no] default: yes - -c, --clamav Install ClamAV [yes|no] default: yes - -t, --spamassassin Install SpamAssassin [yes|no] default: yes - -i, --iptables Install Iptables [yes|no] default: yes - -b, --fail2ban Install Fail2ban [yes|no] default: yes - -r, --remi Install Remi repo [yes|no] default: yes - -o, --softaculous Install Softaculous [yes|no] default: yes - -q, --quota Filesystem Quota [yes|no] default: no + -a, --apache Install Apache [yes|no] default: yes + -n, --nginx Install Nginx [yes|no] default: yes + -w, --phpfpm Install PHP-FPM [yes|no] default: no + -v, --vsftpd Install Vsftpd [yes|no] default: yes + -j, --proftpd Install ProFTPD [yes|no] default: no + -k, --named Install Bind [yes|no] default: yes + -m, --mysql Install MySQL [yes|no] default: yes + -g, --postgresql Install PostgreSQL [yes|no] default: no + -d, --mongodb Install MongoDB [yes|no] unsupported + -x, --exim Install Exim [yes|no] default: yes + -z, --dovecot Install Dovecot [yes|no] default: yes + -c, --clamav Install ClamAV [yes|no] default: yes + -t, --spamassassin Install SpamAssassin [yes|no] default: yes + -i, --iptables Install Iptables [yes|no] default: yes + -b, --fail2ban Install Fail2ban [yes|no] default: yes + -r, --remi Install Remi repo [yes|no] default: yes + -o, --softaculous Install Softaculous [yes|no] default: yes + -q, --quota Filesystem Quota [yes|no] default: no -l, --lang Default language default: en - -y, --interactive Interactive install [yes|no] default: yes + -y, --interactive Interactive install [yes|no] default: yes -s, --hostname Set hostname - -u, --ssl Add LE SSL for hostname [yes|no] default: no -e, --email Set admin email - -d, --port Set Vesta port -p, --password Set admin password -f, --force Force installation -h, --help Print this help @@ -135,6 +134,7 @@ for arg; do --named) args="${args}-k " ;; --mysql) args="${args}-m " ;; --postgresql) args="${args}-g " ;; + --mongodb) args="${args}-d " ;; --exim) args="${args}-x " ;; --dovecot) args="${args}-z " ;; --clamav) args="${args}-c " ;; @@ -147,9 +147,7 @@ for arg; do --lang) args="${args}-l " ;; --interactive) args="${args}-y " ;; --hostname) args="${args}-s " ;; - --ssl) args="${args}-u " ;; --email) args="${args}-e " ;; - --port) args="${args}-d " ;; --password) args="${args}-p " ;; --force) args="${args}-f " ;; --help) args="${args}-h " ;; @@ -160,7 +158,7 @@ done eval set -- "$args" # Parsing arguments -while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do +while getopts "a:n:w:v:j:k:m:g:d:x:z:c:t:i:b:r:o:q:l:y:s:e:p:fh" Option; do case $Option in a) apache=$OPTARG ;; # Apache n) nginx=$OPTARG ;; # Nginx @@ -183,9 +181,7 @@ while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do l) lang=$OPTARG ;; # Language y) interactive=$OPTARG ;; # Interactive install s) servername=$OPTARG ;; # Hostname - u) ssl=$OPTARG ;; # Add Let's Encrypt SSL for hostname e) email=$OPTARG ;; # Admin email - d) port=$OPTARG ;; # Vesta port p) vpass=$OPTARG ;; # Admin password f) force='yes' ;; # Force install h) help ;; # Help @@ -218,7 +214,6 @@ set_default_value 'remi' 'yes' set_default_value 'softaculous' 'yes' set_default_value 'quota' 'no' set_default_value 'interactive' 'yes' -set_default_value 'ssl' 'no' set_default_lang 'en' # Checking software conflicts @@ -343,7 +338,7 @@ fi # Database stack if [ "$mysql" = 'yes' ]; then - if [ $release -ge '7' ]; then + if [ $release -ge 7 ]; then echo ' - MariaDB Database Server' else echo ' - MySQL Database Server' @@ -364,11 +359,6 @@ if [ "$proftpd" = 'yes' ]; then echo ' - ProFTPD FTP Server' fi -# LE SSL for hostname -if [ "$ssl" = 'yes' ]; then - echo ' - LE SSL for hostname' -fi - # Softaculous if [ "$softaculous" = 'yes' ]; then echo ' - Softaculous Plugin' @@ -396,11 +386,6 @@ if [ "$interactive" = 'yes' ]; then read -p 'Please enter admin email address: ' email fi - # Asking for Vesta port - if [ -z "$port" ]; then - read -p 'Please enter Vesta port number (press enter for 8083): ' port - fi - # Asking to set FQDN hostname if [ -z "$servername" ]; then read -p "Please enter FQDN hostname [$(hostname -f)]: " servername @@ -434,11 +419,6 @@ if [ -z "$email" ]; then email="admin@$servername" fi -# Set port if it wasn't set -if [ -z "$port" ]; then - port="8083" -fi - # Defining backup directory vst_backups="/root/vst_install_backups/$(date +%s)" echo "Installation backup directory: $vst_backups" @@ -479,7 +459,6 @@ if [ "$remi" = 'yes' ] && [ ! -e "/etc/yum.repos.d/remi.repo" ]; then rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-$release.rpm check_result $? "Can't install REMI repository" sed -i "s/enabled=0/enabled=1/g" /etc/yum.repos.d/remi.repo - sed -i "s/enabled=0/enabled=1/g" /etc/yum.repos.d/remi-php81.repo fi # Installing Nginx repository @@ -582,7 +561,7 @@ mv $VESTA/conf/* $vst_backups/vesta > /dev/null 2>&1 # Excluding packages if [ "$nginx" = 'no' ]; then - software=$(echo "$software" | sed -e "s/ nginx/ /") + software=$(echo "$software" | sed -e "s/^nginx//") fi if [ "$apache" = 'no' ]; then software=$(echo "$software" | sed -e "s/httpd//") @@ -712,10 +691,6 @@ chmod a+x /backup # Set directory color echo 'LS_COLORS="$LS_COLORS:di=00;33"' >> /etc/profile -# Register /sbin/nologin and /usr/sbin/nologin -echo "/sbin/nologin" >> /etc/shells -echo "/usr/sbin/nologin" >> /etc/shells - # Changing default systemd interval if [ "$release" -eq '7' ]; then # Hi Lennart @@ -881,6 +856,7 @@ chown root:mail $VESTA/ssl/* chmod 660 $VESTA/ssl/* rm /tmp/vst.pem + #----------------------------------------------------------# # Configure Nginx # #----------------------------------------------------------# @@ -895,7 +871,7 @@ if [ "$nginx" = 'yes' ]; then cp -f $vestacp/logrotate/nginx /etc/logrotate.d/ echo > /etc/nginx/conf.d/vesta.conf mkdir -p /var/log/nginx/domains - if [ "$release" -ge '7' ]; then + if [ "$release" -ge 7 ]; then mkdir -p /etc/systemd/system/nginx.service.d cd /etc/systemd/system/nginx.service.d echo "[Service]" > limits.conf @@ -940,7 +916,7 @@ if [ "$apache" = 'yes' ]; then chmod a+x /var/log/httpd mkdir -p /var/log/httpd/domains chmod 751 /var/log/httpd/domains - if [ "$release" -ge '7' ]; then + if [ "$release" -ge 7 ]; then mkdir -p /etc/systemd/system/httpd.service.d cd /etc/systemd/system/httpd.service.d echo "[Service]" > limits.conf @@ -1062,15 +1038,8 @@ if [ "$mysql" = 'yes' ]; then if [ "$apache" = 'yes' ]; then cp -f $vestacp/pma/phpMyAdmin.conf /etc/httpd/conf.d/ fi - mysql < /usr/share/phpMyAdmin/sql/create_tables.sql - p=$(gen_pass) - mysql -e "GRANT ALL ON phpmyadmin.* - TO phpmyadmin@localhost IDENTIFIED BY '$p'" cp -f $vestacp/pma/config.inc.conf /etc/phpMyAdmin/config.inc.php - sed -i "s/%blowfish_secret%/$(gen_pass 32)/g" /etc/phpMyAdmin/config.inc.php - sed -i "s/%phpmyadmin_pass%/$p/g" /etc/phpMyAdmin/config.inc.php - chmod 777 /var/lib/phpMyAdmin/temp - chmod 777 /var/lib/phpMyAdmin/save + sed -i "s/%blowfish_secret%/$(gen_pass)/g" /etc/phpMyAdmin/config.inc.php fi @@ -1158,9 +1127,6 @@ if [ "$dovecot" = 'yes' ]; then cp -rf $vestacp/dovecot /etc/ cp -f $vestacp/logrotate/dovecot /etc/logrotate.d/ chown -R root:root /etc/dovecot* - if [ "$release" -eq 7 ]; then - sed -i "s#namespace inbox {#namespace inbox {\n inbox = yes#" /etc/dovecot/conf.d/15-mailboxes.conf - fi chkconfig dovecot on service dovecot start check_result $? "dovecot start failed" @@ -1380,79 +1346,22 @@ $VESTA/upd/add_notifications.sh # Adding cronjob for autoupdates $VESTA/bin/v-add-cron-vesta-autoupdate -if [ "$port" != "8083" ]; then - echo "=== Set Vesta port: $port" - $VESTA/bin/v-change-vesta-port $port -fi - -echo "NOTIFY_ADMIN_FULL_BACKUP='$email'" >> $VESTA/conf/vesta.conf #----------------------------------------------------------# # Vesta Access Info # #----------------------------------------------------------# -# Comparing hostname and ip - -if [ "$ssl" = 'no' ]; then +# Comparing hostname and IP host_ip=$(host $servername |head -n 1 |awk '{print $NF}') if [ "$host_ip" = "$ip" ]; then ip="$servername" fi -fi - -if [ "$ssl" = 'yes' ]; then -make_ssl=0 -host_ip=$(host $servername | head -n 1 | awk '{print $NF}') -if [ "$host_ip" != "$pub_ip" ]; then - echo "***** PROBLEM: Hostname $servername is not pointing to your server (IP address $ip)" - echo "Without pointing your hostname to your IP, LetsEncrypt SSL will not be generated for your server hostname." - echo "Try to setup an A record in your DNS, pointing your hostname $servername to IP address $ip and then press ENTER." - echo "(or register ns1.$servername and ns2.$servername as DNS Nameservers and put those Nameservers on $servername domain)" - echo "If we detect that hostname is still not pointing to your IP, installer will not add LetsEncrypt SSL certificate to your hosting panel (unsigned SSL will be used instead)." - read -p "To force to try anyway to add LetsEncrypt, press f and then ENTER." answer - host_ip=$(host $servername | head -n 1 | awk '{print $NF}') -fi -if [ "$answer" = "f" ]; then - make_ssl=1 -fi -if [ "$host_ip" = "$ip" ]; then - ip="$servername" - make_ssl=1 -fi - -if [ $make_ssl -eq 1 ]; then - # Check if www is also pointing to our IP - www_host="www.$servername" - www_host_ip=$(host $www_host | head -n 1 | awk '{print $NF}') - if [ "$www_host_ip" != "$pub_ip" ]; then - if [ "$named" = 'yes' ]; then - echo "=== Deleting www to server hostname" - $VESTA/bin/v-delete-web-domain-alias 'admin' "$servername" "$www_host" 'no' - $VESTA/bin/v-delete-dns-on-web-alias 'admin' "$servername" "$www_host" 'no' - fi - www_host="" - fi -fi - -echo "===" -echo "Hostname $servername is pointing to $host_ip" - -if [ $make_ssl -eq 1 ]; then - echo "=== Generating HOSTNAME SSL" - $VESTA/bin/v-add-letsencrypt-domain 'admin' "$servername" "$www_host" 'yes' - $VESTA/bin/v-update-host-certificate 'admin' "$servername" -else - echo "We will not generate SSL because of this" -fi -echo "===" -echo "UPDATE_HOSTNAME_SSL='yes'" >> $VESTA/conf/vesta.conf -fi # Sending notification to admin email echo -e "Congratulations, you have just successfully installed \ Vesta Control Panel - https://$ip:$port + https://$ip:8083 username: admin password: $vpass diff --git a/install/vst-install-ubuntu.sh b/install/vst-install-ubuntu.sh index 872c9b505..4cc5ee866 100755 --- a/install/vst-install-ubuntu.sh +++ b/install/vst-install-ubuntu.sh @@ -19,17 +19,17 @@ codename="$(lsb_release -s -c)" vestacp="$VESTA/install/$VERSION/$release" # Defining software pack for all distros -software="nginx apache2 apache2.2-common apache2-suexec-custom apache2-utils +software="apache2 apache2.2-common apache2-suexec-custom apache2-utils apparmor-utils awstats bc bind9 bsdmainutils bsdutils clamav-daemon cron curl dnsutils dovecot-imapd dovecot-pop3d e2fslibs e2fsprogs exim4 exim4-daemon-heavy expect fail2ban flex ftp git idn imagemagick libapache2-mod-fcgid libapache2-mod-php libapache2-mod-rpaf - libapache2-mod-ruid2 lsof mc mysql-client mysql-common mysql-server + libapache2-mod-ruid2 lsof mc mysql-client mysql-common mysql-server nginx ntpdate php-cgi php-common php-curl php-fpm phpmyadmin php-mysql phppgadmin php-pgsql postgresql postgresql-contrib proftpd-basic quota roundcube-core roundcube-mysql roundcube-plugins rrdtool rssh spamassassin sudo vesta vesta-ioncube vesta-nginx vesta-php vesta-softaculous - vim-common vsftpd webalizer whois zip net-tools" + vim-common vsftpd webalizer whois zip" # Fix for old releases if [[ ${release:0:2} -lt 16 ]]; then @@ -41,29 +41,27 @@ fi # Defining help function help() { echo "Usage: $0 [OPTIONS] - -a, --apache Install Apache [yes|no] default: yes - -n, --nginx Install Nginx [yes|no] default: yes - -w, --phpfpm Install PHP-FPM [yes|no] default: no - -v, --vsftpd Install Vsftpd [yes|no] default: yes - -j, --proftpd Install ProFTPD [yes|no] default: no - -k, --named Install Bind [yes|no] default: yes - -m, --mysql Install MySQL [yes|no] default: yes - -g, --postgresql Install PostgreSQL [yes|no] default: no - -x, --exim Install Exim [yes|no] default: yes - -z, --dovecot Install Dovecot [yes|no] default: yes - -c, --clamav Install ClamAV [yes|no] default: yes - -t, --spamassassin Install SpamAssassin [yes|no] default: yes - -i, --iptables Install Iptables [yes|no] default: yes - -b, --fail2ban Install Fail2ban [yes|no] default: yes - -r, --remi Install Remi repo [yes|no] default: yes - -o, --softaculous Install Softaculous [yes|no] default: yes - -q, --quota Filesystem Quota [yes|no] default: no + -a, --apache Install Apache [yes|no] default: yes + -n, --nginx Install Nginx [yes|no] default: yes + -w, --phpfpm Install PHP-FPM [yes|no] default: no + -v, --vsftpd Install Vsftpd [yes|no] default: yes + -j, --proftpd Install ProFTPD [yes|no] default: no + -k, --named Install Bind [yes|no] default: yes + -m, --mysql Install MySQL [yes|no] default: yes + -g, --postgresql Install PostgreSQL [yes|no] default: no + -d, --mongodb Install MongoDB [yes|no] unsupported + -x, --exim Install Exim [yes|no] default: yes + -z, --dovecot Install Dovecot [yes|no] default: yes + -c, --clamav Install ClamAV [yes|no] default: yes + -t, --spamassassin Install SpamAssassin [yes|no] default: yes + -i, --iptables Install Iptables [yes|no] default: yes + -b, --fail2ban Install Fail2ban [yes|no] default: yes + -o, --softaculous Install Softaculous [yes|no] default: yes + -q, --quota Filesystem Quota [yes|no] default: no -l, --lang Default language default: en - -y, --interactive Interactive install [yes|no] default: yes + -y, --interactive Interactive install [yes|no] default: yes -s, --hostname Set hostname - -u, --ssl Add LE SSL for hostname [yes|no] default: no -e, --email Set admin email - -d, --port Set Vesta port -p, --password Set admin password -f, --force Force installation -h, --help Print this help @@ -138,6 +136,7 @@ for arg; do --named) args="${args}-k " ;; --mysql) args="${args}-m " ;; --postgresql) args="${args}-g " ;; + --mongodb) args="${args}-d " ;; --exim) args="${args}-x " ;; --dovecot) args="${args}-z " ;; --clamav) args="${args}-c " ;; @@ -150,9 +149,7 @@ for arg; do --lang) args="${args}-l " ;; --interactive) args="${args}-y " ;; --hostname) args="${args}-s " ;; - --ssl) args="${args}-u " ;; --email) args="${args}-e " ;; - --port) args="${args}-d " ;; --password) args="${args}-p " ;; --force) args="${args}-f " ;; --help) args="${args}-h " ;; @@ -163,7 +160,7 @@ done eval set -- "$args" # Parsing arguments -while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do +while getopts "a:n:w:v:j:k:m:g:d:x:z:c:t:i:b:r:o:q:l:y:s:e:p:fh" Option; do case $Option in a) apache=$OPTARG ;; # Apache n) nginx=$OPTARG ;; # Nginx @@ -173,6 +170,7 @@ while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do k) named=$OPTARG ;; # Named m) mysql=$OPTARG ;; # MySQL g) postgresql=$OPTARG ;; # PostgreSQL + d) mongodb=$OPTARG ;; # MongoDB (unsupported) x) exim=$OPTARG ;; # Exim z) dovecot=$OPTARG ;; # Dovecot c) clamd=$OPTARG ;; # ClamAV @@ -185,9 +183,7 @@ while getopts "a:n:w:v:j:k:m:g:x:z:c:t:i:b:r:o:q:l:y:s:u:e:d:p:fh" Option; do l) lang=$OPTARG ;; # Language y) interactive=$OPTARG ;; # Interactive install s) servername=$OPTARG ;; # Hostname - u) ssl=$OPTARG ;; # Add Let's Encrypt SSL for hostname e) email=$OPTARG ;; # Admin email - d) port=$OPTARG ;; # Vesta port p) vpass=$OPTARG ;; # Admin password f) force='yes' ;; # Force install h) help ;; # Help @@ -219,7 +215,6 @@ set_default_value 'fail2ban' 'yes' set_default_value 'softaculous' 'yes' set_default_value 'quota' 'no' set_default_value 'interactive' 'yes' -set_default_value 'ssl' 'no' set_default_lang 'en' # Checking software conflicts @@ -245,7 +240,7 @@ if [ "x$(id -u)" != 'x0' ]; then fi # Checking admin user account -if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ -z "$force" ]; then +if [ ! -z "$(grep ^admin: /etc/passwd /etc/group)" ] && [ -z "$force" ]; then echo 'Please remove admin user account before proceeding.' echo 'If you want to do it automatically run installer with -f option:' echo -e "Example: bash $0 --force\n" @@ -265,18 +260,6 @@ check_result $? "No access to Vesta repository" # Checking installed packages tmpfile=$(mktemp -p /tmp) dpkg --get-selections > $tmpfile -# Checking gnupg (fix for latest Ubuntu vestions) -for pkg in gnupg gnupg1 gnupg2; do - if [ ! -z "$(grep '$pkg' $tmpfile)" ]; then - gnupg_exist=true - break - fi -done -if [ -z "$gnupg_exist" ]; then - apt-get -y install gnupg - check_result $? "apt-get install failed" -fi -# Checking conflicts for pkg in exim4 mysql-server apache2 nginx vesta; do if [ ! -z "$(grep $pkg $tmpfile)" ]; then conflicts="$pkg $conflicts" @@ -373,11 +356,6 @@ if [ "$proftpd" = 'yes' ]; then echo ' - ProFTPD FTP Server' fi -# LE SSL for hostname -if [ "$ssl" = 'yes' ]; then - echo ' - LE SSL for hostname' -fi - # Softaculous if [ "$softaculous" = 'yes' ]; then echo ' - Softaculous Plugin' @@ -405,11 +383,6 @@ if [ "$interactive" = 'yes' ]; then read -p 'Please enter admin email address: ' email fi - # Asking for Vesta port - if [ -z "$port" ]; then - read -p 'Please enter Vesta port number (press enter for 8083): ' port - fi - # Asking to set FQDN hostname if [ -z "$servername" ]; then read -p "Please enter FQDN hostname [$(hostname -f)]: " servername @@ -443,11 +416,6 @@ if [ -z "$email" ]; then email="admin@$servername" fi -# Set port if it wasn't set -if [ -z "$port" ]; then - port="8083" -fi - # Defining backup directory vst_backups="/root/vst_install_backups/$(date +%s)" echo "Installation backup directory: $vst_backups" @@ -479,13 +447,6 @@ fi apt-get -y upgrade check_result $? 'apt-get upgrade failed' -# Checking universe repository -if [[ ${release:0:2} -gt 16 ]]; then - if [ -z "$(grep universe /etc/apt/sources.list)" ]; then - add-apt-repository -y universe - fi -fi - # Installing nginx repo apt=/etc/apt/sources.list.d echo "deb http://nginx.org/packages/mainline/ubuntu/ $codename nginx" \ @@ -585,7 +546,7 @@ if [ "$release" != "15.04" ] && [ "$release" != "15.04" ]; then fi if [ "$nginx" = 'no' ]; then - software=$(echo "$software" | sed -e "s/ nginx/ /") + software=$(echo "$software" | sed -e "s/^nginx//") fi if [ "$apache" = 'no' ]; then software=$(echo "$software" | sed -e "s/apache2 //") @@ -720,7 +681,6 @@ chmod 755 /usr/bin/rssh mkdir -p /etc/sudoers.d cp -f $vestacp/sudo/admin /etc/sudoers.d/ chmod 440 /etc/sudoers.d/admin -sed -i "s/%admin.*ALL=(ALL).*/# sudo is limited to vesta scripts/" /etc/sudoers # Configuring system env echo "export VESTA='$VESTA'" > /etc/profile.d/vesta.sh @@ -910,9 +870,9 @@ if [ "$apache" = 'yes' ]; then a2enmod ruid2 mkdir -p /etc/apache2/conf.d echo > /etc/apache2/conf.d/vesta.conf - echo "# Server control panel by VESTA" > /etc/apache2/sites-available/default - echo "# Server control panel by VESTA" > /etc/apache2/sites-available/default-ssl - echo "# Server control panel by VESTA" > /etc/apache2/ports.conf + echo "# Powered by vesta" > /etc/apache2/sites-available/default + echo "# Powered by vesta" > /etc/apache2/sites-available/default-ssl + echo "# Powered by vesta" > /etc/apache2/ports.conf echo -e "/home\npublic_html/cgi-bin" > /etc/apache2/suexec/www-data touch /var/log/apache2/access.log /var/log/apache2/error.log mkdir -p /var/log/apache2/domains @@ -1032,18 +992,10 @@ if [ "$mysql" = 'yes' ]; then cp -f $vestacp/pma/apache.conf /etc/phpmyadmin/ ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf fi - if [[ ${release:0:2} -ge 18 ]]; then - mysql < /usr/share/phpmyadmin/sql/create_tables.sql - p=$(grep dbpass /etc/phpmyadmin/config-db.php |cut -f 2 -d "'") - mysql -e "GRANT ALL ON phpmyadmin.* - TO phpmyadmin@localhost IDENTIFIED BY '$p'" - else - cp -f $vestacp/pma/config.inc.php /etc/phpmyadmin/ - fi + cp -f $vestacp/pma/config.inc.php /etc/phpmyadmin/ chmod 777 /var/lib/phpmyadmin/tmp fi - #----------------------------------------------------------# # Configure PostgreSQL # #----------------------------------------------------------# @@ -1128,18 +1080,7 @@ fi if [ "$dovecot" = 'yes' ]; then gpasswd -a dovecot mail - if [[ ${release:0:2} -ge 18 ]]; then - cp -r /usr/local/vesta/install/debian/9/dovecot /etc/ - if [ -z "$(grep yes /etc/dovecot/conf.d/10-mail.conf)" ]; then - echo "namespace inbox {" >> /etc/dovecot/conf.d/10-mail.conf - echo " inbox = yes" >> /etc/dovecot/conf.d/10-mail.conf - echo "}" >> /etc/dovecot/conf.d/10-mail.conf - echo "first_valid_uid = 1000" >> /etc/dovecot/conf.d/10-mail.conf - echo "mbox_write_locks = fcntl" >> /etc/dovecot/conf.d/10-mail.conf - fi - else - cp -rf $vestacp/dovecot /etc/ - fi + cp -rf $vestacp/dovecot /etc/ cp -f $vestacp/logrotate/dovecot /etc/logrotate.d/ chown -R root:root /etc/dovecot* update-rc.d dovecot defaults @@ -1188,42 +1129,29 @@ if [ "$exim" = 'yes' ] && [ "$mysql" = 'yes' ]; then cp -f $vestacp/roundcube/apache.conf /etc/roundcube/ ln -s /etc/roundcube/apache.conf /etc/apache2/conf.d/roundcube.conf fi - - if [[ ${release:0:2} -ge 18 ]]; then - r=$(grep dbpass= /etc/roundcube/debian-db.php |cut -f 2 -d "'") - sed -i "s/default_host.*/default_host'] = 'localhost';/" \ - /etc/roundcube/config.inc.php - sed -i "s/^);/'password');/" /etc/roundcube/config.inc.php - else - r="$(gen_pass)" - cp -f $vestacp/roundcube/main.inc.php /etc/roundcube/ - cp -f $vestacp/roundcube/db.inc.php /etc/roundcube/ - sed -i "s/%password%/$r/g" /etc/roundcube/db.inc.php - fi - + cp -f $vestacp/roundcube/main.inc.php /etc/roundcube/ + cp -f $vestacp/roundcube/db.inc.php /etc/roundcube/ + chmod 640 /etc/roundcube/debian-db* + chown root:www-data /etc/roundcube/debian-db* + cp -f $vestacp/roundcube/vesta.php \ + /usr/share/roundcube/plugins/password/drivers/ + cp -f $vestacp/roundcube/config.inc.php /etc/roundcube/plugins/password/ + r="$(gen_pass)" + mysql -e "CREATE DATABASE roundcube" + mysql -e "GRANT ALL ON roundcube.* + TO roundcube@localhost IDENTIFIED BY '$r'" + sed -i "s/%password%/$r/g" /etc/roundcube/db.inc.php + touch /var/log/roundcube/errors + chmod 640 /var/log/roundcube/errors + chown www-data:adm /var/log/roundcube/errors if [ "$release" = '16.04' ]; then - # TBD: should be fixed in config repo mv /etc/roundcube/db.inc.php /etc/roundcube/debian-db-roundcube.php mv /etc/roundcube/main.inc.php /etc/roundcube/config.inc.php chmod 640 /etc/roundcube/debian-db-roundcube.php chown root:www-data /etc/roundcube/debian-db-roundcube.php fi - cp -f $vestacp/roundcube/vesta.php \ - /usr/share/roundcube/plugins/password/drivers/ - cp -f $vestacp/roundcube/config.inc.php /etc/roundcube/plugins/password/ - - mysql -e "CREATE DATABASE roundcube" - mysql -e "GRANT ALL ON roundcube.* - TO roundcube@localhost IDENTIFIED BY '$r'" mysql roundcube < /usr/share/dbconfig-common/data/roundcube/install/mysql - - chmod 640 /etc/roundcube/debian-db* - chown root:www-data /etc/roundcube/debian-db* - touch /var/log/roundcube/errors - chmod 640 /var/log/roundcube/errors - chown www-data:adm /var/log/roundcube/errors - php5enmod mcrypt 2>/dev/null phpenmod mcrypt 2>/dev/null if [ "$apache" = 'yes' ]; then @@ -1278,7 +1206,7 @@ if [ ! -z "$(grep ^admin: /etc/passwd)" ] && [ "$force" = 'yes' ]; then mv -f /home/admin $vst_backups/home/ >/dev/null 2>&1 rm -f /tmp/sess_* >/dev/null 2>&1 fi -if [ ! -z "$(grep ^admin: /etc/group)" ]; then +if [ ! -z "$(grep ^admin: /etc/group)" ] && [ "$force" = 'yes' ]; then groupdel admin > /dev/null 2>&1 fi @@ -1364,80 +1292,22 @@ $VESTA/upd/add_notifications.sh # Adding cronjob for autoupdates $VESTA/bin/v-add-cron-vesta-autoupdate -if [ "$port" != "8083" ]; then - echo "=== Set Vesta port: $port" - $VESTA/bin/v-change-vesta-port $port -fi - -echo "NOTIFY_ADMIN_FULL_BACKUP='$email'" >> $VESTA/conf/vesta.conf - #----------------------------------------------------------# # Vesta Access Info # #----------------------------------------------------------# -# Comparing hostname and ip - -if [ "$ssl" = 'no' ]; then -host_ip=$(host $servername |head -n 1 |awk '{print $NF}') +# Comparing hostname and IP +host_ip=$(host $servername| head -n 1 |awk '{print $NF}') if [ "$host_ip" = "$ip" ]; then ip="$servername" fi -fi - -if [ "$ssl" = 'yes' ]; then -make_ssl=0 -host_ip=$(host $servername | head -n 1 | awk '{print $NF}') -if [ "$host_ip" != "$pub_ip" ]; then - echo "***** PROBLEM: Hostname $servername is not pointing to your server (IP address $ip)" - echo "Without pointing your hostname to your IP, LetsEncrypt SSL will not be generated for your server hostname." - echo "Try to setup an A record in your DNS, pointing your hostname $servername to IP address $ip and then press ENTER." - echo "(or register ns1.$servername and ns2.$servername as DNS Nameservers and put those Nameservers on $servername domain)" - echo "If we detect that hostname is still not pointing to your IP, installer will not add LetsEncrypt SSL certificate to your hosting panel (unsigned SSL will be used instead)." - read -p "To force to try anyway to add LetsEncrypt, press f and then ENTER." answer - host_ip=$(host $servername | head -n 1 | awk '{print $NF}') -fi -if [ "$answer" = "f" ]; then - make_ssl=1 -fi -if [ "$host_ip" = "$ip" ]; then - ip="$servername" - make_ssl=1 -fi - -if [ $make_ssl -eq 1 ]; then - # Check if www is also pointing to our IP - www_host="www.$servername" - www_host_ip=$(host $www_host | head -n 1 | awk '{print $NF}') - if [ "$www_host_ip" != "$pub_ip" ]; then - if [ "$named" = 'yes' ]; then - echo "=== Deleting www to server hostname" - $VESTA/bin/v-delete-web-domain-alias 'admin' "$servername" "$www_host" 'no' - $VESTA/bin/v-delete-dns-on-web-alias 'admin' "$servername" "$www_host" 'no' - fi - www_host="" - fi -fi - -echo "===" -echo "Hostname $servername is pointing to $host_ip" - -if [ $make_ssl -eq 1 ]; then - echo "=== Generating HOSTNAME SSL" - $VESTA/bin/v-add-letsencrypt-domain 'admin' "$servername" "$www_host" 'yes' - $VESTA/bin/v-update-host-certificate 'admin' "$servername" -else - echo "We will not generate SSL because of this" -fi -echo "===" -echo "UPDATE_HOSTNAME_SSL='yes'" >> $VESTA/conf/vesta.conf -fi # Sending notification to admin email echo -e "Congratulations, you have just successfully installed \ Vesta Control Panel - https://$ip:$port + https://$ip:8083 username: admin password: $vpass diff --git a/src/deb/ioncube/control b/src/deb/ioncube/control index e4ca9a96f..9db6cc149 100644 --- a/src/deb/ioncube/control +++ b/src/deb/ioncube/control @@ -1,7 +1,7 @@ Source: vesta-ioncube Package: vesta-ioncube Priority: optional -Version: 1.0.0-1 +Version: 0.9.8-23 Section: admin Maintainer: Serghey Rodin Homepage: https://www.ioncube.com diff --git a/src/deb/nginx/control b/src/deb/nginx/control index 275cfad2a..19ec8bbba 100644 --- a/src/deb/nginx/control +++ b/src/deb/nginx/control @@ -1,7 +1,7 @@ Source: vesta-nginx Package: vesta-nginx Priority: optional -Version: 1.0.0-1 +Version: 0.9.8-23 Section: admin Maintainer: Serghey Rodin Homepage: http://vestacp.com diff --git a/src/deb/php/control b/src/deb/php/control index b85cf4ffc..e87020272 100644 --- a/src/deb/php/control +++ b/src/deb/php/control @@ -1,7 +1,7 @@ Source: vesta-php Package: vesta-php Priority: optional -Version: 1.0.0-1 +Version: 0.9.8-23 Section: admin Maintainer: Serghey Rodin Homepage: http://vestacp.com diff --git a/src/deb/softaculous/control b/src/deb/softaculous/control index 65649146d..c5c9eb670 100644 --- a/src/deb/softaculous/control +++ b/src/deb/softaculous/control @@ -1,7 +1,7 @@ Source: vesta-softaculous Package: vesta-softaculous Priority: optional -Version: 1.0.0-1 +Version: 0.9.8-23 Section: admin Maintainer: Serghey Rodin Homepage: https://www.softaculous.com diff --git a/src/deb/vesta/control b/src/deb/vesta/control index b0aa767bb..9f83c2a66 100644 --- a/src/deb/vesta/control +++ b/src/deb/vesta/control @@ -1,7 +1,7 @@ Source: vesta Package: vesta Priority: optional -Version: 1.0.0-7 +Version: 0.9.8-23 Section: admin Maintainer: Serghey Rodin Homepage: http://vestacp.com diff --git a/src/deb/vesta/postinst b/src/deb/vesta/postinst index 73f28d834..516df08bf 100755 --- a/src/deb/vesta/postinst +++ b/src/deb/vesta/postinst @@ -36,5 +36,4 @@ if [ -x /usr/local/vesta/upd/fix_dhcprenew.sh ]; then /usr/local/vesta/upd/fix_dhcprenew.sh fi - exit 0 diff --git a/src/react/README.md b/src/react/README.md deleted file mode 100755 index 9d9614c4f..000000000 --- a/src/react/README.md +++ /dev/null @@ -1,68 +0,0 @@ -This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). - -## Available Scripts - -In the project directory, you can run: - -### `npm start` - -Runs the app in the development mode.
-Open [http://localhost:3000](http://localhost:3000) to view it in the browser. - -The page will reload if you make edits.
-You will also see any lint errors in the console. - -### `npm test` - -Launches the test runner in the interactive watch mode.
-See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. - -### `npm run build` - -Builds the app for production to the `build` folder.
-It correctly bundles React in production mode and optimizes the build for the best performance. - -The build is minified and the filenames include the hashes.
-Your app is ready to be deployed! - -See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. - -### `npm run eject` - -**Note: this is a one-way operation. Once you `eject`, you can’t go back!** - -If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. - -Instead, it will copy all the configuration files and the transitive dependencies (Webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. - -You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. - -## Learn More - -You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). - -To learn React, check out the [React documentation](https://reactjs.org/). - -### Code Splitting - -This section has moved here: https://facebook.github.io/create-react-app/docs/code-splitting - -### Analyzing the Bundle Size - -This section has moved here: https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size - -### Making a Progressive Web App - -This section has moved here: https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app - -### Advanced Configuration - -This section has moved here: https://facebook.github.io/create-react-app/docs/advanced-configuration - -### Deployment - -This section has moved here: https://facebook.github.io/create-react-app/docs/deployment - -### `npm run build` fails to minify - -This section has moved here: https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify diff --git a/src/react/jsconfig.json b/src/react/jsconfig.json deleted file mode 100644 index 97f4bc227..000000000 --- a/src/react/jsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "." - }, - "include": ["src"], - "exclude": ["node_modules", "build"] -} diff --git a/src/react/package-lock.json b/src/react/package-lock.json deleted file mode 100644 index 2c695e13d..000000000 --- a/src/react/package-lock.json +++ /dev/null @@ -1,14983 +0,0 @@ -{ - "name": "react-control-panel", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } - }, - "@babel/core": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.0.tgz", - "integrity": "sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@babel/generator": "^7.9.0", - "@babel/helper-module-transforms": "^7.9.0", - "@babel/helpers": "^7.9.0", - "@babel/parser": "^7.9.0", - "@babel/template": "^7.8.6", - "@babel/traverse": "^7.9.0", - "@babel/types": "^7.9.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/generator": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.0.tgz", - "integrity": "sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ==", - "requires": { - "@babel/types": "^7.11.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", - "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-builder-react-jsx-experimental": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.5.tgz", - "integrity": "sha512-Buewnx6M4ttG+NLkKyt7baQn7ScC/Td+e99G914fRU8fGIUivDDgVIQeDHFa5e4CRSJQt58WpNHhsAZgtzVhsg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/types": "^7.10.5" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", - "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" - } - }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz", - "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==", - "requires": { - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", - "lodash": "^4.17.19" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", - "requires": { - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "requires": { - "lodash": "^4.17.19" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz", - "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", - "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", - "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", - "requires": { - "@babel/types": "^7.11.0" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" - }, - "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.0.tgz", - "integrity": "sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==" - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz", - "integrity": "sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-decorators": "^7.8.3" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz", - "integrity": "sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz", - "integrity": "sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", - "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz", - "integrity": "sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz", - "integrity": "sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.10.4", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz", - "integrity": "sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-flow": "^7.8.3" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", - "requires": { - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", - "requires": { - "@babel/helper-module-transforms": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", - "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.10.4.tgz", - "integrity": "sha512-cYmQBW1pXrqBte1raMkAulXmi7rjg3VI6ZLg9QIic8Hq7BtYXaWuZSxsr2siOMI6SWwpxjWfnwhTUrd7JlAV7g==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz", - "integrity": "sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz", - "integrity": "sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A==", - "requires": { - "@babel/helper-builder-react-jsx": "^7.10.4", - "@babel/helper-builder-react-jsx-experimental": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz", - "integrity": "sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ==", - "requires": { - "@babel/helper-builder-react-jsx-experimental": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz", - "integrity": "sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz", - "integrity": "sha512-wTeqHVkN1lfPLubRiZH3o73f4rfon42HpgxUSs86Nc+8QIcm/B9s8NNVXu/gwGcOyd7yDib9ikxoDLxJP0UiDA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-jsx": "^7.10.4" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz", - "integrity": "sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.0.tgz", - "integrity": "sha512-pUu9VSf3kI1OqbWINQ7MaugnitRss1z533436waNXp+0N3ur3zfut37sXiQMxkuCF4VUjwZucen/quskCh7NHw==", - "requires": { - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "resolve": "^1.8.1", - "semver": "^5.5.1" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", - "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz", - "integrity": "sha512-edJsNzTtvb3MaXQwj8403B7mZoGu9ElDJQZOKjGUnvilquxBA3IQoEIOvkX/1O8xfAsnHS/oQhe2w/IXrr+w0w==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-typescript": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/preset-env": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.0.tgz", - "integrity": "sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg==", - "requires": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.0", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.10.4.tgz", - "integrity": "sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-transform-react-display-name": "^7.10.4", - "@babel/plugin-transform-react-jsx": "^7.10.4", - "@babel/plugin-transform-react-jsx-development": "^7.10.4", - "@babel/plugin-transform-react-jsx-self": "^7.10.4", - "@babel/plugin-transform-react-jsx-source": "^7.10.4", - "@babel/plugin-transform-react-pure-annotations": "^7.10.4" - } - }, - "@babel/preset-typescript": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.9.0.tgz", - "integrity": "sha512-S4cueFnGrIbvYJgwsVFKdvOmpiL0XGw9MFW9D0vgRys5g36PBhZRL8NX8Gr2akz8XRtzq6HuDXPD/1nniagNUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-typescript": "^7.9.0" - } - }, - "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "@babel/runtime-corejs3": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.11.0.tgz", - "integrity": "sha512-K0ioacsw8JgzDSPpUiGWokMvLzGvnZPXLrTsJfyHPrFsnp4yoKn+Ap/8NNZgWKZG9o5+qotH8tAa8AXn8gTN5A==", - "requires": { - "core-js-pure": "^3.0.0", - "regenerator-runtime": "^0.13.4" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - } - } - }, - "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" - } - }, - "@babel/traverse": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.0.tgz", - "integrity": "sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.0", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.0", - "@babel/types": "^7.11.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@babel/types": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.0.tgz", - "integrity": "sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==", - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "lodash": "^4.17.19", - "to-fast-properties": "^2.0.0" - } - }, - "@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "requires": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - } - }, - "@csstools/convert-colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", - "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" - }, - "@csstools/normalize.css": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-10.1.0.tgz", - "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" - }, - "@fortawesome/fontawesome-common-types": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.25.tgz", - "integrity": "sha512-3RuZPDuuPELd7RXtUqTCfed14fcny9UiPOkdr2i+cYxBoTOfQgxcDoq77fHiiHcgWuo1LoBUpvGxFF1H/y7s3Q==" - }, - "@fortawesome/fontawesome-free": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.11.2.tgz", - "integrity": "sha512-XiUPoS79r1G7PcpnNtq85TJ7inJWe0v+b5oZJZKb0pGHNIV6+UiNeQWiFGmuQ0aj7GEhnD/v9iqxIsjuRKtEnQ==" - }, - "@fortawesome/fontawesome-svg-core": { - "version": "1.2.25", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.25.tgz", - "integrity": "sha512-MotKnn53JKqbkLQiwcZSBJVYtTgIKFbh7B8+kd05TSnfKYPFmjKKI59o2fpz5t0Hzl35vVGU6+N4twoOpZUrqA==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.25" - } - }, - "@fortawesome/free-brands-svg-icons": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.11.2.tgz", - "integrity": "sha512-wKK5znpHiZ2S0VgOvbeAnYuzkk3H86rxWajD9PVpfBj3s/kySEWTFKh/uLPyxiTOx8Tsd0OGN4En/s9XudVHLQ==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.25" - } - }, - "@fortawesome/free-solid-svg-icons": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.11.2.tgz", - "integrity": "sha512-zBue4i0PAZJUXOmLBBvM7L0O7wmsDC8dFv9IhpW5QL4kT9xhhVUsYg/LX1+5KaukWq4/cbDcKT+RT1aRe543sg==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.25" - } - }, - "@fortawesome/react-fontawesome": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.6.tgz", - "integrity": "sha512-DNqt2t4JQ0YQKi832XzByk1wlQzgugwwCCNQHsFyz1z/zA9dtypSvsvVwMIaWXMljalYzKAA2zHX13C1DIxKAw==", - "requires": { - "prop-types": "^15.5.10" - } - }, - "@hapi/address": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", - "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" - }, - "@hapi/bourne": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", - "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" - }, - "@hapi/hoek": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", - "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" - }, - "@hapi/joi": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", - "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", - "requires": { - "@hapi/address": "2.x.x", - "@hapi/bourne": "1.x.x", - "@hapi/hoek": "8.x.x", - "@hapi/topo": "3.x.x" - } - }, - "@hapi/topo": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", - "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", - "requires": { - "@hapi/hoek": "^8.3.0" - } - }, - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jest/core": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", - "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/reporters": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.9.0", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-resolve-dependencies": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "jest-watcher": "^24.9.0", - "micromatch": "^3.1.10", - "p-each-series": "^1.0.0", - "realpath-native": "^1.1.0", - "rimraf": "^2.5.4", - "slash": "^2.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jest/environment": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", - "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", - "requires": { - "@jest/fake-timers": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/reporters": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", - "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.2", - "istanbul-lib-coverage": "^2.0.2", - "istanbul-lib-instrument": "^3.0.1", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.2.6", - "jest-haste-map": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "node-notifier": "^5.4.2", - "slash": "^2.0.0", - "source-map": "^0.6.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" - } - }, - "@jest/test-sequencer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", - "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", - "requires": { - "@jest/test-result": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-runner": "^24.9.0", - "jest-runtime": "^24.9.0" - } - }, - "@jest/transform": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", - "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^24.9.0", - "babel-plugin-istanbul": "^5.1.0", - "chalk": "^2.0.1", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.9.0", - "jest-regex-util": "^24.9.0", - "jest-util": "^24.9.0", - "micromatch": "^3.1.10", - "pirates": "^4.0.1", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "2.4.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz", - "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz", - "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz", - "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz", - "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz", - "integrity": "sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz", - "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz", - "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz", - "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw==" - }, - "@svgr/babel-preset": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.3.tgz", - "integrity": "sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0", - "@svgr/babel-plugin-svg-dynamic-title": "^4.3.3", - "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0", - "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0", - "@svgr/babel-plugin-transform-svg-component": "^4.2.0" - } - }, - "@svgr/core": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.3.tgz", - "integrity": "sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w==", - "requires": { - "@svgr/plugin-jsx": "^4.3.3", - "camelcase": "^5.3.1", - "cosmiconfig": "^5.2.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz", - "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==", - "requires": { - "@babel/types": "^7.4.4" - } - }, - "@svgr/plugin-jsx": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz", - "integrity": "sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w==", - "requires": { - "@babel/core": "^7.4.5", - "@svgr/babel-preset": "^4.3.3", - "@svgr/hast-util-to-babel-ast": "^4.3.2", - "svg-parser": "^2.0.0" - } - }, - "@svgr/plugin-svgo": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz", - "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==", - "requires": { - "cosmiconfig": "^5.2.1", - "merge-deep": "^3.0.2", - "svgo": "^1.2.2" - } - }, - "@svgr/webpack": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.3.tgz", - "integrity": "sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg==", - "requires": { - "@babel/core": "^7.4.5", - "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.4.5", - "@babel/preset-react": "^7.0.0", - "@svgr/core": "^4.3.3", - "@svgr/plugin-jsx": "^4.3.3", - "@svgr/plugin-svgo": "^4.3.1", - "loader-utils": "^1.2.3" - } - }, - "@types/babel__core": { - "version": "7.1.9", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.9.tgz", - "integrity": "sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", - "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz", - "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==", - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.13.tgz", - "integrity": "sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==", - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==" - }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==" - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==" - }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==" - }, - "@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==" - }, - "@types/yargs": { - "version": "13.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.9.tgz", - "integrity": "sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", - "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" - } - }, - "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - } - } - }, - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", - "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", - "requires": { - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" - }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "abab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.4.tgz", - "integrity": "sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", - "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" - }, - "acorn-globals": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", - "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" - } - } - }, - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==" - }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" - }, - "address": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", - "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" - }, - "adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - } - } - }, - "ajv": { - "version": "6.12.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", - "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" - }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" - }, - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "requires": { - "type-fest": "^0.11.0" - }, - "dependencies": { - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "are-we-there-yet": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", - "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=" - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=" - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-includes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", - "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "is-string": "^1.0.5" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" - }, - "array.prototype.flat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", - "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "requires": { - "util": "0.10.3" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" - }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "requires": { - "follow-redirects": "^1.14.0" - }, - "dependencies": { - "follow-redirects": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", - "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==" - } - } - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - } - } - }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" - } - }, - "babel-extract-comments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", - "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", - "requires": { - "babylon": "^6.18.0" - } - }, - "babel-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", - "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", - "requires": { - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/babel__core": "^7.1.0", - "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.9.0", - "chalk": "^2.4.2", - "slash": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", - "requires": { - "find-cache-dir": "^2.1.0", - "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-istanbul": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz", - "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "find-up": "^3.0.0", - "istanbul-lib-instrument": "^3.3.0", - "test-exclude": "^5.2.3" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - } - } - }, - "babel-plugin-jest-hoist": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", - "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", - "requires": { - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", - "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", - "requires": { - "@babel/runtime": "^7.7.2", - "cosmiconfig": "^6.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.0.tgz", - "integrity": "sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", - "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - } - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz", - "integrity": "sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA==" - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" - } - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "babel-preset-jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", - "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", - "requires": { - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.9.0" - } - }, - "babel-preset-react-app": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.1.2.tgz", - "integrity": "sha512-k58RtQOKH21NyKtzptoAvtAODuAJJs3ZhqBMl456/GnXEQ/0La92pNmwgWoMn5pBTrsvk3YYXdY7zpY4e3UIxA==", - "requires": { - "@babel/core": "7.9.0", - "@babel/plugin-proposal-class-properties": "7.8.3", - "@babel/plugin-proposal-decorators": "7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.8.3", - "@babel/plugin-proposal-numeric-separator": "7.8.3", - "@babel/plugin-proposal-optional-chaining": "7.9.0", - "@babel/plugin-transform-flow-strip-types": "7.9.0", - "@babel/plugin-transform-react-display-name": "7.8.3", - "@babel/plugin-transform-runtime": "7.9.0", - "@babel/preset-env": "7.9.0", - "@babel/preset-react": "7.9.1", - "@babel/preset-typescript": "7.9.0", - "@babel/runtime": "7.9.0", - "babel-plugin-macros": "2.8.0", - "babel-plugin-transform-react-remove-prop-types": "0.4.24" - }, - "dependencies": { - "@babel/plugin-proposal-class-properties": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", - "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", - "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", - "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz", - "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/preset-env": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.0.tgz", - "integrity": "sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==", - "requires": { - "@babel/compat-data": "^7.9.0", - "@babel/helper-compilation-targets": "^7.8.7", - "@babel/helper-module-imports": "^7.8.3", - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-proposal-async-generator-functions": "^7.8.3", - "@babel/plugin-proposal-dynamic-import": "^7.8.3", - "@babel/plugin-proposal-json-strings": "^7.8.3", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-proposal-numeric-separator": "^7.8.3", - "@babel/plugin-proposal-object-rest-spread": "^7.9.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", - "@babel/plugin-proposal-optional-chaining": "^7.9.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", - "@babel/plugin-syntax-json-strings": "^7.8.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.8.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.8.3", - "@babel/plugin-transform-async-to-generator": "^7.8.3", - "@babel/plugin-transform-block-scoped-functions": "^7.8.3", - "@babel/plugin-transform-block-scoping": "^7.8.3", - "@babel/plugin-transform-classes": "^7.9.0", - "@babel/plugin-transform-computed-properties": "^7.8.3", - "@babel/plugin-transform-destructuring": "^7.8.3", - "@babel/plugin-transform-dotall-regex": "^7.8.3", - "@babel/plugin-transform-duplicate-keys": "^7.8.3", - "@babel/plugin-transform-exponentiation-operator": "^7.8.3", - "@babel/plugin-transform-for-of": "^7.9.0", - "@babel/plugin-transform-function-name": "^7.8.3", - "@babel/plugin-transform-literals": "^7.8.3", - "@babel/plugin-transform-member-expression-literals": "^7.8.3", - "@babel/plugin-transform-modules-amd": "^7.9.0", - "@babel/plugin-transform-modules-commonjs": "^7.9.0", - "@babel/plugin-transform-modules-systemjs": "^7.9.0", - "@babel/plugin-transform-modules-umd": "^7.9.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", - "@babel/plugin-transform-new-target": "^7.8.3", - "@babel/plugin-transform-object-super": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.8.7", - "@babel/plugin-transform-property-literals": "^7.8.3", - "@babel/plugin-transform-regenerator": "^7.8.7", - "@babel/plugin-transform-reserved-words": "^7.8.3", - "@babel/plugin-transform-shorthand-properties": "^7.8.3", - "@babel/plugin-transform-spread": "^7.8.3", - "@babel/plugin-transform-sticky-regex": "^7.8.3", - "@babel/plugin-transform-template-literals": "^7.8.3", - "@babel/plugin-transform-typeof-symbol": "^7.8.4", - "@babel/plugin-transform-unicode-regex": "^7.8.3", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.9.0", - "browserslist": "^4.9.1", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", - "semver": "^5.5.0" - } - }, - "@babel/preset-react": { - "version": "7.9.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.1.tgz", - "integrity": "sha512-aJBYF23MPj0RNdp/4bHnAP0NVqqZRr9kl0NAOP4nJCex6OYVio59+dnQzsAWFuogdLyeaKA1hmfUIVZkY5J+TQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3", - "@babel/plugin-transform-react-display-name": "^7.8.3", - "@babel/plugin-transform-react-jsx": "^7.9.1", - "@babel/plugin-transform-react-jsx-development": "^7.9.0", - "@babel/plugin-transform-react-jsx-self": "^7.9.0", - "@babel/plugin-transform-react-jsx-source": "^7.9.0" - } - }, - "@babel/runtime": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.0.tgz", - "integrity": "sha512-cTIudHnzuWLS56ik4DnRnqqNf8MkdUzV4iFFI1h7Jo9xvrpQROYaAnaSd2mHLQAzzZAPfATynX5ord6YlNYNMA==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "~2.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==" - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "bootstrap": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", - "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "requires": { - "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - } - } - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.0.tgz", - "integrity": "sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==", - "requires": { - "caniuse-lite": "^1.0.30001254", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.830", - "escalade": "^3.1.1", - "node-releases": "^1.1.75" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30001255", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001255.tgz", - "integrity": "sha512-F+A3N9jTZL882f/fg/WWVnKSu6IOo3ueLz4zwaOPbPYHNmM/ZaDUyzyJwS1mZhX7Ex5jqTyW599Gdelh5PDYLQ==" - }, - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" - }, - "electron-to-chromium": { - "version": "1.3.833", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.833.tgz", - "integrity": "sha512-h+9aVaUHjyunLqtCjJF2jrJ73tYcJqo2cCGKtVAXH9WmnBsb8hiChRQ0P1uXjdxR6Wcfxibephy41c1YlZA/pA==" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==" - } - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", - "requires": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" - }, - "camel-case": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", - "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", - "requires": { - "pascal-case": "^3.1.1", - "tslib": "^1.10.0" - } - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001109", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001109.tgz", - "integrity": "sha512-4JIXRodHzdS3HdK8nSgIqXYLExOvG+D2/EenSvcub2Kp3QEADjo2v2oUn5g0n0D+UNwG9BtwKOyGcSq2qvQXvQ==" - }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "requires": { - "rsvp": "^4.8.4" - } - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", - "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" - }, - "chokidar": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz", - "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==", - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "classname": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/classname/-/classname-0.0.0.tgz", - "integrity": "sha1-Q9FxtITjVMeik6W3gATfaFLbINY=" - }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" - }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "clone-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", - "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", - "requires": { - "for-own": "^0.1.3", - "is-plain-object": "^2.0.1", - "kind-of": "^3.0.2", - "lazy-cache": "^1.0.3", - "shallow-clone": "^0.1.2" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "codemirror": { - "version": "5.62.3", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.62.3.tgz", - "integrity": "sha512-zZAyOfN8TU67ngqrxhOgtkSAGV9jSpN1snbl8elPtnh9Z5A11daR405+dhLzLnuXrwX0WCShWlybxPN3QC/9Pg==" - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "requires": { - "arity-n": "^1.0.4" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "confusing-browser-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", - "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==" - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", - "requires": { - "browserslist": "^4.8.5", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-js-pure": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", - "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-react-class": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", - "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-blank-pseudo": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", - "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - } - }, - "css-has-pseudo": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", - "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "css-loader": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.4.2.tgz", - "integrity": "sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==", - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.23", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - } - } - }, - "css-prefers-color-scheme": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", - "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", - "requires": { - "postcss": "^7.0.5" - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==" - }, - "cssdb": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", - "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "requires": { - "postcss": "^7.0.0" - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" - }, - "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", - "requires": { - "css-tree": "1.0.0-alpha.39" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", - "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" - }, - "cssstyle": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", - "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", - "requires": { - "cssom": "0.3.x" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "requires": { - "array-find-index": "^1.0.1" - } - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "damerau-levenshtein": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", - "integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug==" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" - }, - "dependencies": { - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "dayjs": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz", - "integrity": "sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g==" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" - }, - "detect-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", - "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==" - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "diff-sequences": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", - "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==" - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==" - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", - "requires": { - "webidl-conversions": "^4.0.2" - } - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", - "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.518", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.518.tgz", - "integrity": "sha512-IspiwXYDKZMxo+qc3Vof4WtwbG9BMDbJfati8PYj7uS4DJmJ67pwjCKZxlTBSAuCZSMcbRnj2Xz2H14uiKT7bQ==" - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==" - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "requires": { - "type-fest": "^0.8.1" - } - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "eslint-config-react-app": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz", - "integrity": "sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ==", - "requires": { - "confusing-browser-globals": "^1.0.9" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", - "integrity": "sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==", - "requires": { - "debug": "^2.6.9", - "resolve": "^1.13.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "eslint-loader": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz", - "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==", - "requires": { - "fs-extra": "^8.1.0", - "loader-fs-cache": "^1.0.2", - "loader-utils": "^1.2.3", - "object-hash": "^2.0.1", - "schema-utils": "^2.6.1" - } - }, - "eslint-module-utils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", - "integrity": "sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==", - "requires": { - "debug": "^2.6.9", - "pkg-dir": "^2.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "requires": { - "find-up": "^2.1.0" - } - } - } - }, - "eslint-plugin-flowtype": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.6.0.tgz", - "integrity": "sha512-W5hLjpFfZyZsXfo5anlu7HM970JBDqbEshAJUkeczP6BFCIfJXuiIBQXyberLRtOStT0OGPF8efeTbxlHk4LpQ==", - "requires": { - "lodash": "^4.17.15" - } - }, - "eslint-plugin-import": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", - "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", - "requires": { - "array-includes": "^3.0.3", - "array.prototype.flat": "^1.2.1", - "contains-path": "^0.1.0", - "debug": "^2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.1", - "has": "^1.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.0", - "read-pkg-up": "^2.0.0", - "resolve": "^1.12.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "^2.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "^2.0.0" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", - "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", - "requires": { - "@babel/runtime": "^7.4.5", - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", - "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.2", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^7.0.2", - "has": "^1.0.3", - "jsx-ast-utils": "^2.2.1" - } - }, - "eslint-plugin-react": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz", - "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==", - "requires": { - "array-includes": "^3.1.1", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.2.3", - "object.entries": "^1.1.1", - "object.fromentries": "^2.0.2", - "object.values": "^1.1.1", - "prop-types": "^15.7.2", - "resolve": "^1.15.1", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.2", - "xregexp": "^4.3.0" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "eslint-plugin-react-hooks": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", - "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" - }, - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==" - } - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" - }, - "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "exec-sh": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", - "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==" - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expect": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", - "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-styles": "^3.2.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-regex-util": "^24.9.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "requires": { - "bser": "2.1.1" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "requires": { - "flat-cache": "^2.0.1" - } - }, - "file-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", - "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", - "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "filesize": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", - "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" - }, - "flatten": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "fork-ts-checker-webpack-plugin": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", - "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", - "requires": { - "babel-code-frame": "^6.22.0", - "chalk": "^2.4.1", - "chokidar": "^3.3.0", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "semver": "^5.6.0", - "tapable": "^1.0.0", - "worker-rpc": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "optional": true - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "requires": { - "globule": "^1.0.0" - } - }, - "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - } - } - }, - "globule": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz", - "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" - }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==" - }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "harmony-reflect": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", - "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", - "requires": { - "react-is": "^16.7.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" - }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", - "requires": { - "whatwg-encoding": "^1.0.1" - } - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - } - } - }, - "html-webpack-plugin": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", - "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==", - "requires": { - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - }, - "dependencies": { - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", - "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" - } - } - } - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", - "requires": { - "postcss": "^7.0.14" - } - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "immer": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", - "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" - }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "requires": { - "resolve-from": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "in-publish": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", - "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "^2.0.0" - } - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - } - }, - "internal-slot": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", - "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", - "requires": { - "es-abstract": "^1.17.0-next.1", - "has": "^1.0.3", - "side-channel": "^1.0.2" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" - }, - "is-docker": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.0.tgz", - "integrity": "sha512-mB2WygGsSeoXtLKpSYzP6sa0Z9DyU9ZyKlnvuZWxCociaI0qsF8u12sR72DFTX236g1u6oWSWYFuUk09nGQEjg==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", - "requires": { - "is-path-inside": "^2.1.0" - } - }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", - "requires": { - "path-is-inside": "^1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "requires": { - "html-comment-regex": "^1.1.0" - } - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==" - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "requires": { - "html-escaper": "^2.0.0" - } - }, - "jest": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", - "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", - "requires": { - "import-local": "^2.0.0", - "jest-cli": "^24.9.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "jest-cli": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", - "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", - "requires": { - "@jest/core": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "import-local": "^2.0.0", - "is-ci": "^2.0.0", - "jest-config": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "prompts": "^2.0.1", - "realpath-native": "^1.1.0", - "yargs": "^13.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-changed-files": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", - "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", - "requires": { - "@jest/types": "^24.9.0", - "execa": "^1.0.0", - "throat": "^4.0.0" - } - }, - "jest-config": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", - "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.9.0", - "@jest/types": "^24.9.0", - "babel-jest": "^24.9.0", - "chalk": "^2.0.1", - "glob": "^7.1.1", - "jest-environment-jsdom": "^24.9.0", - "jest-environment-node": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "micromatch": "^3.1.10", - "pretty-format": "^24.9.0", - "realpath-native": "^1.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-diff": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", - "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", - "requires": { - "chalk": "^2.0.1", - "diff-sequences": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-docblock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", - "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", - "requires": { - "detect-newline": "^2.1.0" - } - }, - "jest-each": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", - "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", - "requires": { - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", - "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0", - "jsdom": "^11.5.1" - } - }, - "jest-environment-jsdom-fourteen": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-1.0.1.tgz", - "integrity": "sha512-DojMX1sY+at5Ep+O9yME34CdidZnO3/zfPh8UW+918C5fIZET5vCjfkegixmsi7AtdYfkr4bPlIzmWnlvQkP7Q==", - "requires": { - "@jest/environment": "^24.3.0", - "@jest/fake-timers": "^24.3.0", - "@jest/types": "^24.3.0", - "jest-mock": "^24.0.0", - "jest-util": "^24.0.0", - "jsdom": "^14.1.0" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" - }, - "jsdom": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz", - "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==", - "requires": { - "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", - "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.0", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.1.3", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^6.1.2", - "xml-name-validator": "^3.0.0" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "jest-environment-node": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", - "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", - "requires": { - "@jest/environment": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/types": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-util": "^24.9.0" - } - }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", - "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "dependencies": { - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - } - } - }, - "jest-jasmine2": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", - "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "co": "^4.6.0", - "expect": "^24.9.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "pretty-format": "^24.9.0", - "throat": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", - "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", - "requires": { - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - } - }, - "jest-matcher-utils": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", - "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", - "requires": { - "chalk": "^2.0.1", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", - "requires": { - "@jest/types": "^24.9.0" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" - }, - "jest-regex-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", - "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==" - }, - "jest-resolve": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", - "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", - "requires": { - "@jest/types": "^24.9.0", - "browser-resolve": "^1.11.3", - "chalk": "^2.0.1", - "jest-pnp-resolver": "^1.2.1", - "realpath-native": "^1.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", - "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", - "requires": { - "@jest/types": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.9.0" - } - }, - "jest-runner": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", - "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "chalk": "^2.4.2", - "exit": "^0.1.2", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.9.0", - "jest-jasmine2": "^24.9.0", - "jest-leak-detector": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "jest-runtime": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.6.0", - "source-map-support": "^0.5.6", - "throat": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-runtime": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", - "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", - "requires": { - "@jest/console": "^24.7.1", - "@jest/environment": "^24.9.0", - "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "chalk": "^2.0.1", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "jest-config": "^24.9.0", - "jest-haste-map": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0", - "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.9.0", - "jest-snapshot": "^24.9.0", - "jest-util": "^24.9.0", - "jest-validate": "^24.9.0", - "realpath-native": "^1.1.0", - "slash": "^2.0.0", - "strip-bom": "^3.0.0", - "yargs": "^13.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==" - }, - "jest-snapshot": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", - "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^24.9.0", - "chalk": "^2.0.1", - "expect": "^24.9.0", - "jest-diff": "^24.9.0", - "jest-get-type": "^24.9.0", - "jest-matcher-utils": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-resolve": "^24.9.0", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^24.9.0", - "semver": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-watch-typeahead": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.4.2.tgz", - "integrity": "sha512-f7VpLebTdaXs81rg/oj4Vg/ObZy2QtGzAmGLNsqUS5G5KtSN68tFcIsbvNODfNyQxU78g7D8x77o3bgfBTR+2Q==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.1", - "jest-regex-util": "^24.9.0", - "jest-watcher": "^24.3.0", - "slash": "^3.0.0", - "string-length": "^3.1.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "string-length": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-3.1.0.tgz", - "integrity": "sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA==", - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^5.2.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-watcher": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", - "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", - "requires": { - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/yargs": "^13.0.0", - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.1", - "jest-util": "^24.9.0", - "string-length": "^2.0.0" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "jquery": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", - "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" - }, - "js-base64": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", - "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", - "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", - "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" - }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz", - "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==", - "requires": { - "array-includes": "^3.1.1", - "object.assign": "^4.1.0" - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - } - } - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "requires": { - "leven": "^3.1.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "loader-fs-cache": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", - "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", - "requires": { - "find-cache-dir": "^0.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "find-cache-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", - "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", - "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lower-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", - "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", - "requires": { - "tslib": "^1.10.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "requires": { - "tmpl": "1.0.x" - } - }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "merge-deep": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", - "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", - "requires": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "microevent.ts": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", - "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "requires": { - "mime-db": "1.44.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mini-create-react-context": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz", - "integrity": "sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==", - "requires": { - "@babel/runtime": "^7.4.0", - "gud": "^1.0.0", - "tiny-warning": "^1.0.2" - } - }, - "mini-css-extract-plugin": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", - "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", - "requires": { - "loader-utils": "^1.1.0", - "normalize-url": "1.9.1", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "requires": { - "minipass": "^3.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" - }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, - "no-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", - "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", - "requires": { - "lower-case": "^2.0.1", - "tslib": "^1.10.0" - } - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" - } - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "requires": { - "inherits": "2.0.3" - } - } - } - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" - }, - "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", - "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node-releases": { - "version": "1.1.60", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.60.tgz", - "integrity": "sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA==" - }, - "node-sass": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", - "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash": "^4.17.15", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.13.2", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "2.2.5", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, - "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", - "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" - } - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-hash": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", - "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==" - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.entries": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", - "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", - "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.1.tgz", - "integrity": "sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-7.1.0.tgz", - "integrity": "sha512-lLPI5KgOwEYCDKXf4np7y1PBEkj7HYIyP2DY8mVDRnx0VIIu6bNrRB0R66TuO7Mack6EnTNLm4uvcl1UoklTpA==", - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - } - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", - "requires": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "param-case": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", - "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", - "requires": { - "dot-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - } - } - }, - "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", - "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", - "requires": { - "no-case": "^3.0.3", - "tslib": "^1.10.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "perfect-scrollbar": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.3.tgz", - "integrity": "sha512-+Lo6t61lSuCY9ghpqh1NFMXOu8fNwlYGqPoUMOZ3HTFIL4g7+L7zD7hQCLW5yjkOZ6LGTw1m9+MfEew7cngtAQ==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - } - } - }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" - }, - "pnp-webpack-plugin": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", - "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", - "requires": { - "ts-pnp": "^1.1.6" - } - }, - "popper.js": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", - "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" - }, - "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-attribute-case-insensitive": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", - "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^6.0.2" - } - }, - "postcss-browser-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-3.0.0.tgz", - "integrity": "sha512-qfVjLfq7HFd2e0HW4s1dvU8X080OZdG46fFbIBFjW7US7YPDcWfRvdElvwMJr2LI6hMmD+7LnH2HcmXTs+uOig==", - "requires": { - "postcss": "^7" - } - }, - "postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", - "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-color-functional-notation": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", - "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-gray": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", - "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-hex-alpha": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", - "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", - "requires": { - "postcss": "^7.0.14", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-color-mod-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", - "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", - "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-custom-media": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", - "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", - "requires": { - "postcss": "^7.0.14" - } - }, - "postcss-custom-properties": { - "version": "8.0.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", - "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", - "requires": { - "postcss": "^7.0.17", - "postcss-values-parser": "^2.0.1" - } - }, - "postcss-custom-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", - "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-dir-pseudo-class": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", - "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-double-position-gradients": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", - "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", - "requires": { - "postcss": "^7.0.5", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-env-function": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", - "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz", - "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-focus-visible": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", - "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-focus-within": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", - "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-font-variant": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", - "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-gap-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", - "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-image-set-function": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", - "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-initial": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", - "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", - "requires": { - "lodash.template": "^4.5.0", - "postcss": "^7.0.2" - } - }, - "postcss-lab-function": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", - "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", - "requires": { - "@csstools/convert-colors": "^1.4.0", - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", - "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "postcss-logical": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", - "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-media-minmax": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", - "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-nesting": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", - "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-normalize": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-8.0.1.tgz", - "integrity": "sha512-rt9JMS/m9FHIRroDDBGSMsyW1c0fkvOJPy62ggxSHUldJO7B195TqFMqIf+lY5ezpDcYOV4j86aUp3/XbxzCCQ==", - "requires": { - "@csstools/normalize.css": "^10.1.0", - "browserslist": "^4.6.2", - "postcss": "^7.0.17", - "postcss-browser-comments": "^3.0.0", - "sanitize.css": "^10.0.0" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==" - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-overflow-shorthand": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", - "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-page-break": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", - "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-place": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", - "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", - "requires": { - "postcss": "^7.0.2", - "postcss-values-parser": "^2.0.0" - } - }, - "postcss-preset-env": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", - "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", - "requires": { - "autoprefixer": "^9.6.1", - "browserslist": "^4.6.4", - "caniuse-lite": "^1.0.30000981", - "css-blank-pseudo": "^0.1.4", - "css-has-pseudo": "^0.10.0", - "css-prefers-color-scheme": "^3.1.1", - "cssdb": "^4.4.0", - "postcss": "^7.0.17", - "postcss-attribute-case-insensitive": "^4.0.1", - "postcss-color-functional-notation": "^2.0.1", - "postcss-color-gray": "^5.0.0", - "postcss-color-hex-alpha": "^5.0.3", - "postcss-color-mod-function": "^3.0.3", - "postcss-color-rebeccapurple": "^4.0.1", - "postcss-custom-media": "^7.0.8", - "postcss-custom-properties": "^8.0.11", - "postcss-custom-selectors": "^5.1.2", - "postcss-dir-pseudo-class": "^5.0.0", - "postcss-double-position-gradients": "^1.0.0", - "postcss-env-function": "^2.0.2", - "postcss-focus-visible": "^4.0.0", - "postcss-focus-within": "^3.0.0", - "postcss-font-variant": "^4.0.0", - "postcss-gap-properties": "^2.0.0", - "postcss-image-set-function": "^3.0.1", - "postcss-initial": "^3.0.0", - "postcss-lab-function": "^2.0.1", - "postcss-logical": "^3.0.0", - "postcss-media-minmax": "^4.0.0", - "postcss-nesting": "^7.0.0", - "postcss-overflow-shorthand": "^2.0.0", - "postcss-page-break": "^2.0.0", - "postcss-place": "^4.0.1", - "postcss-pseudo-class-any-link": "^6.0.0", - "postcss-replace-overflow-wrap": "^3.0.0", - "postcss-selector-matches": "^4.0.0", - "postcss-selector-not": "^4.0.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", - "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", - "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" - }, - "dependencies": { - "cssesc": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", - "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" - }, - "postcss-selector-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", - "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", - "requires": { - "cssesc": "^2.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-replace-overflow-wrap": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", - "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", - "requires": { - "postcss": "^7.0.2" - } - }, - "postcss-safe-parser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz", - "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==", - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-selector-matches": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", - "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-not": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", - "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", - "requires": { - "balanced-match": "^1.0.0", - "postcss": "^7.0.2" - } - }, - "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", - "requires": { - "is-svg": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, - "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" - }, - "postcss-values-parser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", - "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "pretty-bytes": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", - "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==" - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" - }, - "prompts": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.2.tgz", - "integrity": "sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.4" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==" - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" - } - } - }, - "react": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/react/-/react-16.10.2.tgz", - "integrity": "sha512-MFVIq0DpIhrHFyqLU0S3+4dIcBhhOvBE8bJ/5kHPVOVaGdo0KuiQzpcjCPsf585WvhypqtrMILyoE2th6dT+Lw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-app-polyfill": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", - "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", - "requires": { - "core-js": "^3.5.0", - "object-assign": "^4.1.1", - "promise": "^8.0.3", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.3", - "whatwg-fetch": "^3.0.0" - }, - "dependencies": { - "core-js": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" - }, - "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "requires": { - "asap": "~2.0.6" - } - } - } - }, - "react-codemirror": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/react-codemirror/-/react-codemirror-1.0.0.tgz", - "integrity": "sha1-kUZ7U7H12A2Rai/QtMetuFqQAbo=", - "requires": { - "classnames": "^2.2.5", - "codemirror": "^5.18.2", - "create-react-class": "^15.5.1", - "lodash.debounce": "^4.0.8", - "lodash.isequal": "^4.5.0", - "prop-types": "^15.5.4" - } - }, - "react-dev-utils": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", - "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", - "requires": { - "@babel/code-frame": "7.8.3", - "address": "1.1.2", - "browserslist": "4.10.0", - "chalk": "2.4.2", - "cross-spawn": "7.0.1", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "2.0.0", - "filesize": "6.0.1", - "find-up": "4.1.0", - "fork-ts-checker-webpack-plugin": "3.1.1", - "global-modules": "2.0.0", - "globby": "8.0.2", - "gzip-size": "5.1.1", - "immer": "1.10.0", - "inquirer": "7.0.4", - "is-root": "2.1.0", - "loader-utils": "1.2.3", - "open": "^7.0.2", - "pkg-up": "3.1.0", - "react-error-overlay": "^6.0.7", - "recursive-readdir": "2.2.2", - "shell-quote": "1.7.2", - "strip-ansi": "6.0.0", - "text-table": "0.2.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", - "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", - "requires": { - "@babel/highlight": "^7.8.3" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "browserslist": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", - "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", - "requires": { - "caniuse-lite": "^1.0.30001035", - "electron-to-chromium": "^1.3.378", - "node-releases": "^1.1.52", - "pkg-up": "^3.1.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" - }, - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "inquirer": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", - "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", - "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.15", - "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.5.3", - "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "react-dom": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.10.2.tgz", - "integrity": "sha512-kWGDcH3ItJK4+6Pl9DZB16BXYAZyrYQItU4OMy0jAkv5aNqc+mAKb4TpFtAteI6TJZu+9ZlNhaeNQSVQDHJzkw==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.16.2" - } - }, - "react-error-overlay": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", - "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - } - }, - "react-html-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/react-html-parser/-/react-html-parser-2.0.2.tgz", - "integrity": "sha512-XeerLwCVjTs3njZcgCOeDUqLgNIt/t+6Jgi5/qPsO/krUWl76kWKXMeVs2LhY2gwM6X378DkhLjur0zUQdpz0g==", - "requires": { - "htmlparser2": "^3.9.0" - } - }, - "react-is": { - "version": "16.10.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.10.2.tgz", - "integrity": "sha512-INBT1QEgtcCCgvccr5/86CfD71fw9EPmDxgiJX4I2Ddr6ZsV6iFXsuby+qWJPtmNuMY0zByTsG4468P7nHuNWA==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-perfect-scrollbar": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/react-perfect-scrollbar/-/react-perfect-scrollbar-1.5.8.tgz", - "integrity": "sha512-bQ46m70gp/HJtiBOF3gRzBISSZn8FFGNxznTdmTG8AAwpxG1bJCyn7shrgjEvGSQ5FJEafVEiosY+ccER11OSA==", - "requires": { - "perfect-scrollbar": "^1.5.0", - "prop-types": "^15.6.1" - } - }, - "react-redux": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.1.tgz", - "integrity": "sha512-T+VfD/bvgGTUA74iW9d2i5THrDQWbweXP0AVNI8tNd1Rk5ch1rnMiJkDD67ejw7YBKM4+REvcvqRuWJb7BLuEg==", - "requires": { - "@babel/runtime": "^7.5.5", - "hoist-non-react-statics": "^3.3.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^16.9.0" - } - }, - "react-router": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.2.tgz", - "integrity": "sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.3.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-router-dom": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.1.2.tgz", - "integrity": "sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==", - "requires": { - "@babel/runtime": "^7.1.2", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.1.2", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-scripts": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.4.tgz", - "integrity": "sha512-7J7GZyF/QvZkKAZLneiOIhHozvOMHey7hO9cdO9u68jjhGZlI8hDdOm6UyuHofn6Ajc9Uji5I6Psm/nKNuWdyw==", - "requires": { - "@babel/core": "7.9.0", - "@svgr/webpack": "4.3.3", - "@typescript-eslint/eslint-plugin": "^2.10.0", - "@typescript-eslint/parser": "^2.10.0", - "babel-eslint": "10.1.0", - "babel-jest": "^24.9.0", - "babel-loader": "8.1.0", - "babel-plugin-named-asset-import": "^0.3.6", - "babel-preset-react-app": "^9.1.2", - "camelcase": "^5.3.1", - "case-sensitive-paths-webpack-plugin": "2.3.0", - "css-loader": "3.4.2", - "dotenv": "8.2.0", - "dotenv-expand": "5.1.0", - "eslint": "^6.6.0", - "eslint-config-react-app": "^5.2.1", - "eslint-loader": "3.0.3", - "eslint-plugin-flowtype": "4.6.0", - "eslint-plugin-import": "2.20.1", - "eslint-plugin-jsx-a11y": "6.2.3", - "eslint-plugin-react": "7.19.0", - "eslint-plugin-react-hooks": "^1.6.1", - "file-loader": "4.3.0", - "fs-extra": "^8.1.0", - "fsevents": "2.1.2", - "html-webpack-plugin": "4.0.0-beta.11", - "identity-obj-proxy": "3.0.0", - "jest": "24.9.0", - "jest-environment-jsdom-fourteen": "1.0.1", - "jest-resolve": "24.9.0", - "jest-watch-typeahead": "0.4.2", - "mini-css-extract-plugin": "0.9.0", - "optimize-css-assets-webpack-plugin": "5.0.3", - "pnp-webpack-plugin": "1.6.4", - "postcss-flexbugs-fixes": "4.1.0", - "postcss-loader": "3.0.0", - "postcss-normalize": "8.0.1", - "postcss-preset-env": "6.7.0", - "postcss-safe-parser": "4.0.1", - "react-app-polyfill": "^1.0.6", - "react-dev-utils": "^10.2.1", - "resolve": "1.15.0", - "resolve-url-loader": "3.1.2", - "sass-loader": "8.0.2", - "semver": "6.3.0", - "style-loader": "0.23.1", - "terser-webpack-plugin": "2.3.8", - "ts-pnp": "1.1.6", - "url-loader": "2.3.0", - "webpack": "4.42.0", - "webpack-dev-server": "3.11.0", - "webpack-manifest-plugin": "2.2.0", - "workbox-webpack-plugin": "4.3.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "resolve": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", - "integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "react-side-effect": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.1.tgz", - "integrity": "sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ==" - }, - "react-toastify": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-5.4.0.tgz", - "integrity": "sha512-0cdPq1gyxAcYu0KiDPOYp9nNiqIFDWoi7nyoaSw496DElUnNlcjhc7Aduz8CXrGTRugvjuXd3eplUvFaCeQMNA==", - "requires": { - "@babel/runtime": "^7.4.2", - "classnames": "^2.2.6", - "prop-types": "^15.7.2", - "react-transition-group": "^2.6.1" - } - }, - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "realpath-native": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", - "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", - "requires": { - "util.promisify": "^1.0.0" - } - }, - "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "requires": { - "minimatch": "3.0.4" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "redux": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", - "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", - "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - } - }, - "redux-devtools-extension": { - "version": "2.13.8", - "resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz", - "integrity": "sha512-8qlpooP2QqPtZHQZRhx3x3OP5skEV1py/zUdMY28WNAocbafxdG2tRD1MWE7sp8obGMNYuLWanhhQ7EQvT1FBg==" - }, - "redux-thunk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", - "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" - }, - "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "requires": { - "regenerate": "^1.4.0" - } - }, - "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" - }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "requires": { - "@babel/runtime": "^7.8.4" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.0.tgz", - "integrity": "sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - } - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==" - }, - "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - } - }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" - }, - "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" - }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", - "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" - }, - "dependencies": { - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - } - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - } - } - }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "requires": { - "lodash": "^4.17.19" - } - }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" - }, - "resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", - "requires": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" - }, - "rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "requires": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - }, - "dependencies": { - "convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=" - } - } - }, - "rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=" - }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "requires": { - "aproba": "^1.1.1" - } - }, - "rxjs": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", - "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - } - }, - "sanitize.css": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-10.0.0.tgz", - "integrity": "sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg==" - }, - "sass-graph": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", - "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^13.3.2" - } - }, - "sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "requires": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "dependencies": { - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - } - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "requires": { - "xmlchars": "^2.1.1" - } - }, - "scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-BqYVWqwz6s1wZMhjFvLfVR5WXP7ZY32M/wYPo04CcuPM7XZEbV2TBNW7Z0UkguPTl0dWMA59VbNXxK6q+pHItg==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", - "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", - "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "kind-of": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", - "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", - "requires": { - "is-buffer": "^1.0.2" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" - } - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" - }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" - }, - "side-channel": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.2.tgz", - "integrity": "sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA==", - "requires": { - "es-abstract": "^1.17.0-next.1", - "object-inspect": "^1.7.0" - } - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==" - }, - "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - } - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "requires": { - "kind-of": "^3.2.0" - } - }, - "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.4.0", - "websocket-driver": "0.6.5" - } - }, - "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "requires": { - "amdefine": ">=0.0.4" - } - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.1.tgz", - "integrity": "sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw==", - "requires": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "stack-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", - "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==" - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "requires": { - "readable-stream": "^2.0.1" - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string-length": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz", - "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", - "requires": { - "astral-regex": "^1.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", - "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.2", - "regexp.prototype.flags": "^1.3.0", - "side-channel": "^1.0.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "dependencies": { - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-comments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", - "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", - "requires": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "get-stdin": "^4.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", - "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "terser-webpack-plugin": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", - "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", - "requires": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.3.1", - "jest-worker": "^25.4.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.6.12", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=" - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", - "requires": { - "setimmediate": "^1.0.4" - } - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" - }, - "tiny-invariant": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz", - "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "requires": { - "glob": "^7.1.2" - } - }, - "ts-pnp": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.6.tgz", - "integrity": "sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==" - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" - }, - "tsutils": { - "version": "3.17.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", - "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", - "requires": { - "tslib": "^1.8.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" - }, - "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" - } - } - }, - "url-loader": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz", - "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", - "requires": { - "loader-utils": "^1.2.3", - "mime": "^2.4.4", - "schema-utils": "^2.5.0" - } - }, - "url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "requires": { - "inherits": "2.0.1" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validate.js": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/validate.js/-/validate.js-0.13.1.tgz", - "integrity": "sha512-PnFM3xiZ+kYmLyTiMgTYmU7ZHkjBZz2/+F0DaALc/uUtVzdCt1wAosvYJ5hFQi/hz8O4zb52FQhHZRC+uVkJ+g==" - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "requires": { - "makeerror": "1.0.x" - } - }, - "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" - } - }, - "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "optional": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "optional": true - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "webpack": { - "version": "4.42.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.0.tgz", - "integrity": "sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==", - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.0", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", - "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - } - }, - "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "requires": { - "ms": "2.1.2" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "webpack-manifest-plugin": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.2.0.tgz", - "integrity": "sha512-9S6YyKKKh/Oz/eryM1RyLVDVmy3NSPV0JXMRhZ18fJsq+AwGxUY34X54VNwkzYcEmEkDwNxuEOboCZEebJXBAQ==", - "requires": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "object.entries": "^1.1.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "requires": { - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==" - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" - }, - "whatwg-url": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", - "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "workbox-background-sync": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", - "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-broadcast-update": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", - "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-build": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", - "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", - "requires": { - "@babel/runtime": "^7.3.4", - "@hapi/joi": "^15.0.0", - "common-tags": "^1.8.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.3", - "lodash.template": "^4.4.0", - "pretty-bytes": "^5.1.0", - "stringify-object": "^3.3.0", - "strip-comments": "^1.0.2", - "workbox-background-sync": "^4.3.1", - "workbox-broadcast-update": "^4.3.1", - "workbox-cacheable-response": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-expiration": "^4.3.1", - "workbox-google-analytics": "^4.3.1", - "workbox-navigation-preload": "^4.3.1", - "workbox-precaching": "^4.3.1", - "workbox-range-requests": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1", - "workbox-streams": "^4.3.1", - "workbox-sw": "^4.3.1", - "workbox-window": "^4.3.1" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "workbox-cacheable-response": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", - "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", - "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" - }, - "workbox-expiration": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", - "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-google-analytics": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", - "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", - "requires": { - "workbox-background-sync": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1" - } - }, - "workbox-navigation-preload": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", - "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-precaching": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", - "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-range-requests": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", - "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-strategies": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", - "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-streams": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", - "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-sw": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", - "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" - }, - "workbox-webpack-plugin": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", - "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", - "requires": { - "@babel/runtime": "^7.0.0", - "json-stable-stringify": "^1.0.1", - "workbox-build": "^4.3.1" - } - }, - "workbox-window": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", - "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", - "requires": { - "workbox-core": "^4.3.1" - } - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "requires": { - "errno": "~0.1.7" - } - }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", - "requires": { - "microevent.ts": "~0.1.1" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "requires": { - "mkdirp": "^0.5.1" - } - }, - "write-file-atomic": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", - "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" - }, - "xregexp": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz", - "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==", - "requires": { - "@babel/runtime-corejs3": "^7.8.3" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==" - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - } - } - } - } -} diff --git a/src/react/package.json b/src/react/package.json deleted file mode 100644 index 06435656f..000000000 --- a/src/react/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "react-control-panel", - "author": "Alexander Osinskii", - "email": "alexanderosinskii@gmail.com", - "version": "1.0.0", - "private": false, - "dependencies": { - "@fortawesome/fontawesome-free": "^5.10.1", - "@fortawesome/fontawesome-svg-core": "^1.2.21", - "@fortawesome/free-brands-svg-icons": "^5.10.1", - "@fortawesome/free-solid-svg-icons": "^5.10.1", - "@fortawesome/react-fontawesome": "^0.1.4", - "axios": "^0.21.4", - "bootstrap": "^4.3.1", - "classname": "0.0.0", - "dayjs": "^1.11.4", - "jquery": "^3.5.1", - "node-sass": "^4.14.1", - "perfect-scrollbar": "^1.5.3", - "popper.js": "^1.15.0", - "prop-types": "^15.7.2", - "qs": "^6.9.4", - "react": "^16.10.2", - "react-codemirror": "^1.0.0", - "react-dom": "^16.10.2", - "react-helmet": "^6.1.0", - "react-html-parser": "^2.0.2", - "react-perfect-scrollbar": "^1.5.8", - "react-redux": "^7.2.1", - "react-router-dom": "^5.1.2", - "react-scripts": "^3.4.1", - "react-toastify": "^5.3.1", - "redux": "^4.0.5", - "redux-devtools-extension": "^2.13.8", - "redux-thunk": "^2.3.0", - "validate.js": "^0.13.1" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": "react-app" - }, - "browserslist": [ - ">0.2%", - "not dead", - "not ie <= 11", - "not op_mini all" - ] -} diff --git a/src/react/public/favicon.ico b/src/react/public/favicon.ico deleted file mode 100755 index a11777cc4..000000000 Binary files a/src/react/public/favicon.ico and /dev/null differ diff --git a/src/react/public/index.html b/src/react/public/index.html deleted file mode 100755 index 745e5e138..000000000 --- a/src/react/public/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - Vesta - - - - -
- - - - - \ No newline at end of file diff --git a/src/react/public/manifest.json b/src/react/public/manifest.json deleted file mode 100755 index 1f2f141fa..000000000 --- a/src/react/public/manifest.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/src/react/src/ControlPanelService/Backup.js b/src/react/src/ControlPanelService/Backup.js deleted file mode 100644 index b2f432b5f..000000000 --- a/src/react/src/ControlPanelService/Backup.js +++ /dev/null @@ -1,82 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/list/backup/index.php'; -const scheduleBackupUri = '/api/v1/schedule/backup/'; -const backupDetailsUri = '/api/v1/list/backup/index.php'; -const backupExclusionsUri = '/api/v1/list/backup/exclusions/index.php'; -const backupExclusionsInfoUri = '/api/v1/edit/backup/exclusions/index.php'; -const backupRestoreSettingUri = '/api/v1/schedule/restore/index.php'; -const bulkRestoreUri = '/api/v1/bulk/restore/index.php'; - -export const getBackupList = () => { - return axios.get(BASE_URL + webApiUri); -} - -export const bulkAction = (action, backups) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - backups.forEach(backup => { - formData.append("backup[]", backup); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/backup/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const scheduleBackup = () => { - return axios.get(BASE_URL + scheduleBackupUri); -} - -export const getBackupDetails = backup => { - return axios.get(BASE_URL + `${backupDetailsUri}?backup=${backup}`); -} - -export const restoreBackupSetting = params => { - return axios.get(BASE_URL + `${backupRestoreSettingUri}${params}`); -} - -export const bulkRestore = (action, selection, backup) => { - const formData = new FormData(); - formData.append("token", getAuthToken()); - formData.append("action", action); - formData.append("backup", backup); - - selection.forEach(udir => { - formData.append("udir[]", udir); - }); - - return axios.post(BASE_URL + `${bulkRestoreUri}`, formData); -} - -export const getBackupExclusions = () => { - return axios.get(BASE_URL + `${backupExclusionsUri}`); -} - -export const getBackupExclusionsInfo = () => { - return axios.get(BASE_URL + `${backupExclusionsInfoUri}`); -} - -export const updateBackupExclusions = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + backupExclusionsInfoUri, formDataObject, { - params: { - token: getAuthToken() - } - }); -} diff --git a/src/react/src/ControlPanelService/Cron.js b/src/react/src/ControlPanelService/Cron.js deleted file mode 100644 index fe6f37b24..000000000 --- a/src/react/src/ControlPanelService/Cron.js +++ /dev/null @@ -1,66 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/list/cron/index.php'; -const cronAddApiUri = '/api/v1/add/cron/index.php'; -const jobInfoUri = '/api/v1/edit/cron/index.php'; -const updateCronJobUri = '/api/v1/edit/cron/index.php'; - -export const getCronList = () => { - return axios.get(BASE_URL + webApiUri); -} - -export const bulkAction = (action, domainNameSystems) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - domainNameSystems.forEach(domainNameSystem => { - formData.append("job[]", domainNameSystem); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/cron/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const addCronJob = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + cronAddApiUri, formDataObject); -} - -export const getCronJobInfo = job => { - return axios.get(BASE_URL + jobInfoUri, { - params: { - job, - token: getAuthToken() - } - }); -} - -export const updateCronJob = (data, job) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + updateCronJobUri, formDataObject, { - params: { - job, - token: getAuthToken() - } - }); -} \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Db.js b/src/react/src/ControlPanelService/Db.js deleted file mode 100644 index cd7a50e90..000000000 --- a/src/react/src/ControlPanelService/Db.js +++ /dev/null @@ -1,111 +0,0 @@ -import axios from 'axios' -import { getAuthToken } from 'src/utils/token' - -const BASE_URL = window.location.origin -const webApiUri = '/api/v1/list/db/index.php' -const addDbApiUri = '/api/v1/add/db/index.php' -const optionalDbInfoUri = '/api/v1/add/db/index.php' -const dbInfoUri = '/api/v1/edit/db/index.php' -const updateDatabaseUri = '/api/v1/edit/db/index.php' - -export const getDatabaseList = () => { - return axios.get(BASE_URL + webApiUri) -} - -export const bulkAction = (action, domainNameSystems) => { - const formData = new FormData() - formData.append('action', action) - formData.append('token', getAuthToken()) - - domainNameSystems.forEach((domainNameSystem) => { - formData.append('database[]', domainNameSystem) - }) - - return axios.post(BASE_URL + '/api/v1/bulk/db/', formData) -} - -export const handleAction = (uri) => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken(), - }, - }) -} - -export const getDbOptionalInfo = () => { - return axios.get(BASE_URL + optionalDbInfoUri) -} - -export const addDatabase = (data) => { - let formDataObject = new FormData() - - for (let key in data) { - formDataObject.append(key, data[key]) - } - - return axios.post(BASE_URL + addDbApiUri, formDataObject) -} - -export const dbCharsets = [ - 'big5', - 'dec8', - 'cp850', - 'hp8', - 'koi8r', - 'latin1', - 'latin2', - 'swe7', - 'ascii', - 'ujis', - 'sjis', - 'hebrew', - 'tis620', - 'euckr', - 'koi8u', - 'gb2312', - 'greek', - 'cp1250', - 'gbk', - 'latin5', - 'armscii8', - 'utf8', - 'utf8mb4', - 'ucs2', - 'cp866', - 'keybcs2', - 'macce', - 'macroman', - 'cp852', - 'latin7', - 'cp1251', - 'cp1256', - 'cp1257', - 'binary', - 'geostd8', - 'cp932', - 'eucjpms', -] - -export const getDatabaseInfo = (database) => { - return axios.get(BASE_URL + dbInfoUri, { - params: { - database, - token: getAuthToken(), - }, - }) -} - -export const updateDatabase = (data, database) => { - let formDataObject = new FormData() - - for (let key in data) { - formDataObject.append(key, data[key]) - } - - return axios.post(BASE_URL + updateDatabaseUri, formDataObject, { - params: { - database, - token: getAuthToken(), - }, - }) -} diff --git a/src/react/src/ControlPanelService/Dns.js b/src/react/src/ControlPanelService/Dns.js deleted file mode 100644 index fb60f3ba6..000000000 --- a/src/react/src/ControlPanelService/Dns.js +++ /dev/null @@ -1,98 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const updateDNSUri = '/api/v1/edit/dns/index.php'; -const addDnsApiUri = '/api/v1/add/dns/index.php'; -const dNSInfoUri = '/api/v1/edit/dns/index.php'; -const BASE_URL = window.location.origin; -const dnsApiUri = '/api/v1/list/dns/index.php'; - -export const getDnsList = () => { - return axios.get(BASE_URL + dnsApiUri); -} - -export const getDNSRecordsList = domain => { - return axios.get(`${BASE_URL}${dnsApiUri}?domain=${domain}`); -} - -export const getDNSRecordInfo = (domain, recordId) => { - return axios.get(`${BASE_URL}${updateDNSUri}?domain=${domain}&record_id=${recordId}`); -} - -export const bulkDomainAction = (action, domains) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - domains.forEach(record => { - formData.append("domain[]", record); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/dns/', formData); -}; - -export const bulkAction = (action, records, domain) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - formData.append("domain", domain); - - records.forEach(record => { - formData.append("record[]", record); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/dns/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const addDomainNameSystem = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + addDnsApiUri, formDataObject); -} - -export const addDomainNameSystemRecord = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + addDnsApiUri, formDataObject); -} - -export const getDNSInfo = domain => { - return axios.get(BASE_URL + dNSInfoUri, { - params: { - domain, - token: getAuthToken() - } - }); -} - -export const updateDNS = (data, domain, recordId) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + updateDNSUri, formDataObject, { - params: { - domain, - record_id: recordId, - token: getAuthToken() - } - }); -} \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Favorites.js b/src/react/src/ControlPanelService/Favorites.js deleted file mode 100644 index 21ac96eb1..000000000 --- a/src/react/src/ControlPanelService/Favorites.js +++ /dev/null @@ -1,23 +0,0 @@ -import axios from "axios"; -let addFavoriteUri = '/api/v1/add/favorite/index.php'; -let deleteFavoriteUri = '/api/v1/delete/favorite/index.php'; -let BASE_URL = window.location.origin; - - -export const addFavorite = (unitId, section) => { - return axios.get(BASE_URL + addFavoriteUri, { - params: { - 'v_unit_id': unitId, - 'v_section': section - } - }); -} - -export const deleteFavorite = (unitId, section) => { - return axios.get(BASE_URL + deleteFavoriteUri, { - params: { - 'v_unit_id': unitId, - 'v_section': section - } - }); -} \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Firewalls.js b/src/react/src/ControlPanelService/Firewalls.js deleted file mode 100644 index 717f1cfa4..000000000 --- a/src/react/src/ControlPanelService/Firewalls.js +++ /dev/null @@ -1,115 +0,0 @@ -import axios from 'axios'; -import { getAuthToken } from 'src/utils/token'; - -const BASE_URL = window.location.origin; -const usersUri = '/api/v1/list/firewall/index.php'; -const addFirewallUri = '/api/v1/add/firewall/index.php'; -const firewallInfoUri = '/api/v1/edit/firewall/index.php'; -const updateFirewallUri = '/api/v1/edit/firewall/index.php'; -const addBanIpsUri = '/api/v1/add/firewall/banlist/index.php'; -const banListUri = '/api/v1/list/firewall/banlist/index.php'; - -export const getFirewallList = () => { - return axios.get(BASE_URL + usersUri); -} - -export const getBanList = () => { - return axios.get(BASE_URL + banListUri); -} - -export const bulkFirewallAction = (action, ips) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - ips.forEach(ip => { - formData.append("rule[]", ip); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/firewall/', formData); -}; - -export const bulkAction = (action, ips, banIps) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - ips.forEach(ip => { - const banIp = banIps.find(banIp => banIp.NAME === ip); - formData.append("ipchain[]", `${ip}:${banIp['CHAIN']}`); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/firewall/banlist/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const getBanIps = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.get(BASE_URL + addBanIpsUri, { - params: { - token: getAuthToken() - } - }); -} - -export const addBanIp = (data) => { - let formDataObject = new FormData(); - - formDataObject.append('token', getAuthToken()); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + addBanIpsUri, formDataObject, { - params: { - token: getAuthToken() - } - }); -} - -export const addFirewall = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + addFirewallUri, formDataObject); -} - -export const getFirewallInfo = rule => { - return axios.get(BASE_URL + firewallInfoUri, { - params: { - rule, - token: getAuthToken() - } - }); -} - -export const updateFirewall = (data, rule) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + updateFirewallUri, formDataObject, { - params: { - rule, - token: getAuthToken() - } - }); -} \ No newline at end of file diff --git a/src/react/src/ControlPanelService/GeneratorOptions.js b/src/react/src/ControlPanelService/GeneratorOptions.js deleted file mode 100644 index 5153c9cfa..000000000 --- a/src/react/src/ControlPanelService/GeneratorOptions.js +++ /dev/null @@ -1,139 +0,0 @@ -export const generatorOptions = i18n => { - return { - minutesRunCommandsOptions: [ - { name: i18n['every minute'] ?? 'every minute', value: '*' }, - { name: i18n['every two minutes'] ?? 'every two minutes', value: '*/2' }, - { name: `${i18n.every || 'every'} 5`, value: '*/5' }, - { name: `${i18n.every || 'every'} 10`, value: '*/10' }, - { name: `${i18n.every || 'every'} 15`, value: '*/15' }, - { name: `${i18n.every || 'every'} 30`, value: '*/30' } - ], - hoursRunCommandsOptions: [ - { name: i18n['every hour'] ?? 'every hour', value: '*' }, - { name: i18n['every two hours'] ?? 'every two hours', value: '*/2' }, - { name: `${i18n.every || 'every'} 6`, value: '*/6' }, - { name: `${i18n.every || 'every'} 12`, value: '*/12' } - ], - daysRunCommandsOptions: [ - { name: i18n['every day'] ?? 'every day', value: '*' }, - { name: i18n['every odd day'] ?? 'every odd day', value: '1-31/2' }, - { name: i18n['every even day'] ?? 'every even day', value: '*/2' }, - { name: `${i18n.every || 'every'} 3`, value: '*/3' }, - { name: `${i18n.every || 'every'} 5`, value: '*/5' }, - { name: `${i18n.every || 'every'} 10`, value: '*/10' }, - { name: `${i18n.every || 'every'} 15`, value: '*/15' } - ], - hoursOptions: [ - { name: '00', value: '0' }, - { name: '01', value: '1' }, - { name: '02', value: '2' }, - { name: '03', value: '3' }, - { name: '04', value: '4' }, - { name: '05', value: '5' }, - { name: '06', value: '6' }, - { name: '07', value: '7' }, - { name: '08', value: '8' }, - { name: '09', value: '9' }, - { name: '10', value: '10' }, - { name: '11', value: '11' }, - { name: '12', value: '12' }, - { name: '13', value: '13' }, - { name: '14', value: '14' }, - { name: '15', value: '15' }, - { name: '16', value: '16' }, - { name: '17', value: '17' }, - { name: '18', value: '18' }, - { name: '19', value: '19' }, - { name: '20', value: '20' }, - { name: '21', value: '21' }, - { name: '22', value: '22' }, - { name: '23', value: '23' } - ], - hourlyMinutesOptions: [ - { name: '00', value: '0' }, - { name: '15', value: '15' }, - { name: '30', value: '30' }, - { name: '45', value: '45' } - ], - dailyMinutesOptions: [ - { name: '00', value: '0' }, - { name: '01', value: '1' }, - { name: '02', value: '2' }, - { name: '05', value: '5' }, - { name: '10', value: '10' }, - { name: '15', value: '15' }, - { name: '20', value: '20' }, - { name: '25', value: '25' }, - { name: '30', value: '30' }, - { name: '35', value: '35' }, - { name: '40', value: '40' }, - { name: '45', value: '45' }, - { name: '50', value: '50' }, - { name: '55', value: '55' } - ], - weeklyRunCommandOptions: [ - { name: i18n['every day'] ?? 'every day', value: '*' }, - { name: i18n['weekdays (5 days)'] ?? 'weekdays (5 days)', value: '1,2,3,4,5' }, - { name: i18n['weekend (2 days)'] ?? 'weekend (2 days)', value: '0,6' }, - { name: i18n.Monday ?? 'Monday', value: '1' }, - { name: i18n.Tuesday ?? 'Tuesday', value: '2' }, - { name: i18n.Wednesday ?? 'Wednesday', value: '3' }, - { name: i18n.Thursday ?? 'Thursday', value: '4' }, - { name: i18n.Friday ?? 'Friday', value: '5' }, - { name: i18n.Saturday ?? 'Saturday', value: '6' }, - { name: i18n.Sunday ?? 'Sunday', value: '0' } - ], - monthlyRunCommandOptions: [ - { name: i18n['every month'] ?? 'every month', value: '*' }, - { name: i18n['every odd month'] ?? 'every odd month', value: '1-11/2' }, - { name: i18n['every even month'] ?? 'every even month', value: '*/2' }, - { name: `${i18n.every || 'every'} 3`, value: '*/3' }, - { name: `${i18n.every || 'every'} 6`, value: '*/6' }, - { name: i18n.Jan ?? 'Jan', value: '1' }, - { name: i18n.Feb ?? 'Feb', value: '2' }, - { name: i18n.Mar ?? 'Mar', value: '3' }, - { name: i18n.Apr ?? 'Apr', value: '4' }, - { name: i18n.May ?? 'May', value: '5' }, - { name: i18n.Jun ?? 'Jun', value: '6' }, - { name: i18n.Jul ?? 'Jul', value: '7' }, - { name: i18n.Aug ?? 'Aug', value: '8' }, - { name: i18n.Sep ?? 'Sep', value: '9' }, - { name: i18n.Oct ?? 'Oct', value: '10' }, - { name: i18n.Nov ?? 'Nov', value: '11' }, - { name: i18n.Dec ?? 'Dec', value: '12' } - ], - dateOptions: [ - { name: '1', value: '1' }, - { name: '2', value: '2' }, - { name: '3', value: '3' }, - { name: '4', value: '4' }, - { name: '5', value: '5' }, - { name: '6', value: '6' }, - { name: '7', value: '7' }, - { name: '8', value: '8' }, - { name: '9', value: '9' }, - { name: '10', value: '10' }, - { name: '11', value: '11' }, - { name: '12', value: '12' }, - { name: '13', value: '13' }, - { name: '14', value: '14' }, - { name: '15', value: '15' }, - { name: '16', value: '16' }, - { name: '17', value: '17' }, - { name: '18', value: '18' }, - { name: '19', value: '19' }, - { name: '20', value: '20' }, - { name: '21', value: '21' }, - { name: '22', value: '22' }, - { name: '23', value: '23' }, - { name: '24', value: '24' }, - { name: '25', value: '25' }, - { name: '26', value: '26' }, - { name: '27', value: '27' }, - { name: '28', value: '28' }, - { name: '29', value: '29' }, - { name: '30', value: '30' }, - { name: '31', value: '31' } - ] - } -} diff --git a/src/react/src/ControlPanelService/Ip.js b/src/react/src/ControlPanelService/Ip.js deleted file mode 100644 index 9a8904954..000000000 --- a/src/react/src/ControlPanelService/Ip.js +++ /dev/null @@ -1,71 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/list/ip/index.php'; -const addIpApiUri = '/api/v1/add/ip/index.php'; -const additionalInfoUri = '/api/v1/add/ip/index.php'; -const ipInfoUri = '/api/v1/edit/ip/index.php'; -const updateIpUri = '/api/v1/edit/ip/index.php'; - -export const getIpList = () => { - return axios.get(BASE_URL + webApiUri); -} - -export const bulkAction = (action, internetProtocols) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - internetProtocols.forEach(internetProtocol => { - formData.append("ip[]", internetProtocol); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/ip/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const getAdditionalInfo = () => { - return axios.get(BASE_URL + additionalInfoUri); -} - -export const addInternetProtocol = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + addIpApiUri, formDataObject); -} - -export const getInternetProtocolInfo = ip => { - return axios.get(BASE_URL + ipInfoUri, { - params: { - ip, - token: getAuthToken() - } - }); -} - -export const updateInternetProtocol = (data, ip) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + updateIpUri, formDataObject, { - params: { - ip, - token: getAuthToken() - } - }); -} \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Languages.js b/src/react/src/ControlPanelService/Languages.js deleted file mode 100644 index 4b901d947..000000000 --- a/src/react/src/ControlPanelService/Languages.js +++ /dev/null @@ -1,46 +0,0 @@ -import axios from "axios"; - -const webApiUri = '/api/v1/languages.php'; -const BASE_URL = window.location.origin; - -export const getLanguages = () => { - return axios.get(BASE_URL + webApiUri); -} - -export const languagesMock = [ - "ar", - "az", - "bg", - "bs", - "cn", - "cz", - "da", - "de", - "el", - "en", - "es", - "fa", - "fi", - "fr", - "hu", - "id", - "it", - "ja", - "ka", - "ko", - "nl", - "no", - "pl", - "pt-BR", - "pt", - "ro", - "ru", - "se", - "sr", - "th", - "tr", - "tw", - "ua", - "ur", - "vi" -]; \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Logs.js b/src/react/src/ControlPanelService/Logs.js deleted file mode 100644 index 30f95f848..000000000 --- a/src/react/src/ControlPanelService/Logs.js +++ /dev/null @@ -1,8 +0,0 @@ -import axios from "axios"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/list/log/index.php'; - -export const getLogsList = () => { - return axios.get(BASE_URL + webApiUri); -} \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Mail.js b/src/react/src/ControlPanelService/Mail.js deleted file mode 100644 index 3f7e400e7..000000000 --- a/src/react/src/ControlPanelService/Mail.js +++ /dev/null @@ -1,130 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/list/mail/index.php'; -const addMailApiUri = '/api/v1/add/mail/index.php'; -const mailInfoUri = '/api/v1/edit/mail/index.php'; -const updateMailUri = '/api/v1/edit/mail/index.php'; - -export const getMailList = () => { - return axios.get(BASE_URL + webApiUri); -} - -export const getMailAccountList = domain => { - return axios.get(`${BASE_URL}${webApiUri}?domain=${domain}`) -} - -export const getMailAccountInfo = (domain, account) => { - return axios.get(`${BASE_URL}${mailInfoUri}?domain=${domain}&account=${account}`) -} - -export const bulkAction = (action, domainNameSystems) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - domainNameSystems.forEach(domainNameSystem => { - formData.append("domain[]", domainNameSystem); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/mail/', formData); -}; - -export const bulkMailAccountAction = (action, domain, accounts = []) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - formData.append("domain", domain); - - accounts.forEach(account => { - formData.append("account[]", account); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/mail/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const addMail = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + addMailApiUri, formDataObject); -} - -export const addMailAccount = (data, domain) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(`${BASE_URL}${addMailApiUri}?domain=${domain}`, formDataObject); -} - -export const editMailAccount = (data, domain, account) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(`${BASE_URL}${updateMailUri}?domain=${domain}&account=${account}`, formDataObject); -} - -export const getMailInfo = domain => { - return axios.get(BASE_URL + mailInfoUri, { - params: { - domain, - token: getAuthToken() - } - }); -} - -export const updateMail = (data, domain) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + updateMailUri, formDataObject, { - params: { - domain, - token: getAuthToken() - } - }); -} - -export const mailInfoBlockSelectOptions = i18n => [ - { - value: i18n['Use server hostname'], - type: 'hostname', - }, - { - value: i18n['Use domain hostname'], - type: 'domain', - }, - { - value: i18n['Use STARTTLS'], - type: 'starttls', - }, - { - value: i18n['Use SSL / TLS'], - type: 'ssl', - }, - { - value: i18n['No encryption'], - type: 'no_encryption', - } -]; \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Notifications.js b/src/react/src/ControlPanelService/Notifications.js deleted file mode 100644 index 894d5bab1..000000000 --- a/src/react/src/ControlPanelService/Notifications.js +++ /dev/null @@ -1,24 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; -let BASE_URL = window.location.origin; -let getNotificationsUri = '/api/v1/list/notifications/index.php'; -let deleteNotificationsUri = '/api/v1/delete/notification/index.php'; - -export const getAppNotifications = () => { - return axios.get(BASE_URL + getNotificationsUri, { - params: { - ajax: 1, - token: getAuthToken() - } - }); -} - -export const deleteNotification = id => { - return axios.get(BASE_URL + deleteNotificationsUri, { - params: { - 'delete': 1, - 'notification_id': id, - token: getAuthToken() - } - }); -} \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Package.js b/src/react/src/ControlPanelService/Package.js deleted file mode 100644 index ca8619b2b..000000000 --- a/src/react/src/ControlPanelService/Package.js +++ /dev/null @@ -1,70 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/list/package/index.php'; -const additionalPackageInfoUri = '/api/v1/add/package/index.php'; -const addPackageUri = '/api/v1/add/package/index.php'; -const packageInfoUri = '/api/v1/edit/package/index.php'; -const updatePackageUri = '/api/v1/edit/package/index.php'; - -export const getPackageList = () => { - return axios.get(BASE_URL + webApiUri); -} - -export const bulkAction = (action, backups) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - backups.forEach(backup => { - formData.append("package[]", backup); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/package/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const addPackage = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + addPackageUri, formDataObject); -} - -export const getAdditionalPackageInfo = () => { - return axios.get(BASE_URL + additionalPackageInfoUri); -} - -export const getPackageInfo = item => { - return axios.get(BASE_URL + packageInfoUri, { - params: { - package: item, - token: getAuthToken() - } - }); -} - -export const updatePackage = (data, item) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + updatePackageUri, formDataObject, { - params: { - package: item - } - }); -} diff --git a/src/react/src/ControlPanelService/RRD.js b/src/react/src/ControlPanelService/RRD.js deleted file mode 100644 index 5c836dba7..000000000 --- a/src/react/src/ControlPanelService/RRD.js +++ /dev/null @@ -1,12 +0,0 @@ -import axios from "axios"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/list/rrd/index.php'; - -export const getRrdList = () => { - return axios.get(BASE_URL + webApiUri); -} - -export function generateImagePath(period, type, rrd) { - return `/api/v1/list/rrd/image.php?/rrd/${type}/${period}-${rrd}.png`; -} diff --git a/src/react/src/ControlPanelService/ResetPassword.js b/src/react/src/ControlPanelService/ResetPassword.js deleted file mode 100644 index d353cd6c9..000000000 --- a/src/react/src/ControlPanelService/ResetPassword.js +++ /dev/null @@ -1,26 +0,0 @@ -import axios from "axios"; - -const BASE_URL = window.location.origin; -const resetPasswordUri = '/api/v1/reset/index.php'; - -export const resetPassword = (user = '', code = '', password = '', confirmPassword = '') => { - const formData = new FormData(); - - if (password) { - formData.append('password', password); - } - - if (confirmPassword) { - formData.append('password_confirm', confirmPassword); - } - - if (user) { - formData.append('user', user); - } - - if (code) { - formData.append('code', code); - } - - return axios.post(BASE_URL + resetPasswordUri, formData); -}; diff --git a/src/react/src/ControlPanelService/Search.js b/src/react/src/ControlPanelService/Search.js deleted file mode 100644 index c0f2fc884..000000000 --- a/src/react/src/ControlPanelService/Search.js +++ /dev/null @@ -1,17 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/search/'; - -export const getSearchResultsList = term => { - return axios.get(BASE_URL + webApiUri + '?q=' + term); -} - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} diff --git a/src/react/src/ControlPanelService/Select.js b/src/react/src/ControlPanelService/Select.js deleted file mode 100644 index 34923b04b..000000000 --- a/src/react/src/ControlPanelService/Select.js +++ /dev/null @@ -1,72 +0,0 @@ -export const values = (select = {}) => { - return { - usersList: [ - { value: 'rebuild', name: select.rebuild }, - { value: 'rebuild web', name: select['rebuild web'] }, - { value: 'rebuild dns', name: select['rebuild dns'] }, - { value: 'rebuild mail', name: select['rebuild mail'] }, - { value: 'rebuild db', name: select['rebuild db'] }, - { value: 'rebuild cron', name: select['rebuild cron'] }, - { value: 'update counters', name: select['update counters'] }, - { value: 'suspend', name: select.suspend }, - { value: 'unsuspend', name: select.unsuspend }, - { value: 'delete', name: select.delete } - ], - webList: [ - { value: 'suspend', name: select.suspend }, - { value: 'unsuspend', name: select.unsuspend }, - { value: 'delete', name: select.delete } - ], - dnsList: [ - { value: 'suspend', name: select.suspend }, - { value: 'unsuspend', name: select.unsuspend }, - { value: 'delete', name: select.delete } - ], - mailList: [ - { value: 'suspend', name: select.suspend }, - { value: 'unsuspend', name: select.unsuspend }, - { value: 'delete', name: select.delete } - ], - dbList: [ - { value: 'suspend', name: select.suspend }, - { value: 'unsuspend', name: select.unsuspend }, - { value: 'delete', name: select.delete } - ], - cronList: [ - { value: 'add-cron-reports', name: select['turn on notifications'] }, - { value: 'delete-cron-reports', name: select['turn off notifications'] }, - { value: 'suspend', name: select.suspend }, - { value: 'unsuspend', name: select.unsuspend }, - { value: 'delete', name: select.delete } - ], - backupList: [ - { value: 'delete', name: select.delete } - ], - packagesList: [ - { value: 'delete', name: select.delete } - ], - internetProtocolsList: [ - { value: 'reread IP', name: select['reread IP'] }, - { value: 'delete', name: select.delete } - ], - updatesList: [ - { value: 'update', name: select.update } - ], - firewallList: [ - { value: 'suspend', name: select.suspend }, - { value: 'unsuspend', name: select.unsuspend }, - { value: 'delete', name: select.delete } - ], - serverList: [ - { value: 'stop', name: select.stop }, - { value: 'start', name: select.start }, - { value: 'restart', name: select.restart } - ], - backupDetailList: [ - { value: 'restore', name: select.restore } - ], - banList: [ - { value: 'delete', name: select.delete } - ] - } -}; \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Server.js b/src/react/src/ControlPanelService/Server.js deleted file mode 100644 index 8b26491d5..000000000 --- a/src/react/src/ControlPanelService/Server.js +++ /dev/null @@ -1,80 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/list/server/index.php'; -const serverAdditionalInfoUri = '/api/v1/edit/server/index.php'; - -export const getServersList = () => { - return axios.get(BASE_URL + webApiUri); -} - -export const bulkAction = (action, services) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - services.forEach(service => { - formData.append("service[]", service); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/service/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const getServerAdditionalInfo = () => { - return axios.get(BASE_URL + serverAdditionalInfoUri, { - params: { - token: getAuthToken() - } - }); -} - -export const updateService = (data, uri = '') => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + `/api/v1/edit/server/${uri}/index.php`, formDataObject, { - params: { - token: getAuthToken() - } - }); -} - -export const getServiceInfo = service => { - return axios.get(`${BASE_URL}/api/v1/edit/server/${service}/index.php`); -} - -export const getServiceLogs = service => { - return axios.get(`${BASE_URL}${webApiUri}?${service}`); -} - -export const services = [ - 'apache2', - 'clamd', - 'cron', - 'crond', - 'exim', - 'exim4', - 'fail2ban', - 'iptables', - 'mariadb', - 'mysqld', - 'named', - 'php-fpm', - 'php5-fpm', - 'proftpd', - 'spamassassin', - 'spamd', - 'vsftpd', -]; \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Statistics.js b/src/react/src/ControlPanelService/Statistics.js deleted file mode 100644 index 8d039d866..000000000 --- a/src/react/src/ControlPanelService/Statistics.js +++ /dev/null @@ -1,8 +0,0 @@ -import axios from "axios"; - -const BASE_URL = window.location.origin; -const webApiUri = '/api/v1/list/stats/index.php'; - -export const getStatisticsList = user => { - return axios.get(BASE_URL + webApiUri + '?user=' + user); -} \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Updates.js b/src/react/src/ControlPanelService/Updates.js deleted file mode 100644 index be5478e4c..000000000 --- a/src/react/src/ControlPanelService/Updates.js +++ /dev/null @@ -1,47 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const deleteAutoUpdateUri = '/api/v1/delete/cron/autoupdate/'; -const addAutoUpdateUri = '/api/v1/add/cron/autoupdate/'; -const webApiUri = '/api/v1/list/updates/index.php'; -const BASE_URL = window.location.origin; - -export const getUpdatesList = () => { - return axios.get(BASE_URL + webApiUri); -} - -export const bulkAction = (action, updates) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - updates.forEach(update => { - formData.append("pkg[]", update); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/vesta/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const enableAutoUpdate = () => { - return axios.get(`${BASE_URL}${addAutoUpdateUri}`, { - params: { - token: getAuthToken() - } - }); -}; - -export const disableAutoUpdate = () => { - return axios.get(`${BASE_URL}${deleteAutoUpdateUri}`, { - params: { - token: getAuthToken() - } - }); -}; \ No newline at end of file diff --git a/src/react/src/ControlPanelService/UserNS.js b/src/react/src/ControlPanelService/UserNS.js deleted file mode 100644 index c0fb1aaf4..000000000 --- a/src/react/src/ControlPanelService/UserNS.js +++ /dev/null @@ -1,8 +0,0 @@ -import axios from "axios"; - -const BASE_URL = window.location.origin; -const userNSApiUri = '/api/v1/list-user-ns.php'; - -export const getUserNS = () => { - return axios.get(BASE_URL + userNSApiUri); -} \ No newline at end of file diff --git a/src/react/src/ControlPanelService/Users.js b/src/react/src/ControlPanelService/Users.js deleted file mode 100644 index 1de526756..000000000 --- a/src/react/src/ControlPanelService/Users.js +++ /dev/null @@ -1,73 +0,0 @@ -import axios from 'axios'; -import { getAuthToken } from 'src/utils/token'; - -const BASE_URL = window.location.origin; -const usersUri = '/api/v1/list/user/index.php'; -const addUsersUri = '/api/v1/add/user/index.php'; -const userInfoUri = '/api/v1/edit/user/index.php'; -const updateUserUri = '/api/v1/edit/user/index.php'; - -export const getUsersList = () => { - return axios.get(BASE_URL + usersUri, { - params: { - token: getAuthToken() - } - }); -} - -export const bulkAction = (action, selectedUsers) => { - const formData = new FormData(); - formData.append("token", getAuthToken()); - formData.append("action", action); - - selectedUsers.forEach(user => { - formData.append("user[]", user); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/user/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const addUser = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - formDataObject.append("token", getAuthToken()); - formDataObject.append("ok", "Add"); - - return axios.post(BASE_URL + addUsersUri, formDataObject); -} - -export const getUserInfo = username => { - return axios.get(BASE_URL + userInfoUri, { - params: { - user: username, - token: getAuthToken() - } - }); -} - -export const updateUser = (data, user) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + updateUserUri, formDataObject, { - params: { - user, - token: getAuthToken() - } - }); -} diff --git a/src/react/src/ControlPanelService/Web.js b/src/react/src/ControlPanelService/Web.js deleted file mode 100644 index 19361fd0e..000000000 --- a/src/react/src/ControlPanelService/Web.js +++ /dev/null @@ -1,106 +0,0 @@ -import axios from "axios"; -import { getAuthToken } from "src/utils/token"; - -const BASE_URL = window.location.origin; -const addWebUri = '/api/v1/add/web/index.php'; -const webApiUri = '/api/v1/list/web/index.php'; -const webStatsUri = '/api/v1/web-stats.php'; -const domainInfoUri = '/api/v1/edit/web/index.php'; -const generateCSRUri = '/api/v1/generate/ssl/index.php'; -const updateDomainUri = '/api/v1/edit/web/index.php'; - -export const getWebList = () => { - return axios.get(BASE_URL + webApiUri); -} - -export const bulkAction = (action, webDomains) => { - const formData = new FormData(); - formData.append("action", action); - formData.append("token", getAuthToken()); - - webDomains.forEach(webDomain => { - formData.append("domain[]", webDomain); - }); - - return axios.post(BASE_URL + '/api/v1/bulk/web/', formData); -}; - -export const handleAction = uri => { - return axios.get(BASE_URL + uri, { - params: { - token: getAuthToken() - } - }); -} - -export const addWeb = data => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + addWebUri, formDataObject); -} - -export const getWebDomainInfo = domain => { - return axios.get(BASE_URL + addWebUri, { - params: { - token: getAuthToken() - } - }); -} - -export const getWebStats = () => { - return axios.get(BASE_URL + webStatsUri); -} - -export const getDomainInfo = domain => { - return axios.get(BASE_URL + domainInfoUri, { - params: { - domain, - token: getAuthToken() - } - }); -} - -export const updateWebDomain = (data, domain) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + updateDomainUri, formDataObject, { - params: { - domain, - token: getAuthToken() - } - }); -} - -export const getCsrInitialData = domain => { - if (domain) { - return axios.get(BASE_URL + generateCSRUri, { - params: { - domain - } - }); - } else { - return axios.get(BASE_URL + generateCSRUri); - } -} - -export const generateCSR = (data) => { - let formDataObject = new FormData(); - - for (let key in data) { - formDataObject.append(key, data[key]); - } - - return axios.post(BASE_URL + generateCSRUri, formDataObject, { - params: { - token: getAuthToken() - } - }); -} diff --git a/src/react/src/ControlPanelService/WebLogs.js b/src/react/src/ControlPanelService/WebLogs.js deleted file mode 100644 index fd3504796..000000000 --- a/src/react/src/ControlPanelService/WebLogs.js +++ /dev/null @@ -1,7 +0,0 @@ -import axios from "axios"; - -const BASE_URL = window.location.origin; - -export const getWebLogs = uri => { - return axios.get(BASE_URL + '/api/v1' +uri); -} \ No newline at end of file diff --git a/src/react/src/FileManagerHelper.js b/src/react/src/FileManagerHelper.js deleted file mode 100644 index fa1940efe..000000000 --- a/src/react/src/FileManagerHelper.js +++ /dev/null @@ -1,131 +0,0 @@ -import axios from "axios"; -import QueryString from "qs"; -const server = window.location.origin + "/file_manager/fm_api.php?"; - -export function validateAction(url) { - return axios.get(url); -} - -export function cacheData(currentUser, history, rootDir) { - const parsedQueryString = QueryString.parse(history.location.search, { ignoreQueryPrefix: true }); - - if (parsedQueryString.path) { - localStorage.setItem("activeWindow", "left"); - localStorage.setItem("leftListPath", parsedQueryString.path); - localStorage.setItem("rightListPath", parsedQueryString.path); - return; - } - - if (localStorage.getItem("lastUser") === null || currentUser !== localStorage.getItem("lastUser")) { - localStorage.setItem("lastUser", currentUser); - localStorage.setItem("activeWindow", "left"); - localStorage.setItem("leftListPath", rootDir); - localStorage.setItem("rightListPath", rootDir); - return; - } - - if (localStorage.getItem("activeWindow") === null || localStorage.getItem("leftListPath") === null || localStorage.getItem("rightListPath") === null) { - let path = history.location.search.substring(6).split('/'); - localStorage.setItem("activeWindow", "left"); - localStorage.setItem("leftListPath", path); - localStorage.setItem("rightListPath", rootDir); - return; - } -} - -export function changeDirectoryOnLoading(server, list) { - return axios.get(`${server}dir=${encodePath(localStorage.getItem(list))}&action=cd`); -} - -export function changeDirectory(server, path) { - return axios.get(`${server}dir=${encodePath(path)}&action=cd`); -} - -export function getData(path) { - return axios.get(`${server}dir=%2F${path}&action=cd`); -} - -export function checkExistingFileName(selectedFiles, activeWindow, leftListData, rightListData) { - let selectedFileNames = []; - let existingFileNames = []; - let newFiles = []; - - for (let i = 0; i < selectedFiles.length; i++) { - selectedFileNames.push(selectedFiles[i]); - } - - if (activeWindow === "left") { - for (let i = 0; i < selectedFileNames.length; i++) { - if (leftListData.map((item) => { return item.name }).includes(selectedFileNames[i].name)) { - existingFileNames.push(selectedFileNames[i]); - } else { - newFiles.push(selectedFileNames[i]); - } - } - } else { - for (let i = 0; i < selectedFileNames.length; i++) { - if (rightListData.map((item) => { return item.name }).includes(selectedFileNames[i].name)) { - existingFileNames.push(selectedFileNames[i]); - } else { - newFiles.push(selectedFileNames[i]); - } - } - } - - return { existingFileNames, newFiles }; -} - -export function encodePath(path) { - let splitPath = path.split('/'); - let encodedPath = splitPath.join('%2F'); - return encodedPath; -} - -export function activeWindowPath() { - if (localStorage.getItem("activeWindow") === "left") { - let currentPath = localStorage.getItem("leftListPath"); - return currentPath; - } else if (localStorage.getItem("activeWindow") === "right") { - let currentPath = localStorage.getItem("rightListPath"); - return currentPath; - } -} - -export function deleteItems(url, path, selection) { - if (!selection.length) { - return false; - } - - const promisesArray = selection.map(item => - validateAction(`${url}item=${path}%2F${item}&dir=${path}&action=delete_files`) - .then(() => { }) - ); - - return Promise.all(promisesArray); -} - -export function moveItems(url, path, targetPath, selection) { - if (!selection.length) { - return false; - } - - const promisesArray = selection.map(item => - validateAction(`${url}item=${path}%2F${item}&target_name=${targetPath}&action=move_file`) - .then(() => { }) - ); - - return Promise.all(promisesArray); -} - -export function copyItems(url, path, targetPath, selection) { - if (!selection.length) { - return false; - } - - const promisesArray = selection.map(item => - validateAction(`${url}item=${path}%2F${item}&filename=${item}&dir=${path}&dir_target=${targetPath}&action=copy_file`) - .then(() => { }) - ); - - return Promise.all(promisesArray); -} \ No newline at end of file diff --git a/src/react/src/actions/ControlPanelContent/controlPanelContentActions.js b/src/react/src/actions/ControlPanelContent/controlPanelContentActions.js deleted file mode 100644 index 9888d695a..000000000 --- a/src/react/src/actions/ControlPanelContent/controlPanelContentActions.js +++ /dev/null @@ -1,15 +0,0 @@ -import { ADD_CPANEL_FOCUSED_ELEMENT, REMOVE_CPANEL_FOCUSED_ELEMENT } from './controlPanelContentTypes'; - -export const addControlPanelContentFocusedElement = value => { - return { - type: ADD_CPANEL_FOCUSED_ELEMENT, - value - }; -}; - -export const removeControlPanelContentFocusedElement = () => { - return { - type: REMOVE_CPANEL_FOCUSED_ELEMENT, - value: '' - }; -}; \ No newline at end of file diff --git a/src/react/src/actions/ControlPanelContent/controlPanelContentTypes.js b/src/react/src/actions/ControlPanelContent/controlPanelContentTypes.js deleted file mode 100644 index f127d6583..000000000 --- a/src/react/src/actions/ControlPanelContent/controlPanelContentTypes.js +++ /dev/null @@ -1,2 +0,0 @@ -export const ADD_CPANEL_FOCUSED_ELEMENT = 'ADD_CPANEL_FOCUSED_ELEMENT'; -export const REMOVE_CPANEL_FOCUSED_ELEMENT = 'REMOVE_CPANEL_FOCUSED_ELEMENT'; \ No newline at end of file diff --git a/src/react/src/actions/MainNavigation/mainNavigationActions.js b/src/react/src/actions/MainNavigation/mainNavigationActions.js deleted file mode 100644 index 936be0532..000000000 --- a/src/react/src/actions/MainNavigation/mainNavigationActions.js +++ /dev/null @@ -1,29 +0,0 @@ -import { ADD_FOCUSED_ELEMENT, ADD_ACTIVE_ELEMENT, REMOVE_FOCUSED_ELEMENT, REMOVE_ACTIVE_ELEMENT } from './mainNavigationTypes'; - -export const addFocusedElement = value => { - return { - type: ADD_FOCUSED_ELEMENT, - value - }; -}; - -export const removeFocusedElement = () => { - return { - type: REMOVE_FOCUSED_ELEMENT, - value: '' - }; -}; - -export const addActiveElement = value => { - return { - type: ADD_ACTIVE_ELEMENT, - value - }; -}; - -export const removeActiveElement = () => { - return { - type: REMOVE_ACTIVE_ELEMENT, - value: '' - }; -}; \ No newline at end of file diff --git a/src/react/src/actions/MainNavigation/mainNavigationTypes.js b/src/react/src/actions/MainNavigation/mainNavigationTypes.js deleted file mode 100644 index 5411d49a5..000000000 --- a/src/react/src/actions/MainNavigation/mainNavigationTypes.js +++ /dev/null @@ -1,4 +0,0 @@ -export const ADD_FOCUSED_ELEMENT = 'ADD_FOCUSED_ELEMENT'; -export const REMOVE_FOCUSED_ELEMENT = 'REMOVE_FOCUSED_ELEMENT'; -export const ADD_ACTIVE_ELEMENT = 'ADD_ACTIVE_ELEMENT'; -export const REMOVE_ACTIVE_ELEMENT = 'REMOVE_ACTIVE_ELEMENT'; \ No newline at end of file diff --git a/src/react/src/actions/MenuCounters/menuCounterActions.js b/src/react/src/actions/MenuCounters/menuCounterActions.js deleted file mode 100644 index 5d4255dc0..000000000 --- a/src/react/src/actions/MenuCounters/menuCounterActions.js +++ /dev/null @@ -1,35 +0,0 @@ -import { REFRESH_COUNTERS } from './menuCounterTypes'; -import { checkAuth } from 'src/services/session'; -import { setAuthToken } from 'src/utils/token'; -import { REFRESH_PANEL } from '../Panel/panelTypes'; - -export const refreshCounters = () => (dispatch, getState) => { - return new Promise((resolve, reject) => { - checkAuth() - .then(res => { - const { data, token, panel } = res.data; - - if (token) setAuthToken(token); - - dispatch({ - type: REFRESH_COUNTERS, - value: { - user: data - } - }); - - dispatch({ - type: REFRESH_PANEL, - value: { - panel - } - }); - - resolve(token); - }) - .catch(err => { - reject(); - console.error(err); - }); - }); -} diff --git a/src/react/src/actions/MenuCounters/menuCounterTypes.js b/src/react/src/actions/MenuCounters/menuCounterTypes.js deleted file mode 100644 index e5175d6b0..000000000 --- a/src/react/src/actions/MenuCounters/menuCounterTypes.js +++ /dev/null @@ -1 +0,0 @@ -export const REFRESH_COUNTERS = 'REFRESH_COUNTERS'; \ No newline at end of file diff --git a/src/react/src/actions/Notification/notificationActions.js b/src/react/src/actions/Notification/notificationActions.js deleted file mode 100644 index eae604b49..000000000 --- a/src/react/src/actions/Notification/notificationActions.js +++ /dev/null @@ -1,15 +0,0 @@ -import { ADD_NOTIFICATIONS, REMOVE_NOTIFICATIONS } from './notificationTypes'; - -export const addNotifications = value => { - return { - type: ADD_NOTIFICATIONS, - value - }; -}; - -export const removeNotifications = () => { - return { - type: REMOVE_NOTIFICATIONS, - value: [] - }; -}; diff --git a/src/react/src/actions/Notification/notificationTypes.js b/src/react/src/actions/Notification/notificationTypes.js deleted file mode 100644 index 1aa46d00d..000000000 --- a/src/react/src/actions/Notification/notificationTypes.js +++ /dev/null @@ -1,2 +0,0 @@ -export const ADD_NOTIFICATIONS = 'ADD_NOTIFICATIONS'; -export const REMOVE_NOTIFICATIONS = 'REMOVE_NOTIFICATIONS'; diff --git a/src/react/src/actions/Panel/panelTypes.js b/src/react/src/actions/Panel/panelTypes.js deleted file mode 100644 index 3c5615340..000000000 --- a/src/react/src/actions/Panel/panelTypes.js +++ /dev/null @@ -1 +0,0 @@ -export const REFRESH_PANEL = 'REFRESH_PANEL'; diff --git a/src/react/src/actions/Session/sessionActions.js b/src/react/src/actions/Session/sessionActions.js deleted file mode 100644 index 5f1823c57..000000000 --- a/src/react/src/actions/Session/sessionActions.js +++ /dev/null @@ -1,273 +0,0 @@ -import { LOGIN, LOGOUT, LOGGED_OUT_AS, CHECK_AUTH, RESET_PASSWORD } from './sessionTypes'; -import { checkAuth, signIn, signInAs, signOut } from 'src/services/session'; -import { resetPassword } from 'src/ControlPanelService/ResetPassword'; -import { resetAuthToken, setAuthToken } from 'src/utils/token'; -import { REFRESH_COUNTERS } from '../MenuCounters/menuCounterTypes'; -import { SET_USER_SESSION } from '../UserSession/userSessionTypes'; -import { REFRESH_PANEL } from '../Panel/panelTypes'; - -const LOGOUT_RESPONSE = 'logged_out'; -const LOGOUT_AS_RESPONSE = 'logged_out_as'; - -export const login = (user, password) => dispatch => { - return new Promise((resolve, reject) => { - signIn({ user, password }).then((response) => { - const { error, session, token, panel, data, user, i18n } = response.data; - - if (token) setAuthToken(token); - - dispatch({ - type: LOGIN, - value: { - token: token || '', - i18n: i18n || {}, - userName: user, - error - }, - }); - dispatch({ - type: REFRESH_PANEL, - value: { - panel - } - }); - dispatch({ - type: REFRESH_COUNTERS, - value: { - user: data, - } - }); - dispatch({ - type: SET_USER_SESSION, - value: session - }); - resolve(token); - }, (error) => { - reject(error); - }); - }); -} - -export const reset = ({ user = '', code = '', password = '', password_confirm = '' }) => dispatch => { - return new Promise((resolve, reject) => { - resetPassword(user, code, password, password_confirm).then((response) => { - const { error, session, token, panel, user } = response.data; - - dispatch({ - type: RESET_PASSWORD, - value: { - token, - userName: user, - error - }, - }); - dispatch({ - type: REFRESH_PANEL, - value: { - panel - } - }); - dispatch({ - type: REFRESH_COUNTERS, - value: { - user: {}, - } - }); - dispatch({ - type: SET_USER_SESSION, - value: session - }); - resolve(token); - }, (error) => { - reject(error); - }); - }); -} - -export const loginAs = username => dispatch => { - return new Promise((resolve, reject) => { - signInAs(username).then((response) => { - const { error, token, session, panel, data, user, i18n } = response.data; - if (token) setAuthToken(token); - - dispatch({ - type: LOGIN, - value: { - userName: user, - i18n, - token, - error - } - }); - dispatch({ - type: REFRESH_PANEL, - value: { - panel - } - }); - dispatch({ - type: REFRESH_COUNTERS, - value: { - user: data, - } - }); - dispatch({ - type: SET_USER_SESSION, - value: session - }); - - resolve(token); - }, (error) => { - console.error(error); - reject(); - }); - }); -} - -export const logout = () => (dispatch, getState) => { - return new Promise((resolve, reject) => { - signOut().then((response) => { - const { logout_response, error, userName, user, i18n, session, panel } = response.data; - - if (logout_response === LOGOUT_RESPONSE) { - resetAuthToken(); - - dispatch({ - type: LOGOUT, - value: { - userName: '', - token: '', - session: {}, - i18n: [], - error, - }, - }); - dispatch({ - type: REFRESH_PANEL, - value: { - panel: {} - } - }); - dispatch({ - type: REFRESH_COUNTERS, - value: { - user: {}, - } - }); - dispatch({ - type: SET_USER_SESSION, - value: {} - }); - - resolve(); - } else if (logout_response === LOGOUT_AS_RESPONSE) { - dispatch({ - type: LOGGED_OUT_AS, - value: { - userName, - token: '', - i18n, - error, - }, - }); - dispatch({ - type: REFRESH_PANEL, - value: { - panel - } - }); - dispatch({ - type: REFRESH_COUNTERS, - value: { - user, - } - }); - dispatch({ - type: SET_USER_SESSION, - value: session - }); - - resolve(); - } else { - resolve(`Error while signing out: ${logout_response}`); - } - }, (error) => { - console.error(error); - reject(); - }); - }); -} - -export const checkAuthHandler = () => (dispatch, getState) => { - return new Promise((resolve, reject) => { - checkAuth() - .then(res => { - const { user, data, session, panel, error, i18n, token } = res.data; - - if (token) setAuthToken(token); - - dispatch({ - type: CHECK_AUTH, - value: { - userName: user, - i18n, - token, - error - } - }); - dispatch({ - type: REFRESH_PANEL, - value: { - panel - } - }); - dispatch({ - type: REFRESH_COUNTERS, - value: { - user: data, - } - }); - dispatch({ - type: SET_USER_SESSION, - value: session - }); - - resolve(token); - }) - .catch(err => { - reject(); - console.error(err); - }); - }); -} - -export const refreshUserSession = () => (dispatch, getState) => { - return new Promise((resolve, reject) => { - checkAuth() - .then(res => { - const { session, token } = res.data; - - if (token) setAuthToken(token); - dispatch({ - type: SET_USER_SESSION, - value: session - }); - - resolve(token); - }) - .catch(err => { - reject(); - console.error(err); - }); - }); -} - -export const removeToken = () => { - return { - type: LOGOUT, - value: { - token: '', - error: '' - } - } -} diff --git a/src/react/src/actions/Session/sessionTypes.js b/src/react/src/actions/Session/sessionTypes.js deleted file mode 100644 index 2dfd6c1e5..000000000 --- a/src/react/src/actions/Session/sessionTypes.js +++ /dev/null @@ -1,6 +0,0 @@ -export const LOGIN = 'LOGIN'; -export const LOGOUT = 'LOGOUT'; -export const LOGIN_AS = 'LOGIN_AS'; -export const CHECK_AUTH = 'CHECK_AUTH'; -export const LOGGED_OUT_AS = 'LOGGED_OUT_AS'; -export const RESET_PASSWORD = 'RESET_PASSWORD'; \ No newline at end of file diff --git a/src/react/src/actions/UserSession/userSessionActions.js b/src/react/src/actions/UserSession/userSessionActions.js deleted file mode 100644 index a59b04773..000000000 --- a/src/react/src/actions/UserSession/userSessionActions.js +++ /dev/null @@ -1,8 +0,0 @@ -import { SET_USER_SESSION } from './userSessionTypes'; - -export const setUserSession = value => { - return { - type: SET_USER_SESSION, - value - }; -}; diff --git a/src/react/src/actions/UserSession/userSessionTypes.js b/src/react/src/actions/UserSession/userSessionTypes.js deleted file mode 100644 index 56d1b41f5..000000000 --- a/src/react/src/actions/UserSession/userSessionTypes.js +++ /dev/null @@ -1 +0,0 @@ -export const SET_USER_SESSION = 'SET_USER_SESSION'; \ No newline at end of file diff --git a/src/react/src/components/Backup/Backup.jsx b/src/react/src/components/Backup/Backup.jsx deleted file mode 100644 index b1c8d0d18..000000000 --- a/src/react/src/components/Backup/Backup.jsx +++ /dev/null @@ -1,85 +0,0 @@ -import React, { } from 'react'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import ListItem from '../ControlPanel/ListItem/ListItem'; -import Container from '../ControlPanel/Container/Container'; -import { faFileDownload } from '@fortawesome/free-solid-svg-icons' -import './Backup.scss'; -import { Link } from 'react-router-dom'; -import { useSelector } from 'react-redux'; - -const Backup = props => { - const { data } = props; - const { i18n } = useSelector(state => state.session); - const token = localStorage.getItem("token"); - - const toggleFav = (starred) => { - if (starred) { - props.toggleFav(props.data.NAME, 'add'); - } else { - props.toggleFav(props.data.NAME, 'delete'); - } - } - - const checkItem = () => { - props.checkItem(props.data.NAME); - } - - const handleDelete = () => { - props.handleModal(data.delete_conf, `/api/v1/delete/backup/?backup=${data.NAME}`); - } - - return ( - - - -
{data.NAME}
-
- -
{i18n['Backup Size']}: {data.SIZE}{i18n.mb}
-
- -
{i18n.Type}: {data.TYPE}
-
- -
{i18n['Run Time']}: {data.RUNTIME} minute
-
-
-
-
- - {data.UPDATED === 'no' && } - - - -
- - {i18n['configure restore settings']} - {data.FOCUSED ? : } - -
- -
- -
- -
-
- ); -} - -export default Backup; \ No newline at end of file diff --git a/src/react/src/components/Backup/Backup.scss b/src/react/src/components/Backup/Backup.scss deleted file mode 100644 index 447105840..000000000 --- a/src/react/src/components/Backup/Backup.scss +++ /dev/null @@ -1,7 +0,0 @@ -.backups-wrapper .list-item .c-1 div > span { - padding-left: 15px; -} - -.backups-restore-details .list-item .star { - display: none; -} \ No newline at end of file diff --git a/src/react/src/components/Backup/Exclusion/Edit/index.jsx b/src/react/src/components/Backup/Exclusion/Edit/index.jsx deleted file mode 100644 index ffc3ad1f4..000000000 --- a/src/react/src/components/Backup/Exclusion/Edit/index.jsx +++ /dev/null @@ -1,133 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { addActiveElement, removeFocusedElement } from "src/actions/MainNavigation/mainNavigationActions"; -import { updateBackupExclusions, getBackupExclusionsInfo } from 'src/ControlPanelService/Backup'; -import TextArea from 'src/components/ControlPanel/AddItemLayout/Form/TextArea/TextArea'; -import AddItemLayout from 'src/components/ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Toolbar from 'src/components/MainNav/Toolbar/Toolbar'; -import Spinner from 'src/components/Spinner/Spinner'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import { Helmet } from 'react-helmet'; - -import './style.scss'; -import HtmlParser from 'react-html-parser'; - -const EditBackupExclusions = () => { - const token = localStorage.getItem("token"); - const { i18n } = useSelector(state => state.session); - const history = useHistory(); - const dispatch = useDispatch(); - const [errorMessage, setErrorMessage] = useState(''); - const [okMessage, setOkMessage] = useState(''); - const [state, setState] = useState({ - data: {}, - loading: false - }); - - useEffect(() => { - dispatch(addActiveElement('/list/backup/')); - dispatch(removeFocusedElement()); - - setState({ ...state, loading: true }); - fetchData(); - }, []); - - const fetchData = () => { - getBackupExclusionsInfo() - .then(response => { - setState({ - ...state, - data: response.data, - loading: false - }); - }) - .catch(err => console.error(err)); - } - - const submitFormHandler = event => { - event.preventDefault(); - let updatedExclusions = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - updatedExclusions[name] = value; - } - - updatedExclusions['token'] = token; - updatedExclusions['save'] = 'save'; - - if (Object.keys(updatedExclusions).length !== 0 && updatedExclusions.constructor === Object) { - setState({ ...state, loading: true }); - - updateBackupExclusions(updatedExclusions) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - setErrorMessage(error_msg || ''); - setOkMessage(ok_msg || ''); - } - }) - .then(() => fetchData()) - .catch(err => console.error(err)); - } - } - - return ( -
- - {`Vesta - ${i18n.BACKUP}`} - - -
-
{i18n['Editing Backup Exclusions']}
-
- - {errorMessage ? : ''} {errorMessage} - -
-
- - {okMessage ? : ''} {HtmlParser(okMessage)} - -
-
- - {state.loading ? : -
submitFormHandler(event)} id="edit-backup-exclusions"> - -
- ); -} - -export default TextArea; diff --git a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextArea/TextArea.scss b/src/react/src/components/ControlPanel/AddItemLayout/Form/TextArea/TextArea.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput.jsx b/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput.jsx deleted file mode 100644 index a254a6079..000000000 --- a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput.jsx +++ /dev/null @@ -1,35 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -const TextInput = ({ id, name, title, optionalTitle = '', type = 'text', onChange = () => { }, value = '', disabled = false }) => { - const [inputValue, setInputValue] = useState(''); - - useEffect(() => { - if (value) { - setInputValue(value); - } - }, [value]); - - const changeInputHandler = event => { - setInputValue(event.target.value); - onChange(event); - } - - return ( -
- - -
- ); -} - -export default TextInput; diff --git a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput.scss b/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.jsx b/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.jsx deleted file mode 100644 index bab4c6698..000000000 --- a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -const TextInputWithExtraButton = props => { - const [state, setState] = useState({ - value: '', - previousValue: '' - }); - - useEffect(() => { - setState({ ...state, value: props.value }); - }, [props.value]); - - useEffect(() => { - setState({ ...state, value: props.value, previousValue: props.value }); - }, []); - - const changeValue = event => { - let inputValue = event.target.value; - - setState({ ...state, value: inputValue, previousValue: inputValue }); - } - - return ( -
- -
- - {props.children} -
-
- ); -} - -export default TextInputWithExtraButton; \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.scss b/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.jsx b/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.jsx deleted file mode 100644 index 1b7f9d0d6..000000000 --- a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.jsx +++ /dev/null @@ -1,36 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import './TextInputWithTextOnTheRight.scss'; - -const TextInputWithTextOnTheRight = ({ id, title, name, defaultValue = '', optionalTitle = '', disabled = false }) => { - const [inputValue, setInputValue] = useState(''); - - useEffect(() => { - if (defaultValue) { - setInputValue(defaultValue); - } - }, [defaultValue]); - - return ( -
- -
- setInputValue(event.target.value)} - disabled={disabled} - name={name} /> - {`${inputValue}`} -
-
- ); -} - -export default TextInputWithTextOnTheRight; \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.scss b/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.scss deleted file mode 100644 index 311fc502a..000000000 --- a/src/react/src/components/ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight.scss +++ /dev/null @@ -1,11 +0,0 @@ -.form-group.text-on-the-right { - .input-wrapper { - display: flex; - align-items: center; - - span { - margin-left: 15px; - color: #777; - } - } -} \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/Container/Container.jsx b/src/react/src/components/ControlPanel/Container/Container.jsx deleted file mode 100644 index 1ab24f8a3..000000000 --- a/src/react/src/components/ControlPanel/Container/Container.jsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react'; -import './Container.scss'; - -const Container = props => { - return( -
- {props.children} -
- ); -} - -export default Container; \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/Container/Container.scss b/src/react/src/components/ControlPanel/Container/Container.scss deleted file mode 100644 index 13ca12e1a..000000000 --- a/src/react/src/components/ControlPanel/Container/Container.scss +++ /dev/null @@ -1,47 +0,0 @@ -.l-col { - padding-left: 15px; -} - -.r-col { - font-size: 13px; -} - -.w-14 { - width: 14.3%; -} - -.w-20 { - width: 20%; -} - -.w-25 { - width: 25%; -} - -.w-30 { - width: 30%; -} - -.w-35 { - width: 35%; -} - -.w-40 { - width: 40%; -} - -.w-45 { - width: 45%; -} - -.w-50 { - width: 50%; -} - -.w-60 { - width: 60%; -} - -.w-85 { - width: 85%; -} \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/Hotkeys/Hotkeys.jsx b/src/react/src/components/ControlPanel/Hotkeys/Hotkeys.jsx deleted file mode 100644 index 6a8dbea6f..000000000 --- a/src/react/src/components/ControlPanel/Hotkeys/Hotkeys.jsx +++ /dev/null @@ -1,107 +0,0 @@ -import React, { useEffect } from 'react'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import './Hotkeys.scss'; -import { useSelector } from 'react-redux'; - -const Hotkeys = props => { - const { i18n } = useSelector(state => state.session); - - useEffect(() => { - window.addEventListener("keyup", toggleShortcutsLit); - - return () => window.removeEventListener("keyup", toggleShortcutsLit); - }, [props.reference]); - - const toggleShortcutsLit = event => { - let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus'); - - if (event.keyCode === 72 && !isSearchInputFocused) { - props.toggleHotkeys(); - } - } - - return ( -
-
-
{i18n.Shortcuts}
-
props.toggleHotkeys()}>
-
-
-
    -
  • - a - {i18n['Add New object']} -
  • -
  • - Ctrl + Open - {i18n['Save Form']} -
  • -
  • - Ctrl + Backspace - {i18n['Cancel saving form']} -
  • -
  • - 1 - {i18n['Go to USER list']} -
  • -
  • - 2 - {i18n['Go to WEB list']} -
  • -
  • - 3 - {i18n['Go to DNS list']} -
  • -
  • - 4 - {i18n['Go to MAIL list']} -
  • -
  • - 5 - {i18n['Go to DB list']} -
  • -
  • - 6 - {i18n['Go to CRON list']} -
  • -
  • - 7 - {i18n['Go to BACKUP list']} -
  • -
-
    -
  • - f - {i18n['Focus on search']} -
  • -
  • - h - {i18n['Display/Close shortcuts']} -
  • -
  • - - {i18n['Move backward through top menu']} -
  • -
  • - - {i18n['Move forward through top menu']} -
  • -
  • - Enter - {i18n['Enter focused element']} -
  • -
  • - - {i18n['Move up through elements list']} -
  • -
  • - - {i18n['Move down through elements list']} -
  • -
-
-
- ); -} - -export default Hotkeys; \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/Hotkeys/Hotkeys.scss b/src/react/src/components/ControlPanel/Hotkeys/Hotkeys.scss deleted file mode 100644 index 254d5b1ab..000000000 --- a/src/react/src/components/ControlPanel/Hotkeys/Hotkeys.scss +++ /dev/null @@ -1,78 +0,0 @@ -$secondary: #fcac04; - -.hotkeys-list { - position: fixed; - bottom: 0; - right: 0; - display: flex; - flex-direction: column; - transform: translateX(-45%); - width: 53%; - background: #222e44de; - font-size: 13px; - - .head { - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 1px solid $secondary; - - .name { - text-transform: uppercase; - padding: 5px 0 5px 10px; - font-size: 12px; - font-weight: bold; - color: $secondary; - letter-spacing: 2px; - padding: 15px; - } - - .close { - padding: 12px; - opacity: 1 !important; - - svg { - color: $secondary; - } - - &:hover { - cursor: pointer; - background: #222e44; - } - } - } - - .body { - display: flex; - - ul { - padding: 25px 10px; - margin: 0; - width: 50%; - list-style: none; - margin-left: 3rem; - - li { - padding: 5px; - - span.name { - margin-right: 15px; - color: $secondary; - font-weight: bold; - } - - span.description { - color: white; - } - } - - li.space-top { - padding-top: 30px; - } - } - } -} - -.hide { - display: none; -} \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/ListItem/ListItem.jsx b/src/react/src/components/ControlPanel/ListItem/ListItem.jsx deleted file mode 100644 index 8d5d1cd99..000000000 --- a/src/react/src/components/ControlPanel/ListItem/ListItem.jsx +++ /dev/null @@ -1,90 +0,0 @@ -import React, { Component, useEffect, useState } from 'react'; -import Container from '../Container/Container'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { useSelector } from 'react-redux'; -import './ListItem.scss'; - -const ListItem = (props) => { - const { i18n } = useSelector(state => state.session); - const [state, setState] = useState({ starred: false }); - - useEffect(() => { - if (props.hasOwnProperty('starred')) { - setState({ ...state, starred: Boolean(props.starred) }); - } - }, [props.starred]); - - const printDate = date => { - if (date) { - let newDate = new Date(date); - let day = newDate.getDate(); - let month = newDate.getMonth() + 1; - let year = newDate.getFullYear(); - let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - - return
{day}   {months[month - 1]}   {year}
; - } - } - - const toggleItem = () => { - props.checkItem(); - } - - const starItem = () => { - setState({ ...state, starred: !state.starred }); - props.toggleFav(!state.starred); - } - - const className = () => { - const { starred } = state; - const { checked, outdated, suspended, stopped, focused, sysInfo } = props; - let className = 'list-item'; - - if (checked) { - className += ' toggled'; - } - - if (starred) { - className += ' starred'; - } - - if (outdated) { - className += ' outdated'; - } - - if (suspended || stopped) { - className += ' suspended'; - } - - if (focused) { - className += ' focused'; - } - - if (sysInfo) { - className += ' sys-info'; - } - - return className; - } - - return ( -
- - {printDate(props.date)} -
-
- {props.leftNameText} -
-
-
-
-
- {props.suspended &&
{i18n.suspended}
} - {props.stopped &&
{i18n.stopped}
} -
- {props.children} -
- ); -} - -export default ListItem; diff --git a/src/react/src/components/ControlPanel/ListItem/ListItem.scss b/src/react/src/components/ControlPanel/ListItem/ListItem.scss deleted file mode 100644 index 850271ce1..000000000 --- a/src/react/src/components/ControlPanel/ListItem/ListItem.scss +++ /dev/null @@ -1,156 +0,0 @@ -@import 'src/utils/scss/variables'; - -.list-item { - display: flex; - justify-content: flex-start; - align-items: flex-start; - padding-left: 15px; - font-size: 18px; - position: relative; - padding: 25px 0; - border-left: 2px solid white; - border-bottom: 1px solid #ddd; - color: rgb(104, 104, 104); - - &:hover .l-col div.star div svg, - &:hover .actions { - opacity: 1; - } - - .l-col { - .suspended { - letter-spacing: 3px; - } - - .text-status { - font-size: 10px; - } - - div.star { - display: flex; - align-items: center; - - div.checkbox { - margin: 0 25% 4px 0; - } - } - } - - .r-col { - .stats { - div > span { - width: 50%; - text-align: left; - } - - .c-2 div > span { - width: 50%; - } - } - - div.bandwidth span, - div.disk span { - width: auto; - } - } - - .date { - font-size: 13px; - margin: 20px 0 10px; - } -} - -.list-item.toggled { - background: #feef9a; -} - -.list-item.starred { - border-left: 2px solid $primary; - - .l-col div.star { - div > svg { - opacity: 1; - color: $primary; - } - } -} - -.list-item.suspended { - background: #eaeaea; - color: #c0c0c0; - - .r-col div, .r-col span { - color: #c0c0c0 !important; - } -} - -.list-item.suspended.toggled { - background: #f2eab8; - color: #b2ac87; - - .l-col, - .r-col .name, - .r-col .stats { - color: #b2ac87 !important; - } -} - -.list-item.outdated { - background: #ffcaca; - border-left: 5px solid #ff6f6f; -} - -.list-item.toggled.outdated { - background: #755d5d; - color: black; - - .stat { - color: black; - } -} - -.list-item.stopped { - background: #eaeaea; -} - -.list-item.focused { - border-left: 2px solid $secondaryLight; - - .l-col div.star { - div > svg { - color: $secondaryLight; - } - } - - .actions { - opacity: 1; - - div > a, - div > button { - padding-top: 6.5px; - padding-bottom: 6.5px; - - .shortcut-button { - border-radius: 50%; - width: 25px; - height: 25px; - margin-left: 15px; - background: $secondaryLight; - color: white; - display: flex; - justify-content: center; - align-items: center; - font-size: 14px; - } - - .shortcut-button.html-unicode { - align-items: flex-end; - } - - .shortcut-button.del { - text-transform: capitalize; - font-size: 10px; - } - } - } -} \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/LoginLayout/LoginLayout.jsx b/src/react/src/components/ControlPanel/LoginLayout/LoginLayout.jsx deleted file mode 100644 index c2e5c90c1..000000000 --- a/src/react/src/components/ControlPanel/LoginLayout/LoginLayout.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; - -import '../AddItemLayout/AddItemLayout.scss'; -import './LoginLayout.scss'; - -const LoginLayout = ({ children }) => { - return ( -
- {children} -
- ); -} - -export default LoginLayout; \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/LoginLayout/LoginLayout.scss b/src/react/src/components/ControlPanel/LoginLayout/LoginLayout.scss deleted file mode 100644 index f7bcbe6a1..000000000 --- a/src/react/src/components/ControlPanel/LoginLayout/LoginLayout.scss +++ /dev/null @@ -1,4 +0,0 @@ -.login-layout { - margin-top: 1rem; - padding: 2rem 3rem; -} \ No newline at end of file diff --git a/src/react/src/components/ControlPanel/Modal/Modal.jsx b/src/react/src/components/ControlPanel/Modal/Modal.jsx deleted file mode 100644 index 0947a11c7..000000000 --- a/src/react/src/components/ControlPanel/Modal/Modal.jsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from 'react'; -import { useSelector } from 'react-redux'; -import './Modal.scss'; - -const Modal = ({ show, text, onSave, onCancel, showSaveButton = true, showCancelButton = true }) => { - const { i18n } = useSelector(state => state.session); - - return ( -
- -
- ) -}; - -export default Modal; diff --git a/src/react/src/components/ControlPanel/Modal/Modal.scss b/src/react/src/components/ControlPanel/Modal/Modal.scss deleted file mode 100644 index fb42315a4..000000000 --- a/src/react/src/components/ControlPanel/Modal/Modal.scss +++ /dev/null @@ -1,20 +0,0 @@ -@import 'src/utils/scss/variables'; - -div.modal { - z-index: 2; -} - -div.content .modal .modal-content { - width: 75%; - - .modal-header button.close { - color: white; - } - - .modal-footer { - .btn-primary { - background: $primary; - border: 1px solid $primary; - } - } -} diff --git a/src/react/src/components/CronJob/Add/AddCronJob.jsx b/src/react/src/components/CronJob/Add/AddCronJob.jsx deleted file mode 100644 index e9d52c12c..000000000 --- a/src/react/src/components/CronJob/Add/AddCronJob.jsx +++ /dev/null @@ -1,199 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { addCronJob } from '../../../ControlPanelService/Cron'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import Generator from '../Generator/Generator'; -import { useHistory } from 'react-router-dom'; -import Spinner from '../../Spinner/Spinner'; -import { useDispatch, useSelector } from 'react-redux'; - -import './AddCronJob.scss'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const AddCronJob = props => { - const { i18n } = useSelector(state => state.session); - const token = localStorage.getItem("token"); - const history = useHistory(); - const dispatch = useDispatch(); - const [state, setState] = useState({ - loading: false, - okMessage: '', - errorMessage: '', - generatedCronJob: { - h_min: '*', - h_hour: '*', - h_day: '*', - h_wday: '*', - h_month: '*' - } - }); - - useEffect(() => { - dispatch(addActiveElement('/list/cron/')); - dispatch(removeFocusedElement()); - }, []); - - const submitFormHandler = event => { - event.preventDefault(); - let newCronJob = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - newCronJob[name] = value; - } - - if (Object.keys(newCronJob).length !== 0 && newCronJob.constructor === Object) { - setState({ ...state, loading: true }); - addCronJob(newCronJob) - .then(result => { - if (result.status === 200) { - const { error_msg: errorMessage, ok_msg: okMessage } = result.data; - - if (errorMessage) { - setState({ ...state, errorMessage, okMessage, loading: false }); - } else { - dispatch(refreshCounters()).then(() => { - setState({ ...state, okMessage, errorMessage: '', loading: false }); - }); - } - } - }) - .catch(err => console.error(err)); - } - } - - const saveGeneratedCronJob = generatedCronJob => { - setState({ - ...state, - generatedCronJob - }); - } - - const changeInput = input => { - let updatedGeneratedCronJob = { - ...state.generatedCronJob, - [input.id]: input.value - }; - - setState({ - ...state, - generatedCronJob: updatedGeneratedCronJob - }); - } - - return ( -
- - {`Vesta - ${i18n.CRON}`} - - -
-
{i18n['Adding Cron Job']}
-
- - {state.errorMessage ? : ''} - {state.errorMessage} -
-
- - {state.okMessage ? : ''} - {HtmlParser(state.okMessage)} - -
-
- - {state.loading ? : ( - submitFormHandler(event)}> - - - -
- - -
- -
- -
-
- - changeInput(event.target)} - value={state.generatedCronJob.h_min} - name="v_min" /> -
- -
- - changeInput(event.target)} - value={state.generatedCronJob.h_hour} - name="v_hour" /> -
- -
- - changeInput(event.target)} - value={state.generatedCronJob.h_day} - name="v_day" /> -
- -
- - changeInput(event.target)} - value={state.generatedCronJob.h_month} - name="v_month" /> -
- -
- - changeInput(event.target)} - value={state.generatedCronJob.h_wday} - name="v_wday" /> -
-
- -
- -
- -
- -
- - -
- - )} -
-
- ); -} - -export default AddCronJob; \ No newline at end of file diff --git a/src/react/src/components/CronJob/Add/AddCronJob.scss b/src/react/src/components/CronJob/Add/AddCronJob.scss deleted file mode 100644 index d96fdf014..000000000 --- a/src/react/src/components/CronJob/Add/AddCronJob.scss +++ /dev/null @@ -1,31 +0,0 @@ -.edit-template.add-cron { - form { - .form-group { - width: 100%; - - input { - width: inherit; - } - } - - .form-group.command { - width: 100%; - } - - .cron-form-body { - display: flex; - - .body-col-1 { - width: 30%; - } - - .body-col-2 { - display: flex; - justify-content: flex-start; - align-items: flex-start; - padding: 1.7rem 1rem; - width: 70%; - } - } - } -} \ No newline at end of file diff --git a/src/react/src/components/CronJob/CronJob.jsx b/src/react/src/components/CronJob/CronJob.jsx deleted file mode 100644 index 0d4c8099d..000000000 --- a/src/react/src/components/CronJob/CronJob.jsx +++ /dev/null @@ -1,96 +0,0 @@ -import React from 'react'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import ListItem from '../ControlPanel/ListItem/ListItem'; -import Container from '../ControlPanel/Container/Container'; -import './CronJob.scss'; -import { Link } from 'react-router-dom'; -import { useSelector } from 'react-redux'; - -const CronJob = props => { - const { data } = props; - const { i18n } = useSelector(state => state.session); - const token = localStorage.getItem("token"); - - const toggleFav = (starred) => { - if (starred) { - props.toggleFav(props.data.NAME, 'add'); - } else { - props.toggleFav(props.data.NAME, 'delete'); - } - } - - const checkItem = () => { - props.checkItem(props.data.NAME); - } - - const handleSuspend = () => { - let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend'; - props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/cron/index.php?job=${data.NAME}`); - } - - const handleDelete = () => { - props.handleModal(data.delete_conf, `/api/v1/delete/cron/index.php?job=${data.NAME}`); - } - - return ( - - - -
{data.CMD}
-
- -
{i18n.Min} {data.MIN}
-
- -
{i18n.Hour} {data.HOUR}
-
- -
{i18n.Day} {data.DAY}
-
- -
{i18n.Month} {data.MONTH}
-
- -
{i18n['Day of week']} {data.WDAY}
-
-
-
-
- -
- - {i18n.edit} - {data.FOCUSED ? : } - -
- -
- -
- -
- -
- -
-
- ); -} - -export default CronJob; \ No newline at end of file diff --git a/src/react/src/components/CronJob/CronJob.scss b/src/react/src/components/CronJob/CronJob.scss deleted file mode 100644 index 4c4f86c20..000000000 --- a/src/react/src/components/CronJob/CronJob.scss +++ /dev/null @@ -1,13 +0,0 @@ -.cron-jobs-list.r-col .name { - font-size: 25px; -} - -.cron-col > div { - display: flex; - flex-direction: column; - - span { - font-size: 18px; - font-weight: bolder; - } -} \ No newline at end of file diff --git a/src/react/src/components/CronJob/Edit/EditCronJob.jsx b/src/react/src/components/CronJob/Edit/EditCronJob.jsx deleted file mode 100644 index 87ba1fed9..000000000 --- a/src/react/src/components/CronJob/Edit/EditCronJob.jsx +++ /dev/null @@ -1,209 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import { getCronJobInfo, updateCronJob } from '../../../ControlPanelService/Cron'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Spinner from '../../../components/Spinner/Spinner'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import Generator from '../Generator/Generator'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import QS from 'qs'; - -import './EditCronJob.scss'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const EditMail = props => { - const token = localStorage.getItem("token"); - const { i18n } = useSelector(state => state.session); - const history = useHistory(); - const dispatch = useDispatch(); - const [errorMessage, setErrorMessage] = useState(''); - const [okMessage, setOkMessage] = useState(''); - const [state, setState] = useState({ - data: {}, - loading: false, - generatedCronJob: { - h_min: '*', - h_hour: '*', - h_day: '*', - h_wday: '*', - h_month: '*' - } - }); - - useEffect(() => { - let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true }); - const { job } = queryParams; - - dispatch(addActiveElement('/list/cron/')); - dispatch(removeFocusedElement()); - - if (job) { - setState({ ...state, loading: true }); - fetchData(job) - } - }, []); - - const fetchData = job => { - getCronJobInfo(job) - .then(response => { - setState({ - ...state, - generatedCronJob: { - ...state.generatedCronJob, - h_min: response.data.min, - h_hour: response.data.hour, - h_day: response.data.day, - h_wday: response.data.wday, - h_month: response.data.month - }, - data: response.data, - loading: false - }); - }) - .catch(err => { - setState({ ...state, loading: false }); - console.error(err); - }); - } - - const submitFormHandler = event => { - event.preventDefault(); - let updatedJob = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - updatedJob[name] = value; - } - - if (Object.keys(updatedJob).length !== 0 && updatedJob.constructor === Object) { - setState({ ...state, loading: true }); - - updateCronJob(updatedJob, state.data.job) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - if (error_msg) { - setOkMessage(''); - setErrorMessage(error_msg); - } else { - dispatch(refreshCounters()).then(() => { - setOkMessage(ok_msg); - setErrorMessage(''); - }); - } - } - }) - .then(() => fetchData(state.data.job)) - .catch(err => console.error(err)); - } - } - - const saveGeneratedCronJob = generatedCronJob => { - setState({ - ...state, - generatedCronJob - }); - } - - const changeInput = input => { - let updatedGeneratedCronJob = { - ...state.generatedCronJob, - [input.id]: input.value - }; - - setState({ - ...state, - generatedCronJob: updatedGeneratedCronJob - }); - } - - return ( -
- - {`Vesta - ${i18n.CRON}`} - - -
-
{i18n['Editing Cron Job']}
-
- - {errorMessage ? : ''} {errorMessage} - -
-
- - {okMessage ? : ''} {HtmlParser(okMessage)} - -
-
- - {state.loading ? : -
submitFormHandler(event)} id="edit-cron"> - - - - - -
- -
- - - - - - - - - -
- -
- -
- -
- -
- - -
- - - } -
-
- ); -} - -export default EditMail; \ No newline at end of file diff --git a/src/react/src/components/CronJob/Edit/EditCronJob.scss b/src/react/src/components/CronJob/Edit/EditCronJob.scss deleted file mode 100644 index 53a774ad6..000000000 --- a/src/react/src/components/CronJob/Edit/EditCronJob.scss +++ /dev/null @@ -1,39 +0,0 @@ -.edit-cron { - form { - .form-group { - width: 100%; - - input { - width: inherit; - } - } - - .form-group.command { - width: 100%; - } - - .cron-form-body { - display: flex; - - .body-col-1 { - width: 30%; - - input { - width: 100%; - } - } - - .body-col-2 { - display: flex; - justify-content: flex-start; - align-items: flex-start; - padding: 1.7rem 1rem; - width: 70%; - } - } - } -} - -#edit-cron > .form-group input { - width: 95% !important; -} \ No newline at end of file diff --git a/src/react/src/components/CronJob/Generator/Generator.jsx b/src/react/src/components/CronJob/Generator/Generator.jsx deleted file mode 100644 index a70dc4a31..000000000 --- a/src/react/src/components/CronJob/Generator/Generator.jsx +++ /dev/null @@ -1,75 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; - -import RunCommandSelect from './RunCommandSelect/RunCommandSelect'; -import SelectsWrapper from './OtherSelects/SelectsWrapper'; -import { Link, useHistory } from 'react-router-dom'; -import QS from 'qs'; - -import './Generator.scss'; -import { useSelector } from 'react-redux'; - -const Generator = props => { - const formElement = useRef(null); - const { i18n } = useSelector(state => state.session); - const history = useHistory(); - const [state, setState] = useState({ - activeTab: '1' - }); - - useEffect(() => { - let parsedQuery = QS.parse(history.location.search, { ignoreQueryPrefix: true }); - let activeTab = parsedQuery.activeTab || '1'; - - setState({ ...state, activeTab }); - }, [history.location.search]); - - const activeClassName = tab => { - return state.activeTab === tab ? 'active' : ''; - } - - const emulateFormSubmit = () => { - let generatedCronJob = {}; - - for (let i = 0; i <= 4; i++) { - let iterableFormElement = formElement.current[i]; - - generatedCronJob[iterableFormElement.name] = iterableFormElement.value; - } - - props.generatedCronJob(generatedCronJob); - } - - const formatLink = tab => { - const { job, mode } = props; - - return `/${mode}/cron/?${!!job ? `job=${job}&` : ''}activeTab=${tab}`; - } - - return ( -
-
- {i18n.Minutes} - {i18n.Hourly} - {i18n.Daily} - {i18n.Weekly} - {i18n.Monthly} -
- -
- -
- - - - -
- -
- - -
-
- ); -} - -export default Generator; \ No newline at end of file diff --git a/src/react/src/components/CronJob/Generator/Generator.scss b/src/react/src/components/CronJob/Generator/Generator.scss deleted file mode 100644 index c8dde332b..000000000 --- a/src/react/src/components/CronJob/Generator/Generator.scss +++ /dev/null @@ -1,110 +0,0 @@ -@import 'src/utils/scss/variables'; - -.cron-job-generator { - border: 1px solid #d9d9d9; - padding: 1rem 1.5rem; - margin-left: 2rem; - width: 90%; - - .header { - display: flex; - padding: .4rem 0; - - a { - color: #222222; - text-transform: uppercase; - font-size: 11px; - font-weight: bolder; - margin-right: 2.3rem; - text-decoration: none; - - &:hover { - color: $secondaryLight; - } - - &:active { - color: $primaryActive; - } - } - - a.active { - color: $secondaryActive; - } - } - - .body { - padding: 2rem 0 .4rem; - - form { - - .form-group { - display: flex; - align-items: center; - - label { - width: 26%; - font-size: 13px; - margin: 0; - } - - input { - width: auto; - } - } - - .form-group.minute select { - width: 70px; - } - - .form-group select, - .form-group textarea { - border-radius: 0; - - &:hover { - border-color: #909090; - } - - &:focus, - &:active { - outline: none; - border-color: $primaryActive; - box-shadow: unset; - } - } - - .form-group select { - padding: .4rem .25rem; - border-color: #d9d9d9; - color: #555; - } - - .form-actions { - button { - background: $primary; - color: white; - border-radius: 3px; - padding: .35rem 1.1rem; - font-size: 14px; - - &:hover { - color: $hoverButtonText; - background: $primaryLight; - } - - &:active { - color: $activeButtonText; - background: $primaryActive; - } - } - } - - .form-group.show { - display: block; - } - - .form-group.hide { - display: none; - } - } - } -} \ No newline at end of file diff --git a/src/react/src/components/CronJob/Generator/OtherSelects/FifthTabSelects.jsx b/src/react/src/components/CronJob/Generator/OtherSelects/FifthTabSelects.jsx deleted file mode 100644 index 82c3036c0..000000000 --- a/src/react/src/components/CronJob/Generator/OtherSelects/FifthTabSelects.jsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from 'react'; -import { useSelector } from 'react-redux'; -import { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions'; - -export default function FifthTabSelects() { - const { i18n } = useSelector(state => state.session); - const { dailyMinutesOptions, hoursOptions, dateOptions } = generatorOptions(i18n); - - const renderDate = () => { - return dateOptions.map((option, index) => ); - } - - const renderHours = () => { - return hoursOptions.map((option, index) => ); - } - - const renderMinutes = () => { - return dailyMinutesOptions.map((option, index) => ); - } - - return ( -
- - -
- - -
- -
- - -
- -
- - -
-
- ); -} \ No newline at end of file diff --git a/src/react/src/components/CronJob/Generator/OtherSelects/FourthTabSelects.jsx b/src/react/src/components/CronJob/Generator/OtherSelects/FourthTabSelects.jsx deleted file mode 100644 index 6b713e2af..000000000 --- a/src/react/src/components/CronJob/Generator/OtherSelects/FourthTabSelects.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import { useSelector } from 'react-redux'; -import { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions'; - -export default function FourthTabSelects() { - const { i18n } = useSelector(state => state.session); - const { dailyMinutesOptions, hoursOptions } = generatorOptions(i18n); - - const renderHours = () => { - return hoursOptions.map((option, index) => ); - } - - const renderMinutes = () => { - return dailyMinutesOptions.map((option, index) => ); - } - - return ( -
- - - -
- - -
- -
- - -
-
- ); -} \ No newline at end of file diff --git a/src/react/src/components/CronJob/Generator/OtherSelects/SecondTabSelects.jsx b/src/react/src/components/CronJob/Generator/OtherSelects/SecondTabSelects.jsx deleted file mode 100644 index 589afbfe2..000000000 --- a/src/react/src/components/CronJob/Generator/OtherSelects/SecondTabSelects.jsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import { useSelector } from 'react-redux'; -import { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions'; - -export default function SecondTabSelects() { - const { i18n } = useSelector(state => state.session); - const { hourlyMinutesOptions } = generatorOptions(i18n); - - const renderOptions = () => { - return hourlyMinutesOptions.map((option, index) => ); - } - - return ( -
- - - - -
- - -
-
- ); -} \ No newline at end of file diff --git a/src/react/src/components/CronJob/Generator/OtherSelects/SelectsWrapper.jsx b/src/react/src/components/CronJob/Generator/OtherSelects/SelectsWrapper.jsx deleted file mode 100644 index 7d66054f6..000000000 --- a/src/react/src/components/CronJob/Generator/OtherSelects/SelectsWrapper.jsx +++ /dev/null @@ -1,44 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import SecondTabSelects from './SecondTabSelects'; -import ThirdTabSelects from './ThirdTabSelects'; -import FourthTabSelects from './FourthTabSelects'; -import FifthTabSelects from './FifthTabSelects'; - -import './SelectsWrapper.scss'; - -const OtherSelects = props => { - const [state, setState] = useState({ - activeTab: '' - }); - - useEffect(() => { - setState({ ...state, activeTab: props.activeTab }); - }, [props.activeTab]); - - const renderSelects = () => { - switch (state.activeTab) { - case '1': return ( -
- - - - -
- ) - case '2': return ; - case '3': return ; - case '4': return ; - case '5': return ; - default: break; - } - } - - return ( -
- {renderSelects()} -
- ); -} - -export default OtherSelects; diff --git a/src/react/src/components/CronJob/Generator/OtherSelects/SelectsWrapper.scss b/src/react/src/components/CronJob/Generator/OtherSelects/SelectsWrapper.scss deleted file mode 100644 index 05812b215..000000000 --- a/src/react/src/components/CronJob/Generator/OtherSelects/SelectsWrapper.scss +++ /dev/null @@ -1,60 +0,0 @@ -.cron-form-body { - .third-tab-selects, - .fourth-tab-selects { - display: flex; - - div.hour { - select { - width: 70px; - margin-left: 4.8rem; - } - } - - div.minute { - label { - margin: 0; - } - - select { - margin: 0; - } - } - } - - .fifth-tab-selects { - display: flex; - - > div { - width: 10%; - - select { - width: 70px; - } - } - - > div.date { - margin: 0 0 1rem 0; - } - - > div.minute { - width: 200px; - } - - > div.hour { - width: 155px; - margin-left: 1rem; - - select { - margin-left: .75rem; - } - } - - > div.date { - width: 240px; - - select { - margin-left: 5.85rem; - } - } - } -} \ No newline at end of file diff --git a/src/react/src/components/CronJob/Generator/OtherSelects/ThirdTabSelects.jsx b/src/react/src/components/CronJob/Generator/OtherSelects/ThirdTabSelects.jsx deleted file mode 100644 index 69d73fd62..000000000 --- a/src/react/src/components/CronJob/Generator/OtherSelects/ThirdTabSelects.jsx +++ /dev/null @@ -1,37 +0,0 @@ -import React from 'react'; -import { useSelector } from 'react-redux'; -import { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions'; - -export default function ThirdTabSelects() { - const { i18n } = useSelector(state => state.session); - const { dailyMinutesOptions, hoursOptions } = generatorOptions(i18n); - - const renderHours = () => { - return hoursOptions.map((option, index) => ); - } - - const renderOptions = () => { - return dailyMinutesOptions.map((option, index) => ); - } - - return ( -
- - - -
- - -
- -
- - -
-
- ); -} \ No newline at end of file diff --git a/src/react/src/components/CronJob/Generator/RunCommandSelect/RunCommandSelect.jsx b/src/react/src/components/CronJob/Generator/RunCommandSelect/RunCommandSelect.jsx deleted file mode 100644 index a79cb54d0..000000000 --- a/src/react/src/components/CronJob/Generator/RunCommandSelect/RunCommandSelect.jsx +++ /dev/null @@ -1,50 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { useSelector } from 'react-redux'; -import { generatorOptions } from '../../../../ControlPanelService/GeneratorOptions'; - -const RunCommandSelect = props => { - const { i18n } = useSelector(state => state.session); - - const [state, setState] = useState({ - activeTab: '' - }); - - useEffect(() => { - setState({ ...state, activeTab: props.activeTab }); - }, [props]); - - const renderOptions = () => { - const { daysRunCommandsOptions, hoursRunCommandsOptions, minutesRunCommandsOptions, monthlyRunCommandOptions, weeklyRunCommandOptions } = generatorOptions(i18n); - - switch (state.activeTab) { - case '1': return minutesRunCommandsOptions.map(option => ); - case '2': return hoursRunCommandsOptions.map(option => ); - case '3': return daysRunCommandsOptions.map(option => ); - case '4': return weeklyRunCommandOptions.map(option => ); - case '5': return monthlyRunCommandOptions.map(option => ); - default: break; - } - } - - const selectName = () => { - switch (state.activeTab) { - case '1': return 'h_min'; - case '2': return 'h_hour'; - case '3': return 'h_day'; - case '4': return 'h_wday'; - case '5': return 'h_month'; - default: break; - } - } - - return ( -
- - -
- ); -} - -export default RunCommandSelect; \ No newline at end of file diff --git a/src/react/src/components/CronJob/Generator/RunCommandSelect/RunCommandSelect.scss b/src/react/src/components/CronJob/Generator/RunCommandSelect/RunCommandSelect.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/react/src/components/DNSRecord/Add/AddDNSRecord.jsx b/src/react/src/components/DNSRecord/Add/AddDNSRecord.jsx deleted file mode 100644 index 084a7b580..000000000 --- a/src/react/src/components/DNSRecord/Add/AddDNSRecord.jsx +++ /dev/null @@ -1,145 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput'; -import TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { addDomainNameSystemRecord } from '../../../ControlPanelService/Dns'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import Spinner from '../../Spinner/Spinner'; -import { useDispatch, useSelector } from 'react-redux'; - -import './AddDNSRecord.scss' -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -export default function AddDNSRecord(props) { - const { i18n } = useSelector(state => state.session); - const dispatch = useDispatch(); - const token = localStorage.getItem("token"); - const history = useHistory(); - const [state, setState] = useState({ - data: {}, - selectOptions: [ - 'A', - 'AAAA', - 'NS', - 'CNAME', - 'MX', - 'TXT', - 'SRV', - 'DNSKEY', - 'KEY', - 'IPSECKEY', - 'PTR', - 'SPF', - 'TLSA', - 'CAA' - ], - loading: false, - okMessage: '', - errorMessage: '', - }); - - useEffect(() => { - dispatch(addActiveElement(`/list/dns/`)); - dispatch(removeFocusedElement()); - }, []); - - const submitFormHandler = event => { - event.preventDefault(); - let newDnsRecord = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - newDnsRecord[name] = value; - } - - newDnsRecord['ok_rec'] = 'add'; - newDnsRecord['token'] = token; - newDnsRecord['v_domain'] = props.domain; - - if (Object.keys(newDnsRecord).length !== 0 && newDnsRecord.constructor === Object) { - setState({ ...state, loading: true }); - addDomainNameSystemRecord(newDnsRecord) - .then(result => { - if (result.status === 200) { - const { error_msg: errorMessage, ok_msg: okMessage } = result.data; - - if (errorMessage) { - setState({ ...state, errorMessage, okMessage, loading: false }); - } else { - dispatch(refreshCounters()).then(() => { - setState({ ...state, okMessage, errorMessage: '', loading: false }); - }); - } - } - }) - .catch(err => console.error(err)); - } - } - - return ( -
- - {`Vesta - ${i18n.DNS}`} - - -
-
{i18n['Adding DNS Record']}
-
- - {state.errorMessage ? : ''} - {state.errorMessage} -
-
- - {state.okMessage ? : ''} - {HtmlParser(state.okMessage)} - -
-
- - {state.loading ? : ( -
submitFormHandler(event)}> - - - - - - - - - - -
- - -
- - )} -
-
- ); -} \ No newline at end of file diff --git a/src/react/src/components/DNSRecord/Add/AddDNSRecord.scss b/src/react/src/components/DNSRecord/Add/AddDNSRecord.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/react/src/components/DNSRecord/DNSRecord.jsx b/src/react/src/components/DNSRecord/DNSRecord.jsx deleted file mode 100644 index 11170ad8b..000000000 --- a/src/react/src/components/DNSRecord/DNSRecord.jsx +++ /dev/null @@ -1,86 +0,0 @@ -import React from 'react'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Container from '../ControlPanel/Container/Container'; -import ListItem from '../ControlPanel/ListItem/ListItem'; -import { Link } from 'react-router-dom'; -import { useSelector } from 'react-redux'; - -export default function DnsRecord({ data, domain, handleModal, ...props }) { - const { i18n } = useSelector(state => state.session); - - const toggleFav = (starred) => { - if (starred) { - props.toggleFav(data.NAME, 'add'); - } else { - props.toggleFav(data.NAME, 'delete'); - } - } - - const checkItem = () => { - props.checkItem(data.NAME); - } - - const handleDelete = () => { - handleModal(data.delete_conf, `/api/v1/delete/dns/?domain=${domain}&record_id=${data.ID}`); - } - - const handleSuspend = () => { - handleModal(data.suspend_conf, `/api/v1/${data.suspend_action}/dns/?domain=${domain}&record_id=${data.ID}`); - } - - return ( - - - -
{data.dnsRecord}
-
-
- - {`${data.RECORD.substring(0, 12)}${data.RECORD.length > 12 ? '...' : ''}`} - - - {data.TYPE} - - - {data.PRIORITY} - - - {data.VALUE} - -
-
-
-
- - {i18n.edit} - {data.FOCUSED ? : } - -
- -
- -
- -
- -
-
-
- ); -} \ No newline at end of file diff --git a/src/react/src/components/DNSRecord/DNSRecord.scss b/src/react/src/components/DNSRecord/DNSRecord.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/react/src/components/DNSRecord/Edit/EditDNSRecord.jsx b/src/react/src/components/DNSRecord/Edit/EditDNSRecord.jsx deleted file mode 100644 index 0df612db9..000000000 --- a/src/react/src/components/DNSRecord/Edit/EditDNSRecord.jsx +++ /dev/null @@ -1,182 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import SelectInput from 'src/components/ControlPanel/AddItemLayout/Form/SelectInput/SelectInput'; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { updateDNS, getDNSRecordInfo } from 'src/ControlPanelService/Dns'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Spinner from '../../../components/Spinner/Spinner'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import QS from 'qs'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -export default function EditDNSRecord(props) { - const token = localStorage.getItem("token"); - const { i18n } = useSelector(state => state.session); - const dispatch = useDispatch(); - const history = useHistory(); - const [errorMessage, setErrorMessage] = useState(''); - const [okMessage, setOkMessage] = useState(''); - const [state, setState] = useState({ - data: {}, - selectOptions: [ - 'A', - 'AAAA', - 'NS', - 'CNAME', - 'MX', - 'TXT', - 'SRV', - 'DNSKEY', - 'KEY', - 'IPSECKEY', - 'PTR', - 'SPF', - 'TLSA', - 'CAA' - ], - loading: false - }); - - useEffect(() => { - const { domain, record_id } = props; - - dispatch(addActiveElement('/list/dns/')); - dispatch(removeFocusedElement()); - - if (domain && record_id) { - setState({ ...state, loading: true }); - fetchData(domain, record_id); - } - }, []); - - const fetchData = (domain, record_id) => { - getDNSRecordInfo(domain, record_id) - .then(response => { - setState({ - ...state, - data: response.data, - loading: false - }); - }) - .catch(err => console.error(err)); - } - - const submitFormHandler = event => { - event.preventDefault(); - let updatedRecord = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - updatedRecord[name] = value; - } - - updatedRecord['v_domain'] = state.data.domain; - updatedRecord['v_record_id'] = props.record_id; - updatedRecord['v_type'] = state.data.type; - - if (Object.keys(updatedRecord).length !== 0 && updatedRecord.constructor === Object) { - setState({ ...state, loading: true }); - - updateDNS(updatedRecord, props.domain, props.record_id) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - if (error_msg) { - setOkMessage(''); - setErrorMessage(error_msg); - } else { - dispatch(refreshCounters()).then(() => { - setOkMessage(ok_msg); - setErrorMessage(''); - }); - } - } - }) - .then(() => fetchData(props.domain, props.record_id)) - .catch(err => console.error(err)); - } - } - - return ( -
- - {`Vesta - ${i18n.DNS}`} - - -
-
{i18n['Editing DNS Record']}
-
- - {errorMessage ? : ''} {errorMessage} - -
-
- - {okMessage ? : ''} {HtmlParser(okMessage)} - -
-
- - {state.loading ? : -
submitFormHandler(event)} id="edit-dns-rec"> - - - - - - - - - - - - - - - -
- - -
- - - } -
-
- ); -} \ No newline at end of file diff --git a/src/react/src/components/Database/Add/AddDatabase.jsx b/src/react/src/components/Database/Add/AddDatabase.jsx deleted file mode 100644 index 31ae1b7cf..000000000 --- a/src/react/src/components/Database/Add/AddDatabase.jsx +++ /dev/null @@ -1,220 +0,0 @@ -import React, { memo, useEffect, useState } from 'react'; - -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import { dbCharsets, addDatabase, getDbOptionalInfo } from '../../../ControlPanelService/Db'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import Password from '../../ControlPanel/AddItemLayout/Form/Password/Password'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import Spinner from '../../Spinner/Spinner'; -import { useDispatch, useSelector } from 'react-redux'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; -import './AddDatabase.scss' - -const AddDatabase = memo(props => { - const { i18n } = useSelector(state => state.session); - const token = localStorage.getItem("token"); - const dispatch = useDispatch(); - const history = useHistory(); - const [state, setState] = useState({ - loading: false, - okMessage: '', - errorMessage: '', - dbTypes: [], - dbHosts: [], - dbCharsets: [], - user: '', - maxCharLength: '', - databaseInputValue: '', - databaseUserInputValue: '', - prefixI18N: '' - }); - - useEffect(() => { - dispatch(addActiveElement('/list/db/')); - dispatch(removeFocusedElement()); - - setState({ ...state, loading: true }); - - getDbOptionalInfo() - .then(result => { - if (result.status === 200) { - setState({ - ...state, - dbCharsets, - user: result.data.user, - dbTypes: result.data.dbTypes, - prefixI18N: result.data.prefixI18N, - maxCharLength: result.data.maxCharLength, - dbHosts: result.data.dbHosts, - loading: false - }); - } - }) - .catch(err => console.err(err)); - }, []); - - const renderDatabaseTypesOptions = () => { - return state.dbTypes.map((dbType, index) => ) - } - - const renderDatabaseHostsOptions = () => { - return state.dbHosts.map((dbHost, index) => ) - } - - const renderDatabaseCharsetOptions = () => { - return state.dbCharsets.map((dbCharset, index) => - - ); - } - - const databaseUserInputHandler = value => { - setState({ ...state, databaseUserInputValue: value }); - } - - const databaseInputHandler = value => { - setState({ ...state, databaseInputValue: value }); - } - - const submitFormHandler = event => { - event.preventDefault(); - let newDatabase = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - newDatabase[name] = value; - } - - newDatabase['v_database'] = state.databaseInputValue; - newDatabase['v_dbuser'] = state.databaseUserInputValue; - - if (Object.keys(newDatabase).length !== 0 && newDatabase.constructor === Object) { - setState({ ...state, loading: true }); - addDatabase(newDatabase) - .then(result => { - if (result.status === 200) { - const { error_msg: errorMessage, ok_msg: okMessage } = result.data; - - if (errorMessage) { - setState({ ...state, errorMessage, okMessage: '', loading: false }); - } else { - dispatch(refreshCounters()).then(() => { - setState({ ...state, okMessage, errorMessage: '', loading: false }); - }); - } - } - }) - .catch(err => console.error(err)); - } - } - - return ( -
- - {`Vesta - ${i18n.DB}`} - - -
-
{i18n['Adding database']}
-
- - {state.errorMessage ? : ''} - {state.errorMessage} -
-
- - {state.okMessage ? : ''} - {HtmlParser(state.okMessage)} - -
-
- - {state.loading ? : ( -
submitFormHandler(event)}> - - - - {HtmlParser(state.prefixI18N)} - -
- -
- databaseInputHandler(event.target.value)} - value={state.databaseInputValue} - name="v_database" /> - {`${state.user}_${state.databaseInputValue}`} -
-
- -
-
- - ({state.maxCharLength}) -
-
- databaseUserInputHandler(event.target.value)} - name="v_dbuser" /> - {`${state.user}_${state.databaseUserInputValue}`} -
-
- - - -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- - )} -
-
- ); -}); - -export default AddDatabase; diff --git a/src/react/src/components/Database/Add/AddDatabase.scss b/src/react/src/components/Database/Add/AddDatabase.scss deleted file mode 100644 index ff9bf4f2b..000000000 --- a/src/react/src/components/Database/Add/AddDatabase.scss +++ /dev/null @@ -1,45 +0,0 @@ -.edit-template.add-db { - form { - span.italic { - font-style: italic; - } - - .form-group { - .label-wrapper { - display: flex; - - span.italic { - margin-left: 1.5rem; - color: #555; - } - } - - .input-wrapper { - display: flex; - align-items: center; - - span.italic { - font-size: 15px; - font-weight: bold; - margin-left: 1.5rem; - color: #777; - } - } - - .input-wrapper { - span.italic { - font-weight: normal; - } - } - } - - .form-group.database { - margin-top: 1rem; - } - - span.prefix { - color: #777; - font-style: italic; - } - } -} \ No newline at end of file diff --git a/src/react/src/components/Database/Database.jsx b/src/react/src/components/Database/Database.jsx deleted file mode 100644 index 91e7aa641..000000000 --- a/src/react/src/components/Database/Database.jsx +++ /dev/null @@ -1,93 +0,0 @@ -import React from 'react'; -import ListItem from '../ControlPanel/ListItem/ListItem'; -import Container from '../ControlPanel/Container/Container'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { Link } from 'react-router-dom'; -import { useSelector } from 'react-redux'; - -const Database = props => { - const { data } = props; - const { i18n } = useSelector(state => state.session); - const token = localStorage.getItem("token"); - - const toggleFav = (starred) => { - if (starred) { - props.toggleFav(data.NAME, 'add'); - } else { - props.toggleFav(data.NAME, 'delete'); - } - } - - const checkItem = () => { - props.checkItem(data.NAME); - } - - const handleSuspend = () => { - let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend'; - props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/db/index.php?database=${data.NAME}`); - } - - const handleDelete = () => { - props.handleModal(data.delete_conf, `/api/v1/delete/db/index.php?database=${data.NAME}`); - } - - return ( - - - -
{data.DATABASE}
-
-
- -
- {i18n.Disk}: {data.U_DISK}{i18n.mb} -
-
-
- -
{i18n.User}: {data.DBUSER}
-
{i18n.Charset}: {data.CHARSET}
-
- -
{i18n.Host}: {data.HOST}
-
{i18n.Type}: {data.TYPE}
-
-
-
-
-
- - {i18n.edit} - {data.FOCUSED ? : } - -
- -
- -
- -
- -
-
-
- ); -} - -export default Database; \ No newline at end of file diff --git a/src/react/src/components/Database/Database.scss b/src/react/src/components/Database/Database.scss deleted file mode 100644 index 506b04e72..000000000 --- a/src/react/src/components/Database/Database.scss +++ /dev/null @@ -1,3 +0,0 @@ -.r-col .c-2.w-45 { - margin: 15px 1rem 0 5rem; -} \ No newline at end of file diff --git a/src/react/src/components/Database/Edit/EditDatabase.jsx b/src/react/src/components/Database/Edit/EditDatabase.jsx deleted file mode 100644 index 1a8499574..000000000 --- a/src/react/src/components/Database/Edit/EditDatabase.jsx +++ /dev/null @@ -1,164 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import TextInputWithTextOnTheRight from '../../ControlPanel/AddItemLayout/Form/TextInputWithTextOnTheRight/TextInputWithTextOnTheRight'; -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import { getDatabaseInfo, updateDatabase } from '../../../ControlPanelService/Db'; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import Password from '../../ControlPanel/AddItemLayout/Form/Password/Password'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Spinner from '../../../components/Spinner/Spinner'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import QS from 'qs'; - -import './EditDatabase.scss'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const EditDatabase = props => { - const token = localStorage.getItem("token"); - const { i18n, userName } = useSelector(state => state.session); - const history = useHistory(); - const dispatch = useDispatch(); - const [errorMessage, setErrorMessage] = useState(''); - const [okMessage, setOkMessage] = useState(''); - const [state, setState] = useState({ - data: {}, - loading: false, - databaseUserInputValue: '' - }); - - useEffect(() => { - let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true }); - const { database } = queryParams; - - dispatch(addActiveElement('/list/db/')); - dispatch(removeFocusedElement()); - - if (database) { - setState({ ...state, loading: true }); - fetchData(database); - } - }, []); - - const fetchData = database => { - getDatabaseInfo(database) - .then(response => { - setState({ - ...state, - data: response.data, - databaseUserInputValue: response.data.dbuser.split('_').splice(1).join('_'), - loading: false - }); - }) - .catch(err => { - setState({ ...state, loading: false }); - console.error(err); - }); - } - - const submitFormHandler = event => { - event.preventDefault(); - let updatedDatabase = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - updatedDatabase[name] = value; - } - - updatedDatabase['v_database'] = state.data.database; - updatedDatabase['v_dbuser'] = `${userName}_${state.databaseUserInputValue}`; - - if (Object.keys(updatedDatabase).length !== 0 && updatedDatabase.constructor === Object) { - setState({ ...state, loading: true }); - - updateDatabase(updatedDatabase, state.data.database) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - if (error_msg) { - setOkMessage(''); - setErrorMessage(error_msg); - } else { - dispatch(refreshCounters()).then(() => { - setOkMessage(ok_msg); - setErrorMessage(''); - }); - } - } - }) - .then(() => fetchData(state.data.database)) - .catch(err => console.error(err)); - } - } - - const databaseUserInputHandler = value => { - setState({ ...state, databaseUserInputValue: value }); - } - - return ( -
- - {`Vesta - ${i18n.DB}`} - - -
-
{i18n['Editing Database']}
-
- - {errorMessage ? : ''} {errorMessage} - -
-
- - {okMessage ? : ''} {HtmlParser(okMessage)} - -
-
- - {state.loading ? : -
submitFormHandler(event)} id="edit-db"> - - - - - -
-
- -
-
- databaseUserInputHandler(event.target.value)} - name="v_dbuser" /> - {`${userName}_${state.databaseUserInputValue}`} -
-
- - - - - - - - - -
- - -
- - - } -
-
- ); -} - -export default EditDatabase; \ No newline at end of file diff --git a/src/react/src/components/Database/Edit/EditDatabase.scss b/src/react/src/components/Database/Edit/EditDatabase.scss deleted file mode 100644 index eef3c7568..000000000 --- a/src/react/src/components/Database/Edit/EditDatabase.scss +++ /dev/null @@ -1,9 +0,0 @@ -.input-wrapper { - display: flex; - align-items: center; - - span.italic { - margin-left: 15px; - color: #777; - } -} \ No newline at end of file diff --git a/src/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.jsx b/src/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.jsx deleted file mode 100644 index 7a3c61c1c..000000000 --- a/src/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.jsx +++ /dev/null @@ -1,152 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { getUserNS } from '../../../ControlPanelService/UserNS'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import Spinner from '../../Spinner/Spinner'; -import { useDispatch, useSelector } from 'react-redux'; - -import './AddDomainNameSystem.scss'; -import AdvancedOptions from './AdvancedOptions/AdvancedOptions'; -import { addDomainNameSystem } from '../../../ControlPanelService/Dns'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const AddDomainNameSystem = props => { - const { i18n } = useSelector(state => state.session); - const dispatch = useDispatch(); - const token = localStorage.getItem("token"); - const history = useHistory(); - const [state, setState] = useState({ - loading: false, - showAdvancedOptions: false, - okMessage: '', - domain: '', - errorMessage: '', - userNS: [] - }); - - useEffect(() => { - dispatch(addActiveElement('/list/dns/')); - dispatch(removeFocusedElement()); - - setState({ ...state, loading: true }); - getUserNS() - .then(result => { - if (result.data.length) { - setState({ ...state, userNS: result.data, loading: false }); - } - }) - .catch(err => console.error(err)); - }, []); - - const submitFormHandler = event => { - event.preventDefault(); - let domainNameSystem = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - domainNameSystem[name] = value; - } - - if (Object.keys(domainNameSystem).length !== 0 && domainNameSystem.constructor === Object) { - setState({ ...state, loading: true }); - addDomainNameSystem(domainNameSystem) - .then(result => { - if (result.status === 200) { - const { error_msg: errorMessage, ok_msg: okMessage } = result.data; - - if (errorMessage) { - setState({ ...state, errorMessage, okMessage, loading: false }); - } else { - dispatch(refreshCounters()).then(() => { - setState({ ...state, okMessage, errorMessage: '', loading: false }); - }); - } - } - }) - .catch(err => console.error(err)); - } - } - - const renderAdvancedOptions = () => { - if (state.showAdvancedOptions) { - return ; - } - } - - const showAdvancedOption = () => { - setState({ ...state, showAdvancedOptions: !state.showAdvancedOptions }); - } - - return ( -
- - {`Vesta - ${i18n.DNS}`} - - -
-
{i18n['Adding DNS Domain'] ?? 'Adding DNS Domain'}
-
- - {state.errorMessage ? : ''} - {state.errorMessage} -
-
- - {state.okMessage ? : ''} - {HtmlParser(state.okMessage)} - -
-
- - - {state.loading ? : ( -
submitFormHandler(event)}> - - - -
- - -
- -
- - -
- -
- -
- - {renderAdvancedOptions()} - -
- - -
-
- )} -
-
- ); -} - -export default AddDomainNameSystem; \ No newline at end of file diff --git a/src/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.scss b/src/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.scss deleted file mode 100644 index f8c8be1e1..000000000 --- a/src/react/src/components/DomainNameSystem/Add/AddDomainNameSystem.scss +++ /dev/null @@ -1,5 +0,0 @@ -.add-dns form .advanced-options-button { - svg { - margin-left: 5px; - } -} \ No newline at end of file diff --git a/src/react/src/components/DomainNameSystem/Add/AdvancedOptions/AdvancedOptions.jsx b/src/react/src/components/DomainNameSystem/Add/AdvancedOptions/AdvancedOptions.jsx deleted file mode 100644 index a6acebf88..000000000 --- a/src/react/src/components/DomainNameSystem/Add/AdvancedOptions/AdvancedOptions.jsx +++ /dev/null @@ -1,110 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import dayjs from 'dayjs'; - -import './AdvancedOptions.scss'; -import { useSelector } from 'react-redux'; - -const AdvancedOptions = props => { - const { i18n } = useSelector(state => state.session); - const [state, setState] = useState({ - nameServersAmount: [], - userNS: props.userNS - }); - - useEffect(() => { - if (props.userNS.length) { - let initNameServersAmount = props.userNS.map((userNS, index) => index + 1); - setState({ ...state, nameServersAmount: initNameServersAmount }); - } - }, []); - - const renderNameServerInputs = () => { - return state.nameServersAmount.map((nameServer, index) => { - return ( -
- - -
- ); - }); - } - - const onDeleteNameServer = index => { - let nameServersDuplicate = [...state.nameServersAmount]; - - nameServersDuplicate.splice(index - 1, 1); - - setState({ ...state, nameServersAmount: nameServersDuplicate }); - } - - const addNameServer = () => { - let nameServersLength = state.nameServersAmount.length; - let nameServersDuplicate = [...state.nameServersAmount]; - - nameServersDuplicate.push(nameServersLength + 1); - - setState({ ...state, nameServersAmount: nameServersDuplicate }); - } - - const addNameServerClassName = () => { - return state.nameServersAmount.length === 8 ? 'hide' : 'show optional'; - } - - const getCurrentDatePlusYear = () => { - let currentDatePlusYear = dayjs().add(1, 'year').format('YYYY-MM-DD'); - return currentDatePlusYear; - } - - return ( -
-
- - -
- -
- - -
- -
- - {renderNameServerInputs()} -
- - -
- ); -} - -export default AdvancedOptions; \ No newline at end of file diff --git a/src/react/src/components/DomainNameSystem/Add/AdvancedOptions/AdvancedOptions.scss b/src/react/src/components/DomainNameSystem/Add/AdvancedOptions/AdvancedOptions.scss deleted file mode 100644 index f2f97588f..000000000 --- a/src/react/src/components/DomainNameSystem/Add/AdvancedOptions/AdvancedOptions.scss +++ /dev/null @@ -1,17 +0,0 @@ -.edit-item form { - div.name-server-input-wrapper { - display: flex; - align-items: center; - margin: 10px 0; - - button { - margin-left: 10px; - } -} - -.exp-date .optional { - font-size: 12px; - padding: 0 0 0 6px; - font-weight: normal; -} -} \ No newline at end of file diff --git a/src/react/src/components/DomainNameSystem/DomainNameSystem.jsx b/src/react/src/components/DomainNameSystem/DomainNameSystem.jsx deleted file mode 100644 index 3d3375b61..000000000 --- a/src/react/src/components/DomainNameSystem/DomainNameSystem.jsx +++ /dev/null @@ -1,105 +0,0 @@ -import React from 'react'; -import ListItem from '../ControlPanel/ListItem/ListItem'; -import Container from '../ControlPanel/Container/Container'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import './DomainNameSystem.scss'; -import { Link } from 'react-router-dom'; -import { useSelector } from 'react-redux'; - -const DomainNameSystem = props => { - const { data } = props; - const { i18n } = useSelector(state => state.session); - const token = localStorage.getItem("token"); - - const toggleFav = (starred) => { - if (starred) { - props.toggleFav(props.data.NAME, 'add'); - } else { - props.toggleFav(props.data.NAME, 'delete'); - } - } - - const checkItem = () => { - props.checkItem(props.data.NAME); - } - - const handleSuspend = () => { - let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend'; - props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/dns/index.php?domain=${data.NAME}`); - } - - const handleDelete = () => { - props.handleModal(data.delete_conf, `/api/v1/delete/dns/index.php?domain=${data.NAME}`); - } - - return ( - - -
{data.NAME} / {data.RECORDS}
-
-
- -
{data.IP}
-
{data.SOA}
-
- -
{i18n.TTL}: {data.TTL}
-
{i18n.Serial}: {data.SERIAL}
-
- -
{i18n.Template}: {data.TPL}
-
{i18n.Expire}: {data.EXP}
-
-
-
-
-
- - {data.RECORDS_I18N} - {data.FOCUSED ? L : } - -
- -
- - {i18n['add record']} - {data.FOCUSED ? N : } - -
- -
- - {i18n.edit} - {data.FOCUSED ? : } - -
- -
- -
- -
- -
-
-
- ); -} - -export default DomainNameSystem; \ No newline at end of file diff --git a/src/react/src/components/DomainNameSystem/DomainNameSystem.scss b/src/react/src/components/DomainNameSystem/DomainNameSystem.scss deleted file mode 100644 index 4693e7c66..000000000 --- a/src/react/src/components/DomainNameSystem/DomainNameSystem.scss +++ /dev/null @@ -1,15 +0,0 @@ -span.dns-records { - padding-left: 25px; - font-size: 18px; - font-weight: normal; - font-style: italic; - color: gray; -} - -.r-col { - .stats { - .c-2.w-30 { - padding-left: 0; - } - } -} \ No newline at end of file diff --git a/src/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.jsx b/src/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.jsx deleted file mode 100644 index 1a4e79006..000000000 --- a/src/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.jsx +++ /dev/null @@ -1,153 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput'; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { getDNSInfo, updateDNS } from '../../../ControlPanelService/Dns'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Spinner from '../../../components/Spinner/Spinner'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import QS from 'qs'; - -import './EditDomainNameSystem.scss'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const EditDomainNameSystem = props => { - const token = localStorage.getItem("token"); - const { i18n } = useSelector(state => state.session); - const history = useHistory(); - const dispatch = useDispatch(); - const [errorMessage, setErrorMessage] = useState(''); - const [okMessage, setOkMessage] = useState(''); - const [state, setState] = useState({ - data: {}, - loading: false - }); - - useEffect(() => { - let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true }); - const { domain } = queryParams; - - dispatch(addActiveElement('/list/dns/')); - dispatch(removeFocusedElement()); - - if (domain) { - setState({ ...state, loading: true }); - fetchData(domain); - } - }, []); - - const fetchData = domain => { - getDNSInfo(domain) - .then(response => { - setState({ - ...state, - data: response.data, - loading: false - }); - }) - .catch(err => { - setState({ ...state, loading: false }); - console.error(err) - }); - } - - const submitFormHandler = event => { - event.preventDefault(); - let updatedDomain = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - updatedDomain[name] = value; - } - - updatedDomain['v_domain'] = state.data.domain; - - if (Object.keys(updatedDomain).length !== 0 && updatedDomain.constructor === Object) { - setState({ ...state, loading: true }); - - updateDNS(updatedDomain, state.data.domain) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - if (error_msg) { - setErrorMessage(error_msg); - setOkMessage(''); - } else { - dispatch(refreshCounters()).then(() => { - setErrorMessage(''); - setOkMessage(ok_msg); - }); - } - } - }) - .then(() => fetchData(state.data.domain)) - .catch(err => console.error(err)); - } - } - - return ( -
- - {`Vesta - ${i18n.DNS}`} - - -
-
{i18n['Editing DNS Domain']}
-
- - {errorMessage ? : ''} {errorMessage} - -
-
- - {okMessage ? : ''} {HtmlParser(okMessage)} - -
-
- - {state.loading ? : -
submitFormHandler(event)} id="edit-dns"> - - - - - - - - - - - - - - - -
- - -
- - - } -
-
- ); -} - -export default EditDomainNameSystem; \ No newline at end of file diff --git a/src/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.scss b/src/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.scss deleted file mode 100644 index 36562311d..000000000 --- a/src/react/src/components/DomainNameSystem/Edit/EditDomainNameSystem.scss +++ /dev/null @@ -1,7 +0,0 @@ -.edit-dns { - .label-wrapper { - span { - text-transform: uppercase !important; - } - } -} \ No newline at end of file diff --git a/src/react/src/components/Firewall/Add/AddFirewall.jsx b/src/react/src/components/Firewall/Add/AddFirewall.jsx deleted file mode 100644 index 15a3e438f..000000000 --- a/src/react/src/components/Firewall/Add/AddFirewall.jsx +++ /dev/null @@ -1,136 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput'; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { addFirewall } from '../../../ControlPanelService/Firewalls'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; - -import './AddFirewall.scss'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const AddFirewall = props => { - const token = localStorage.getItem("token"); - const { i18n } = useSelector(state => state.session); - const dispatch = useDispatch(); - const history = useHistory(); - const [state, setState] = useState({ - loading: false, - actions: [ - 'DROP', - 'ACCEPT' - ], - protocols: [ - 'TCP', - 'UDP', - 'ICMP' - ], - okMessage: '', - errorMessage: '' - }); - - useEffect(() => { - dispatch(addActiveElement('/list/firewall/')); - dispatch(removeFocusedElement()); - }, []); - - const submitFormHandler = event => { - event.preventDefault(); - let newFirewall = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - newFirewall[name] = value; - } - - if (Object.keys(newFirewall).length !== 0 && newFirewall.constructor === Object) { - setState({ ...state, loading: true }); - addFirewall(newFirewall) - .then(result => { - if (result.status === 200) { - const { error_msg: errorMessage, ok_msg: okMessage } = result.data; - - if (errorMessage) { - setState({ ...state, errorMessage, okMessage, loading: false }); - } else { - dispatch(refreshCounters()).then(() => { - setState({ ...state, okMessage, errorMessage: '', loading: false }); - }); - } - } - }) - .catch(err => console.error(err)); - } - } - - return ( -
- - {`Vesta - ${i18n.FIREWALL}`} - - -
-
{i18n['Adding Firewall Rule']}
-
- - {state.errorMessage ? : ''} - {state.errorMessage} -
-
- - {state.okMessage ? : ''} - {HtmlParser(state.okMessage)} - -
-
- -
submitFormHandler(event)}> - - - - - - - - - - - - - -
- - -
- -
-
- ); -} - -export default AddFirewall; \ No newline at end of file diff --git a/src/react/src/components/Firewall/Add/AddFirewall.scss b/src/react/src/components/Firewall/Add/AddFirewall.scss deleted file mode 100644 index aff53e9fd..000000000 --- a/src/react/src/components/Firewall/Add/AddFirewall.scss +++ /dev/null @@ -1,9 +0,0 @@ -.content .edit-template.add-firewall { - .toolbar .search-toolbar-name { - width: fit-content; - } - - label.label-wrapper[for=ip] span { - text-transform: unset !important; - } -} \ No newline at end of file diff --git a/src/react/src/components/Firewall/Add/Banlist/index.jsx b/src/react/src/components/Firewall/Add/Banlist/index.jsx deleted file mode 100644 index 35c75b2ce..000000000 --- a/src/react/src/components/Firewall/Add/Banlist/index.jsx +++ /dev/null @@ -1,121 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { addActiveElement, removeFocusedElement } from "src/actions/MainNavigation/mainNavigationActions"; -import AddItemLayout from 'src/components/ControlPanel/AddItemLayout/AddItemLayout'; -import { getBanIps, addBanIp } from 'src/ControlPanelService/Firewalls'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Spinner from 'src/components/Spinner/Spinner'; -import Toolbar from '../../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import { Helmet } from 'react-helmet'; -import HtmlParser from 'react-html-parser'; - -const AddBanIP = () => { - const { i18n } = useSelector(state => state.session); - const userLanguage = localStorage.getItem("language"); - const history = useHistory(); - const dispatch = useDispatch(); - const [state, setState] = useState({ - banIps: [], - errorMessage: '', - okMessage: '', - loading: false - }); - - useEffect(() => { - dispatch(addActiveElement('/list/firewall/')); - dispatch(removeFocusedElement()); - - setState({ ...state, loading: true }); - - getBanIps() - .then(result => { - setState({ ...state, ip: result.data.ip, chain: result.data.chain, loading: false }); - }); - }, []); - - const submitFormHandler = event => { - event.preventDefault(); - let newUser = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - newUser[name] = value; - } - - if (Object.keys(newUser).length !== 0 && newUser.constructor === Object) { - setState({ ...state, loading: true }); - addBanIp(newUser) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - if (error_msg) { - setState({ ...state, errorMessage: error_msg, okMessage: '', loading: false }); - } else if (ok_msg) { - setState({ ...state, errorMessage: '', okMessage: ok_msg, loading: false }); - } else { - setState({ ...state, loading: false }); - } - } - }) - .catch(err => console.error(err)); - } - } - - const renderChainOptions = () => { - return ['SSH', 'WEB', 'FTP', 'DNS', 'MAIL', 'DB', 'VESTA'].map((chain, index) => ( - - )); - } - - return ( -
- - {`Vesta - ${i18n.FIREWALL}`} - - -
-
{i18n['Adding IP Address to Banlist']}
-
{state.errorMessage ? : ''} {state.errorMessage}
-
- {state.okMessage ? : ''} {HtmlParser(state.okMessage)} -
-
- - {state.loading ? : -
submitFormHandler(event)} id="add-user"> - - -
- - -
- -
- - -
- -
- - -
- -
- } -
-
- ); -} - -export default AddBanIP; diff --git a/src/react/src/components/Firewall/Ban/index.jsx b/src/react/src/components/Firewall/Ban/index.jsx deleted file mode 100644 index bcf3721e7..000000000 --- a/src/react/src/components/Firewall/Ban/index.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react'; -import ListItem from 'src/components/ControlPanel/ListItem/ListItem'; -import Container from 'src/components/ControlPanel/Container/Container'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { useSelector } from 'react-redux'; - -const Ban = ({ data, ...props }) => { - const { i18n } = useSelector(state => state.session); - - const checkItem = () => { - props.checkItem(data.NAME); - } - - const handleDelete = () => { - props.handleModal(data.delete_confirmation, `/api/v1/delete/firewall/banlist/?ip=${data.NAME}&chain=${data.CHAIN}`); - } - - return ( - - -
- -
{data.DATE}   {data.TIME}
-
- -
-
- -
{data.CHAIN}
-
- -
{data.NAME}
-
-
-
-
-
- -
-
-
- ); -} - -export default Ban; \ No newline at end of file diff --git a/src/react/src/components/Firewall/Edit/EditFirewall.jsx b/src/react/src/components/Firewall/Edit/EditFirewall.jsx deleted file mode 100644 index 1f64606a3..000000000 --- a/src/react/src/components/Firewall/Edit/EditFirewall.jsx +++ /dev/null @@ -1,162 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import { getFirewallInfo, updateFirewall } from '../../../ControlPanelService/Firewalls'; -import SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput'; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Spinner from '../../../components/Spinner/Spinner'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import QS from 'qs'; - -import './EditFirewall.scss'; -import { Helmet } from 'react-helmet'; -import HtmlParser from 'react-html-parser'; - -const EditFirewall = props => { - const token = localStorage.getItem("token"); - const { i18n } = useSelector(state => state.session); - const history = useHistory(); - const dispatch = useDispatch(); - const [errorMessage, setErrorMessage] = useState(''); - const [okMessage, setOkMessage] = useState(''); - const [state, setState] = useState({ - data: {}, - loading: false - }); - - useEffect(() => { - let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true }); - const { rule } = queryParams; - - dispatch(addActiveElement('/list/firewall/')); - dispatch(removeFocusedElement()); - - if (rule) { - setState({ ...state, loading: true }); - fetchData(rule); - } - }, []); - - const fetchData = rule => { - getFirewallInfo(rule) - .then(response => { - setState({ - ...state, - data: response.data, - loading: false - }); - }) - .catch(err => { - setState({ ...state, loading: false }); - console.error(err); - }); - } - - const submitFormHandler = event => { - event.preventDefault(); - let updatedDomain = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - updatedDomain[name] = value; - } - - if (Object.keys(updatedDomain).length !== 0 && updatedDomain.constructor === Object) { - setState({ ...state, loading: true }); - - updateFirewall(updatedDomain, state.data.rule) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - setErrorMessage(error_msg || ''); - setOkMessage(ok_msg || ''); - } - }) - .then(() => fetchData(state.data.rule)) - .catch(err => console.error(err)); - } - } - - return ( -
- - {`Vesta - ${i18n.FIREWALL}`} - - -
-
{i18n['Editing Firewall Rule']}
-
- - {errorMessage ? : ''} {errorMessage} - -
-
- - {okMessage ? : ''} {HtmlParser(okMessage)} - -
-
- - {state.loading ? : -
submitFormHandler(event)} id="edit-firewall"> - - - -
- - -
- -
- - -
- - - - - - - -
- - -
- - - } -
-
- ); -} - -export default EditFirewall; \ No newline at end of file diff --git a/src/react/src/components/Firewall/Edit/EditFirewall.scss b/src/react/src/components/Firewall/Edit/EditFirewall.scss deleted file mode 100644 index 352827b89..000000000 --- a/src/react/src/components/Firewall/Edit/EditFirewall.scss +++ /dev/null @@ -1,11 +0,0 @@ -.edit-firewall { - form { - .form-group { - .label-wrapper { - span { - text-transform: initial; - } - } - } - } -} \ No newline at end of file diff --git a/src/react/src/components/Firewall/Firewall.jsx b/src/react/src/components/Firewall/Firewall.jsx deleted file mode 100644 index c74f1a7b8..000000000 --- a/src/react/src/components/Firewall/Firewall.jsx +++ /dev/null @@ -1,91 +0,0 @@ -import React from 'react'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Container from '../ControlPanel/Container/Container'; -import ListItem from '../ControlPanel/ListItem/ListItem'; -import { Link } from 'react-router-dom'; -import './Firewall.scss'; -import { useSelector } from 'react-redux'; - -const Firewall = ({ data, ...props }) => { - const { i18n } = useSelector(state => state.session); - - const toggleFav = (starred) => { - if (starred) { - props.toggleFav(data.NAME, 'add'); - } else { - props.toggleFav(data.NAME, 'delete'); - } - } - - const checkItem = () => { - props.checkItem(data.NAME); - } - - const handleSuspend = () => { - let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend'; - props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/firewall/index.php?rule=${data.NAME}`); - } - - const handleDelete = () => { - props.handleModal(data.delete_conf, `/api/v1/delete/firewall/index.php?rule=${data.NAME}`); - } - - return ( - - - -
- -
{data.ACTION}
-
- -
{data.PROTOCOL} / {data.COMMENT}
-
- -
-
- -
{data.PORT}
-
- -
{data.IP}
-
-
-
-
-
- - {i18n.edit} - {data.FOCUSED ? : } - -
- -
- -
- -
- -
-
-
- ); -} - -export default Firewall; diff --git a/src/react/src/components/Firewall/Firewall.scss b/src/react/src/components/Firewall/Firewall.scss deleted file mode 100644 index f2095528b..000000000 --- a/src/react/src/components/Firewall/Firewall.scss +++ /dev/null @@ -1,20 +0,0 @@ -.firewalls .list-item { - .l-col .date { - display: none; - } - - .r-col .stats { - margin-top: 15px; - - .cron-col { - div span { - font-weight: unset; - font-size: 13px; - } - - div span.stat { - font-weight: bold; - } - } - } -} \ No newline at end of file diff --git a/src/react/src/components/ForgotPassword/index.jsx b/src/react/src/components/ForgotPassword/index.jsx deleted file mode 100644 index fda24c711..000000000 --- a/src/react/src/components/ForgotPassword/index.jsx +++ /dev/null @@ -1,191 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import Password from 'src/components/ControlPanel/AddItemLayout/Form/Password/Password'; -import LoginLayout from 'src/components/ControlPanel/LoginLayout/LoginLayout'; -import { resetPassword } from 'src/ControlPanelService/ResetPassword'; -import { Link, useHistory, useLocation } from 'react-router-dom'; -import { reset } from 'src/actions/Session/sessionActions'; -import { useDispatch, useSelector } from 'react-redux'; -import Spinner from 'src/components/Spinner/Spinner'; -import ReactHtmlParser from 'react-html-parser'; -import { Helmet } from 'react-helmet'; -import QueryString from 'qs'; - -export default function ForgotPassword() { - const { i18n } = useSelector(state => state.session); - const dispatch = useDispatch(); - const history = useHistory(); - const [loading, setLoading] = useState(false); - const [state, setState] = useState({ - action: '', - user: '', - code: '', - }); - const session = useSelector(state => state.session); - const location = useLocation(); - const [errorMessage, setErrorMessage] = useState(''); - - useEffect(() => { - const parsedQueryString = QueryString.parse(location.search, { ignoreQueryPrefix: true }); - - setState({ - ...state, - action: parsedQueryString.action || '', - user: parsedQueryString.user || '', - code: parsedQueryString.code || '' - }); - }, []); - - useEffect(() => { - if (session.error) { - setErrorMessage(session.error); - return; - } - - if (session.token && session.userName) { - history.push('/list/user/'); - } - }, [session]); - - const submitHandler = event => { - event.preventDefault(); - - if (!state.code && !state.user) return; - - if (!state.action && state.user) { - completeStep1(); - return; - } - - if (state.action === 'code' && state.user && state.code) { - completeStep2(); - return; - } - - setLoading(true); - const data = { user: state.user, code: state.code }; - - for (var [name, value] of (new FormData(event.target)).entries()) { - data[name] = value; - } - - dispatch(reset(data)) - .then(res => { - if (res.error) { - setErrorMessage(res.error); - } else { - history.push('/login'); - setErrorMessage(''); - } - - setLoading(false); - }); - } - - const changeInputHandler = event => { - const { value, name } = event.target; - - setState({ ...state, [name]: value }); - } - - const completeStep1 = () => { - if (!state.user) return; - setLoading(true); - - resetPassword(state.user) - .then(res => { - setErrorMessage(res.data.error || ''); - setState({ ...state, action: 'code' }); - setLoading(false); - }) - .catch(error => { - console.error(error); - setLoading(false); - }); - } - - const completeStep2 = () => { - setState({ ...state, action: 'confirm' }); - } - - return ( -
- - {`Vesta - ${i18n['RESET PASSWORD']}`} - - {loading && } -
- -
-
- - Logo - -
-
- { - !state.action && ( - <> - - -
- - -
- - ) - } - - { - state.action === 'code' && ( - <> - {ReactHtmlParser(i18n['RESET_CODE_SENT'])}
- - - -
- - -
- - ) - } - - { - state.action === 'confirm' && ( - <> - - - - -
- - -
- - ) - } - -
{errorMessage}
-
-
- - - vestacp.com - -
-
-
- ); -} diff --git a/src/react/src/components/Hotkeys/Hotkeys.jsx b/src/react/src/components/Hotkeys/Hotkeys.jsx deleted file mode 100644 index 84795f7d2..000000000 --- a/src/react/src/components/Hotkeys/Hotkeys.jsx +++ /dev/null @@ -1,127 +0,0 @@ -import React, { useEffect } from 'react'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { useSelector } from 'react-redux'; -import './Hotkeys.scss'; - -const Hotkeys = props => { - const { i18n } = useSelector(state => state.session); - - useEffect(() => { - window.addEventListener("keyup", toggleShortcutsLit); - - return () => window.removeEventListener("keyup", toggleShortcutsLit); - }, [props.reference]); - - const toggleShortcutsLit = event => { - let isSearchInputFocused = document.querySelector('input:focus') || document.querySelector('textarea:focus'); - - if (event.keyCode === 72 && !isSearchInputFocused) { - props.toggleHotkeys(); - } - } - - return ( -
-
-
{i18n.Shortcuts}
-
props.toggleHotkeys()}>
-
-
-
    -
  • - u - {i18n['Upload']} -
  • -
  • - n - {i18n['New File']} -
  • -
  • - F6 - {i18n['New Folder']} -
  • -
  • - d - {i18n['Download']} -
  • -
  • - F2 / Shift + F6 - {i18n['Rename']} -
  • -
  • - m - {i18n['Move']} -
  • -
  • - F5 - {i18n['Copy']} -
  • -
  • - F8 / Del - {i18n['Delete']} -
  • -
  • - F2 - {i18n['Save File (in text editor)']} -
  • -
  • - h - {i18n['Display/Close shortcuts']} -
  • -
  • - Esc - {i18n['Close Popup / Cancel']} -
  • -
  • - F10 - {i18n['Close Preview / Editor']} -
  • -
-
    -
  • - - {i18n['Move Cursor Up']} -
  • -
  • - - {i18n['Move Cursor Down']} -
  • -
  • - - {i18n['Switch to Left Tab']} -
  • -
  • - - {i18n['Switch to Right Tab']} -
  • -
  • - a - {i18n['Archive']} -
  • -
  • - Enter - {i18n['Open File / Enter Directory']} -
  • -
  • - F3 - {i18n['Edit File']} -
  • -
  • - Backspace - {i18n['Go to Parent Directory']} -
  • -
  • - Ctr + Click - {i18n['Add File to the Current Selection']} -
  • -
  • - Shift + Cursor up/down - {i18n['Select Bunch of Files']} -
  • -
-
-
- ); -} - -export default Hotkeys; diff --git a/src/react/src/components/Hotkeys/Hotkeys.scss b/src/react/src/components/Hotkeys/Hotkeys.scss deleted file mode 100644 index 254d5b1ab..000000000 --- a/src/react/src/components/Hotkeys/Hotkeys.scss +++ /dev/null @@ -1,78 +0,0 @@ -$secondary: #fcac04; - -.hotkeys-list { - position: fixed; - bottom: 0; - right: 0; - display: flex; - flex-direction: column; - transform: translateX(-45%); - width: 53%; - background: #222e44de; - font-size: 13px; - - .head { - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 1px solid $secondary; - - .name { - text-transform: uppercase; - padding: 5px 0 5px 10px; - font-size: 12px; - font-weight: bold; - color: $secondary; - letter-spacing: 2px; - padding: 15px; - } - - .close { - padding: 12px; - opacity: 1 !important; - - svg { - color: $secondary; - } - - &:hover { - cursor: pointer; - background: #222e44; - } - } - } - - .body { - display: flex; - - ul { - padding: 25px 10px; - margin: 0; - width: 50%; - list-style: none; - margin-left: 3rem; - - li { - padding: 5px; - - span.name { - margin-right: 15px; - color: $secondary; - font-weight: bold; - } - - span.description { - color: white; - } - } - - li.space-top { - padding-top: 30px; - } - } - } -} - -.hide { - display: none; -} \ No newline at end of file diff --git a/src/react/src/components/Hotkeys/HotkeysButton.jsx b/src/react/src/components/Hotkeys/HotkeysButton.jsx deleted file mode 100644 index 6934915b9..000000000 --- a/src/react/src/components/Hotkeys/HotkeysButton.jsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from 'react'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import './Hotkeys.scss' - -const HotkeysButton = (props) => { - return ( -
- -
- ); -} - -export default HotkeysButton; \ No newline at end of file diff --git a/src/react/src/components/InternetProtocol/Add/AddInternetProtocol.jsx b/src/react/src/components/InternetProtocol/Add/AddInternetProtocol.jsx deleted file mode 100644 index a1d32f6d2..000000000 --- a/src/react/src/components/InternetProtocol/Add/AddInternetProtocol.jsx +++ /dev/null @@ -1,151 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import { addInternetProtocol, getAdditionalInfo } from '../../../ControlPanelService/Ip'; -import SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput'; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import Checkbox from '../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import Spinner from '../../Spinner/Spinner'; -import { useDispatch, useSelector } from 'react-redux'; - -import './AddInternetProtocol.scss'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const AddInternetProtocol = props => { - const token = localStorage.getItem("token"); - const { i18n, userName } = useSelector(state => state.session); - const dispatch = useDispatch(); - const history = useHistory(); - const [state, setState] = useState({ - loading: false, - dedicated: true, - okMessage: '', - errorMessage: '', - interfaces: [], - users: [] - }); - - useEffect(() => { - dispatch(addActiveElement('/list/ip/')); - dispatch(removeFocusedElement()); - - setState({ ...state, loading: true }); - - fetchData(); - }, []); - - const submitFormHandler = event => { - event.preventDefault(); - let newIp = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - newIp[name] = value; - } - - if (Object.keys(newIp).length !== 0 && newIp.constructor === Object) { - setState({ ...state, loading: true }); - addInternetProtocol(newIp) - .then(result => { - if (result.status === 200) { - const { error_msg: errorMessage, ok_msg: okMessage } = result.data; - - if (errorMessage) { - setState({ ...state, errorMessage, okMessage, loading: false }); - } else { - dispatch(refreshCounters()).then(() => { - setState({ ...state, okMessage, errorMessage: '', loading: false }); - }); - } - } - }) - .catch(err => console.error(err)); - } - } - - const fetchData = () => { - getAdditionalInfo() - .then(result => { - setState({ ...state, interfaces: result.data.interfaces, users: result.data.users, loading: false }); - }) - .catch(err => console.error(err)); - } - - const onChangeDedicated = value => { - setState({ ...state, dedicated: value }); - } - - return ( -
- - {`Vesta - ${i18n.IP}`} - - -
-
{i18n['Adding Package']}
-
- - {state.errorMessage ? : ''} - {state.errorMessage} -
-
- - {state.okMessage ? : ''} - {HtmlParser(state.okMessage)} - -
-
- - {state.loading ? : ( -
submitFormHandler(event)}> - - - - - - - - - - - - - { - !state.dedicated - ? ( -
- -
- ) - : null - } - - - - - -
- - -
- - )} -
-
- ); -} - -export default AddInternetProtocol; \ No newline at end of file diff --git a/src/react/src/components/InternetProtocol/Add/AddInternetProtocol.scss b/src/react/src/components/InternetProtocol/Add/AddInternetProtocol.scss deleted file mode 100644 index 3fd53d254..000000000 --- a/src/react/src/components/InternetProtocol/Add/AddInternetProtocol.scss +++ /dev/null @@ -1,19 +0,0 @@ -div.edit-item { - form { - label.label-wrapper { - align-items: center; - - span { - text-transform: lowercase; - } - } - - div.assigned-user { - padding-left: 25px; - - select { - width: 48.4%; - } - } - } -} \ No newline at end of file diff --git a/src/react/src/components/InternetProtocol/Edit/EditInternetProtocol.jsx b/src/react/src/components/InternetProtocol/Edit/EditInternetProtocol.jsx deleted file mode 100644 index 7b525877e..000000000 --- a/src/react/src/components/InternetProtocol/Edit/EditInternetProtocol.jsx +++ /dev/null @@ -1,162 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import { getInternetProtocolInfo, updateInternetProtocol } from '../../../ControlPanelService/Ip'; -import SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput'; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import Checkbox from '../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Spinner from '../../../components/Spinner/Spinner'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import QS from 'qs'; - -import './EditInternetProtocol.scss'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const EditInternetProtocol = () => { - const token = localStorage.getItem("token"); - const { i18n } = useSelector(state => state.session); - const history = useHistory(); - const dispatch = useDispatch(); - const [errorMessage, setErrorMessage] = useState(''); - const [okMessage, setOkMessage] = useState(''); - const [state, setState] = useState({ - data: {}, - loading: false, - dedicated: false - }); - - useEffect(() => { - let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true }); - const { ip } = queryParams; - - dispatch(addActiveElement('/list/ip/')); - dispatch(removeFocusedElement()); - - if (ip) { - setState({ ...state, loading: true }); - fetchData(ip); - } - }, []); - - const fetchData = ip => { - getInternetProtocolInfo(ip) - .then(response => { - setState({ - ...state, - data: response.data, - dedicated: !response.data.dedicated, - loading: false - }); - }) - .catch(err => { - setState({ ...state, loading: false }); - console.error(err) - }); - } - - const submitFormHandler = event => { - event.preventDefault(); - let updatedIP = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - updatedIP[name] = value; - } - - updatedIP['token'] = token; - updatedIP['save'] = 'save'; - updatedIP['v_ip'] = state.data.ip; - - if (Object.keys(updatedIP).length !== 0 && updatedIP.constructor === Object) { - setState({ ...state, loading: true }); - - updateInternetProtocol(updatedIP, state.data.ip) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - if (error_msg) { - setErrorMessage(error_msg); - setOkMessage(''); - } else { - dispatch(refreshCounters()).then(() => { - setErrorMessage(''); - setOkMessage(ok_msg); - }); - } - } - }) - .then(() => fetchData(state.data.ip)) - .catch(err => console.error(err)); - } - } - - const onChangeDedicated = value => { - setState({ ...state, dedicated: value }); - } - - return ( -
- - {`Vesta - ${i18n.IP}`} - - -
-
{i18n['Editing IP Address']}
-
- - {errorMessage ? : ''} {errorMessage} - -
-
- - {okMessage ? : ''} {HtmlParser(okMessage)} - -
-
- - {state.loading ? : -
submitFormHandler(event)} id="edit-ip"> - - - - - - - - - { - !state.dedicated && ( -
- -
- ) - } - - - - - -
- - -
- - - } -
-
- ); -} - -export default EditInternetProtocol; \ No newline at end of file diff --git a/src/react/src/components/InternetProtocol/Edit/EditInternetProtocol.scss b/src/react/src/components/InternetProtocol/Edit/EditInternetProtocol.scss deleted file mode 100644 index fa65bb0ae..000000000 --- a/src/react/src/components/InternetProtocol/Edit/EditInternetProtocol.scss +++ /dev/null @@ -1,8 +0,0 @@ -.edit-ip { - form { - .dedicated-form-group { - transform: translateX(3rem); - margin-bottom: 2rem; - } - } -} \ No newline at end of file diff --git a/src/react/src/components/InternetProtocol/InternetProtocol.jsx b/src/react/src/components/InternetProtocol/InternetProtocol.jsx deleted file mode 100644 index fbdda12e6..000000000 --- a/src/react/src/components/InternetProtocol/InternetProtocol.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import ListItem from '../ControlPanel/ListItem/ListItem'; -import Container from '../ControlPanel/Container/Container'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { Link } from 'react-router-dom'; -import { useSelector } from 'react-redux'; -import './InternetProtocol.scss'; - -const InternetProtocol = props => { - const { data } = props; - const { i18n } = useSelector(state => state.session); - - const toggleFav = (starred) => { - if (starred) { - props.toggleFav(data.NAME, 'add'); - } else { - props.toggleFav(data.NAME, 'delete'); - } - } - - const checkItem = () => { - props.checkItem(data.NAME); - } - - const handleDelete = () => { - props.handleModal(data.delete_conf, `/api/v1/delete/ip/?ip=${data.NAME}`); - } - - return ( - - - -
{data.NAT ? <>{data.NAT} {data.NAME} : data.NAME}
-
-
- -
{data.NETMASK}
-
{data.INTERFACE}
-
- -
{i18n.Domains}: {data.U_WEB_DOMAINS}
-
{i18n.Status}: {data.STATUS}
-
- -
{i18n.Owner}: {data.OWNER}
-
{i18n.Users}: {data.U_SYS_USERS.replace(/,/g, ', ')}
-
-
-
-
-
- - {i18n.edit} - {data.FOCUSED ? : } - -
- -
- -
-
-
- ); -} - -export default InternetProtocol; diff --git a/src/react/src/components/InternetProtocol/InternetProtocol.scss b/src/react/src/components/InternetProtocol/InternetProtocol.scss deleted file mode 100644 index a9a18c10b..000000000 --- a/src/react/src/components/InternetProtocol/InternetProtocol.scss +++ /dev/null @@ -1,8 +0,0 @@ -.internetProtocols { - .ip-wrapper { - .name svg { - margin: 0 10px; - font-size: 20px; - } - } -} diff --git a/src/react/src/components/Lists/DirectoryList/DirectoryList.jsx b/src/react/src/components/Lists/DirectoryList/DirectoryList.jsx deleted file mode 100644 index 34239f309..000000000 --- a/src/react/src/components/Lists/DirectoryList/DirectoryList.jsx +++ /dev/null @@ -1,338 +0,0 @@ -import React, { Component } from 'react'; -import PropTypes from 'prop-types'; -import Spinner from '../../Spinner/Spinner'; -import Path from '../../Path/Path'; -import Row from '../Row/Row'; -import '../List.scss'; - -class DirectoryList extends Component { - constructor(props) { - super(props); - this.state = { - orderType: "descending", - sortingType: "Type", - itemsSelected: [], - listingItems: [], - cursor: 0 - }; - } - - static propTypes = { - changePathAfterToggle: PropTypes.func, - openCertainDirectory: PropTypes.func, - openDirectory: PropTypes.func, - passSelection: PropTypes.func, - modalVisible: PropTypes.bool, - changePath: PropTypes.func, - addToPath: PropTypes.func, - history: PropTypes.object, - isActive: PropTypes.bool, - cursor: PropTypes.number, - passData: PropTypes.func, - download: PropTypes.func, - moveBack: PropTypes.func, - onClick: PropTypes.func, - loading: PropTypes.bool, - path: PropTypes.string, - list: PropTypes.string, - data: PropTypes.array - } - - UNSAFE_componentWillMount = () => { - if (localStorage.getItem(`${this.props.list}Sorting`) && localStorage.getItem(`${this.props.list}Order`)) { - this.setState({ sortingType: localStorage.getItem(`${this.props.list}Sorting`), orderType: localStorage.getItem(`${this.props.list}Order`) }); - } - } - - componentDidMount = () => { - document.addEventListener("keydown", this.handleLiSelection); - document.addEventListener("keydown", this.moveBackOnButton); - } - - componentWillUnmount = () => { - document.removeEventListener("keydown", this.handleLiSelection); - document.removeEventListener("keydown", this.moveBackOnButton); - } - - cacheSorting = () => { - localStorage.setItem(`${this.props.list}Sorting`, this.state.sortingType); - localStorage.setItem(`${this.props.list}Order`, this.state.orderType); - } - - moveBackOnButton = (e) => { - if (e.keyCode === 8 && !this.props.modalVisible && this.props.isActive) { - this.moveBack(); - } - } - - moveBack = () => { - if (this.isHomeDirectory()) { - return; - } - - this.props.moveBack(); - } - - isHomeDirectory = () => { - return this.props.path === this.props.rootDir; - } - - toggleActiveList = () => { - const { history, path, list, onClick, changePathAfterToggle, isActive } = this.props; - - if (!isActive) { - onClick(list); - changePathAfterToggle(path); - history.push({ - pathname: '/list/directory/', - search: `?path=${path}` - }); - this.cacheActiveWindowAndPaths(); - this.passData(); - } - } - - cacheActiveWindowAndPaths = () => { - localStorage.setItem("activeWindow", this.props.list); - localStorage.setItem(`${this.props.list}ListPath`, this.props.path); - localStorage.setItem(`${this.props.list}ListPath`, this.props.path); - } - - isSelected = (i) => { - return this.state.itemsSelected.indexOf(i) !== -1; - } - - addToSelection(i) { - const { itemsSelected } = this.state; - const result = [...itemsSelected]; - const duplicate = itemsSelected.indexOf(i); - if (duplicate !== -1) { - result.splice(duplicate, 1); - } else { - if (i === "") { - return; - } - - result.push(i) - } - - this.setState({ itemsSelected: result }); - this.props.passSelection(result); - } - - handleLiSelection = (e) => { - const { isActive, modalVisible, changePath, path } = this.props; - const { cursor } = this.state; - const { listing } = this.getDataBySortingType() - - if (!isActive || modalVisible) { - return; - } - - if (e.keyCode === 40) { - if (cursor === listing.length - 1) { - return; - } - - if (e.shiftKey) { - let name = listing[cursor].name; - this.addToSelection(name); - } - - this.setState({ cursor: cursor + 1 }); - this.passData(); - changePath(path); - } - - if (e.keyCode === 38) { - if (cursor === 0) { - return; - } - - if (e.shiftKey) { - let name = listing[cursor - 1].name; - this.addToSelection(name); - } - - this.setState({ cursor: cursor - 1 }); - this.passData(); - changePath(path); - } - } - - resetData = () => { - this.setState({ cursor: 0, itemsSelected: [] }); - } - - passData = () => { - const { passData: passDataToParent } = this.props; - const { firstItem, listing } = this.getDataBySortingType() - if (this.state.cursor === 0) { - const { name, permissions, type } = firstItem; - passDataToParent(this.state.cursor, name, permissions, type); - } else { - const { name, permissions, type } = listing[this.state.cursor - 1]; - passDataToParent(this.state.cursor, name, permissions, type); - } - } - - openDirectory = (name) => { - const { history, path, addToPath, openDirectory } = this.props; - - history.push({ - pathname: '/list/directory/', - search: `?path=${path}/${name}` - }); - addToPath(name); - openDirectory(); - this.setState({ cursor: 0 }); - } - - openCertainDirectory = (path) => { - const { history, openCertainDirectory, changePath } = this.props; - - if (this.isHomeDirectory()) { - return; - } - - history.push({ - pathname: '/list/directory/', - search: `?path=${path}` - }); - changePath(path); - openCertainDirectory(); - } - - changeSorting = (sortingType, orderType) => { - this.setState({ sortingType, orderType }, () => this.cacheSorting()); - } - - sortByType = (a, b) => { - if (this.state.orderType === "descending" && a.name !== "") { - return a.type.localeCompare(b.type); - } else if (this.state.orderType === "ascending" && b.name !== "") { - return b.type.localeCompare(a.type); - } - } - - sortBySize = (a, b) => { - if (this.state.orderType === "descending" && a.name !== "") { - return a.size - b.size; - } else if (this.state.orderType === "ascending" && b.name !== "") { - return b.size - a.size; - } - } - - sortByDate = (a, b) => { - if (this.state.orderType === "descending" && a.name !== "") { - return new Date(a.date) - new Date(b.date); - } else if (this.state.orderType === "ascending" && a.name !== "") { - return new Date(b.date) - new Date(a.date); - } - } - - sortByName = (a, b) => { - if (this.state.orderType === "descending" && a.name !== "") { - return a.name.localeCompare(b.name); - } else if (this.state.orderType === "ascending" && b.name !== "") { - return b.name.localeCompare(a.name); - } - } - - sortData = (a, b) => { - switch (this.state.sortingType) { - case "Type": return this.sortByType(a, b); - case "Size": return this.sortBySize(a, b); - case "Date": return this.sortByDate(a, b); - case "Name": return this.sortByName(a, b); - default: return this.sortByType(a, b); - } - } - - getDataBySortingType = () => { - let firstItem, listing = []; - this.props.data.listing.forEach(item => { - if (item.name === '' && item.type === 'd') { - firstItem = item - } else { - listing.push(item) - } - }) - if (this.state.sortingType !== 'Type') { - listing = [ - ...listing.filter(item => item.type === 'd').sort((a, b) => this.sortByName(a, b)), - ...listing.filter(item => item.type === 'f').sort((a, b) => this.sortData(a, b)) - ] - } else { - listing = listing.sort((a, b) => this.sortData(a, b)) - } - return { firstItem, listing } - } - - rows = () => { - const { isActive, modalVisible, path, download } = this.props; - const { cursor } = this.state; - const { listing, firstItem } = this.getDataBySortingType() - - if (listing.length || firstItem) { - return ( - <> - { - this.setState({ cursor }); - this.props.passData(cursor, name, permissions, type); - }} - openDirectory={this.moveBack} - modalVisible={modalVisible} - activeRow={0 === cursor} - isActiveList={isActive} - cursor={0} - data={firstItem} - path={path} /> - { - listing.map((item, key) => ( - { - this.setState({ cursor }); - this.props.passData(cursor, name, permissions, type); - }} - selectMultiple={() => this.addToSelection(item.name)} - selected={this.isSelected(item.name)} - openDirectory={this.openDirectory} - modalVisible={modalVisible} - activeRow={key + 1 === cursor} - isActiveList={isActive} - download={download} - cursor={key + 1} - data={item} - path={path} /> - )) - } - - ); - } - } - - render() { - const { isActive, path, loading } = this.props; - return ( -
- -
-
    - {loading && isActive ? : this.rows()} -
-
-
- ); - } -} - -export default DirectoryList; diff --git a/src/react/src/components/Lists/List.scss b/src/react/src/components/Lists/List.scss deleted file mode 100644 index ae3a3ceb8..000000000 --- a/src/react/src/components/Lists/List.scss +++ /dev/null @@ -1,56 +0,0 @@ -.list { - width: 50%; - height: 100vh; - flex: 1 1 50%; - - .list-container { - margin-top: 10px; - height: calc(100% - 100px); - overflow: auto; - - ul { - margin-top: 5px; - padding: 0; - color: #3a3a3a; - - li { - display: block; - height: 34px; - line-height: 30px; - font-size: 15px; - margin-top: 2px; - list-style: none; - - span { - font-size: 13px; - } - - &:hover{ - background: #DEDEDE; - } - } - - li.active { - background: #FFDC5A; - - .marker { - float: left; - width: 4px; - height: 34px; - margin-right: 5px; - background: #79641a; - } - } - - li.selected { - background: #fdfdbb; - } - } - } -} - -@media screen and (max-width: 1200px){ - .permissions, .owner { - display: none; - } -} \ No newline at end of file diff --git a/src/react/src/components/Lists/Row/Row.jsx b/src/react/src/components/Lists/Row/Row.jsx deleted file mode 100644 index c45c70e1a..000000000 --- a/src/react/src/components/Lists/Row/Row.jsx +++ /dev/null @@ -1,205 +0,0 @@ -import React, { Component } from 'react'; -import { withRouter } from 'react-router-dom'; -import PropTypes from 'prop-types'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faJs, faCss3, faPhp, faHtml5, faSass } from '@fortawesome/free-brands-svg-icons'; -import './Row.scss'; -import { connect } from 'react-redux'; -import dayjs from 'dayjs' - -class Row extends Component { - static propTypes = { - selectMultiple: PropTypes.func, - selectOnClick: PropTypes.func, - openDirectory: PropTypes.func, - modalVisible: PropTypes.bool, - isActiveList: PropTypes.bool, - activeRow: PropTypes.bool, - selected: PropTypes.func, - download: PropTypes.func, - cursor: PropTypes.number, - path: PropTypes.string, - key: PropTypes.number, - data: PropTypes.array - } - - componentDidMount = () => { - document.addEventListener("keydown", this.openOnEnter); - } - - componentWillUnmount = () => { - document.removeEventListener("keydown", this.openOnEnter); - } - - openOnEnter = (e) => { - const { activeRow, data: { name, type }, isActiveList, modalVisible, openDirectory, cursor, download, path } = this.props; - - if (modalVisible || !activeRow || !isActiveList) { - return; - } - - if (e.keyCode === 13) { - if (this.isArchive(name) || type === "l") { - download(); - } else if (this.isFile(type) && cursor !== 0) { - this.changePath(path, name); - } else { - openDirectory(name); - } - } - } - - openItem = () => { - const { data: { type, name }, openDirectory, download, path, isActiveList } = this.props; - - if (!isActiveList) { - return; - } - - if (this.isArchive(name) || type === "l" || name.match('.mp4')) { - return download(); - } else if (this.isFile(type)) { - return this.changePath(path, name); - } else if (type === 'd') { - return openDirectory(name); - } - } - - changePath = (path, name) => { - this.props.history.push({ - pathname: '/list/directory/preview/', - search: `?path=${path}/${name}` - }); - } - - selectRow = (e) => { - const { data: { name, permissions, type }, selectMultiple, selectOnClick, cursor, activeRow } = this.props; - - if (e.ctrlKey && cursor !== 0) { - selectMultiple(); - } - - if (activeRow) { - return; - } - - selectOnClick(cursor, name, permissions, type); - } - - className = () => { - const { activeRow, selected, isActiveList } = this.props; - - if (isActiveList) { - let isActive = activeRow ? 'active' : ''; - let isSelected = selected ? 'selected' : ''; - return isActive.length ? isActive : isSelected; - } else { - let isActive = activeRow ? 'inactive' : ''; - let isSelected = selected ? 'inactive-selected' : ''; - return isActive.length ? isActive : isSelected; - } - } - - sizeFormatter = (bytes, decimals) => { - if (bytes === undefined || this.props.data.type === "d") { - return null; - }; - - if (bytes === "0") { - return 0 b; - } - - let k = 1024, - dm = decimals <= 0 ? 0 : decimals || 2, - sizes = ['b', 'kb', 'Mb', 'GB'], - i = Math.floor(Math.log(bytes) / Math.log(k)); - return ({parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} {sizes[i]}); - } - - dateFormatter = (fDate) => { - if (fDate === undefined) { - return null; - } - - let date = new Date(fDate), - months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], - getDay = date.getDate(), - getMonth = this.props.session.i18n[months[date.getMonth()]]; - return ({getMonth} {getDay}); - } - - timeFormatter = (date = new Date(), time) => { - const year = dayjs(date).year() - const currentYear = dayjs().year() - if (year === currentYear) return time - return year - } - - glyph = () => { - const { data: { type, name } } = this.props; - - if (type === 'd') { - return ; - } - - if (this.isFile(type)) { - if (this.isArchive(name)) { - return ; - } else if (name.match(/png|jpg|jpeg|gif/g)) { - return ; - } else if (name.match('.mp4') !== null) { - return ; - } else if (name.match('.txt')) { - return ; - } else if (name.match('.js')) { - return ; - } else if (name.match('.html')) { - return ; - } else if (name.match('.php')) { - return ; - } else if (name.match(/.scss/i)) { - return ; - } else if (name.match(/.css/i)) { - return ; - } else { - return ; - } - } - - if (type === "l") { - return ; - } - } - - isArchive(name) { - return name.match(/zip|tgz|tar.gz|gzip|tbz|tar.bz|gz|zip|tar|rar/g); - } - - isFile(type) { - return type === 'f'; - } - - render() { - const { data: { name, owner, permissions, size, date, time } } = this.props; - return ( -
  • - - {this.glyph()} - this.openItem(e)}>{this.props.cursor === 0 ? ".." : name} - {permissions} - {owner} - {this.sizeFormatter(size)} - {this.dateFormatter(date)} - {this.timeFormatter(date, time)} -
  • - ); - } -} - -function mapStateToProps(state) { - return { - session: state.session - } -} - -export default connect(mapStateToProps)(withRouter(Row)); diff --git a/src/react/src/components/Lists/Row/Row.scss b/src/react/src/components/Lists/Row/Row.scss deleted file mode 100644 index 3f56182a3..000000000 --- a/src/react/src/components/Lists/Row/Row.scss +++ /dev/null @@ -1,181 +0,0 @@ -@import 'src/utils/scss/variables'; - -.list .list-container ul li svg { - width: 25px; - vertical-align: top; - margin-top: 9px; - margin-left: 10px; -} - -.html5 { - color: #f16529; -} - -.file-alt { - color: #20d2d1; -} - -.list .list-container ul li { - .marker { - float: left; - width: 4px; - height: 34px; - margin-right: 5px; - } -} - -.list .list-container ul li .js { - width: 16px; - color: #f7df1c; - background: black; - margin: 9px 4px 0 15px; -} - -.php { - color: #777bb3; -} - -.css3 { - color: #0079cb; -} - -.sass { - color: #cd6699; -} - -.image { - color: #36afae; -} - -.folder-open { - color: #e29741; -} - -.file { - color: #11b1b1; -} - -.archive { - color: rgb(209, 206, 43); -} - -.download { - color: #929ca3; -} - -.fOwner, -.fPermissions, -.fSize, -.fDate, -.fTime { - font-size: 14px; - float: right; - width: 60px; - padding-top: 2px; -} - -.list .list-container ul li .fName { - margin-left: 5px; - width: 260px; - display: inline-block; - overflow: hidden; - text-overflow: clip; - - .name { - padding: 0 5px; - float: left; - margin-left: 5px; - line-height: 34px; - font-size: 15px; - white-space: nowrap; - transition: all ease-out 0.3s; - - &:hover { - transition: all ease-out 0.2s; - background: rgb(201, 199, 199); - border-radius: 4px; - cursor: pointer; - } - } -} - -.list .list-container ul li.active .fName .name:hover { - background: #f0b607; - color: black; -} - -.list .list-container ul li .fPermissions { - margin-left: 35px; - width: 50px; - color: #727272; - font-size: 11px; -} - -.list .list-container ul li .fDate .date { - color: #727272; - font-size: 11px; -} -.list .list-container ul li .fTime { - color: #727272; - font-size: 11px; - width: 54px; -} - -.fSize { - padding-right: 15px; - text-align: right; - width: 95px; -} - -.list .list-container ul li .fOwner { - color: #896417; - font-style: italic; - width: 50px; - font-size: 12px; - margin-right: 5px; -} - -.value { - color: $primary; -} - -.unit { - font-weight: bolder; - color: #727272; -} - -li.inactive { - .marker { - float: left; - width: 4px; - height: 34px; - margin-right: 5px; - background: rgb(163, 163, 163); - } - - background: rgb(201, 199, 199); -} - -.inactive-selected { - background: rgb(220, 220, 220); -} - -@media (max-width: 1320px) { - .list .list-container ul li { - .fName { - width: 210px; - } - .fSize { - width: 75px; - } - .fDate { - width: 40px; - } - .fTime { - width: 50px; - } - .fPermissions { - margin: 0; - } - } -} diff --git a/src/react/src/components/Log/Log.jsx b/src/react/src/components/Log/Log.jsx deleted file mode 100644 index 44736c08e..000000000 --- a/src/react/src/components/Log/Log.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; -import Container from '../ControlPanel/Container/Container'; -import './Log.scss'; - -const Log = props => { - const { data } = props; - - const printDate = date => { - let newDate = new Date(date); - let day = newDate.getDate(); - let month = newDate.getMonth(); - let year = newDate.getFullYear(); - let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - - return
    {day}   {months[month]}   {year}
    ; - } - - return ( -
    - - {printDate(data.DATE)} - {data.TIME} - - -
    {data.CMD}
    -
    -
    - ); -} - -export default Log; \ No newline at end of file diff --git a/src/react/src/components/Log/Log.scss b/src/react/src/components/Log/Log.scss deleted file mode 100644 index c6478bab9..000000000 --- a/src/react/src/components/Log/Log.scss +++ /dev/null @@ -1,38 +0,0 @@ -.logs-list { - .toolbar { - padding: 6px 13%; - } - - .statistic-item { - .l-col { - font-size: 13px; - color: #888; - - .date { - margin: 1rem 0; - margin-bottom: 1.5rem; - } - } - - .r-col { - .name { - margin-top: .7rem; - font-size: 18px; - } - } - } - - .statistic-item.focused { - border-left: 2px solid #5edad0; - - div.name { - color: #5edad0; - } - } -} - -@media (max-width: 1350px) { - .logs-list .toolbar { - padding: 6px 9.5%; - } -} \ No newline at end of file diff --git a/src/react/src/components/Login/Login.scss b/src/react/src/components/Login/Login.scss deleted file mode 100644 index 5e6e5adeb..000000000 --- a/src/react/src/components/Login/Login.scss +++ /dev/null @@ -1,140 +0,0 @@ -@import 'src/utils/scss/variables'; -@import 'src/utils/scss/breakpoints'; - -.login-page { - display: flex; - justify-content: center; - align-items: center; - width: 100%; - height: 100vh; - background-color: #eee; - - .login-form-wrapper { - background-color: #fff; - box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); - font-family: Arial,Helvetica,sans-serif; - margin: 0; - padding: 0; - text-align: left; - width: 575px; - - .login-layout { - position: relative; - - > span { - position: absolute; - bottom: 0; - right: 20px; - font-size: 11px; - - a { - color: #505050; - } - } - } - - form { - display: flex; - position: relative; - - > div { - input[type="text"], - input[type="password"] { - width: 100%; - } - } - - .c1 { - display: flex; - justify-content: center; - align-items: center; - width: 35%; - - img { - width: 110%; - } - } - - .c2 { - width: 65%; - margin-left: 3.5rem; - - .forgot-password { - font-size: 11px; - text-transform: uppercase; - letter-spacing: .75px; - text-decoration: none; - } - - button[type="submit"] { - background-color: $primary; - border: 1px solid $primary; - padding: 1px 16px 3px; - font-size: 13px; - height: 35px; - color: #fafafa; - border-radius: 3px; - - &:hover { - color: $primary; - border: 1px solid $primaryLight; - background-color: $primaryLight; - } - - &:active { - color: #fafafa; - border: 1px solid $primary; - background-color: $primary; - } - - .disabled { - cursor: not-allowed; - } - } - - div.error-message { - margin-top: 1rem; - color: #BE5ABF; - } - } - } - } - - @media (max-width: $tabletMax) { - .login-form-wrapper { - margin: 2rem; - - .login-layout { - form { - flex-direction: column; - justify-content: center; - align-items: center; - - .c1 { - width: 100%; - margin-bottom: 1.5rem; - - a { - text-align: center; - - img { - width: 75%; - } - } - } - - .c2 { - margin: 0; - width: 100%; - } - - .buttons-wrapper { - .add { - margin-bottom: 10px; - } - } - } - } - } - } -} diff --git a/src/react/src/components/Login/LoginForm.jsx b/src/react/src/components/Login/LoginForm.jsx deleted file mode 100644 index 47900a574..000000000 --- a/src/react/src/components/Login/LoginForm.jsx +++ /dev/null @@ -1,107 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import { Link, useHistory } from 'react-router-dom'; -import Spinner from '../Spinner/Spinner'; -import { useDispatch, useSelector } from 'react-redux'; -import { login } from '../../actions/Session/sessionActions'; -import LoginLayout from '../ControlPanel/LoginLayout/LoginLayout'; -import TextInput from '../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; - -import './Login.scss'; -import { Helmet } from 'react-helmet'; - -export default function LoginForm() { - const { i18n } = useSelector(state => state.session); - const dispatch = useDispatch(); - const history = useHistory(); - const [loading, setLoading] = useState(false); - const [formValues, setFormValues] = useState({ - user: '', - password: '' - }); - const session = useSelector(state => state.session); - const [errorMessage, setErrorMessage] = useState(''); - - useEffect(() => { - if (session.error) { - setErrorMessage(session.error); - return; - } - - if (session.token && session.userName) { - history.push('/list/user/'); - } - }, [session]); - - const submitHandler = event => { - event.preventDefault(); - const { user, password } = formValues; - - setLoading(true); - - dispatch(login(user, password)) - .then((res) => { - setLoading(false); - }); - } - - const changeInputHandler = event => { - const { value, name } = event.target; - - setFormValues({ - ...formValues, - [name]: value - }); - } - - return ( -
    - - {`Vesta - ${i18n.LOGIN ?? 'LOGIN'}`} - - {loading && } -
    - -
    -
    - - Logo - -
    -
    - - - - {i18n['forgot password'] ?? 'forgot password'} - - )} - name="password" - type="password" - id="password" /> - - - -
    {errorMessage}
    -
    -
    - - - vestacp.com - -
    -
    -
    - ); -} diff --git a/src/react/src/components/Mail/Add/AddMail.jsx b/src/react/src/components/Mail/Add/AddMail.jsx deleted file mode 100644 index 92378a714..000000000 --- a/src/react/src/components/Mail/Add/AddMail.jsx +++ /dev/null @@ -1,142 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { addMail } from '../../../ControlPanelService/Mail'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import Spinner from '../../Spinner/Spinner'; -import { useDispatch, useSelector } from 'react-redux'; - -import './AddMail.scss' -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const AddMail = props => { - const { i18n } = useSelector(state => state.session); - const dispatch = useDispatch(); - const token = localStorage.getItem("token"); - const history = useHistory(); - const [state, setState] = useState({ - loading: false, - antiSpamChecked: true, - antiVirusChecked: true, - dkimChecked: true, - okMessage: '', - errorMessage: '', - }); - - useEffect(() => { - dispatch(addActiveElement('/list/mail/')); - dispatch(removeFocusedElement()); - }, []); - - const submitFormHandler = event => { - event.preventDefault(); - let newMailDomain = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - newMailDomain[name] = value; - } - - if (Object.keys(newMailDomain).length !== 0 && newMailDomain.constructor === Object) { - setState({ ...state, loading: true }); - addMail(newMailDomain) - .then(result => { - if (result.status === 200) { - const { error_msg: errorMessage, ok_msg: okMessage } = result.data; - - if (errorMessage) { - setState({ ...state, errorMessage, okMessage, loading: false }); - } else { - dispatch(refreshCounters()).then(() => { - setState({ ...state, okMessage, errorMessage: '', loading: false }); - }); - } - } - }) - .catch(err => console.error(err)); - } - } - - return ( -
    - - {`Vesta - ${i18n.MAIL}`} - - -
    -
    {i18n['Adding Mail Domain']}
    -
    - - {state.errorMessage ? : ''} - {state.errorMessage} -
    -
    - - {state.okMessage ? : ''} - {HtmlParser(state.okMessage)} - -
    -
    - - {state.loading ? : ( -
    submitFormHandler(event)}> - - - -
    - - -
    - -
    -
    - setState({ ...state, antiSpamChecked: event.target.checked })} - checked={state.antiSpamChecked} /> - -
    -
    - -
    -
    - setState({ ...state, antiVirusChecked: event.target.checked })} - checked={state.antiVirusChecked} /> - -
    -
    - -
    -
    - setState({ ...state, dkimChecked: event.target.checked })} - checked={state.dkimChecked} /> - -
    -
    - -
    - - -
    -
    - )} -
    -
    - ); -} - -export default AddMail; \ No newline at end of file diff --git a/src/react/src/components/Mail/Add/AddMail.scss b/src/react/src/components/Mail/Add/AddMail.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/react/src/components/Mail/Edit/EditMail.jsx b/src/react/src/components/Mail/Edit/EditMail.jsx deleted file mode 100644 index 13b801809..000000000 --- a/src/react/src/components/Mail/Edit/EditMail.jsx +++ /dev/null @@ -1,152 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import Checkbox from '../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox'; -import { getMailInfo, updateMail } from '../../../ControlPanelService/Mail'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Spinner from '../../../components/Spinner/Spinner'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import QS from 'qs'; - -import './EditMail.scss'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const EditMail = props => { - const token = localStorage.getItem("token"); - const { i18n } = useSelector(state => state.session); - const history = useHistory(); - const dispatch = useDispatch(); - const [errorMessage, setErrorMessage] = useState(''); - const [okMessage, setOkMessage] = useState(''); - const [state, setState] = useState({ - data: {}, - loading: false - }); - - useEffect(() => { - let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true }); - const { domain } = queryParams; - - dispatch(addActiveElement('/list/mail/')); - dispatch(removeFocusedElement()); - - if (domain) { - setState({ ...state, loading: true }); - fetchData(domain); - } - }, []); - - const fetchData = domain => { - getMailInfo(domain) - .then(response => { - setState({ - ...state, - data: response.data, - loading: false - }); - }) - .catch(err => { - setState({ ...state, loading: false }); - console.error(err); - }); - } - - const submitFormHandler = event => { - event.preventDefault(); - let updatedDomain = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - updatedDomain[name] = value; - } - - updatedDomain['v_domain'] = state.data.domain; - - if (Object.keys(updatedDomain).length !== 0 && updatedDomain.constructor === Object) { - setState({ ...state, loading: true }); - - updateMail(updatedDomain, state.data.domain) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - if (error_msg) { - setErrorMessage(error_msg); - setOkMessage(''); - } else { - dispatch(refreshCounters()).then(() => { - setErrorMessage(''); - setOkMessage(ok_msg); - }); - } - } - }) - .then(() => fetchData(state.data.domain)) - .catch(err => console.error(err)); - } - } - - return ( -
    - - {`Vesta - ${i18n.MAIL}`} - - -
    -
    {i18n['Editing Mail Domain']}
    -
    - - {errorMessage ? : ''} {errorMessage} - -
    -
    - - {okMessage ? : ''} {HtmlParser(okMessage)} - -
    -
    - - {state.loading ? : -
    submitFormHandler(event)} id="edit-mail"> - - - - - - - - - - - - - -
    - - -
    - - - } -
    -
    - ); -} - -export default EditMail; \ No newline at end of file diff --git a/src/react/src/components/Mail/Edit/EditMail.scss b/src/react/src/components/Mail/Edit/EditMail.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/react/src/components/Mail/Mail.jsx b/src/react/src/components/Mail/Mail.jsx deleted file mode 100644 index d3c9d7127..000000000 --- a/src/react/src/components/Mail/Mail.jsx +++ /dev/null @@ -1,115 +0,0 @@ -import React, { Component } from 'react'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Container from '../ControlPanel/Container/Container'; -import ListItem from '../ControlPanel/ListItem/ListItem'; -import { Link } from 'react-router-dom'; -import './Mail.scss'; -import { useSelector } from 'react-redux'; - -const Mail = props => { - const { data } = props; - const { i18n } = useSelector(state => state.session); - const token = localStorage.getItem("token"); - const printStat = (stat, text) => { - if (text === 'no') { - return
    {stat}
    ; - } - - return
    {stat}: {text}
    ; - } - - const toggleFav = (starred) => { - if (starred) { - props.toggleFav(props.data.NAME, 'add'); - } else { - props.toggleFav(props.data.NAME, 'delete'); - } - } - - const checkItem = () => { - props.checkItem(props.data.NAME); - } - - const handleSuspend = () => { - let suspendedStatus = data.SUSPENDED === 'yes' ? 'unsuspend' : 'suspend' === 'yes' ? 'unsuspend' : 'suspend'; - props.handleModal(data.suspend_conf, `/api/v1/${suspendedStatus}/mail/index.php?domain=${data.NAME}`); - } - - const handleDelete = () => { - props.handleModal(data.delete_conf, `/api/v1/delete/mail/index.php?domain=${data.NAME}`); - } - - return ( - - - -
    {data.NAME}
    -
    - -
    - {i18n.Disk} - {data.U_DISK}{i18n.mb} -
    -
    -
    - - {printStat(i18n['AntiVirus Support'], data.ANTIVIRUS)} - {printStat(i18n['DKIM Support'], data.DKIM)} - - - {printStat(i18n['AntiSpam Support'], data.ANTISPAM)} -
    {i18n['Catchall email']}: {data.CATCHALL}
    -
    -
    -
    -
    -
    - - {data.list_accounts_button} - {data.FOCUSED ? L : } - -
    - -
    - - {i18n['add account']} - {data.FOCUSED ? N : } - -
    - -
    - - {i18n.edit} - {data.FOCUSED ? : } - -
    - -
    - -
    - -
    - -
    -
    -
    - ); -} - -export default Mail; \ No newline at end of file diff --git a/src/react/src/components/Mail/Mail.scss b/src/react/src/components/Mail/Mail.scss deleted file mode 100644 index 452bf075f..000000000 --- a/src/react/src/components/Mail/Mail.scss +++ /dev/null @@ -1,7 +0,0 @@ -.crossed { - text-decoration: line-through; -} - -.catchall-mail { - text-transform: none; -} diff --git a/src/react/src/components/MailAccount/Add/AddMailAccount.jsx b/src/react/src/components/MailAccount/Add/AddMailAccount.jsx deleted file mode 100644 index 8e68af96f..000000000 --- a/src/react/src/components/MailAccount/Add/AddMailAccount.jsx +++ /dev/null @@ -1,215 +0,0 @@ -import React, { useEffect, useState } from 'react'; - -import TextInputWithExtraButton from 'src/components/ControlPanel/AddItemLayout/Form/TextInputWithExtraButton/TextInputWithExtraButton'; -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import TextInput from 'src/components/ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import Password from 'src/components/ControlPanel/AddItemLayout/Form/Password/Password'; -import TextArea from 'src/components/ControlPanel/AddItemLayout/Form/TextArea/TextArea'; -import Checkbox from 'src/components/ControlPanel/AddItemLayout/Form/Checkbox/Checkbox'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { addMailAccount, getMailList } from '../../../ControlPanelService/Mail'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import MailInfoBlock from '../MailInfoBlock/MailInfoBlock'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import { useHistory } from 'react-router-dom'; -import Spinner from '../../Spinner/Spinner'; -import { useDispatch, useSelector } from 'react-redux'; - -import './AddMailAccount.scss'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -export default function AddMailAccount(props) { - const { i18n } = useSelector(state => state.session); - const dispatch = useDispatch(); - const token = localStorage.getItem("token"); - const history = useHistory(); - const [state, setState] = useState({ - data: {}, - advancedOptions: false, - autoreplyChecked: false, - quotaValue: '', - loading: false, - password: '', - userName: '', - okMessage: '', - errorMessage: '', - }); - - useEffect(() => { - dispatch(addActiveElement(`/list/mail/`)); - dispatch(removeFocusedElement()); - - fetchData(); - }, []); - - const submitFormHandler = event => { - event.preventDefault(); - let newMailDomain = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - newMailDomain[name] = value; - } - - newMailDomain['ok_acc'] = 'add'; - newMailDomain['token'] = token; - newMailDomain['v_domain'] = props.domain; - newMailDomain['v_password'] = state.password; - - if (!newMailDomain['v_quota']) newMailDomain['v_quota'] = ''; - if (!newMailDomain['v_aliases']) newMailDomain['v_aliases'] = ''; - if (!newMailDomain['v_fwd']) newMailDomain['v_fwd'] = ''; - - if (Object.keys(newMailDomain).length !== 0 && newMailDomain.constructor === Object) { - setState({ ...state, loading: true }); - addMailAccount(newMailDomain, props.domain) - .then(result => { - if (result.status === 200) { - const { error_msg: errorMessage, ok_msg: okMessage } = result.data; - - if (errorMessage) { - setState({ ...state, errorMessage, okMessage, loading: false }); - } else { - dispatch(refreshCounters()).then(() => { - setState({ ...state, okMessage, errorMessage: '', loading: false }); - }); - } - } - }) - .catch(err => console.error(err)); - } - } - - const fetchData = () => { - setState({ ...state, loading: true }); - - getMailList() - .then(response => { - setState({ - ...state, - data: response.data, - errorMessage: response.data['error_msg'], - okMessage: response.data['ok_msg'], - loading: false - }); - }) - .catch(err => console.error(err)); - } - - const toggleOptions = () => { - setState({ ...state, advancedOptions: !state.advancedOptions }); - } - - const toggleQuotaValue = () => { - if (state.quotaValue !== 'unlimited') { - setState({ ...state, quotaValue: 'unlimited' }); - } else { - setState({ ...state, quotaValue: '' }); - } - } - - return ( -
    - - {`Vesta - ${i18n.MAIL}`} - - -
    -
    {i18n['Adding Mail Account']}
    -
    - - {state.errorMessage ? : ''} - {state.errorMessage} -
    -
    - - {state.okMessage ? : ''} - {HtmlParser(state.okMessage)} - -
    -
    - - {state.loading ? : ( -
    submitFormHandler(event)}> -
    -
    - - - setState({ ...state, userName: e.target.value })} - name="v_account" - id="account" /> - - setState({ ...state, password })} /> -
    - -
    - -
    -
    - -
    - - - { - state.advancedOptions && ( - <> - - - - - -
    - - { - panel[userName]['DNS_DOMAINS'] !== '0' && ( - checkboxHandler('dnsSupport', checked)} - name="v_dns" - id="dns-support" - title={i18n['DNS Support'] ?? 'DNS Support'} - defaultChecked={state.dnsSupport} /> - ) - } - - { - panel[userName]['MAIL_DOMAINS'] !== '0' && ( - checkboxHandler('mailSupport', checked)} - name="v_mail" - id="mail-support" - title={i18n['Mail Support'] ?? 'Mail Support'} - defaultChecked={state.mailSupport} /> - ) - } - - { - session.PROXY_SYSTEM && ( - <> - checkboxHandler('proxySupport', checked)} - name="v_proxy" - id="proxy" - title={i18n['Proxy Support'] ?? 'Proxy Support'} - defaultChecked={state.proxySupport} /> - - { - state.proxySupport && (
    - -
    - -
    - - -
    -
    - ); -} - -export default SslSupport; diff --git a/src/react/src/components/WebDomain/Add/SslSupport/SslSupport.scss b/src/react/src/components/WebDomain/Add/SslSupport/SslSupport.scss deleted file mode 100644 index 7ea191a32..000000000 --- a/src/react/src/components/WebDomain/Add/SslSupport/SslSupport.scss +++ /dev/null @@ -1,8 +0,0 @@ -.ssl-support { - transform: translateX(3rem); - - .lets-encrypt-span { - font-style: italic; - color: #89a40a; - } -} \ No newline at end of file diff --git a/src/react/src/components/WebDomain/Edit/EditWeb.jsx b/src/react/src/components/WebDomain/Edit/EditWeb.jsx deleted file mode 100644 index e38e5d181..000000000 --- a/src/react/src/components/WebDomain/Edit/EditWeb.jsx +++ /dev/null @@ -1,358 +0,0 @@ -import React, { useEffect, useState } from 'react'; -import { addActiveElement, removeFocusedElement } from "../../../actions/MainNavigation/mainNavigationActions"; -import { updateWebDomain, getDomainInfo } from '../../../ControlPanelService/Web'; -import Password from '../../../components/ControlPanel/AddItemLayout/Form/Password/Password'; -import SelectInput from '../../ControlPanel/AddItemLayout/Form/SelectInput/SelectInput'; -import AdditionalFtpWrapper from '../Add/AdditionalFtpWrapper/AdditionalFtpWrapper'; -import TextInput from '../../ControlPanel/AddItemLayout/Form/TextInput/TextInput'; -import Checkbox from '../../ControlPanel/AddItemLayout/Form/Checkbox/Checkbox'; -import AddItemLayout from '../../ControlPanel/AddItemLayout/AddItemLayout'; -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import Spinner from '../../../components/Spinner/Spinner'; -import Toolbar from '../../MainNav/Toolbar/Toolbar'; -import SslSupport from './SslSupport/SslSupport'; -import { useHistory } from 'react-router-dom'; -import { useDispatch, useSelector } from 'react-redux'; -import GenerateSSL from 'src/containers/GenerateCSR'; -import 'src/components/Modal/Modal.scss'; -import QS from 'qs'; - -import './EditWeb.scss'; -import TextArea from '../../ControlPanel/AddItemLayout/Form/TextArea/TextArea'; -import { Helmet } from 'react-helmet'; -import { refreshCounters } from 'src/actions/MenuCounters/menuCounterActions'; -import HtmlParser from 'react-html-parser'; - -const EditWeb = props => { - const token = localStorage.getItem("token"); - const { i18n } = useSelector(state => state.session); - const { session } = useSelector(state => state.userSession); - const history = useHistory(); - const dispatch = useDispatch(); - const [errorMessage, setErrorMessage] = useState(''); - const [modalVisible, setModalVisible] = useState(false); - const [okMessage, setOkMessage] = useState(''); - const [state, setState] = useState({ - data: {}, - domain: '', - webStat: '', - sslSupport: false, - letsEncrypt: false, - additionalFtp: false, - proxySupport: false, - statAuth: false, - loading: false - }); - - useEffect(() => { - let queryParams = QS.parse(history.location.search, { ignoreQueryPrefix: true }); - const { domain } = queryParams; - - dispatch(addActiveElement('/list/web/')); - dispatch(removeFocusedElement()); - - if (domain) { - setState({ ...state, loading: true }); - fetchData(domain); - } - }, []); - - const fetchData = domain => { - getDomainInfo(domain) - .then(response => { - setState({ - ...state, - domain, - webStat: response.data.v_stats ? response.data.v_stats : 'none', - sslSupport: response.data.ssl === 'yes', - letsEncrypt: response.data.letsencrypt === 'yes', - proxySupport: !!response.data.proxy, - data: response.data, - additionalFtp: !!response.data.ftp_user, - statAuth: response.data.stats_user, - loading: false - }); - }) - .catch(err => console.error(err)); - } - - const submitFormHandler = event => { - event.preventDefault(); - let updatedDomain = {}; - - for (var [name, value] of (new FormData(event.target)).entries()) { - updatedDomain[name] = value; - } - - updatedDomain['v_domain'] = state.domain; - - if (updatedDomain['v_ssl'] === 'on') { - updatedDomain['v_ssl'] = 'yes'; - } else { - delete updatedDomain['v_ssl']; - } - - if (updatedDomain['v_letsencrypt'] === 'on') { - updatedDomain['v_letsencrypt'] = 'yes'; - } else { - delete updatedDomain['v_letsencrypt']; - } - - if (!updatedDomain['v_ssl_ca']) { - delete updatedDomain['v_ssl_ca']; - } - - if (!updatedDomain['v_ssl_crt']) { - delete updatedDomain['v_ssl_crt']; - } - - if (!updatedDomain['v_ssl_key']) { - delete updatedDomain['v_ssl_key']; - } - - if (Object.keys(updatedDomain).length !== 0 && updatedDomain.constructor === Object) { - setState({ ...state, loading: true }); - - updateWebDomain(updatedDomain, state.domain) - .then(result => { - if (result.status === 200) { - const { error_msg, ok_msg } = result.data; - - if (error_msg) { - setErrorMessage(error_msg); - setOkMessage(''); - setState({ ...state, loading: false }); - } else { - dispatch(refreshCounters()).then(() => { - setErrorMessage(''); - setOkMessage(ok_msg); - fetchData(state.domain); - }); - } - } - }) - .catch(err => console.error(err)); - } - } - - const formatData = object => { - let result = []; - - for (let i in object) { - result.push(i); - } - - return result; - } - - const onChangeSslSupport = checked => { - setState({ ...state, sslSupport: checked }); - } - - const onChangeProxySupport = checked => { - setState({ ...state, proxySupport: checked }); - } - - const onChangeWebStats = webStat => { - setState({ ...state, webStat }); - } - - const onChangeStatisticsAuth = statAuth => { - setState({ ...state, statAuth }); - } - - const onChangeAdditionalFtp = additionalFtp => { - setState({ ...state, additionalFtp }); - } - - return ( -
    - - {`Vesta - ${i18n.WEB}`} - - -
    -
    {i18n['Editing Domain']}
    -
    {errorMessage ? : ''} {errorMessage}
    -
    - {okMessage ? : ''} {HtmlParser(okMessage)} -
    -
    - - {state.loading ? : - submitFormHandler(event)} id="add-web"> - - - - - - - - + + + + + diff --git a/web/edit/firewall/index.php b/web/edit/firewall/index.php index 30e3dec0b..18b4be4ca 100644 --- a/web/edit/firewall/index.php +++ b/web/edit/firewall/index.php @@ -1 +1,88 @@ - + + + + $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + // Protect input + $v_package = escapeshellarg($_POST['v_package']); + $v_web_template = escapeshellarg($_POST['v_web_template']); + if (!empty($_SESSION['WEB_BACKEND'])) { + $v_backend_template = escapeshellarg($_POST['v_backend_template']); + } + if (!empty($_SESSION['PROXY_SYSTEM'])) { + $v_proxy_template = escapeshellarg($_POST['v_proxy_template']); + } + $v_dns_template = escapeshellarg($_POST['v_dns_template']); + $v_shell = escapeshellarg($_POST['v_shell']); + $v_web_domains = escapeshellarg($_POST['v_web_domains']); + $v_web_aliases = escapeshellarg($_POST['v_web_aliases']); + $v_dns_domains = escapeshellarg($_POST['v_dns_domains']); + $v_dns_records = escapeshellarg($_POST['v_dns_records']); + $v_mail_domains = escapeshellarg($_POST['v_mail_domains']); + $v_mail_accounts = escapeshellarg($_POST['v_mail_accounts']); + $v_databases = escapeshellarg($_POST['v_databases']); + $v_cron_jobs = escapeshellarg($_POST['v_cron_jobs']); + $v_backups = escapeshellarg($_POST['v_backups']); + $v_disk_quota = escapeshellarg($_POST['v_disk_quota']); + $v_bandwidth = escapeshellarg($_POST['v_bandwidth']); + $v_ns1 = trim($_POST['v_ns1'], '.'); + $v_ns2 = trim($_POST['v_ns2'], '.'); + $v_ns3 = trim($_POST['v_ns3'], '.'); + $v_ns4 = trim($_POST['v_ns4'], '.'); + $v_ns5 = trim($_POST['v_ns5'], '.'); + $v_ns6 = trim($_POST['v_ns6'], '.'); + $v_ns7 = trim($_POST['v_ns7'], '.'); + $v_ns8 = trim($_POST['v_ns8'], '.'); + $v_ns = $v_ns1.",".$v_ns2; + if (!empty($v_ns3)) $v_ns .= ",".$v_ns3; + if (!empty($v_ns4)) $v_ns .= ",".$v_ns4; + if (!empty($v_ns5)) $v_ns .= ",".$v_ns5; + if (!empty($v_ns6)) $v_ns .= ",".$v_ns6; + if (!empty($v_ns7)) $v_ns .= ",".$v_ns7; + if (!empty($v_ns8)) $v_ns .= ",".$v_ns8; + $v_ns = escapeshellarg($v_ns); + $v_time = escapeshellarg(date('H:i:s')); + $v_date = escapeshellarg(date('Y-m-d')); + + // Create temprorary directory + exec ('mktemp -d', $output, $return_var); + $tmpdir = $output[0]; + unset($output); + + // Save package file on a fs + $pkg = "WEB_TEMPLATE=".$v_web_template."\n"; + $pkg .= "BACKEND_TEMPLATE=".$v_backend_template."\n"; + $pkg .= "PROXY_TEMPLATE=".$v_proxy_template."\n"; + $pkg .= "DNS_TEMPLATE=".$v_dns_template."\n"; + $pkg .= "WEB_DOMAINS=".$v_web_domains."\n"; + $pkg .= "WEB_ALIASES=".$v_web_aliases."\n"; + $pkg .= "DNS_DOMAINS=".$v_dns_domains."\n"; + $pkg .= "DNS_RECORDS=".$v_dns_records."\n"; + $pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n"; + $pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n"; + $pkg .= "DATABASES=".$v_databases."\n"; + $pkg .= "CRON_JOBS=".$v_cron_jobs."\n"; + $pkg .= "DISK_QUOTA=".$v_disk_quota."\n"; + $pkg .= "BANDWIDTH=".$v_bandwidth."\n"; + $pkg .= "NS=".$v_ns."\n"; + $pkg .= "SHELL=".$v_shell."\n"; + $pkg .= "BACKUPS=".$v_backups."\n"; + $pkg .= "TIME=".$v_time."\n"; + $pkg .= "DATE=".$v_date."\n"; + $fp = fopen($tmpdir."/".$_POST['v_package'].".pkg", 'w'); + fwrite($fp, $pkg); + fclose($fp); + + // Save changes + exec (VESTA_CMD."v-add-user-package ".$tmpdir." ".$v_package." 'yes'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + + // Remove temporary dir + exec ('rm -rf '.$tmpdir, $output, $return_var); + unset($output); + + // Propogate new package + exec (VESTA_CMD."v-update-user-package ".$v_package." 'json'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Changes has been saved.'); + } +} + + +// Render page +render_page($user, $TAB, 'edit_package'); + +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); diff --git a/web/edit/server/apache2/index.php b/web/edit/server/apache2/index.php index 30e3dec0b..10eddb7cb 100644 --- a/web/edit/server/apache2/index.php +++ b/web/edit/server/apache2/index.php @@ -1 +1,58 @@ - + + + + + + + + + + + $value) { + $v_dns_cluster = 'yes'; +} + +// List Database hosts +exec (VESTA_CMD."v-list-database-hosts json", $output, $return_var); +$db_hosts = json_decode(implode('', $output), true); +unset($output); +$v_mysql_hosts = array_values(array_filter($db_hosts, function($host){return $host['TYPE'] === 'mysql';})); +$v_mysql = count($v_mysql_hosts) ? 'yes' : 'no'; +$v_pgsql_hosts = array_values(array_filter($db_hosts, function($host){return $host['TYPE'] === 'pgsql';})); +$v_pgsql = count($v_pgsql_hosts) ? 'yes' : 'no'; +unset($db_hosts); + +// List backup settings +$v_backup_dir = "/backup"; +if (!empty($_SESSION['BACKUP'])) $v_backup_dir = $_SESSION['BACKUP']; +$v_backup_gzip = '5'; +if (!empty($_SESSION['BACKUP_GZIP'])) $v_backup_gzip = $_SESSION['BACKUP_GZIP']; +$backup_types = explode(",",$_SESSION['BACKUP_SYSTEM']); +foreach ($backup_types as $backup_type) { + if ($backup_type == 'local') { + $v_backup = 'yes'; + } else { + exec (VESTA_CMD."v-list-backup-host ".$backup_type. " json", $output, $return_var); + $v_remote_backup = json_decode(implode('', $output), true); + unset($output); + $v_backup_host = $v_remote_backup[$backup_type]['HOST']; + $v_backup_type = $v_remote_backup[$backup_type]['TYPE']; + $v_backup_username = $v_remote_backup[$backup_type]['USERNAME']; + $v_backup_password = ""; + $v_backup_port = $v_remote_backup[$backup_type]['PORT']; + $v_backup_bpath = $v_remote_backup[$backup_type]['BPATH']; + } +} + +// List ssl certificate info +exec (VESTA_CMD."v-list-sys-vesta-ssl json", $output, $return_var); +$ssl_str = json_decode(implode('', $output), true); +unset($output); +$v_ssl_crt = $ssl_str['VESTA']['CRT']; +$v_ssl_key = $ssl_str['VESTA']['KEY']; +$v_ssl_ca = $ssl_str['VESTA']['CA']; +$v_ssl_subject = $ssl_str['VESTA']['SUBJECT']; +$v_ssl_aliases = $ssl_str['VESTA']['ALIASES']; +$v_ssl_not_before = $ssl_str['VESTA']['NOT_BEFORE']; +$v_ssl_not_after = $ssl_str['VESTA']['NOT_AFTER']; +$v_ssl_signature = $ssl_str['VESTA']['SIGNATURE']; +$v_ssl_pub_key = $ssl_str['VESTA']['PUB_KEY']; +$v_ssl_issuer = $ssl_str['VESTA']['ISSUER']; + +// Check POST request +if (!empty($_POST['save'])) { + + // Check token + if ((!isset($_POST['token'])) || ($_SESSION['token'] != $_POST['token'])) { + header('location: /login/'); + exit(); + } + + // Change hostname + if ((!empty($_POST['v_hostname'])) && ($v_hostname != $_POST['v_hostname'])) { + exec (VESTA_CMD."v-change-sys-hostname ".escapeshellarg($_POST['v_hostname']), $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_hostname = $_POST['v_hostname']; + } + + // Change timezone + if (empty($_SESSION['error_msg'])) { + if (!empty($_POST['v_timezone'])) { + $v_tz = $_POST['v_timezone']; + if ($v_tz == 'UTC' ) $v_tz = 'Etc/UTC'; + if ($v_tz == 'HAST' ) $v_tz = 'Pacific/Honolulu'; + if ($v_tz == 'HADT' ) $v_tz = 'US/Aleutian'; + if ($v_tz == 'AKST' ) $v_tz = 'Etc/GMT+9'; + if ($v_tz == 'AKDT' ) $v_tz = 'America/Anchorage'; + if ($v_tz == 'PST' ) $v_tz = 'America/Dawson_Creek'; + if ($v_tz == 'PDT' ) $v_tz = 'PST8PDT'; + if ($v_tz == 'MDT' ) $v_tz = 'MST7MDT'; + if ($v_tz == 'CST' ) $v_tz = 'Canada/Saskatchewan'; + if ($v_tz == 'CDT' ) $v_tz = 'CST6CDT'; + if ($v_tz == 'EDT' ) $v_tz = 'EST5EDT'; + if ($v_tz == 'AST' ) $v_tz = 'America/Puerto_Rico'; + if ($v_tz == 'ADT' ) $v_tz = 'America/Halifax'; + + if ($v_timezone != $v_tz) { + exec (VESTA_CMD."v-change-sys-timezone ".escapeshellarg($v_tz), $output, $return_var); + check_return_code($return_var,$output); + $v_timezone = $v_tz; + unset($output); + } + } + } + + // Change default language + if (empty($_SESSION['error_msg'])) { + if ((!empty($_POST['v_language'])) && ($_SESSION['LANGUAGE'] != $_POST['v_language'])) { + exec (VESTA_CMD."v-change-sys-language ".escapeshellarg($_POST['v_language']), $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $_SESSION['LANGUAGE'] = $_POST['v_language']; + } + } + + // Set disk_quota support + if (empty($_SESSION['error_msg'])) { + if ((!empty($_POST['v_quota'])) && ($_SESSION['DISK_QUOTA'] != $_POST['v_quota'])) { + if($_POST['v_quota'] == 'yes') { + exec (VESTA_CMD."v-add-sys-quota", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $_SESSION['DISK_QUOTA'] = 'yes'; + } else { + exec (VESTA_CMD."v-delete-sys-quota", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $_SESSION['DISK_QUOTA'] = 'no'; + } + } + } + + // Set firewall support + if (empty($_SESSION['error_msg'])) { + if ($_SESSION['FIREWALL_SYSTEM'] == 'iptables') $v_firewall = 'yes'; + if ($_SESSION['FIREWALL_SYSTEM'] != 'iptables') $v_firewall = 'no'; + if ((!empty($_POST['v_firewall'])) && ($v_firewall != $_POST['v_firewall'])) { + if($_POST['v_firewall'] == 'yes') { + exec (VESTA_CMD."v-add-sys-firewall", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $_SESSION['FIREWALL_SYSTEM'] = 'iptables'; + } else { + exec (VESTA_CMD."v-delete-sys-firewall", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $_SESSION['FIREWALL_SYSTEM'] = ''; + } + } + } + + // Update mysql pasword + if (empty($_SESSION['error_msg'])) { + if (!empty($_POST['v_mysql_password'])) { + exec (VESTA_CMD."v-change-database-host-password mysql localhost root '".escapeshellarg($_POST['v_mysql_password'])."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_db_adv = 'yes'; + } + } + + // Update webmail url + if (empty($_SESSION['error_msg'])) { + if ($_POST['v_mail_url'] != $_SESSION['MAIL_URL']) { + exec (VESTA_CMD."v-change-sys-config-value MAIL_URL '".escapeshellarg($_POST['v_mail_url'])."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_mail_adv = 'yes'; + } + } + + // Update phpMyAdmin url + if (empty($_SESSION['error_msg'])) { + if ($_POST['v_mysql_url'] != $_SESSION['DB_PMA_URL']) { + exec (VESTA_CMD."v-change-sys-config-value DB_PMA_URL '".escapeshellarg($_POST['v_mysql_url'])."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_db_adv = 'yes'; + } + } + + // Update phpPgAdmin url + if (empty($_SESSION['error_msg'])) { + if ($_POST['v_pgsql_url'] != $_SESSION['DB_PGA_URL']) { + exec (VESTA_CMD."v-change-sys-config-value DB_PGA_URL '".escapeshellarg($_POST['v_pgsql_url'])."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_db_adv = 'yes'; + } + } + + // Disable local backup + if (empty($_SESSION['error_msg'])) { + if (($_POST['v_backup'] == 'no') && ($v_backup == 'yes' )) { + exec (VESTA_CMD."v-delete-backup-host local", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $v_backup = 'no'; + $v_backup_adv = 'yes'; + } + } + + // Enable local backups + if (empty($_SESSION['error_msg'])) { + if (($_POST['v_backup'] == 'yes') && ($v_backup != 'yes' )) { + exec (VESTA_CMD."v-add-backup-host local", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $v_backup = 'yes'; + $v_backup_adv = 'yes'; + } + } + + // Change backup gzip level + if (empty($_SESSION['error_msg'])) { + if ($_POST['v_backup_gzip'] != $v_backup_gzip ) { + exec (VESTA_CMD."v-change-sys-config-value BACKUP_GZIP ".escapeshellarg($_POST['v_backup_gzip']), $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $v_backup_gzip = $_POST['v_backup_gzip']; + $v_backup_adv = 'yes'; + } + } + + // Change backup path + if (empty($_SESSION['error_msg'])) { + if ($_POST['v_backup_dir'] != $v_backup_dir ) { + exec (VESTA_CMD."v-change-sys-config-value BACKUP ".escapeshellarg($_POST['v_backup_dir']), $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $v_backup_dir = $_POST['v_backup_dir']; + $v_backup_adv = 'yes'; + } + } + + // Add remote backup host + if (empty($_SESSION['error_msg'])) { + if ((!empty($_POST['v_backup_host'])) && (empty($v_backup_host))) { + $v_backup_host = escapeshellarg($_POST['v_backup_host']); + $v_backup_type = escapeshellarg($_POST['v_backup_type']); + $v_backup_username = escapeshellarg($_POST['v_backup_username']); + $v_backup_password = escapeshellarg($_POST['v_backup_password']); + $v_backup_bpath = escapeshellarg($_POST['v_backup_bpath']); + exec (VESTA_CMD."v-add-backup-host '". $v_backup_type ."' '". $v_backup_host ."' '". $v_backup_username ."' '". $v_backup_password ."' '". $v_backup_bpath ."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $v_backup_host = $_POST['v_backup_host']; + if (empty($_SESSION['error_msg'])) $v_backup_type = $_POST['v_backup_type']; + if (empty($_SESSION['error_msg'])) $v_backup_username = $_POST['v_backup_username']; + if (empty($_SESSION['error_msg'])) $v_backup_password = $_POST['v_backup_password']; + if (empty($_SESSION['error_msg'])) $v_backup_bpath = $_POST['v_backup_bpath']; + $v_backup_new = 'yes'; + $v_backup_adv = 'yes'; + $v_backup_remote_adv = 'yes'; + } + } + + // Change remote backup host type + if (empty($_SESSION['error_msg'])) { + if ((!empty($_POST['v_backup_host'])) && ($_POST['v_backup_type'] != $v_backup_type)) { + exec (VESTA_CMD."v-delete-backup-host '". $v_backup_type ."'", $output, $return_var); + unset($output); + + $v_backup_host = escapeshellarg($_POST['v_backup_host']); + $v_backup_type = escapeshellarg($_POST['v_backup_type']); + $v_backup_username = escapeshellarg($_POST['v_backup_username']); + $v_backup_password = escapeshellarg($_POST['v_backup_password']); + $v_backup_bpath = escapeshellarg($_POST['v_backup_bpath']); + exec (VESTA_CMD."v-add-backup-host '". $v_backup_type ."' '". $v_backup_host ."' '". $v_backup_username ."' '". $v_backup_password ."' '". $v_backup_bpath ."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $v_backup_host = $_POST['v_backup_host']; + if (empty($_SESSION['error_msg'])) $v_backup_type = $_POST['v_backup_type']; + if (empty($_SESSION['error_msg'])) $v_backup_username = $_POST['v_backup_username']; + if (empty($_SESSION['error_msg'])) $v_backup_password = $_POST['v_backup_password']; + if (empty($_SESSION['error_msg'])) $v_backup_bpath = $_POST['v_backup_bpath']; + $v_backup_adv = 'yes'; + $v_backup_remote_adv = 'yes'; + } + } + + // Change remote backup host + if (empty($_SESSION['error_msg'])) { + if ((!empty($_POST['v_backup_host'])) && ($_POST['v_backup_type'] == $v_backup_type) && (!isset($v_backup_new))) { + if (($_POST['v_backup_host'] != $v_backup_host) || ($_POST['v_backup_username'] != $v_backup_username) || ($_POST['v_backup_password'] != $v_backup_password) || ($_POST['v_backup_bpath'] != $v_backup_bpath)){ + $v_backup_host = escapeshellarg($_POST['v_backup_host']); + $v_backup_type = escapeshellarg($_POST['v_backup_type']); + $v_backup_username = escapeshellarg($_POST['v_backup_username']); + $v_backup_password = escapeshellarg($_POST['v_backup_password']); + $v_backup_bpath = escapeshellarg($_POST['v_backup_bpath']); + exec (VESTA_CMD."v-add-backup-host '". $v_backup_type ."' '". $v_backup_host ."' '". $v_backup_username ."' '". $v_backup_password ."' '". $v_backup_bpath ."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $v_backup_host = $_POST['v_backup_host']; + if (empty($_SESSION['error_msg'])) $v_backup_type = $_POST['v_backup_type']; + if (empty($_SESSION['error_msg'])) $v_backup_username = $_POST['v_backup_username']; + if (empty($_SESSION['error_msg'])) $v_backup_password = $_POST['v_backup_password']; + if (empty($_SESSION['error_msg'])) $v_backup_bpath = $_POST['v_backup_bpath']; + $v_backup_adv = 'yes'; + $v_backup_remote_adv = 'yes'; + } + } + } + + // Delete remote backup host + if (empty($_SESSION['error_msg'])) { + if ((empty($_POST['v_backup_host'])) && (!empty($v_backup_host))) { + exec (VESTA_CMD."v-delete-backup-host '". $v_backup_type ."'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) $v_backup_host = ''; + if (empty($_SESSION['error_msg'])) $v_backup_type = ''; + if (empty($_SESSION['error_msg'])) $v_backup_username = ''; + if (empty($_SESSION['error_msg'])) $v_backup_password = ''; + if (empty($_SESSION['error_msg'])) $v_backup_bpath = ''; + $v_backup_adv = ''; + $v_backup_remote_adv = ''; + } + } + + // Update SSL certificate + if ((!empty($_POST['v_ssl_crt'])) && (empty($_SESSION['error_msg']))) { + if (($v_ssl_crt != str_replace("\r\n", "\n", $_POST['v_ssl_crt'])) || ($v_ssl_key != str_replace("\r\n", "\n", $_POST['v_ssl_key']))) { + exec ('mktemp -d', $mktemp_output, $return_var); + $tmpdir = $mktemp_output[0]; + + // Certificate + if (!empty($_POST['v_ssl_crt'])) { + $fp = fopen($tmpdir."/certificate.crt", 'w'); + fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt'])); + fwrite($fp, "\n"); + fclose($fp); + } + + // Key + if (!empty($_POST['v_ssl_key'])) { + $fp = fopen($tmpdir."/certificate.key", 'w'); + fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key'])); + fwrite($fp, "\n"); + fclose($fp); + } + + exec (VESTA_CMD."v-change-sys-vesta-ssl ".$tmpdir, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + + // List ssl certificate info + exec (VESTA_CMD."v-list-sys-vesta-ssl json", $output, $return_var); + $ssl_str = json_decode(implode('', $output), true); + unset($output); + $v_ssl_crt = $ssl_str['VESTA']['CRT']; + $v_ssl_key = $ssl_str['VESTA']['KEY']; + $v_ssl_ca = $ssl_str['VESTA']['CA']; + $v_ssl_subject = $ssl_str['VESTA']['SUBJECT']; + $v_ssl_aliases = $ssl_str['VESTA']['ALIASES']; + $v_ssl_not_before = $ssl_str['VESTA']['NOT_BEFORE']; + $v_ssl_not_after = $ssl_str['VESTA']['NOT_AFTER']; + $v_ssl_signature = $ssl_str['VESTA']['SIGNATURE']; + $v_ssl_pub_key = $ssl_str['VESTA']['PUB_KEY']; + $v_ssl_issuer = $ssl_str['VESTA']['ISSUER']; + } + } + + // Flush field values on success + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Changes has been saved.'); + } + + // activating sftp licence + if (empty($_SESSION['error_msg'])) { + if($_SESSION['SFTPJAIL_KEY'] != $_POST['v_sftp_licence'] && $_POST['v_sftp'] == 'yes'){ + $module = 'sftpjail'; + $licence_key = escapeshellarg($_POST['v_sftp_licence']); + exec (VESTA_CMD."v-activate-vesta-license ".$module." ".$licence_key, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Licence Activated'); + $_SESSION['SFTPJAIL_KEY'] = $_POST['v_sftp_licence']; + } + } + } + + // cancel sftp licence + if (empty($_SESSION['error_msg'])) { + if($_POST['v_sftp'] == 'cancel' && $_SESSION['SFTPJAIL_KEY']){ + $module = 'sftpjail'; + $licence_key = escapeshellarg($_SESSION['SFTPJAIL_KEY']); + exec (VESTA_CMD."v-deactivate-vesta-license ".$module." ".$licence_key, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Licence Deactivated'); + unset($_SESSION['SFTPJAIL_KEY']); + } + } + } + + // activating filemanager licence + if (empty($_SESSION['error_msg'])) { + if($_SESSION['FILEMANAGER_KEY'] != $_POST['v_filemanager_licence'] && $_POST['v_filemanager'] == 'yes'){ + $module = 'filemanager'; + $licence_key = escapeshellarg($_POST['v_filemanager_licence']); + exec (VESTA_CMD."v-activate-vesta-license ".$module." ".$licence_key, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Licence Activated'); + $_SESSION['FILEMANAGER_KEY'] = $_POST['v_filemanager_licence']; + } + } + } + + // cancel filemanager licence + if (empty($_SESSION['error_msg'])) { + if($_POST['v_filemanager'] == 'cancel' && $_SESSION['FILEMANAGER_KEY']){ + $module = 'filemanager'; + $licence_key = escapeshellarg($_SESSION['FILEMANAGER_KEY']); + exec (VESTA_CMD."v-deactivate-vesta-license ".$module." ".$licence_key, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Licence Deactivated'); + unset($_SESSION['FILEMANAGER_KEY']); + } + } + } + + // activating softaculous + if (empty($_SESSION['error_msg'])) { + if($_SESSION['SOFTACULOUS'] != $_POST['v_softaculous'] && $_POST['v_softaculous'] == 'yes'){ + exec (VESTA_CMD."v-add-vesta-softaculous WEB", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Softaculous Activated'); + $_SESSION['SOFTACULOUS'] = 'yes'; + } + } + } + + // disable softaculous + if (empty($_SESSION['error_msg'])) { + if($_SESSION['SOFTACULOUS'] != $_POST['v_softaculous'] && $_POST['v_softaculous'] == 'no'){ + exec (VESTA_CMD."v-delete-vesta-softaculous", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Softaculous Disabled'); + $_SESSION['SOFTACULOUS'] = ''; + } + } + } + +} + +// Check system configuration +exec (VESTA_CMD . "v-list-sys-config json", $output, $return_var); +$data = json_decode(implode('', $output), true); +unset($output); + +$sys_arr = $data['config']; +foreach ($sys_arr as $key => $value) { + $_SESSION[$key] = $value; +} + + +// Render page +render_page($user, $TAB, 'edit_server'); + +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); diff --git a/web/edit/server/iptables/index.php b/web/edit/server/iptables/index.php index 30e3dec0b..5b9814fa2 100644 --- a/web/edit/server/iptables/index.php +++ b/web/edit/server/iptables/index.php @@ -1 +1,10 @@ - + + + + + + + + + + + + + + + + $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } else { + exec ('mktemp -d', $mktemp_output, $return_var); + $tmpdir = $mktemp_output[0]; + + // Certificate + if (!empty($_POST['v_ssl_crt'])) { + $fp = fopen($tmpdir."/".$_POST['v_domain'].".crt", 'w'); + fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt'])); + fclose($fp); + } + + // Key + if (!empty($_POST['v_ssl_key'])) { + $fp = fopen($tmpdir."/".$_POST['v_domain'].".key", 'w'); + fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key'])); + fclose($fp); + } + + // CA + if (!empty($_POST['v_ssl_ca'])) { + $fp = fopen($tmpdir."/".$_POST['v_domain'].".ca", 'w'); + fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_ca'])); + fclose($fp); + } + exec (VESTA_CMD."v-add-web-domain-ssl ".$user." ".$v_domain." ".$tmpdir." ".$v_ssl_home." 'no'", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_ssl = 'yes'; + $restart_web = 'yes'; + $restart_proxy = 'yes'; + + exec (VESTA_CMD."v-list-web-domain-ssl ".$user." '".$v_domain."' json", $output, $return_var); + $ssl_str = json_decode(implode('', $output), true); + unset($output); + $v_ssl_crt = $ssl_str[$_POST['v_domain']]['CRT']; + $v_ssl_key = $ssl_str[$_POST['v_domain']]['KEY']; + $v_ssl_ca = $ssl_str[$_POST['v_domain']]['CA']; + $v_ssl_subject = $ssl_str[$_POST['v_domain']]['SUBJECT']; + $v_ssl_aliases = $ssl_str[$_POST['v_domain']]['ALIASES']; + $v_ssl_not_before = $ssl_str[$_POST['v_domain']]['NOT_BEFORE']; + $v_ssl_not_after = $ssl_str[$_POST['v_domain']]['NOT_AFTER']; + $v_ssl_signature = $ssl_str[$_POST['v_domain']]['SIGNATURE']; + $v_ssl_pub_key = $ssl_str[$_POST['v_domain']]['PUB_KEY']; + $v_ssl_issuer = $ssl_str[$_POST['v_domain']]['ISSUER']; + + // Cleanup certificate tempfiles + if (!empty($_POST['v_ssl_crt'])) unlink($tmpdir."/".$_POST['v_domain'].".crt"); + if (!empty($_POST['v_ssl_key'])) unlink($tmpdir."/".$_POST['v_domain'].".key"); + if (!empty($_POST['v_ssl_ca'])) unlink($tmpdir."/".$_POST['v_domain'].".ca"); + rmdir($tmpdir); + } + } + + + + // Delete web stats + if ((!empty($v_stats)) && ($_POST['v_stats'] == 'none') && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-delete-web-domain-stats ".$v_username." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_stats = ''; + } + + // Change web stats engine + if ((!empty($v_stats)) && ($_POST['v_stats'] != $v_stats) && (empty($_SESSION['error_msg']))) { + $v_stats = escapeshellarg($_POST['v_stats']); + exec (VESTA_CMD."v-change-web-domain-stats ".$v_username." ".$v_domain." ".$v_stats, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Add web stats + if ((empty($v_stats)) && ($_POST['v_stats'] != 'none') && (empty($_SESSION['error_msg']))) { + $v_stats = escapeshellarg($_POST['v_stats']); + exec (VESTA_CMD."v-add-web-domain-stats ".$v_username." ".$v_domain." ".$v_stats, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Delete web stats authorization + if ((!empty($v_stats_user)) && (empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-delete-web-domain-stats-user ".$v_username." ".$v_domain, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + $v_stats_user = ''; + $v_stats_password = ''; + } + + // Change web stats user or password + if ((empty($v_stats_user)) && (!empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) { + if (empty($_POST['v_stats_user'])) $errors[] = __('stats username'); + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } else { + $v_stats_user = escapeshellarg($_POST['v_stats_user']); + $v_stats_password = tempnam("/tmp","vst"); + $fp = fopen($v_stats_password, "w"); + fwrite($fp, $_POST['v_stats_password']."\n"); + fclose($fp); + exec (VESTA_CMD."v-add-web-domain-stats-user ".$v_username." ".$v_domain." ".$v_stats_user." ".$v_stats_password, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + unlink($v_stats_password); + $v_stats_password = escapeshellarg($_POST['v_stats_password']); + } + } + + // Add web stats authorization + if ((!empty($v_stats_user)) && (!empty($_POST['v_stats_auth'])) && (empty($_SESSION['error_msg']))) { + if (empty($_POST['v_stats_user'])) $errors[] = __('stats user'); + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + if (($v_stats_user != $_POST['v_stats_user']) || (!empty($_POST['v_stats_password'])) && (empty($_SESSION['error_msg']))) { + $v_stats_user = escapeshellarg($_POST['v_stats_user']); + $v_stats_password = tempnam("/tmp","vst"); + $fp = fopen($v_stats_password, "w"); + fwrite($fp, $_POST['v_stats_password']."\n"); + fclose($fp); + exec (VESTA_CMD."v-add-web-domain-stats-user ".$v_username." ".$v_domain." ".$v_stats_user." ".$v_stats_password, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + unlink($v_stats_password); + $v_stats_password = escapeshellarg($_POST['v_stats_password']); + } + } + + // Update ftp account + if (!empty($_POST['v_ftp_user'])) { + $v_ftp_users_updated = array(); + foreach ($_POST['v_ftp_user'] as $i => $v_ftp_user_data) { + if (empty($v_ftp_user_data['v_ftp_user'])) { + continue; + } + + $v_ftp_user_data['v_ftp_user'] = preg_replace("/^".$user."_/i", "", $v_ftp_user_data['v_ftp_user']); + if ($v_ftp_user_data['is_new'] == 1 && !empty($_POST['v_ftp'])) { + if ((!empty($v_ftp_user_data['v_ftp_email'])) && (!filter_var($v_ftp_user_data['v_ftp_email'], FILTER_VALIDATE_EMAIL))) $_SESSION['error_msg'] = __('Please enter valid email address.'); + if (empty($v_ftp_user_data['v_ftp_user'])) $errors[] = 'ftp user'; + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + // Add ftp account + $v_ftp_username = $v_ftp_user_data['v_ftp_user']; + $v_ftp_username_full = $user . '_' . $v_ftp_user_data['v_ftp_user']; + $v_ftp_user = escapeshellarg($v_ftp_username); + $v_ftp_path = escapeshellarg(trim($v_ftp_user_data['v_ftp_path'])); + if (empty($_SESSION['error_msg'])) { + $v_ftp_password = tempnam("/tmp","vst"); + $fp = fopen($v_ftp_password, "w"); + fwrite($fp, $v_ftp_user_data['v_ftp_password']."\n"); + fclose($fp); + exec (VESTA_CMD."v-add-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_user." ".$v_ftp_password . " " . $v_ftp_path, $output, $return_var); + check_return_code($return_var,$output); + if ((!empty($v_ftp_user_data['v_ftp_email'])) && (empty($_SESSION['error_msg']))) { + $to = $v_ftp_user_data['v_ftp_email']; + $subject = __("FTP login credentials"); + $hostname = exec('hostname'); + $from = __('MAIL_FROM',$hostname); + $mailtext = __('FTP_ACCOUNT_READY',$_GET['domain'],$user,$v_ftp_username,$v_ftp_user_data['v_ftp_password']); + send_email($to, $subject, $mailtext, $from); + unset($v_ftp_email); + } + unset($output); + unlink($v_ftp_password); + $v_ftp_password = escapeshellarg($v_ftp_user_data['v_ftp_password']); + } + + if ($return_var == 0) { + $v_ftp_password = ""; + $v_ftp_user_data['is_new'] = 0; + } + else { + $v_ftp_user_data['is_new'] = 1; + } + + $v_ftp_users_updated[] = array( + 'is_new' => empty($_SESSION['error_msg']) ? 0 : 1, + 'v_ftp_user' => $v_ftp_username_full, + 'v_ftp_password' => $v_ftp_password, + 'v_ftp_path' => $v_ftp_user_data['v_ftp_path'], + 'v_ftp_email' => $v_ftp_user_data['v_ftp_email'], + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); + + continue; + } + + // Delete FTP account + if ($v_ftp_user_data['delete'] == 1) { + $v_ftp_username = $user . '_' . $v_ftp_user_data['v_ftp_user']; + exec (VESTA_CMD."v-delete-web-domain-ftp ".$v_username." ".$v_domain." ".$v_ftp_username, $output, $return_var); + check_return_code($return_var,$output); + unset($output); + + continue; + } + + if (!empty($_POST['v_ftp'])) { + if (empty($v_ftp_user_data['v_ftp_user'])) $errors[] = __('ftp user'); + if (!empty($errors[0])) { + foreach ($errors as $i => $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + } + + // Change FTP account path + $v_ftp_username_for_emailing = $v_ftp_user_data['v_ftp_user']; + $v_ftp_username = $user . '_' . $v_ftp_user_data['v_ftp_user']; //preg_replace("/^".$user."_/", "", $v_ftp_user_data['v_ftp_user']); + $v_ftp_username = escapeshellarg($v_ftp_username); + $v_ftp_path = escapeshellarg(trim($v_ftp_user_data['v_ftp_path'])); + if(escapeshellarg(trim($v_ftp_user_data['v_ftp_path_prev'])) != $v_ftp_path) { + exec (VESTA_CMD."v-change-web-domain-ftp-path ".$v_username." ".$v_domain." ".$v_ftp_username." ".$v_ftp_path, $output, $return_var); + } + + // Change FTP account password + if (!empty($v_ftp_user_data['v_ftp_password'])) { + $v_ftp_password = tempnam("/tmp","vst"); + $fp = fopen($v_ftp_password, "w"); + fwrite($fp, $v_ftp_user_data['v_ftp_password']."\n"); + fclose($fp); + exec (VESTA_CMD."v-change-web-domain-ftp-password ".$v_username." ".$v_domain." ".$v_ftp_username." ".$v_ftp_password, $output, $return_var); + unlink($v_ftp_password); + + $to = $v_ftp_user_data['v_ftp_email']; + $subject = __("FTP login credentials"); + $hostname = exec('hostname'); + $from = __('MAIL_FROM',$hostname); + $mailtext = __('FTP_ACCOUNT_READY',$_GET['domain'],$user,$v_ftp_username_for_emailing,$v_ftp_user_data['v_ftp_password']); + send_email($to, $subject, $mailtext, $from); + unset($v_ftp_email); + } + check_return_code($return_var, $output); + unset($output); + + $v_ftp_users_updated[] = array( + 'is_new' => 0, + 'v_ftp_user' => $v_ftp_username, + 'v_ftp_password' => $v_ftp_user_data['v_ftp_password'], + 'v_ftp_path' => $v_ftp_user_data['v_ftp_path'], + 'v_ftp_email' => $v_ftp_user_data['v_ftp_email'], + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); + } + } + } + + // Restart web server + if (!empty($restart_web) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-restart-web", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Restart proxy server + if ((!empty($_SESSION['PROXY_SYSTEM'])) && !empty($restart_proxy) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-restart-proxy", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Restart dns server + if (!empty($restart_dns) && (empty($_SESSION['error_msg']))) { + exec (VESTA_CMD."v-restart-dns", $output, $return_var); + check_return_code($return_var,$output); + unset($output); + } + + // Set success message + if (empty($_SESSION['error_msg'])) { + $_SESSION['ok_msg'] = __('Changes has been saved.'); + } + +} + + +$v_ftp_users_raw = explode(':', $v_ftp_user); +$v_ftp_users_paths_raw = explode(':', $data[$v_domain]['FTP_PATH']); +$v_ftp_users = array(); +foreach ($v_ftp_users_raw as $v_ftp_user_index => $v_ftp_user_val) { + if (empty($v_ftp_user_val)) { + continue; + } + $v_ftp_users[] = array( + 'is_new' => 0, + 'v_ftp_user' => $v_ftp_user_val, + 'v_ftp_password' => $v_ftp_password, + 'v_ftp_path' => (isset($v_ftp_users_paths_raw[$v_ftp_user_index]) ? $v_ftp_users_paths_raw[$v_ftp_user_index] : ''), + 'v_ftp_email' => $v_ftp_email, + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); +} + +if (empty($v_ftp_users)) { + $v_ftp_user = null; + $v_ftp_users[] = array( + 'is_new' => 1, + 'v_ftp_user' => '', + 'v_ftp_password' => '', + 'v_ftp_path' => (isset($v_ftp_users_paths_raw[$v_ftp_user_index]) ? $v_ftp_users_paths_raw[$v_ftp_user_index] : ''), + 'v_ftp_email' => '', + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); +} + +// set default pre path for newly created users +$v_ftp_pre_path_new_user = $v_ftp_user_prepath; +if (isset($v_ftp_users_updated)) { + $v_ftp_users = $v_ftp_users_updated; + if (empty($v_ftp_users_updated)) { + $v_ftp_user = null; + $v_ftp_users[] = array( + 'is_new' => 1, + 'v_ftp_user' => '', + 'v_ftp_password' => '', + 'v_ftp_path' => (isset($v_ftp_users_paths_raw[$v_ftp_user_index]) ? $v_ftp_users_paths_raw[$v_ftp_user_index] : ''), + 'v_ftp_email' => '', + 'v_ftp_pre_path' => $v_ftp_user_prepath + ); + } +} + +// Render page +render_page($user, $TAB, 'edit_web'); + +// Flush session messages +unset($_SESSION['error_msg']); +unset($_SESSION['ok_msg']); diff --git a/web/file_manager/fm_api.php b/web/file_manager/fm_api.php index cf4eef82a..ac5faa3a2 100644 --- a/web/file_manager/fm_api.php +++ b/web/file_manager/fm_api.php @@ -1,8 +1,8 @@ + + $error) { + if ( $i == 0 ) { + $error_msg = $error; + } else { + $error_msg = $error_msg.", ".$error; + } + } + $_SESSION['error_msg'] = __('Field "%s" can not be blank.',$error_msg); + render_page($user, $TAB, 'generate_ssl'); + unset($_SESSION['error_msg']); + exit; +} + +// Protect input +$v_domain = escapeshellarg($_POST['v_domain']); +$v_email = escapeshellarg($_POST['v_email']); +$v_country = escapeshellarg($_POST['v_country']); +$v_state = escapeshellarg($_POST['v_state']); +$v_locality = escapeshellarg($_POST['v_locality']); +$v_org = escapeshellarg($_POST['v_org']); + +exec (VESTA_CMD."v-generate-ssl-cert ".$v_domain." ".$v_email." ".$v_country." ".$v_state." ".$v_locality." ".$v_org." IT '' json", $output, $return_var); + +// Revert to raw values +$v_domain = $_POST['v_domain']; +$v_email = $_POST['v_email']; +$v_country = $_POST['v_country']; +$v_state = $_POST['v_state']; +$v_locality = $_POST['v_locality']; +$v_org = $_POST['v_org']; + +// Check return code +if ($return_var != 0) { + $error = implode('
    ', $output); + if (empty($error)) $error = __('Error code:',$return_var); + $_SESSION['error_msg'] = $error; + render_page($user, $TAB, 'generate_ssl'); + unset($_SESSION['error_msg']); + exit; +} + +// OK message +$_SESSION['ok_msg'] = __('SSL_GENERATED_OK'); + +// Parse output +$data = json_decode(implode('', $output), true); +unset($output); +$v_crt = $data[$v_domain]['CRT']; +$v_key = $data[$v_domain]['KEY']; +$v_csr = $data[$v_domain]['CSR']; + +// Back uri +$_SESSION['back'] = $_SERVER['REQUEST_URI']; + +// Render page +render_page($user, $TAB, 'list_ssl'); + +unset($_SESSION['ok_msg']); diff --git a/web/images/favicon.ico b/web/images/favicon.ico index 1df537822..fad74c2a4 100644 Binary files a/web/images/favicon.ico and b/web/images/favicon.ico differ diff --git a/web/images/favicon.svg b/web/images/favicon.svg deleted file mode 100644 index 544bfaed7..000000000 --- a/web/images/favicon.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - Vesta logo white@3x - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/web/images/logo.png b/web/images/logo.png index fb73e6027..011b03a5f 100644 Binary files a/web/images/logo.png and b/web/images/logo.png differ diff --git a/web/images/logo_v1.png b/web/images/logo_v1.png deleted file mode 100644 index 011b03a5f..000000000 Binary files a/web/images/logo_v1.png and /dev/null differ diff --git a/web/images/vesta_logo_back.png b/web/images/vesta_logo_back.png deleted file mode 100644 index d3ca5e9f7..000000000 Binary files a/web/images/vesta_logo_back.png and /dev/null differ diff --git a/web/images/white_logo.png b/web/images/white_logo.png deleted file mode 100644 index a8c6696bc..000000000 Binary files a/web/images/white_logo.png and /dev/null differ diff --git a/web/inc/i18n.php b/web/inc/i18n.php index 9d6c1b7e9..8b8abf3a3 100644 --- a/web/inc/i18n.php +++ b/web/inc/i18n.php @@ -24,7 +24,7 @@ function _translate() { // Load language file (if not loaded yet) if (!isset($LANG[$l])) { - require_once($_SERVER['DOCUMENT_ROOT']."/inc/i18n/".basename($l).".php"); + require_once($_SERVER['DOCUMENT_ROOT']."/inc/i18n/$l.php"); } //if (!isset($LANG[$l][$key])) file_put_contents('/somewhere/something.log', "$key\n", FILE_APPEND); diff --git a/web/inc/i18n/ar.php b/web/inc/i18n/ar.php index e50cfec72..dd28828ec 100644 --- a/web/inc/i18n/ar.php +++ b/web/inc/i18n/ar.php @@ -560,7 +560,6 @@ $LANG['ar'] = array( 'MAIL Server' => 'مخدم البريد الالكتروني', 'Antivirus' => 'مضاد الفيروسات', 'AntiSpam' => 'مضاد البريد المزعج سبام', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'رابط WebMail', 'MySQL Support' => 'دعم MySQL', 'phpMyAdmin URL' => 'رابط phpMyAdmin', diff --git a/web/inc/i18n/az.php b/web/inc/i18n/az.php deleted file mode 100644 index 715043a0a..000000000 --- a/web/inc/i18n/az.php +++ /dev/null @@ -1,727 +0,0 @@ - 'Paketlər', - 'IP' => 'IP', - 'Graphs' => 'Qrafiklər', - 'Statistics' => 'Statistikalar', - 'Log' => 'Log', - 'Server' => 'Server', - 'Services' => 'Servislər', - 'Firewall' => 'Firewall', - 'Updates' => 'Yeniləmələr', - 'Log in' => 'Hesab yarat', - 'Log out' => 'Çıxış', - 'USER' => 'İstifadəsi', - 'WEB' => 'Veb', - 'DNS' => 'DNS', - 'MAIL' => 'Poçt', - 'DB' => 'DB', - 'CRON' => 'CRON', - 'BACKUP' => 'NÜSXƏ', - 'LOGIN' => 'Giriş', - 'RESET PASSWORD' => 'Şifrəni sıfırlamaq', - 'SEARCH' => 'Axtar', - 'PACKAGE' => 'Paket', - 'RRD' => 'RRD', - 'STATS' => 'STATS', - 'LOG' => 'LOG', - 'UPDATES' => 'Yenilənmələr', - 'FIREWALL' => 'Firewall', - 'SERVER' => 'Server', - 'MEMORY' => 'Yaddaş', - 'DISK' => 'Disk', - 'NETWORK' => 'Şəbəkə', - 'Web Log Manager' => 'Veb loq menecer', - 'no notifications' => 'bildiriş yoxdur', - 'Add User' => 'İstifadəçi əlavə edin', - 'Add Domain' => 'Domen əlavə edin', - 'Add Web Domain' => 'Domen əlavə edin', - 'Add DNS Domain' => 'DNS domeni əlavə edin', - 'Add DNS Record' => 'DNS qeydləri əlavə edin', - 'Add Mail Domain' => 'E-poçt domeni əlavə edin', - 'Add Mail Account' => 'E-poçt hesabı əlavə edin', - 'Add Database' => 'Verilənlər bazası əlavə edin', - 'Add Cron Job' => 'Cron əlavə et', - 'Create Backup' => 'Nüsxə yarat', - 'Configure' => 'Konfiqurasiya', - 'Restore All' => 'Hamısını bərpa edin', - 'Add Package' => 'Paket əlavə edin', - 'Add IP' => 'IP əlavə edin', - 'Add Rule' => 'Qayda əlavə edin', - 'Ban IP Address' => 'IP ünvanını ban edin', - 'Search' => 'Axtar', - 'Add one more FTP Account' => 'FTP hesabı əlavə edin', - 'Overall Statistics' => 'Bütün statistikalar', - 'Daily' => 'Günlük', - 'Weekly' => 'Həftəlik', - 'Monthly' => 'Aylıq', - 'Yearly' => 'İllik', - 'Add' => 'Əlavə edin', - 'Back' => 'Ləğv edin', - 'Save' => 'Yadda saxla', - 'Submit' => 'Göndər', - 'toggle all' => 'Hamısını seç', - 'apply to selected' => 'Seçimi tətbiq edin', - 'rebuild' => 'Yenidən yarat', - 'rebuild web' => "Veb-in yenidən qurulması", - 'rebuild dns' => "DNS-in yenidən qurulması", - 'rebuild mail' => "E-poçt-un yenidən qurulması", - 'rebuild db' => "DB-nin yenidən qurulması", - 'rebuild cron' => "Cron-nun yenidən qurulması", - 'update counters' => 'Yeniləmə sayğacları', - 'suspend' => 'Dayandırın', - 'unsuspend' => 'Davam etdirin', - 'delete' => 'Sil', - 'show per user' => 'istifadəçiyə görə göstər', - 'login as' => 'GİRİŞ ET:', - 'logout' => 'Çıxış et', - 'edit' => 'redaktə et', - 'open webstats' => 'webstats aç', - 'view logs' => 'logları göstər', - 'list records' => '%s siyahı qeydiyyatı', - 'add record' => 'qeyd əlavə edin', - 'list accounts' => '%s hesabı sıyahıya alın', - 'add account' => 'hesap əlavə edin', - 'open webmail' => 'Vebpoçtu aç', - 'list fail2ban' => 'fail2ban siyahı alın', - 'open %s' => '%s aç', - 'download' => 'yüklə', - 'restore' => 'bərpa edin', - 'configure restore settings' => 'bərpa ayarlarını quraşdırın', - 'stop' => 'dayandırın', - 'start' => 'başlat', - 'restart' => 'yenidən başlat', - 'update' => 'yenilə', - 'generate' => 'yarat', - 'Generate CSR' => 'CSR yarat', - 'reread IP' => 'IP-ni yenidən oxu', - 'enable autoupdate' => 'AVTOMATIK YENİLƏNMƏNİ AKTİVLƏŞDİR', - 'disable autoupdate' => 'AVTOMATİK YENİLƏNMƏNİ SÖNDÜR', - 'turn on notifications' => 'xəbərdarlıqları açın', - 'turn off notifications' => 'xəbərdarlıqları bağlayın', - 'configure' => 'ayalar', - 'Adding User' => 'İstifadəçi əlavə edin', - 'Editing User' => 'İstifadəçi redaktə edin', - 'Adding Domain' => 'Domen əlavə edin', - 'Editing Domain' => 'Domen redaktə edin', - 'Adding DNS Domain' => 'DNS domeni əlavə edin', - 'Editing DNS Domain' => 'DNS domeni redaktə edin', - 'Adding DNS Record' => 'DNS qeyd əlavə edin', - 'Editing DNS Record' => 'DNS qeydi redaktə edin', - 'Adding Mail Domain' => 'E-poçt domen əlavə edin', - 'Editing Mail Domain' => 'E-poçt domen redaktə edin', - 'Adding Mail Account' => 'E-poçt əlavə edin', - 'Editing Mail Account' => 'E-poçt hesabını redaktə edin', - 'Adding database' => 'Verilənlər bazası əlavə edin', - 'Editing Cron Job' => 'Cron-u redaktə et', - 'Adding Cron Job' => 'Cron əlavə etmək', - 'Editing Database' => 'Verilənlər bazasını redaktə edin', - 'Adding Package' => 'Paket əlavə edin', - 'Editing Package' => 'Paketi redaktə edin', - 'Adding IP address' => 'IP ünvanı əlavə edin', - 'Editing IP Address' => 'IP ünvamını redaktə edin', - 'Editing Backup Exclusions' => 'Nüsxələmə istisnalarını redaktə edin', - 'Generating CSR' => 'CSR yaratma', - 'Listing' => 'Siyahılama', - 'Search Results' => 'Axtarış nəticələri', - 'Adding Firewall Rule' => 'Təhlükəsizlik divarı qaydası əlavə edin', - 'Editing Firewall Rule' => 'Təhlükəsizlik divarı qaydasını redaktə edin', - 'Adding IP Address to Banlist' => 'Ban siyahısına IP ünvanı əlavə edin', - 'active' => 'aktiv', - 'spnd' => 'söndürülmüş', - 'suspended' => 'söndürülmüş', - 'running' => 'işləyir', - 'stopped' => 'dayandı', - 'outdated' => 'köhnəlmiş', - 'updated' => 'yenilənmiş', - 'yes' => 'bəli', - 'no' => 'xeyir', - 'none' => 'heç biri', - 'pb' => 'pb', - 'tb' => 'tb', - 'gb' => 'gb', - 'mb' => 'mb', - 'minute' => 'dəqiqə', - 'hour' => 'saat', - 'day' => 'gün', - 'days' => 'günlər', - 'hours' => 'saat', - 'minutes' => 'dəqiqə', - 'month' => 'ay', - 'package' => 'paket', - 'Bandwidth' => 'Traffik', - 'Disk' => 'Disk', - 'Web' => 'Veb', - 'Mail' => 'E-poçt', - 'Databases' => 'Verilənlər bazası', - 'User Directories' => 'İstifadəçi qovluqları', - 'Template' => 'Şablon', - 'Web Template' => 'Veb Şablonu', - 'Backend Template' => 'Backend şablonu', - 'Proxy Template' =>'Proxy şablonu', - 'DNS Template' => 'DNS şablonu', - 'Web Domains' => 'Veb domenləri', - 'SSL Domains' => 'SSL domenləri', - 'Web Aliases' => 'Veb aliasları', - 'per domain' => 'domen başına', - 'DNS Domains' => 'DNS domen adları', - 'DNS domains' => 'DNS domen adları', - 'DNS records' => 'DNS qeydləri', - 'Name Servers' => 'Neymserverlər', - 'Mail Domains' => 'E-poçt domenləri', - 'Mail Accounts' => 'E-poçt hesabları', - 'Cron Jobs' => 'Cron-lar', - 'SSH Access' => 'SSH giriş', - 'IP Address' => 'IP ünvan', - 'IP Addresses' => 'IP ünvanları', - 'Backups' => 'Nüsxələr', - 'Backup System' => 'Nüsxələmə sistemi', - 'backup exclusions' => 'NÜSXƏLƏMƏ İSTİSNALARI', - 'template' => 'şablon', - 'SSL Support' => 'SSL dəstək', - 'SSL Home Directory' => 'SSL Ana qovluğu', - 'Lets Encrypt Support' => 'Lets Encrypt dəstəyi', - 'Lets Encrypt' => 'Şifrələ', - 'Your certificate will be automatically issued in 5 minutes' => 'Sənədiniz avtomatik olaraq 5 dəqiqə ərzində veriləcək', - 'Proxy Support' => 'Proxy dəstəyi', - 'Proxy Extensions' => 'Proxy əlavələri', - 'Web Statistics' => 'Veb statistikaları', - 'Additional FTP Account' => 'Əlavə FTP hesabı', - 'Path' => 'Path', - 'SOA' => 'SOA', - 'TTL' => 'TTL', - 'Expire' => 'Sona çatdırın', - 'Records' => 'Qeydlər', - 'Serial' => 'Seriya', - 'Catchall email' => 'Catchall e-poçt', - 'AntiVirus Support' => 'AntiVirus dəstəyi', - 'AntiSpam Support' => 'AntiSpam dəstəyi', - 'DKIM Support' => 'DKIM dəstəyi', - 'Accounts' => 'Hesablar', - 'Quota' => 'Norma', - 'Autoreply' => 'Avtomatik cavab', - 'Forward to' => 'Buraya yönləndir', - 'Do not store forwarded mail' => 'Göndərilən poçtu saxlamayın', - 'IMAP hostname' => 'IMAP hostname', - 'IMAP port' => 'IMAP port', - 'IMAP security' => 'IMAP təhlükəsizlik', - 'IMAP auth method' => 'IMAP auth metodu', - 'SMTP hostname' => 'SMTP hostname', - 'SMTP port' => 'SMTP port', - 'SMTP security' => 'SMTP təhlükəsizlik', - 'SMTP auth method' => 'SMTP auth metodu', - 'STARTTLS' => 'STARTTLS', - 'Normal password' => 'Normal şifrə', - 'database' => 'verilənələr bazası', - 'User' => 'İstifadəçi', - 'Host' => 'Host', - 'Charset' => 'Kodlaşdırma', - 'Min' => 'Dəq', - 'Hour' => 'Saat', - 'Day' => 'Gün', - 'Month' => 'Ay', - 'Day of week' => 'Həftənin günü', - 'local' => 'yerli', - 'Run Time' => 'İşləmə müddəti', - 'Backup Size' => 'Nüsxə ölçüsü', - 'SYS' => 'SYS', - 'Domains' => 'Domenlər', - 'Status' => 'Status', - 'shared' => 'paylaşılan', - 'dedicated' => 'həsr olunan', - 'Owner' => 'Sahib', - 'Users' => 'İstifadəçilər', - 'Load Average' => 'Sistem yükü', - 'Memory Usage' => 'Yaddaşın istifadəsi', - 'APACHE2 Usage' => 'APACHE2 istifadəsi', - 'HTTPD Usage' => 'HTTPD istifadəsi', - 'NGINX Usage' => 'NGINX istifadəsi', - 'MySQL Usage on localhost' => 'Localhost üzərindəki MySQL istifadəsi', - 'PostgreSQL Usage on localhost' => 'Localhost üzərindəki PostgreSQL istifadəsi', - 'Bandwidth Usage eth0' => 'eth0 traffik istifadəsi', - 'Bandwidth Usage eth1' => 'eth1 traffik istifadəsi', - 'Exim Usage' => 'Exim istifadəsi', - 'FTP Usage' => 'FTP istifadəsi', - 'SSH Usage' => 'SSH istifadəsi', - 'reverse proxy' => 'geri proksi', - 'web server' => 'veb server', - 'dns server' => 'dns server', - 'mail server' => 'e-poçt serve', - 'pop/imap server' => 'pop/imap server', - 'email antivirus' => 'e-poçt antivirus', - 'email antispam' => 'e-poçt antispam', - 'database server' => 'database server', - 'ftp server' => 'ftp server', - 'job scheduler' => 'job planlaşdırma', - 'firewall' => 'firewall', - 'brute-force monitor' => 'brute-force monitor', - 'CPU' => 'CPU', - 'Memory' => 'Yaddaş', - 'Uptime' => 'Uptime', - 'core package' => 'əsas paket', - 'php interpreter' => 'php tərcüməçi', - 'internal web server' => 'daxili veb server', - 'Version' => 'Versiya', - 'Release' => 'Buraxın', - 'Architecture' => 'Memarlıq', - 'Object' => 'Obyekt', - 'Username' => 'İstifadəçi adı', - 'Password' => 'Şifrə', - 'Email' => 'E-poçt', - 'Package' => 'Paket', - 'Language' => 'Dil', - 'First Name' => 'Ad', - 'Last Name' => 'Soyad', - 'Send login credentials to email address' => 'Giriş məlumatlarını ünvanlarını e-poçt ünvanına göndərin', - 'Default Template' => 'Default şablon', - 'Default Name Servers' => 'Default neymserver', - 'Domain' => 'Domen', - 'DNS Support' => 'DNS dəstəyi', - 'Mail Support' => 'E-poçt dəstəyi', - 'Advanced options' => 'TƏKMİLLƏŞMİŞ SEÇİMLƏR', - 'Basic options' => 'Əsas seçimlər', - 'Aliases' => 'Ləqəblər (Alias)', - 'SSL Certificate' => 'SSL sertifikatı', - 'SSL Key' => 'SSL açarı (Key)', - 'SSL Certificate Authority / Intermediate' => 'SSL sertifikat eyniləşdirməsi / köməkçi)', - 'SSL CSR' => 'SSL CSR', - 'optional' => 'istəyə bağlı', - 'internal' => 'daxili', - 'Statistics Authorization' => 'Statistikanın avtorizasiyası', - 'Statistics Auth' => 'Statistika eyniləşdirməsi', - 'Account' => 'Hesab', - 'Prefix will be automaticaly added to username' => 'Prefiks avtomatik olaraq istifadəçi adına əlavə olunacaq', - 'Send FTP credentials to email' => 'FTP məlumatlarını e-poçt ile göndər', - 'Expiration Date' => 'Bitmə tarixi', - 'YYYY-MM-DD' => 'YYYY-AA-GG', - 'Name servers' => 'Neymserverlər', - 'Record' => 'Qeydiyyat', - 'IP or Value' => 'IP və ya qiymət', - 'Priority' => 'Prioritet', - 'Record Number' => 'Qeydiyyat sayı', - 'in megabytes' => 'megabayt olaraq', - 'Message' => 'Mesaj', - 'use local-part' => 'local-part istifadə et', - 'one or more email addresses' => 'bir və ya daha çox e-poçt ünvanı', - 'Prefix will be automaticaly added to database name and database user' => 'Prefiks avtomatik olaraq verilənlər bazası adı və verilənlər bazası istifadəçisinə əlavə olunacaq', - 'Database' => 'Verilənlər bazası', - 'Type' => 'Tip', - 'Minute' => 'Dəqiqə', - 'Command' => 'Əmr', - 'Package Name' => 'Paket adı', - 'Netmask' => 'Netmask', - 'Interface' => 'İnterfeys', - 'Shared' => 'Paylaşılan', - 'Assigned user' => 'Təyin edilən istifadəçi', - 'Assigned domain' => 'Təyin edilən domen', - 'NAT IP association' => 'NAT IP assosiasiyası', - 'shell' => 'shell', - 'web domains' => 'Veb domenləri', - 'web aliases' => 'veb ləqəblər', - 'dns records' => 'dns qeydləri', - 'mail domains' => 'mail domenləri', - 'mail accounts' => 'mail hesabları', - 'accounts' => 'hesablar', - 'databases' => 'verilənlər bazası', - 'cron jobs' => 'Cron tapşırıqları', - 'backups' => 'nüsxələr', - 'quota' => 'kvota', - 'day of week' => 'həftənin günü', - 'cmd' => 'cmd', - 'users' => 'istifadəçilər', - 'domains' => 'domenlər', - 'aliases' => 'aliases', - 'records' => 'qeydlər', - 'jobs' => 'işlər', - 'username' => 'istifadəçi adı', - 'password' => 'şifrə', - 'type' => 'tip', - 'charset' => 'kodlaşdırma', - 'domain' => 'domen', - 'ip' => 'ip', - 'ip address' => 'ip ünvanı', - 'IP address' => 'IP ünvanı', - 'netmask' => 'netmask', - 'interface' => 'interfeys', - 'assigned user' => 'təyin edilən istifadəçi', - 'ns1' => 'ns1', - 'ns2' => 'ns2', - 'user' => 'istifadəçi', - 'email' => 'e-poçt', - 'first name' => 'ad', - 'last name' => 'soyad', - 'account' => 'hesab', - 'ssl certificate' => 'ssl sertifikatı', - 'ssl key' => 'ssl açarı (key)', - 'stats user password' => 'statistik istifadəçi sifrəsi', - 'stats username' => 'statistik istifadəçi adı', - 'stats password' => 'statistik şifrəsi', - 'ftp user password' => 'ftp istifadəçi şifrəsi', - 'ftp user' => 'ftp istifadəçisi', - 'Last 70 lines of %s.%s.log' => '%s.%s.log faylının son 70 sətri', - 'AccessLog' => 'AccessLog', - 'ErrorLog' => 'ErrorLog', - 'Download AccessLog' => 'AccessLog yüklə', - 'Download ErrorLog' => 'ErrorLog yüklə', - 'Country' => 'Ölkə', - '2 letter code' => '2 hərf kodu', - 'State / Province' => 'Dövlət / Əyalət', - 'City / Locality' => 'Şəhər / Yerləşmə', - 'Organization' => 'Orqanizasiya', - 'Action' => 'Fəaliyyət', - 'Protocol' => 'Protokol', - 'Port' => 'Port', - 'Comment' => 'Rəy', - 'Banlist' => 'Ban siyahısı', - 'ranges are acceptable' => 'qəbul edilə bilən aralıqlar', - 'CIDR format is supported' => 'CIDR versiyasını dəstəkləyir', - 'ACCEPT' => 'ACCEPT', - 'DROP' => 'DROP', - 'TCP' => 'TCP', - 'UDP' => 'UDP', - 'ICMP' => 'ICMP', - 'SSH' => 'SSH', - 'FTP' => 'FTP', - 'VESTA' => 'VESTA', - 'Add one more Name Server' => 'Neymserver əlavə edin', - 'web domain' => 'veb domen', - 'dns domain' => 'dns domen', - 'dns record' => 'dns qeyd', - 'mail domain' => 'mail domen', - 'mail account' => 'mail hesabı', - 'cron job' => 'cron işi', - 'cron' => 'cron', - 'user dir' => 'istifadəçidir', - 'unlimited' => 'limitsiz', - '1 account' => '1 hesab', - '%s accounts' => '%s hesab', - '1 domain' => '1 alan adı', - '%s domains' => '%s alan adı', - '1 record' => '1 kayıt', - '%s records' => '%s kayıt', - '1 mail account' => '1 mail hesabı', - '%s mail accounts' => '%s mail hesabı', - '1 database' => '1 verilənlər bazası', - '%s databases' => '%s verilənlər bazası', - '1 cron job' => '1 zamanlanmış tapşırıq', - '%s cron jobs' => '%s zamanlanmış tapşırıq', - '1 archive' => '1 arxiv', - '%s archives' => '%s arxiv', - '1 item' => '1 maddə', - '%s items' => '%s maddələr', - '1 package' => '1 paket', - '%s packages' => '%s paket', - '1 IP address' => '1 IP ünvanı', - '%s IP addresses' => '%s IP ünvanı', - '1 month' => '1 ay', - '%s months' => '%s ay', - '1 log record' => '1 log qeydi', - '%s log records' => '%s log qeydi', - '1 object' => '1 obyekt', - '%s objects' => '%s obyekt', - 'no exclusions' => 'istisna yoxdur', - '1 rule' => '1 qayda', - '%s rules' => '%s qayda', - 'There are no currently banned IP' => 'Hazırda ban edilmiş İP yoxdur', - 'USER_CREATED_OK' => '%s istifadəşisi uğurla yaradıldı.', - 'WEB_DOMAIN_CREATED_OK' => '%s domen uğurla yaradıldı.', - 'DNS_DOMAIN_CREATED_OK' => '%s DNS domen uğurla yaradıldı.', - 'DNS_RECORD_CREATED_OK' => '%s.%s qeydi uğurla yaradıldı.', - 'MAIL_DOMAIN_CREATED_OK' => '%s əsas domen uğurla yaradıldı', - 'MAIL_ACCOUNT_CREATED_OK' => '%s@%s e-poçt hesabı uğurla yaradıldı', - 'DATABASE_CREATED_OK' => '%s verilənlər bazası uğurla yaradıldı.', - 'CRON_CREATED_OK' => 'Zamanlanmış tapşırıq uğurla yaradıldı.', - 'IP_CREATED_OK' => '%s ip ünvanı uğurla yaradıldı.', - 'PACKAGE_CREATED_OK' => '%s paketi uğurla yaradıldı.', - 'SSL_GENERATED_OK' => 'Sertifikart uğurla yaradıldı.', - 'RULE_CREATED_OK' => 'Qayda uğurla yaradıldı.', - 'BANLIST_CREATED_OK' => 'IP ünvan müvəffəqiyyətlə qadağan edildi', - 'Autoupdate has been successfully enabled' => 'Avtomatik yenilənmə uğurla aktivləşdirildi', - 'Autoupdate has been successfully disabled' => 'Avtomatik yenilənmə uğurla söndürüldü', - 'Cronjob email reporting has been successfully enabled' => 'Zamanlanmış tapşırıq e-poçt hesabatı uğurla aktivləşdirildi', - 'Cronjob email reporting has been successfully disabled' => 'Zamanlanmış tapşırıq e-poçt hesabatı uğurla dayandırıldı', - 'Changes has been saved.' => 'Dəyişikliklər yadda saxlanıldı.', - 'Confirmation' => 'Təsdiqləmə', - 'DELETE_USER_CONFIRMATION' => '%s istifadəçisini silmək istədiyinizə əminsinizmi?', - 'SUSPEND_USER_CONFIRMATION' => '%s istifadəçisini qapatmaq istədiyinizə əminsinizmi?', - 'UNSUSPEND_USER_CONFIRMATION' => '%s istifadəçisini davam etdirmək istədiyinizə əminsinizmi?', - 'DELETE_DOMAIN_CONFIRMATION' => '%s domeni silmək istədiyinizə əminsinizmi?', - 'SUSPEND_DOMAIN_CONFIRMATION' => '%s domeni qapatmaq istədiyinizə əminsinizmi?', - 'UNSUSPEND_DOMAIN_CONFIRMATION' => '%s domeni davam etdirmək istədiyinizə əminsinizmi?', - 'DELETE_RECORD_CONFIRMATION' => '%s qeydi silmək istədiyinizə əminsinizmi?', - 'SUSPEND_RECORD_CONFIRMATION' => '%s qeydi qapatmaq istədiyinizə əminsinizmi?', - 'UNSUSPEND_RECORD_CONFIRMATION' => '%s qeydi davam etdirmək istədiyinizə əminsinizmi?', - 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => '%s hesabını silmək istədiyinizə əminsinizmi?', - 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '%s hesabını qapatmaq istədiyinizə əminsinizmi?', - 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '%s hesabını davam etdirmək istədiyinizə əminsinizmi?', - 'DELETE_DATABASE_CONFIRMATION' => '%s verilənlər bazasını silmək istədiyinizə əminsinizmi?', - 'SUSPEND_DATABASE_CONFIRMATION' => '%s verilənlər bazasını qapatmaq istədiyinizə əminsinizmi?', - 'UNSUSPEND_DATABASE_CONFIRMATION' => '%s verilənlər bazasını davam etdirmək istədiyinizə əminsinizmi?', - 'DELETE_CRON_CONFIRMATION' => 'Zamanlanmış tapşırığı silmək istədiyinizə əminsinizmi?', - 'SUSPEND_CRON_CONFIRMATION' => 'Zamanlanmış tapşırığı qapatmaq istədiyinizə əminsinizmi?', - 'UNSUSPEND_CRON_CONFIRMATION' => 'Zamanlanmış tapşırığı davam etdirmək istədiyinizə əminsinizmi?', - 'DELETE_BACKUP_CONFIRMATION' => '%s nüsxəsini silmək istədiyinizə əminsinizmi?', - 'DELETE_EXCLUSION_CONFIRMATION' => '%s nüsxələmə qaydasını silmək istədiyinizə əminsinizmi?', - 'DELETE_PACKAGE_CONFIRMATION' => '%s paketini silmək istədiyinizə əminsinizmi?', - 'DELETE_IP_CONFIRMATION' => '%s IP ünvanı silmək istədiyinizə əminsinizmi?', - 'DELETE_RULE_CONFIRMATION' => '#%s qaydasını silmək istədiyinizə əminsinizmi?', - 'SUSPEND_RULE_CONFIRMATION' => '#%s qaydasını qapatmaq istədiyinizə əminsinizmi?', - 'UNSUSPEND_RULE_CONFIRMATION' => '#%s qaydasını davam etdirmək istədiyinizə əminsinizmi?', - 'LEAVE_PAGE_CONFIRMATION' => 'Səhifəni tərk edirsiniz?', - 'RESTART_CONFIRMATION' => '%s yenidən başladılacaq.əstiqləyirsiniz?', - 'Welcome' => 'XOŞ GƏLDİNİZ', - 'LOGGED_IN_AS' => '%s istifadəçisi olaraq daxil oldunuz', - 'Error' => 'Xəta', - 'Invalid username or password' => 'Doğru olmayan istifadəçi adı və ya şifrə', - 'Invalid username or code' => 'Doğru olmayan istifadəçi adı və ya kod', - 'Passwords not match' => 'Şifrələr uyğun deyil', - 'Please enter valid email address.' => 'Lütfən doğru e-poçt ünvanı daxil edin.', - 'Field "%s" can not be blank.' => '"%s" sahəni boş saxlaya bilməzsiniz.', - 'Password is too short.' => 'Şifrə çox qısadır (minimum 6 simvol)', - 'Error code:' => 'Xəta kodu: %s', - 'SERVICE_ACTION_FAILED' => '"%s" "%s" uğursuz oldu', - 'IP address is in use' => 'IP ünvanı istifadədədir', - 'BACKUP_SCHEDULED' => 'Tapşırıq uğurla əlavə edildi. Nüsxə yüklənildiyi zaman xəbərdarlıq e-poçtu alacaqsınız.', - 'BACKUP_EXISTS' => 'Artıq nüsxələmə əməliyyatı davam edir. Yenidən yaratmaq üçün bunun bitməsini gözləyin.', - 'RESTORE_SCHEDULED' => 'Tapşırıq sıraya əlavə edildi. Nüsxə yüklənildiyi zaman xəbərdarlıq e-poçtu alacaqsınız.', - 'RESTORE_EXISTS' => 'Artıq restovrasiya əməliyyatı davam edir. Bunu işlətmək üçün lütfən əvvəlki əməliyyatın bitməsiniz gözləyin.', - 'WEB_EXCLUSIONS' => 'Hər sətrə bir domen əlavə yazın. Bütün domenlər xaric etmək üçün * istifadə edin. Xüsusi qovluq üçün bu formatda yazın: domain.com:public_html/cache:public_html/tmp', - 'DNS_EXCLUSIONS' => 'Hər sətrə bi domen əlavə edin. Bütün domenləri xaric etmək üçün * istifadə edin', - 'MAIL_EXCLUSIONS' => 'Hər sətrə bi domen əlavə edin. Bütün domenləri xaric etmək üçün * istifadə edin. Xüsusi hesab təyin etmək üçün bu formatda yazın: domain.com:info:destek:postmaster', - 'DB_EXCLUSIONS' => 'Hər sətrə bir verilənlər bazası əlavə edin. Hamısı üçün * istifadə edin. ', - 'CRON_EXCLUSIONS' => 'Bütün zamanlanmış tapşırıqları xaric etmək üçün * istifadə edin', - 'USER_EXCLUSIONS' => 'Hər sətrə bir qovluq əlavə edin. Bütün versiyaları xaric etmək üçün * istifadə edin', - 'Welcome to Vesta Control Panel' => 'Vesta nəzarət panelinə xoş gəldiniz', - 'MAIL_FROM' => 'Vesta Nəzarət Paneli ', - 'GREETINGS_GORDON_FREEMAN' => "Hər vaxtınız xeyir, %s %s,\n", - 'GREETINGS' => "Hər vaxtınız xeyir,\n", - 'ACCOUNT_READY' => "Hesabınız uğurla yaradıldı və istifadəyə hazırdır.\n\nhttps://%s/login/\nİstifadəçi adı: %s\nŞifrə: %s\n\n--\nVesta Nəzarət Paneli\n", - 'FTP login credentials' => 'FTP giriş məlumatları', - 'FTP_ACCOUNT_READY' => "FTP hesabı uğurla yaradıldı və istifadə hazırdır.\n\nHostname: %s\nİstifadəçi adı: %s_%s\nŞifrə: %s\n\n--\nVesta Control Panel\n", - 'Database Credentials' => 'Veritabanı Bilgileri', - 'DATABASE_READY' => "Verilənlər bazası yaradıldı.\n\Verilənlər bazsı: %s\nİstifadəçi: %s\Şifrə: %s\n%s\n\n--\nVesta Nəzarət Paneli\n", - 'forgot password' => 'Şifrəmi unutdum', - 'Confirm' => 'Təstiqlə', - 'New Password' => 'Yeni şifrə', - 'Confirm Password' => 'Şifrəni təstiqlə', - 'Reset' => 'Sıfırla', - 'Reset Code' => 'Sıfırlama Kodu', - 'RESET_NOTICE' => '', - 'RESET_CODE_SENT' => 'Şifrə sıfırlama kodu e-poçt ünvanınıza göndərildi.
    ', - 'MAIL_RESET_SUBJECT' => 'Şifrə sıfırlama - %s', - 'PASSWORD_RESET_REQUEST' => "Şifrənizi sıfırlamaq üçün lütfən linki izləyin:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\Alternativ olaraq https://%s/reset/?action=code&user=%s linkinə klik edib davamına bu reset kodunuzu daxil edə bilərsiniz:\n%s\n\nƏgər şifrə sıfırlama istəyiniz olmayıbsa lütfən mesajı yox sayın və üzrümüzü qəbul edin.\n\n--\nVesta Nəzarət Mərkəzi\n", - 'Jan' => 'Yan', - 'Feb' => 'Fev', - 'Mar' => 'Mar', - 'Apr' => 'Apr', - 'May' => 'May', - 'Jun' => 'İyn', - 'Jul' => 'İyl', - 'Aug' => 'Avq', - 'Sep' => 'Sent', - 'Oct' => 'Okt', - 'Nov' => 'Noy', - 'Dec' => 'Dek', - 'Configuring Server' => 'Server ayarlanması', - 'Hostname' => 'Hostname', - 'Time Zone' => 'Vaxt qurşağı', - 'Default Language' => 'Default dil', - 'Proxy Server' => 'Proxy server', - 'Web Server' => 'Veb server', - 'Backend Server' => 'Backend Server', - 'Backend Pool Mode' => 'Backend pul rejimi', - 'DNS Server' => 'DNS server', - 'DNS Cluster' => 'DNS Cluster', - 'MAIL Server' => 'MAIL Server', - 'Antivirus' => 'Antivirus', - 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', - 'Webmail URL' => 'Vebmail URL', - 'MySQL Support' => 'MySQL dəstək', - 'phpMyAdmin URL' => 'phpMyAdmin URL', - 'PostgreSQL Support' => 'PostgreSQL dəstəyi', - 'phpPgAdmin URL' => 'phpPgAdmin URL', - 'Maximum Number Of Databases' => 'Verilənlər bazasının maksimum sayı', - 'Current Number Of Databases' => 'Current Number Of Databases', - 'Local backup' => 'Yerli backup', - 'Compression level' => 'Sıxılma səviyyəsi', - 'Directory' => 'Kataloq', - 'Remote backup' => 'Uzaqdan backup', - 'ftp' => 'FTP', - 'sftp' => 'SFTP', - 'SFTP Chroot' => 'SFTP Chroot', - 'FileSystem Disk Quota' => 'FaylSistemi disk kvotası', - 'Vesta Control Panel Plugins' => 'Vesta Nəzarət Paneli əlavələri', - 'preview' => 'Ön görünüş', - 'Reseller Role' => 'Reseller rolu', - 'Web Config Editor' => 'Veb Konfiqurasiya redaktoru', - 'Template Manager' => 'Şablon idarəçisi', - 'Backup Migration Manager' => 'Nüsxələmə miqrasiya idarəçisi', - 'FileManager' => 'Faylİdarəçisi', - 'show: CPU / MEM / NET / DISK' => 'göstər: CPU / BEL / ŞƏ / DISK', - 'sort by' => 'sıralama ölçüsü', - 'Date' => 'Tarix', - 'Starred' => 'Ulduzlu', - 'Name' => 'Ad', - 'save to favorites' => 'Sevimlilərə əlavə edin', - 'File Manager' => 'Fayl İdarəçisi', - 'size' => 'ölçü', - 'date' => 'tarix', - 'name' => 'ad', - 'Initializing' => 'Başladılır', - 'UPLOAD' => 'YÜKLƏ', - 'NEW FILE' => 'YENİ FAYL', - 'NEW DIR' => 'YENİ QOVLUQ', - 'DELETE' => 'SİL', - 'RENAME' => 'YENİDƏN ADLANDIR', - 'MOVE' => 'kÖÇÜRT', - 'RIGHTS' => 'HÜQUQLAR', - 'COPY' => 'KOPYALA', - 'ARCHIVE' => 'ARXİVLƏ', - 'EXTRACT' => 'ÇIXART', - 'DOWNLOAD' => 'YÜKLƏ', - 'Are you sure?' => 'Əminsinizmi?', - 'Hit' => 'Hit', - 'to reload the page' => 'səhifəni yeniləm üçün', - 'Directory name cannot be empty' => 'Kataloq adı boş ola bilməz', - 'File name cannot be empty' => 'Fayl adı boş ola bilməz', - 'No file selected' => 'Fayl seçilmədi', - 'No file or folder selected' => 'Fayl və ya qovluq seçilmədi', - 'File type not supported' => 'Fayl tipi dəstəklənmir', - 'Directory download not available in current version' => 'Kataloq yüklnməsi bu versiyada mövcud deyil', - 'Directory not available' => 'Kataloq keçərli deyil', - 'Done' => 'Birdi', - 'Close' => 'Bağla', - 'Copy' => 'Kopyala', - 'Cancel' => 'Ləğv et', - 'Rename' => 'Yenidən adlandır', - 'Move' => 'Köçürt', - 'Change Rights' => 'Hüquqları dəyişdirin', - 'Delete' => 'Sil', - 'Extract' => 'Çıxart', - 'Create' => 'Yarat', - 'Compress' => 'Sıx', - 'OK' => 'TAMAM', - 'YOU ARE COPYING' => 'Siz kopyalayırsınız', - 'YOU ARE REMOVING' => 'Siz silirsiniz', - 'Delete items' => 'Maddələri silin', - 'Copy files' => 'Faylları kopyalayın', - 'Move files' => 'Faylları daşıyın', - 'Are you sure you want to copy' => 'Kopyalamaq istədiyinizə əminsinizmi', - 'Are you sure you want to move' => 'Köçürtmək istədiyinizə əminsinizmi?', - 'Are you sure you want to delete' => 'Silmək istədiyinizə əminsinizmi?', - 'into' => 'daxil', - 'existing files will be replaced' => 'mövcud fayllar dəyişdirilir', - 'Original name' => 'Orjinal adı', - 'File' => 'Fayl', - 'already exists' => 'mövcuddur', - 'Create file' => 'Fayl yarat', - 'Create directory' => 'Kataloq yarat', - 'read by owner' => 'sahini tərəfindən oxunan', - 'write by owner' => 'sahibi tərəfindən yazılan', - 'execute/search by owner' => 'sahibi tərəfindən icra edilən/axtarılan', - 'read by group' => 'grup tərəfindən oxunan', - 'write by group' => 'qrup tərəfindən yazılan', - 'execute/search by group' => 'qrup tərəfindən icar edilən/axtarılan', - 'read by others' => 'başqaları tərəfindən oxunan', - 'write by others' => 'başqaları tərəfindən yazılan', - 'execute/search by others' => 'başqaları tərəfindən icra edilən/axtarılan', - 'Shortcuts' => 'Qısayollar', - 'Add New object' => 'Yeni obyekt əlavə edin', - 'Save Form' => 'Formanı yadda saxla', - 'Cancel saving form' => 'Formanı yadda saxlama', - 'Go to USER list' => 'İstifadəçi siyahısına get', - 'Go to WEB list' => 'Veb siyahısına get', - 'Go to DNS list' => 'DNS siyahısına get', - 'Go to MAIL list' => 'MAIL siyahısına get', - 'Go to DB list' => 'DB siyahısına get', - 'Go to CRON list' => 'CRON siyahısına get', - 'Go to BACKUP list' => 'Nüsxə siyahısına get', - 'Focus on search' => 'Axtarışa fokuslan', - 'Display/Close shortcuts' => 'Qısayolları göstər/bağla', - 'Move backward through top menu' => 'Üst menyu arasında geriyə get', - 'Move forward through top menu' => 'Üst menyu arasında iləriyə get', - 'Enter focused element' => 'Fokuslanmış elementi gör', - 'Move up through elements list' => 'Elementlər siyahısına keçin', - 'Move down through elements list' => 'Elementlər siyahısına keçin', - 'Upload' => 'Yüklə', - 'New File' => 'Yeni fayl', - 'New Folder' => 'Yeni qovluq', - 'Download' => 'Yüklə', - 'Archive' => 'Arxivlə', - 'Save File (in text editor)' => 'Faylı yadda saxla (mətn redaktorunda)', - 'Close Popup / Cancel' => 'Popup bağla / Ləğv et', - 'Move Cursor Up' => 'Kursoru yuxarı qaldır', - 'Move Cursor Down' => 'Kursoru aşağı endir', - 'Switch to Left Tab' => 'Sol taba keçin', - 'Switch to Right Tab' => 'Sağ taba keçin', - 'Switch Tab' => 'Taba keç', - 'Go to the Top of the File List' => 'Fayl siyahısının əvvəlinə get', - 'Go to the Last File' => 'Son fayla bax', - 'Open File / Enter Directory' => 'Faylı aç/Kataloqa daxil ol', - 'Edit File' => 'Faylı redaktə edin', - 'Go to Parent Directory' => 'Əsas kataloqa daxil olun', - 'Select Current File' => 'Hazırki faylı seçin', - 'Select Bunch of Files' => 'Fayl dəstini seçin', - 'Add File to the Current Selection' => 'Hazırki seçimə fayl əlavə edin', - 'Select All Files' => 'Bütün faylları seçin', - 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => - 'qısayollar mükəmməl fayl idarəçisi Midnight Commander fayl idarəçisindən alınmışdır', - 'Licence Key' => 'Lisenziya açarı', - 'Enter License Key' => 'Lisenziya açarını daxil edin', - 'Buy Licence' => 'Lisenziya alın', - 'Buy Lifetime License' => 'Ömür boyu lisenziyası alın', - 'Disable and Cancel Licence' => 'Lisenziyanı söndürün və ləğv edin', - 'Licence Activated' => 'Lisenziya aktivdir', - 'Licence Deactivated' => 'Lisenziya ləğv edilib', - 'Restrict users so that they cannot use SSH and access only their home directory.' => 'İstifadəçilə SSH yalnız öz əsas kataloqlarına daxil ola bilərlər.', - 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Baxış, kopyalama, redaktə, tamfunksional fayl meneceri vasitəsilə veb domendə olan faylların baxışı və ixracı.', - 'This is a commercial module, you would need to purchace license key to enable it.' => 'Bu kommersiya moduludur. Ondan istifadə etmək üçün lisenziya açarını əldə etməlisiniz', - 'Minutes' => 'Dəqiqəlik', - 'Hourly' => 'Saatlıq', - 'Run Command' => 'Əmri aktivləşdir', - 'every month' => 'hər ay', - 'every odd month' => 'hər tək ay', - 'every even month' => 'hər cüt ay', - 'every day' => 'hər gün', - 'every odd day' => 'hər tək gün', - 'every even day' => 'hər cüt gün', - 'weekdays (5 days)' => 'həftə içi (5 gün)', - 'weekend (2 days)' => 'həftə sonu (2 gün)', - 'Monday' => 'Bazar ertəsi', - 'Tuesday' => 'Çərşənbə axşamı', - 'Wednesday' => 'Çərşənbə', - 'Thursday' => 'Cümə axşamı', - 'Friday' => 'Cümə', - 'Saturday' => 'Şənbə', - 'Sunday' => 'Bazar', - 'every hour' => 'hər saat', - 'every two hours' => 'hər iki saatda bir', - 'every minute' => 'hər dəqiqə', - 'every two minutes' => 'hər iki dəqiqdə bir', - 'every' => 'hər', - 'Generate' => 'Yaratmaq', - 'webalizer' => 'webalizer', - 'awstats' => 'awstats', - 'Vesta SSL' => 'Vesta SSL', - 'SUBJECT' => 'MÖVZU', - 'ALIASES' => 'LƏQƏBLƏR', - 'NOT_BEFORE' => 'NOT_BEFORE', - 'NOT_AFTER' => 'NOT_AFTER', - 'SIGNATURE' => 'İMZA', - 'PUB_KEY' => 'PUB_KEY', - 'ISSUER' => 'ISSUER', - 'Use server hostname' => 'Server hostname-dən istifadə et', - 'Use domain hostname' => 'Domen hostname-dən istifadə et', - 'Use STARTTLS' => 'STARTTLS istifadə et', - 'Use SSL / TLS' => 'SSL / TLS istifadə et', - 'No encryption' => 'Şifrələnməsiz', - 'Do not use encryption' => 'Şifrələnməni istifadə etmə', - 'maximum characters length, including prefix' => 'Simvolların maksimal uzunlu %s, prfiks daxil', - 'Email Credentials' => 'E-poçt hüquqları', -); diff --git a/web/inc/i18n/bg.php b/web/inc/i18n/bg.php index 642e6cfae..760b88c17 100644 --- a/web/inc/i18n/bg.php +++ b/web/inc/i18n/bg.php @@ -553,7 +553,6 @@ $LANG['bg'] = array( 'MAIL Server' => 'Пощенски сървър', 'Antivirus' => 'Антивирус', 'AntiSpam' => 'Антиспам', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Уебмейл адрес', 'MySQL Support' => 'MySQL поддръжкс', 'phpMyAdmin URL' => 'phpMyAdmin адрес', diff --git a/web/inc/i18n/bs.php b/web/inc/i18n/bs.php index 4e2f32e1a..22d997e59 100644 --- a/web/inc/i18n/bs.php +++ b/web/inc/i18n/bs.php @@ -559,7 +559,6 @@ $LANG['bs'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/cn.php b/web/inc/i18n/cn.php index d7729b9a4..621478712 100644 --- a/web/inc/i18n/cn.php +++ b/web/inc/i18n/cn.php @@ -10,147 +10,147 @@ */ $LANG['cn'] = array( - 'Packages' => '用户方案', - 'IP' => 'IP 地址', - 'Graphs' => '资源图表', - 'Statistics' => '统计信息', - 'Log' => '系统日志', - 'Server' => '服务器', - 'Services' => '系统服务', + 'Packages' => '预设方案', + 'IP' => 'IP 地址', + 'Graphs' => '资源图表', + 'Statistics' => '统计信息', + 'Log' => '系统日志', + 'Server' => '服务器', + 'Services' => '系统服务', 'Firewall' => '防火墙', - 'Updates' => '系统更新', - 'Log in' => '登录', - 'Log out' => '登出', + 'Updates' => '系统更新', + 'Log in' => '登录', + 'Log out' => '登出', - 'USER' => '用户账户', - 'WEB' => 'Web 服务', - 'DNS' => 'DNS 服务', - 'MAIL' => '邮箱服务', - 'DB' => '数据库', - 'CRON' => '定时任务', - 'BACKUP' => '数据备份', + 'USER' => '用户账户', + 'WEB' => 'Web 服务', + 'DNS' => 'DNS 服务', + 'MAIL' => '邮箱服务', + 'DB' => '数据库', + 'CRON' => '定时任务', + 'BACKUP' => '数据备份', - 'LOGIN' => '登录', - 'RESET PASSWORD' => '重置密码', - 'SEARCH' => '搜索', - 'PACKAGE' => '用户方案', - 'RRD' => '资源图表', - 'STATS' => '统计信息', - 'LOG' => '系统日志', - 'UPDATES' => '系统更新', - 'FIREWALL' => '防火墙', - 'SERVER' => '服务器', - 'MEMORY' => '内存', - 'DISK' => '磁盘', - 'NETWORK' => '网络', - 'Web Log Manager' => 'Web 日志管理', + 'LOGIN' => '登录', + 'RESET PASSWORD' => '重置密码', + 'SEARCH' => '搜索', + 'PACKAGE' => '预设方案', + 'RRD' => '资源图表', + 'STATS' => '统计信息', + 'LOG' => '系统日志', + 'UPDATES' => '系统更新', + 'FIREWALL' => '防火墙', + 'SERVER' => '服务器', + 'MEMORY' => '内存', + 'DISK' => '磁盘', + 'NETWORK' => '网络', + 'Web Log Manager' => 'Web 日志管理', - 'no notifications' => '没有通知', + 'no notifications' => '没有通知', - 'Add User' => '添加用户账户', - 'Add Domain' => '添加网站域名', + 'Add User' => '添加用户', + 'Add Domain' => '添加域名', 'Add Web Domain' => '添加网站域名', - 'Add DNS Domain' => '添加DNS域名', - 'Add DNS Record' => '添加DNS记录', - 'Add Mail Domain' => '添加邮箱域名', - 'Add Mail Account' => '添加邮箱账户', - 'Add Database' => '添加数据库', - 'Add Cron Job' => '添加定时任务', - 'Create Backup' => '创建数据备份', - 'Configure' => '配置', - 'Restore All' => '全部恢复', - 'Add Package' => '添加用户方案', - 'Add IP' => '添加IP地址', - 'Add Rule' => '添加防火墙规则', + 'Add DNS Domain' => '添加DNS域名', + 'Add DNS Record' => '添加DNS记录', + 'Add Mail Domain' => '添加邮箱域名', + 'Add Mail Account' => '添加邮箱账户', + 'Add Database' => '添加数据库', + 'Add Cron Job' => '添加定时任务', + 'Create Backup' => '创建备份', + 'Configure' => '配置', + 'Restore All' => '全部恢复', + 'Add Package' => '添加方案', + 'Add IP' => '添加IP地址', + 'Add Rule' => '添加规则', 'Ban IP Address' => '封锁IP地址', - 'Search' => '搜索', + 'Search' => '搜索', 'Add one more FTP Account' => '增加一个FTP账户', - 'Overall Statistics' => '整体统计信息', - 'Daily' => '按天', - 'Weekly' => '按周', - 'Monthly' => '按月', - 'Yearly' => '按年', - 'Add' => '添加', - 'Back' => '返回', - 'Save' => '保存', - 'Submit' => '提交', + 'Overall Statistics' => '整体统计信息', + 'Daily' => '按天', + 'Weekly' => '按周', + 'Monthly' => '按月', + 'Yearly' => '按年', + 'Add' => '添加', + 'Back' => '返回', + 'Save' => '保存', + 'Submit' => '提交', - 'toggle all' => '批量操作', - 'apply to selected' => '应用于选中项的操作', - 'rebuild' => '重建', - 'rebuild web' => '重建网站', - 'rebuild dns' => '重建DNS', - 'rebuild mail' => '重建邮箱', - 'rebuild db' => '重建数据库', - 'rebuild cron' => '重建定时任务', - 'update counters' => '更新使用情况', - 'suspend' => '暂停', - 'unsuspend' => '解除暂停', - 'delete' => '删除', - 'show per user' => '选中指定的用户显示', - 'login as' => '切换登录至账户', - 'logout' => '登出', - 'edit' => '编辑', - 'open webstats' => '查看网站统计', - 'view logs' => '查看日志', - 'list records' => '列出 %s 条记录', - 'add record' => '添加记录', - 'list accounts' => '列出 %s 个账户', - 'add account' => '添加账户', - 'open webmail' => '打开网页邮箱', - 'list fail2ban' => 'Fail2ban 封锁列表', - 'open %s' => '打开 %s', - 'download' => '下载', - 'restore' => '恢复', - 'configure restore settings' => '配置恢复', - 'stop' => '停止', - 'start' => '启动', - 'restart' => '重新启动', - 'update' => '更新', - 'generate' => '生成', + 'toggle all' => '批量操作', + 'apply to selected' => '应用于选中项的操作', + 'rebuild' => '重建', + 'rebuild web' => '重建网站', + 'rebuild dns' => '重建DNS', + 'rebuild mail' => '重建邮箱', + 'rebuild db' => '重建数据库', + 'rebuild cron' => '重建定时任务', + 'update counters' => '更新计数器', + 'suspend' => '暂停', + 'unsuspend' => '解除暂停', + 'delete' => '删除', + 'show per user' => '按用户显示', + 'login as' => '登录至账户', + 'logout' => '登出', + 'edit' => '编辑', + 'open webstats' => '打开网站统计', + 'view logs' => '查看日志', + 'list records' => '列出 %s 条记录', + 'add record' => '添加记录', + 'list accounts' => '列出 %s 个账户', + 'add account' => '添加账户', + 'open webmail' => '打开网页邮箱', + 'list fail2ban' => 'Fail2ban 封锁名单', + 'open %s' => '打开 %s', + 'download' => '下载', + 'restore' => '恢复', + 'configure restore settings' => '配置恢复选项', + 'stop' => '停止', + 'start' => '启动', + 'restart' => '重新启动', + 'update' => '更新', + 'generate' => '生成', 'Generate CSR' => '生成CSR', - 'reread IP' => '重新读取IP地址', + 'reread IP' => '重新读取IP', 'enable autoupdate' => '启用自动更新', 'disable autoupdate' => '停用自动更新', 'turn on notifications' => '启用通知', 'turn off notifications' => '停用通知', 'configure' => '配置', - 'Adding User' => '添加用户账户', - 'Editing User' => '编辑用户账户', - 'Adding Domain' => '添加网站域名', - 'Editing Domain' => '编辑网站域名', - 'Adding DNS Domain' => '添加DNS域名', - 'Editing DNS Domain' => '编辑DNS域名', - 'Adding DNS Record' => '添加DNS记录', - 'Editing DNS Record' => '编辑DNS记录', - 'Adding Mail Domain' => '添加邮箱域名', - 'Editing Mail Domain' => '编辑邮箱域名', - 'Adding Mail Account' => '添加邮箱账户', - 'Editing Mail Account' => '编辑邮箱账户', - 'Adding database' => '添加数据库', - 'Editing Cron Job' => '编辑定时任务', - 'Adding Cron Job' => '添加定时任务', - 'Editing Database' => '编辑数据库', - 'Adding Package' => '添加用户方案', - 'Editing Package' => '编辑用户方案', - 'Adding IP address' => '添加IP地址', - 'Editing IP Address' => '编辑IP地址', - 'Editing Backup Exclusions' => '配置数据备份的排除项', + 'Adding User' => '添加用户', + 'Editing User' => '编辑用户', + 'Adding Domain' => '添加域名', + 'Editing Domain' => '编辑域名', + 'Adding DNS Domain' => '添加DNS域名', + 'Editing DNS Domain' => '编辑DNS域名', + 'Adding DNS Record' => '添加DNS记录', + 'Editing DNS Record' => '编辑DNS记录', + 'Adding Mail Domain' => '添加邮箱域名', + 'Editing Mail Domain' => '编辑邮箱域名', + 'Adding Mail Account' => '添加邮箱账户', + 'Editing Mail Account' => '编辑邮箱账户', + 'Adding database' => '添加数据库', + 'Editing Cron Job' => '编辑定时任务', + 'Adding Cron Job' => '添加定时任务', + 'Editing Database' => '编辑数据库', + 'Adding Package' => '添加方案', + 'Editing Package' => '编辑方案', + 'Adding IP address' => '添加IP地址', + 'Editing IP Address' => '编辑IP地址', + 'Editing Backup Exclusions' => '配置排除的备份项目', 'Generating CSR' => '生成CSR', - 'Listing' => '列出', - 'Search Results' => '搜索结果', + 'Listing' => '列出', + 'Search Results' => '搜索结果', 'Adding Firewall Rule' => '添加防火墙规则', 'Editing Firewall Rule' => '编辑防火墙规则', - 'Adding IP Address to Banlist' => '添加IP地址以封锁', + 'Adding IP Address to Banlist' => '添加IP至封锁名单', - 'active' => '正常', - 'spnd' => '暂停', - 'suspended' => '已暂停', - 'running' => '运行中', - 'stopped' => '已停止', - 'outdated' => '可升级新版本', - 'updated' => '已是最新版本', + 'active' => '正常', + 'spnd' => '暂停', + 'suspended' => '已暂停', + 'running' => '运行中', + 'stopped' => '已停止', + 'outdated' => '可升级新版本', + 'updated' => '已是最新版本', 'yes' => '是', 'no' => '否', @@ -168,7 +168,7 @@ $LANG['cn'] = array( 'month' => '月', 'package' => '方案', 'Bandwidth' => '流量', - 'Disk' => '磁盘', + 'Disk' => '磁盘空间', 'Web' => '网站', 'Mail' => '邮箱', 'Databases' => '数据库', @@ -182,55 +182,55 @@ $LANG['cn'] = array( 'Web Domains' => '网站域名', 'SSL Domains' => 'SSL域名', 'Web Aliases' => '网站别名', - 'per domain' => '每个域名', + 'per domain' => '每域名', 'DNS Domains' => 'DNS域名', 'DNS domains' => 'DNS域名', - 'DNS records' => 'DNS记录', + 'DNS records' => 'DNS记录', 'Name Servers' => 'DNS服务器', 'Mail Domains' => '邮箱域名', 'Mail Accounts' => '邮箱账户', 'Cron Jobs' => '定时任务', - 'SSH Access' => 'SSH访问控制', - 'IP Address' => 'IP地址', + 'SSH Access' => 'SSH权限', + 'IP Address' => 'IP地址', 'IP Addresses' => 'IP地址', - 'Backups' => '数据备份', + 'Backups' => '备份', 'Backup System' => '备份系统', - 'backup exclusions' => '数据备份的排除项', + 'backup exclusions' => '排除的备份项目', 'template' => '模板', 'SSL Support' => '启用SSL', - 'SSL Home Directory' => 'SSL主目录', - 'Lets Encrypt Support' => '采用 Let's Encrypt', - 'Lets Encrypt' => 'Let's Encrypt', + 'SSL Home Directory' => 'SSL站点主目录', + 'Lets Encrypt Support' => '采用 Let's Encrypt', + 'Lets Encrypt' => 'Let's Encrypt', 'Your certificate will be automatically issued in 5 minutes' => '证书将在5分钟内自动完成签发', 'Proxy Support' => '反向代理', 'Proxy Extensions' => '需代理的文件扩展名', 'Web Statistics' => '网站统计', 'Additional FTP Account' => '额外的FTP账户', - 'Path' => '路径', + 'Path' => '路径', 'SOA' => 'SOA', 'TTL' => 'TTL', 'Expire' => '过期', 'Records' => '记录', - 'Serial' => '序号', + 'Serial' => 'Serial', 'Catchall email' => '未知收件人聚合邮箱', - 'AntiVirus Support' => '邮件防病毒支持', + 'AntiVirus Support' => '防病毒支持', 'AntiSpam Support' => '防垃圾邮件支持', 'DKIM Support' => 'DKIM支持', 'Accounts' => '账户', 'Quota' => '配额', 'Autoreply' => '自动回复', 'Forward to' => '转发到', - 'Do not store forwarded mail' => '不保留已转发邮件', - 'IMAP hostname' => 'IMAP 服务器', - 'IMAP port' => 'IMAP 端口', - 'IMAP security' => 'IMAP 安全类型', - 'IMAP auth method' => 'IMAP 身份验证', - 'SMTP hostname' => 'SMTP 服务器', - 'SMTP port' => 'SMTP 端口', - 'SMTP security' => 'SMTP 安全类型', - 'SMTP auth method' => 'SMTP 身份验证', - 'STARTTLS' => 'STARTTLS', - 'Normal password' => '普通密码', + 'Do not store forwarded mail' => '不保留已转发的邮件', + 'IMAP hostname' => 'IMAP 服务器', + 'IMAP port' => 'IMAP 端口', + 'IMAP security' => 'IMAP 安全性', + 'IMAP auth method' => 'IMAP 身份验证', + 'SMTP hostname' => 'SMTP 服务器', + 'SMTP port' => 'SMTP 端口', + 'SMTP security' => 'SMTP 安全性', + 'SMTP auth method' => 'SMTP 身份验证', + 'STARTTLS' => 'STARTTLS', + 'Normal password' => '普通密码', 'database' => '数据库', 'User' => '用户名称', 'Host' => '主机', @@ -249,146 +249,144 @@ $LANG['cn'] = array( 'shared' => '共享', 'dedicated' => '独立', 'Owner' => '归属', - 'Users' => '用户', - 'Load Average' => '平均负载', - 'Memory Usage' => '内存使用情况', - 'APACHE2 Usage' => 'Apache2 使用情况', - 'HTTPD Usage' => 'HTTPD 使用情况', - 'NGINX Usage' => 'NGINX 使用情况', - 'MySQL Usage on localhost' => '数据库使用情况 MySQL (localhost)', - 'PostgreSQL Usage on localhost' => '数据库使用情况 PostgreSQL (localhost)', - 'Bandwidth Usage eth0' => '网络使用情况 (eth0)', - 'Bandwidth Usage eth1' => '网络使用情况 (eth1)', - 'Bandwidth Usage venet0' => '网络使用情况 (venet0)', - 'Bandwidth Usage venet1' => '网络使用情况 (venet1)', - 'Bandwidth Usage docker0' => '网络使用情况 (docker0)', - 'Bandwidth Usage docker1' => '网络使用情况 (docker1)', - 'Exim Usage' => 'Exim 使用情况', - 'FTP Usage' => 'FTP 使用情况', - 'SSH Usage' => 'SSH 使用情况', - 'reverse proxy' => '反向代理', - 'web server' => 'Web服务', - 'dns server' => 'DNS服务', - 'mail server' => '邮箱服务', - 'pop/imap server' => 'POP/IMAP服务', - 'email antivirus' => '邮件防病毒', - 'email antispam' => '防垃圾邮件', - 'database server' => '数据库服务', + 'Users' => '用户', + 'Load Average' => '平均负载', + 'Memory Usage' => '内存用量', + 'APACHE2 Usage' => 'Apache2 用量', + 'HTTPD Usage' => 'HTTPD 用量', + 'NGINX Usage' => 'NGINX 用量', + 'MySQL Usage on localhost' => 'MySQL用量 (localhost)', + 'PostgreSQL Usage on localhost' => 'PostgreSQL用量 (localhost)', + 'Bandwidth Usage eth0' => '网络流量 (eth0)', + 'Bandwidth Usage eth1' => '网络流量 (eth1)', + 'Bandwidth Usage venet0' => '网络流量 (venet0)', + 'Bandwidth Usage venet1' => '网络流量 (venet1)', + 'Exim Usage' => 'Exim 用量', + 'FTP Usage' => 'FTP 用量', + 'SSH Usage' => 'SSH 用量', + 'reverse proxy' => '反向代理', + 'web server' => 'Web服务', 'backend server' => '后端服务', //New Keyword for PHP-FPM in SERVER page. - 'ftp server' => 'FTP服务', - 'job scheduler' => '执行定时任务', - 'firewall' => '防火墙服务', - 'brute-force monitor' => '防暴力攻击', - 'CPU' => 'CPU', - 'Memory' => '内存', - 'Uptime' => '已运行时间', - 'core package' => 'Vesta 核心系统', - 'php interpreter' => 'Vesta PHP解释器', - 'internal web server' => 'Vesta Web服务', - 'Version' => '版本', - 'Release' => '发行版本', - 'Architecture' => '架构', - 'Object' => '对象', - 'Username' => '用户名称', - 'Password' => '密码', - 'Email' => '电子邮箱', - 'Package' => '方案', - 'Language' => '语言', - 'First Name' => '名字', - 'Last Name' => '姓氏', - 'Send login credentials to email address' => '将登录信息发送到邮箱', - 'Default Template' => '默认模板', - 'Default Name Servers' => '默认DNS服务器', - 'Domain' => '域名', - 'DNS Support' => 'DNS支持', - 'Mail Support' => '邮箱支持', - 'Advanced options' => '高级选项', - 'Basic options' => '基本选项', - 'Aliases' => '别名', - 'SSL Certificate' => 'SSL证书', - 'SSL Key' => 'SSL密钥', - 'SSL Certificate Authority / Intermediate' => 'SSL CA证书 / 中级证书', + 'dns server' => 'DNS服务', + 'mail server' => '邮箱服务', + 'pop/imap server' => 'POP/IMAP服务', + 'email antivirus' => '邮箱防病毒', + 'email antispam' => '防垃圾邮件', + 'database server' => '数据库服务', + 'ftp server' => 'FTP服务', + 'job scheduler' => '执行定时任务', + 'firewall' => '防火墙服务', + 'brute-force monitor' => '防范暴力攻击', + 'CPU' => 'CPU', + 'Memory' => '内存', + 'Uptime' => '已运行时间', + 'core package' => '核心系统', + 'php interpreter' => 'PHP解释器', + 'internal web server' => '内部Web服务', + 'Version' => '版本', + 'Release' => '发布号', + 'Architecture' => '架构', + 'Object' => '对象', + 'Username' => '用户名称', + 'Password' => '密码', + 'Email' => '电子邮箱', + 'Package' => '方案', + 'Language' => '语言', + 'First Name' => '名字', + 'Last Name' => '姓氏', + 'Send login credentials to email address' => '将登录信息发送到邮箱', + 'Default Template' => '默认模板', + 'Default Name Servers' => '默认DNS服务器', + 'Domain' => '域名', + 'DNS Support' => 'DNS支持', + 'Mail Support' => '邮箱支持', + 'Advanced options' => '高级选项', + 'Basic options' => '基本选项', + 'Aliases' => '别名', + 'SSL Certificate' => 'SSL证书', + 'SSL Key' => 'SSL密钥', + 'SSL Certificate Authority / Intermediate' => 'CA证书或中级证书', 'SSL CSR' => 'SSL CSR', - 'optional' => '可选', + 'optional' => '可选', 'internal' => '内部', - 'Statistics Authorization' => '统计授权', - 'Statistics Auth' => '统计验证', - 'Account' => '账户', - 'Prefix will be automaticaly added to username' => '用户名称将自动添加 %s 前缀', - 'Send FTP credentials to email' => '将FTP登录信息发送到邮箱', - 'Expiration Date' => '到期日期', - 'YYYY-MM-DD' => 'YYYY-MM-DD', - 'Name servers' => 'DNS服务器', - 'Record' => '记录', - 'IP or Value' => 'IP或值', - 'Priority' => '优先级', + 'Statistics Authorization' => '统计授权', + 'Statistics Auth' => '统计验证', + 'Account' => '账户', + 'Prefix will be automaticaly added to username' => '用户名称将会自动添加 %s 前缀', + 'Send FTP credentials to email' => '将FTP登录信息发送到邮箱', + 'Expiration Date' => '到期日期', + 'YYYY-MM-DD' => 'YYYY-MM-DD', + 'Name servers' => 'DNS服务器', + 'Record' => '记录', + 'IP or Value' => 'IP或值', + 'Priority' => '优先级', 'Record Number' => '记录编号', - 'in megabytes' => '以MB为单位', - 'Message' => '信息', - 'use local-part' => '使用域内部分', - 'one or more email addresses' => '一个或多个邮箱', - 'Prefix will be automaticaly added to database name and database user' => '数据库名称及用户名称将自动添加 %s 前缀', - 'Database' => '数据库名称', - 'Type' => '类型', - 'Minute' => '分', - 'Command' => '指令', - 'Package Name' => '方案名称', - 'Netmask' => '子网掩码', - 'Interface' => '网络接口', - 'Shared' => '共享', - 'Assigned user' => '指定用户', - 'Assigned domain' => '指定域名', + 'in megabytes' => '以MB为单位', + 'Message' => '信息', + 'use local-part' => '采用 local-part', + 'one or more email addresses' => '一个或更多邮箱地址', + 'Prefix will be automaticaly added to database name and database user' => '数据库名及用户名将会自动添加 %s 前缀', + 'Database' => '数据库名称', + 'Type' => '类型', + 'Minute' => '分', + 'Command' => '指令', + 'Package Name' => '方案名称', + 'Netmask' => '子网掩码', + 'Interface' => '网络接口', + 'Shared' => '共享', + 'Assigned user' => '指定用户', + 'Assigned domain' => '指定域名', 'NAT IP association' => 'NAT IP 关联', - 'shell' => 'shell', - 'web domains' => '网站域名', - 'web aliases' => '网站别名', - 'dns records' => 'DNS记录', - 'mail domains' => '邮箱域名', - 'mail accounts' => '邮箱账户', - 'accounts' => '账户', - 'databases' => '数据库', - 'cron jobs' => '定时任务', - 'backups' => '备份', - 'quota' => '配额', - 'day of week' => '星期几', - 'cmd' => '指令', - 'users' => '用户', - 'domains' => '域名', - 'aliases' => '别名', - 'records' => '记录', - 'jobs' => '任务', - 'username' => '用户名称', - 'password' => '密码', - 'type' => '类型', - 'charset' => '编码', - 'domain' => '域名', - 'ip' => 'IP', - 'ip address' => 'IP地址', - 'IP address' => 'IP地址', - 'netmask' => '子网掩码', - 'interface' => '网络接口', - 'assigned user' => '指定用户', - 'ns1' => 'ns1', - 'ns2' => 'ns2', - 'user' => '用户', - 'email' => '邮箱', - 'first name' => '名字', - 'last name' => '姓氏', - 'account' => '账户', - 'ssl certificate' => 'SSL证书', - 'ssl key' => 'SSL密钥', - 'stats user password' => '统计用户账户密码', - 'stats username' => '统计用户名称', - 'stats password' => '统计密码', - 'ftp user password' => 'FTP用户账户密码', - 'ftp user' => 'FTP用户', - 'Last 70 lines of %s.%s.log' => '%s.%s.log 的最新 70 条日志记录', + 'shell' => 'shell', + 'web domains' => '网站域名', + 'web aliases' => '网站别名', + 'dns records' => 'DNS记录', + 'mail domains' => '邮箱域名', + 'mail accounts' => '邮箱账户', + 'accounts' => '账户', + 'databases' => '数据库', + 'cron jobs' => '定时任务', + 'backups' => '备份', + 'quota' => '配额', + 'day of week' => '星期几', + 'cmd' => '指令', + 'users' => '用户', + 'domains' => '域名', + 'aliases' => '别名', + 'records' => '记录', + 'jobs' => '任务', + 'username' => '用户名称', + 'password' => '密码', + 'type' => '类型', + 'charset' => '编码', + 'domain' => '域名', + 'ip' => 'IP', + 'ip address' => 'IP地址', + 'IP address' => 'IP地址', + 'netmask' => '子网掩码', + 'interface' => '网络接口', + 'assigned user' => '指定用户', + 'ns1' => 'ns1', + 'ns2' => 'ns2', + 'user' => '用户', + 'email' => '邮箱', + 'first name' => '名字', + 'last name' => '姓氏', + 'account' => '账户', + 'ssl certificate' => 'SSL证书', + 'ssl key' => 'SSL密钥', + 'stats user password' => '统计用户账户密码', + 'stats username' => '统计用户名称', + 'stats password' => '统计密码', + 'ftp user password' => 'FTP用户账户密码', + 'ftp user' => 'FTP用户', + 'Last 70 lines of %s.%s.log' => '%s.%s.log 的最后 70 行', 'AccessLog' => '访问日志', 'ErrorLog' => '错误日志', 'Download AccessLog' => '下载访问日志', 'Download ErrorLog' => '下载错误日志', 'Country' => '国家地区', - '2 letter code' => 'ISO 3166-1 α-2 二位字母代码 如: 中国CN / 美国US', + '2 letter code' => '采用 ISO 3166-1 二位代码 如: 中国CN / 美国US', 'State / Province' => '州 / 省级', 'City / Locality' => '市 / 地区', 'Organization' => '组织名称', @@ -399,14 +397,14 @@ $LANG['cn'] = array( 'Banlist' => '需封锁', 'ranges are acceptable' => '可使用范围 如: 21-22', 'CIDR format is supported' => '支持CIDR格式', - 'ACCEPT' => '放行', - 'DROP' => '阻止', + 'ACCEPT' => '接受', + 'DROP' => '拒绝', 'TCP' => 'TCP', 'UDP' => 'UDP', 'ICMP' => 'ICMP', 'SSH' => 'SSH', 'FTP' => 'FTP', - 'VESTA' => 'Vesta', + 'VESTA' => 'VESTA', 'Add one more Name Server' => '增加一个DNS服务器', 'web domain' => '网站域名', @@ -416,60 +414,60 @@ $LANG['cn'] = array( 'mail account' => '邮箱账户', 'cron job' => '定时任务', - 'cron' => '定时任务', + 'cron' => '任务', 'user dir' => '用户目录', - 'unlimited' => '无限', - '1 account' => '1 个账户', - '%s accounts' => '%s 个账户', - '1 domain' => '1 个域名', - '%s domains' => '%s 个域名', - '1 record' => '1 条记录', - '%s records' => '%s 条记录', - '1 mail account' => '1 个邮箱账户', - '%s mail accounts' => '%s 个邮箱账户', - '1 database' => '1 个数据库', - '%s databases' => '%s 个数据库', - '1 cron job' => '1 个定时任务', - '%s cron jobs' => '%s 个定时任务', - '1 archive' => '1 个存档', - '%s archives' => '%s 个存档', - '1 item' => '1 个项目', - '%s items' => '%s 个项目', - '1 package' => '1 个用户方案', - '%s packages' => '%s 个用户方案', - '1 IP address' => '1 个IP地址', - '%s IP addresses' => '%s 个IP地址', - '1 month' => '1 个月', - '%s months' => '%s 个月', - '1 log record' => '1 条日志记录', - '%s log records' => '%s 条日志记录', - '1 object' => '1 个对象', - '%s objects' => '%s 个对象', + 'unlimited' => '无限', + '1 account' => '1 个账户', + '%s accounts' => '%s 个账户', + '1 domain' => '1 个域名', + '%s domains' => '%s 个域名', + '1 record' => '1 条记录', + '%s records' => '%s 条记录', + '1 mail account' => '1 个邮箱账户', + '%s mail accounts' => '%s 个邮箱账户', + '1 database' => '1 个数据库', + '%s databases' => '%s 个数据库', + '1 cron job' => '1 个任务', + '%s cron jobs' => '%s 个任务', + '1 archive' => '1 个存档', + '%s archives' => '%s 个存档', + '1 item' => '1 个项目', + '%s items' => '%s 个项目', + '1 package' => '1 个方案', + '%s packages' => '%s 个方案', + '1 IP address' => '1 个IP地址', + '%s IP addresses' => '%s 个IP地址', + '1 month' => '1 个月', + '%s months' => '%s 个月', + '1 log record' => '1 条日志记录', + '%s log records' => '%s 条日志记录', + '1 object' => '1 个对象', + '%s objects' => '%s 个对象', 'no exclusions' => '没有被排除的项目', '1 rule' => '1 条规则', '%s rules' => '%s 条规则', 'There are no currently banned IP' => '目前没有被封锁的IP地址', - 'USER_CREATED_OK' => '用户 %s 已添加成功', - 'WEB_DOMAIN_CREATED_OK' => '网站域名 %s 已添加成功', - 'DNS_DOMAIN_CREATED_OK' => 'DNS域名 %s 已添加成功', - 'DNS_RECORD_CREATED_OK' => '记录 %s.%s 已添加成功', - 'MAIL_DOMAIN_CREATED_OK' => '邮箱域名 %s 已添加成功', - 'MAIL_ACCOUNT_CREATED_OK' => '邮箱账户 %s@%s 已添加成功', - 'DATABASE_CREATED_OK' => '数据库 %s 已添加成功', - 'CRON_CREATED_OK' => '定时任务已添加成功', - 'IP_CREATED_OK' => 'IP地址 %s 已添加成功', - 'PACKAGE_CREATED_OK' => '用户方案 %s 已添加成功', + 'USER_CREATED_OK' => '用户 %s 已添加成功', + 'WEB_DOMAIN_CREATED_OK' => '网站域名 %s 已添加成功', + 'DNS_DOMAIN_CREATED_OK' => 'DNS域名 %s 已添加成功', + 'DNS_RECORD_CREATED_OK' => '记录 %s.%s 已添加成功', + 'MAIL_DOMAIN_CREATED_OK' => '邮箱域名 %s 已添加成功', + 'MAIL_ACCOUNT_CREATED_OK' => '邮箱账户 %s@%s 已添加成功', + 'DATABASE_CREATED_OK' => '数据库 %s 已添加成功', + 'CRON_CREATED_OK' => '定时任务已添加成功', + 'IP_CREATED_OK' => 'IP地址 %s 已添加成功', + 'PACKAGE_CREATED_OK' => '方案 %s 已添加成功', 'SSL_GENERATED_OK' => 'SSL证书已生成成功', - 'RULE_CREATED_OK' => '防火墙规则已创建成功', + 'RULE_CREATED_OK' => '规则已创建成功', 'BANLIST_CREATED_OK' => 'IP地址已封锁成功', - 'Autoupdate has been successfully enabled' => '自动更新已启用成功', - 'Autoupdate has been successfully disabled' => '自动更新已停用成功', - 'Cronjob email reporting has been successfully enabled' => '定时任务的电子邮件通知已启用成功', - 'Cronjob email reporting has been successfully disabled' => '定时任务的电子邮件通知已停用成功', - 'Changes has been saved.' => '已保存更改', - 'Confirmation' => '确认', + 'Autoupdate has been successfully enabled' => '自动更新已成功启用', + 'Autoupdate has been successfully disabled' => '自动更新已成功关闭', + 'Cronjob email reporting has been successfully enabled' => '定时任务的电子邮件报告已成功启用', + 'Cronjob email reporting has been successfully disabled' => '定时任务的电子邮件报告已成功关闭', + 'Changes has been saved.' => '已保存更改', + 'Confirmation' => '确认', 'DELETE_USER_CONFIRMATION' => '确定要删除用户 %s 吗?', 'SUSPEND_USER_CONFIRMATION' => '确定要暂停用户 %s 吗?', 'UNSUSPEND_USER_CONFIRMATION' => '确定要解除暂停用户 %s 吗?', @@ -488,31 +486,31 @@ $LANG['cn'] = array( 'DELETE_CRON_CONFIRMATION' => '确定要删除定时任务吗?', 'SUSPEND_CRON_CONFIRMATION' => '确定要暂停定时任务吗?', 'UNSUSPEND_CRON_CONFIRMATION' => '确定要解除暂停定时任务吗?', - 'DELETE_BACKUP_CONFIRMATION' => '确定要删除 %s 数据备份吗?', - 'DELETE_EXCLUSION_CONFIRMATION' => '确定要删除 %s 排除项吗?', - 'DELETE_PACKAGE_CONFIRMATION' => '确定要删除用户方案 %s 吗?', - 'DELETE_IP_CONFIRMATION' => '确定要删除IP地址 %s 吗?', - 'DELETE_RULE_CONFIRMATION' => '确定要删除防火墙规则 #%s 吗?', - 'SUSPEND_RULE_CONFIRMATION' => '确定要暂停防火墙规则 #%s 吗?', - 'UNSUSPEND_RULE_CONFIRMATION' => '确定要解除暂停防火墙规则 #%s 吗?', - 'LEAVE_PAGE_CONFIRMATION' => '确定要离开当前页面吗?', + 'DELETE_BACKUP_CONFIRMATION' => '确定要删除 %s 备份吗?', + 'DELETE_EXCLUSION_CONFIRMATION' => '确定要删除 %s 例外吗?', + 'DELETE_PACKAGE_CONFIRMATION' => '确定要删除方案 %s 吗?', + 'DELETE_IP_CONFIRMATION' => '确定要删除IP地址 %s 吗?', + 'DELETE_RULE_CONFIRMATION' => '确定要删除规则 #%s 吗?', + 'SUSPEND_RULE_CONFIRMATION' => '确定要暂停规则 #%s 吗?', + 'UNSUSPEND_RULE_CONFIRMATION' => '确定要解除暂停规则 #%s 吗?', + 'LEAVE_PAGE_CONFIRMATION' => '确定要离开当前页吗?', 'RESTART_CONFIRMATION' => '确定要重新启动 %s 吗?', - 'Welcome' => '欢迎您', - 'LOGGED_IN_AS' => '以 %s 的身份登录', - 'Error' => '错误', - 'Invalid username or password' => '无效的用户名称或密码', - 'Invalid username or code' => '无效的用户名称或重置代码', - 'Passwords not match' => '密码错误', - 'Please enter valid email address.' => '请输入正确的邮箱', - 'Field "%s" can not be blank.' => '"%s" 不能为空', - 'Password is too short.' => '密码太短 (字符至少6个)', - 'Error code:' => '错误代码: %s', - 'SERVICE_ACTION_FAILED' => '"%s" "%s" 失败', + 'Welcome' => '欢迎', + 'LOGGED_IN_AS' => '以 %s 的身份登录', + 'Error' => '错误', + 'Invalid username or password' => '无效的用户名称或密码', + 'Invalid username or code' => '无效的用户名称或验证码.', + 'Passwords not match' => '密码错误', + 'Please enter valid email address.' => '请输入正确的邮箱', + 'Field "%s" can not be blank.' => '"%s" 不能为空', + 'Password is too short.' => '密码太短 (至少为6个数字+字母)', + 'Error code:' => '错误代码: %s', + 'SERVICE_ACTION_FAILED' => '"%s" "%s" 失败', 'IP address is in use' => 'IP地址在使用中', - 'BACKUP_SCHEDULED' => '您的要求已加入队列中,备份完成后会以电子邮件通知您', - 'BACKUP_EXISTS' => '已经有数据备份正在执行,请等待备份完成后再操作', - 'RESTORE_SCHEDULED' => '您的要求已加入队列中,恢复完成后会以电子邮件通知您', - 'RESTORE_EXISTS' => '已经有数据恢复正在执行,请等待恢复完成后再操作', + 'BACKUP_SCHEDULED' => '您的要求已加入队列中,备份完成后会以电子邮件通知您 ', + 'BACKUP_EXISTS' => '已经有一个备份正在执行,请等待备份完成后再操作', + 'RESTORE_SCHEDULED' => '您的要求已加入队列中,恢复完成后会以电子邮件通知您', + 'RESTORE_EXISTS' => '已经有一个恢复正在执行,请等待恢复完成后再操作', 'WEB_EXCLUSIONS' => '输入域名,每行一个。要排除所有域名请使用 *。要排除特定目录使用以下格式: domain.com:public_html/cache:public_html/tmp', 'DNS_EXCLUSIONS' => '输入域名,每行一个。要排除所有域名请使用 *', @@ -521,28 +519,28 @@ $LANG['cn'] = array( 'CRON_EXCLUSIONS' => '要排除所有任务请使用 *', 'USER_EXCLUSIONS' => '输入目录名称,每行一个。要排除所有目录请使用 *', - 'Welcome to Vesta Control Panel' => '欢迎来到 Vesta 管理系统', - 'MAIL_FROM' => 'Vesta 管理系统 ', - 'GREETINGS_GORDON_FREEMAN' => "您好,%s %s,\n\n", - 'GREETINGS' => "您好,\n\n", - 'ACCOUNT_READY' => "您的账户已创建成功,并可以开始使用了!\n\nhttps://%s/login/\n用户名称: %s\n密码: %s\n\n--\nVesta 管理系统\n", + 'Welcome to Vesta Control Panel' => '欢迎来到 Vesta 管理系统', + 'MAIL_FROM' => 'Vesta 管理系统 ', + 'GREETINGS_GORDON_FREEMAN' => "您好, %s %s,\n", + 'GREETINGS' => "您好,\n", + 'ACCOUNT_READY' => "您的账户已创建成功,并可以开始使用了!\n\nhttps://%s/login/\n用户名称: %s\n密码: %s\n\n--\nVesta Control Panel\n", - 'FTP login credentials' => 'FTP 登录信息', - 'FTP_ACCOUNT_READY' => "FTP 账户已创建成功,并可以开始使用了!\n\n主机名称: %s\n用户名称: %s_%s\n密码: %s\n\n--\nVesta 管理系统\n", + 'FTP login credentials' => 'FTP 登录信息', + 'FTP_ACCOUNT_READY' => "FTP账户已创建成功,并可以开始使用了!\n\n主机名称: %s\n用户名称: %s_%s\n密码: %s\n\n--\nVesta Control Panel\n", - 'Database Credentials' => '数据库登录信息', - 'DATABASE_READY' => "数据库已添加成功!\n\n数据库名称: %s\n用户名称: %s\n密码: %s\n%s\n\n--\nVesta 管理系统\n", + 'Database Credentials' => '数据库登录信息', + 'DATABASE_READY' => "数据库已添加成功!\n\n数据库名称: %s\n用户名称: %s\n密码: %s\n%s\n\n--\nVesta Control Panel\n", - 'forgot password' => '忘记密码', - 'Confirm' => '确认', - 'New Password' => '新密码', - 'Confirm Password' => '确认密码', - 'Reset' => '重置', - 'Reset Code' => '重置代码', - 'RESET_NOTICE' => '', - 'RESET_CODE_SENT' => '重置代码已发送到您的邮箱
    ', - 'MAIL_RESET_SUBJECT' => '重置密码在 %s', - 'PASSWORD_RESET_REQUEST' => '重置密码请点击链接:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\n或者您可以到 https://%s/reset/?action=code&user=%s\n输入重置代码:\n%s\n\n如果您没有要求重置密码,请忽略此邮件\n\n--\nVesta 管理系统\n', + 'forgot password' => '忘记密码', + 'Confirm' => '确认', + 'New Password' => '新密码', + 'Confirm Password' => '确认密码', + 'Reset' => '重置', + 'Reset Code' => '重置代码', + 'RESET_NOTICE' => '', + 'RESET_CODE_SENT' => '密码重置代码已发送到您的邮箱
    ', + 'MAIL_RESET_SUBJECT' => '密码重置在 %s', + 'PASSWORD_RESET_REQUEST' => '重置密码请点击链接:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\n或者您可以到 https://%s/reset/?action=code&user=%s 输入密码重置代码:\n%s\n\n如果您没有要求重置密码,请忽略此邮件\n\n--\nVesta Control Panel\n', 'Jan' => '01月', 'Feb' => '02月', @@ -559,7 +557,7 @@ $LANG['cn'] = array( 'Configuring Server' => '配置服务器', 'Hostname' => '主机名称', - 'Time Zone' => '系统时区', + 'Time Zone' => '时区', 'Default Language' => '默认语言', 'Proxy Server' => '代理服务器', 'Web Server' => 'Web 服务器', @@ -568,9 +566,8 @@ $LANG['cn'] = array( 'DNS Server' => 'DNS 服务器', 'DNS Cluster' => 'DNS 集群', 'MAIL Server' => '邮箱服务器', - 'Antivirus' => '邮件防病毒', + 'Antivirus' => '防病毒引擎', 'AntiSpam' => '防垃圾邮件', - 'Use Web Domain SSL Certificate' => '采用网站域名SSL证书', 'Webmail URL' => '网页邮箱网址', 'MySQL Support' => 'MySQL 支持', 'phpMyAdmin URL' => '设置 phpMyAdmin 网址', @@ -585,15 +582,15 @@ $LANG['cn'] = array( 'ftp' => 'FTP', 'sftp' => 'SFTP', 'SFTP Chroot' => 'SFTP Chroot', - 'FileSystem Disk Quota' => '磁盘配额', - 'Vesta Control Panel Plugins' => 'Vesta 插件', + 'FileSystem Disk Quota' => '文件系统磁盘配额', + 'Vesta Control Panel Plugins' => 'Vesta 管理系统的插件', 'preview' => '预览', 'Reseller Role' => '作为经销商', 'Web Config Editor' => '网络配置编辑器', 'Template Manager' => '模板管理', 'Backup Migration Manager' => '备份迁移管理', 'FileManager' => '文件管理', - 'show: CPU / MEM / NET / DISK' => '查看资源详细信息', + 'show: CPU / MEM / NET / DISK' => '查看: CPU / 内存 / 网络 / 磁盘', 'sort by' => '排序方式', 'Date' => '日期', @@ -696,17 +693,17 @@ $LANG['cn'] = array( 'Switch to Left Tab' => '切换到左标签', 'Switch to Right Tab' => '切换到右标签', 'Switch Tab' => '切换标签', - 'Go to the Top of the File List' => '转到文件列表顶部', - 'Go to the Last File' => '转到最后一个文件', + 'Go to the Top of the File List' => '转至文件列表顶部', + 'Go to the Last File' => '转至最后一个文件', 'Open File / Enter Directory' => '打开文件 / 进入目录', 'Edit File' => '编辑文件', - 'Go to Parent Directory' => '转到父目录', + 'Go to Parent Directory' => '转至父目录', 'Select Current File' => '选中当前文件', 'Select Bunch of Files' => '选择多个文件', 'Add File to the Current Selection' => '将文件添加到当前选中区内', 'Select All Files' => '选择所有文件', 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => - '快捷键的灵感来自华丽的 GNU Midnight Commander 文件管理器', + '快捷键的灵感来自旖旎的 GNU Midnight Commander 文件管理器', 'Licence Key' => '许可密匙', 'Enter License Key' => '输入许可密匙', @@ -715,7 +712,7 @@ $LANG['cn'] = array( 'Disable and Cancel Licence' => '停用并取消许可', 'Licence Activated' => '许可已激活', 'Licence Deactivated' => '许可已停用', - 'Restrict users so that they cannot use SSH and access only their home directory.' => '限制用户,对他们禁用 SSH 且只能访问自己的主目录。', + 'Restrict users so that they cannot use SSH and access only their home directory.' => '限制用户,使他们通过 SSH 只能访问自己的主目录。', 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => '功能全面的文件管理器,浏览,复制,编辑,查看和检索你的 Web 文件。', 'This is a commercial module, you would need to purchace license key to enable it.' => '这是商业模块,请购买许可密匙来启用它。', @@ -748,16 +745,16 @@ $LANG['cn'] = array( 'awstats' => 'AWStats', 'Vesta SSL' => 'Vesta SSL', - 'SUBJECT' => '使用者', + 'SUBJECT' => '颁发给', 'ALIASES' => '可选名称', - 'NOT_BEFORE' => '有效期自', + 'NOT_BEFORE' => '有效期从', 'NOT_AFTER' => '有效期至', 'SIGNATURE' => '签名算法', - 'PUB_KEY' => '密钥大小', + 'PUB_KEY' => '公钥长度', 'ISSUER' => '颁发者', 'Use server hostname' => '采用服务器主机名', - 'Use domain hostname' => '采用账户所在域名', + 'Use domain hostname' => '采用域名', 'Use STARTTLS' => '采用 STARTTLS 加密', 'Use SSL / TLS' => '采用 SSL / TLS 加密', 'No encryption' => '不加密', @@ -765,5 +762,5 @@ $LANG['cn'] = array( 'maximum characters length, including prefix' => '包含前缀最多 %s 个字符', - 'Email Credentials' => '电子邮件凭据', + 'Email Credentials' => '电子邮件证书', ); diff --git a/web/inc/i18n/cz.php b/web/inc/i18n/cz.php index 9a0cac798..f9f291bfd 100644 --- a/web/inc/i18n/cz.php +++ b/web/inc/i18n/cz.php @@ -560,7 +560,6 @@ $LANG['cz'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/da.php b/web/inc/i18n/da.php index 6e0fab72a..80e78a355 100644 --- a/web/inc/i18n/da.php +++ b/web/inc/i18n/da.php @@ -561,7 +561,6 @@ $LANG['da'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/de.php b/web/inc/i18n/de.php index 17d1101fb..43fc857be 100644 --- a/web/inc/i18n/de.php +++ b/web/inc/i18n/de.php @@ -214,7 +214,7 @@ $LANG['de'] = array( 'Quota' => 'Kontingent', 'Autoreply' => 'Autoreply', 'Forward to' => 'Weiterleiten zu', - 'Do not store forwarded mail' => 'Weitergeleitete E-Mails nicht speichern', + 'Do not store forwarded mail' => 'Weiterleitungs Adresse nicht speichern', 'IMAP hostname' => 'IMAP hostname', 'IMAP port' => 'IMAP port', 'IMAP security' => 'IMAP security', @@ -559,7 +559,6 @@ $LANG['de'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/el.php b/web/inc/i18n/el.php index bef890864..7e1935233 100644 --- a/web/inc/i18n/el.php +++ b/web/inc/i18n/el.php @@ -561,7 +561,6 @@ $LANG['el'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/en.php b/web/inc/i18n/en.php index d7ae290de..ed5c1f2e7 100644 --- a/web/inc/i18n/en.php +++ b/web/inc/i18n/en.php @@ -559,7 +559,6 @@ $LANG['en'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/es.php b/web/inc/i18n/es.php index 6e5ce3523..8cf45ddfc 100644 --- a/web/inc/i18n/es.php +++ b/web/inc/i18n/es.php @@ -8,7 +8,7 @@ * > huloza - https://github.com/huloza * > Estratos Consulting "estratos" - estratos.net * > Manuel Valle "Estilate" - estilate.com - * + * */ $LANG['es'] = array( @@ -145,7 +145,7 @@ $LANG['es'] = array( 'Search Results' => 'Resultados de Busqueda', 'Adding Firewall Rule' => 'Añadiendo Regla al Cortafuegos', 'Editing Firewall Rule' => 'Editando Regla del Cortafuegos', - 'Adding IP Address to Banlist' => 'Agregando dirección IP a la lista negra', + 'Adding IP Address to Banlist' => 'Agregando direcciones IP a la lista negra', 'active' => 'activo', 'spnd' => 'suspendido', @@ -197,7 +197,7 @@ $LANG['es'] = array( 'IP Addresses' => 'Direcciones IP', 'Backups' => 'Respaldos', 'Backup System' => 'Sistema de Respaldo', - 'backup exclusions' => 'configurar exclusiones', + 'backup exclusions' => 'configurar exlusiones', 'template' => 'plantilla', 'SSL Support' => 'Soportar SSL', 'SSL Home Directory' => 'Directorio local del SSL', @@ -288,18 +288,18 @@ $LANG['es'] = array( 'Object' => 'Objeto', 'Username' => 'Nombre de Usuario', 'Password' => 'Contraseña', - 'Email' => 'Correo electrónico', + 'Email' => 'Email', 'Package' => 'Plan', - 'Language' => 'Idioma', + 'Language' => 'Lenguaje', 'First Name' => 'Nombre', 'Last Name' => 'Apellido', 'Send login credentials to email address' => 'Correo para enviar datos de acceso al panel', - 'Default Template' => 'Plantilla Predeterminada', - 'Default Name Servers' => 'Servidor de Nombre Predeterminado', + 'Default Template' => 'Plantilla por Defecto', + 'Default Name Servers' => 'Servidor de Nombre por Defecto', 'Domain' => 'Dominio', 'DNS Support' => 'Soportar DNS', 'Mail Support' => 'Soportar Correo', - 'Advanced options' => 'Opciones avanzadas', + 'Advanced options' => 'Opciones Avanzadas', 'Basic options' => 'Opciones básicas', 'Aliases' => 'Alias', 'SSL Certificate' => 'Certificado SSL', @@ -395,7 +395,7 @@ $LANG['es'] = array( 'Comment' => 'Comentario', 'Banlist' => 'Lista Negra', 'ranges are acceptable' => 'rangos son aceptables', - 'CIDR format is supported' => 'se admite formato CIDR', + 'CIDR format is supported' => 'Se admite formato CIDR', 'ACCEPT' => 'ACEPTAR', 'DROP' => 'DENEGAR', 'TCP' => 'TCP', @@ -455,7 +455,7 @@ $LANG['es'] = array( 'MAIL_DOMAIN_CREATED_OK' => 'El Dominio de Correo %s ha sido creado exitosamente.', 'MAIL_ACCOUNT_CREATED_OK' => 'La Cuenta de Correo %s@%s ha sido creada exitosamente.', 'DATABASE_CREATED_OK' => 'La Base de Datos %s ha sido creada exitosamente.', - 'CRON_CREATED_OK' => 'La Tarea Programada ha sido creada exitosamente.', + 'CRON_CREATED_OK' => 'Una Tarea Programada ha sido creada exitosamente.', 'IP_CREATED_OK' => 'La Dirección IP %s ha sido creada exitosamente.', 'PACKAGE_CREATED_OK' => 'El Plan %s ha sido creado exitosamente.', 'SSL_GENERATED_OK' => 'El certificado SSl ha sido creado exitosamente.', @@ -467,33 +467,33 @@ $LANG['es'] = array( 'Cronjob email reporting has been successfully disabled' => 'Se han desactivado exitosamente las notificaciones por correo de las Tareas Programadas.', 'Changes has been saved.' => 'Los cambios han sido guardados exitosamente.', 'Confirmation' => 'Confirmación', - 'DELETE_USER_CONFIRMATION' => '¿Está seguro de que desea eliminar el usuario %s?', - 'SUSPEND_USER_CONFIRMATION' => '¿Está seguro de que desea suspender el usuario %s?', - 'UNSUSPEND_USER_CONFIRMATION' => '¿Está seguro de que desea habilitar el usuario %s?', - 'DELETE_DOMAIN_CONFIRMATION' => '¿Está seguro de que desea eliminar el dominio %s?', - 'SUSPEND_DOMAIN_CONFIRMATION' => '¿Está seguro de que desea suspender el dominio %s?', - 'UNSUSPEND_DOMAIN_CONFIRMATION' => '¿Está seguro de que desea habilitar el dominio %s?', - 'DELETE_RECORD_CONFIRMATION' => '¿Está seguro de que desea eliminar el registro %s?', - 'SUSPEND_RECORD_CONFIRMATION' => '¿Está seguro de que desea suspender el registro %s?', - 'UNSUSPEND_RECORD_CONFIRMATION' => '¿Está seguro de que desea habilitar el registro %s?', - 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => '¿Está seguro de que desea eliminar la cuenta de correo %s?', - 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '¿Está seguro de que desea suspender la cuenta de correo %s?', - 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '¿Está seguro de que desea habilitar la cuenta de correo %s?', - 'DELETE_DATABASE_CONFIRMATION' => '¿Está seguro de que desea eliminar la base de datos %s?', - 'SUSPEND_DATABASE_CONFIRMATION' => '¿Está seguro de que desea suspender la base de datos %s?', - 'UNSUSPEND_DATABASE_CONFIRMATION' => '¿Está seguro de que desea habilitar la base de datos %s?', - 'DELETE_CRON_CONFIRMATION' => '¿Está seguro de que desea eliminar la tarea programada %s?', - 'SUSPEND_CRON_CONFIRMATION' => '¿Está seguro de que desea suspender la tarea programada %s?', - 'UNSUSPEND_CRON_CONFIRMATION' => '¿Está seguro de que desea habilitar la tarea programada %s?', - 'DELETE_BACKUP_CONFIRMATION' => '¿Está seguro de que desea eliminar el resplado %s?', - 'DELETE_EXCLUSION_CONFIRMATION' => '¿Está seguro de que desea eliminar la exclusión %s?', - 'DELETE_PACKAGE_CONFIRMATION' => '¿Está seguro de que desea eliminar el plan %s?', - 'DELETE_IP_CONFIRMATION' => '¿Está seguro de que desea eliminar la dirección IP %s?', - 'DELETE_RULE_CONFIRMATION' => '¿Está seguro de que desea eliminar la regla #%s', - 'SUSPEND_RULE_CONFIRMATION' => '¿Está seguro de que desea suspender la regla #%s?', - 'UNSUSPEND_RULE_CONFIRMATION' => '¿Está seguro de que desea habilitar la regla #%s?', + 'DELETE_USER_CONFIRMATION' => '¿Está seguro que desea eliminar el usuario %s?', + 'SUSPEND_USER_CONFIRMATION' => '¿Está seguro que desea suspender el usuario %s?', + 'UNSUSPEND_USER_CONFIRMATION' => '¿Está seguro que desea habilitar el usuario %s?', + 'DELETE_DOMAIN_CONFIRMATION' => '¿Está seguro que desea eliminar el dominio %s?', + 'SUSPEND_DOMAIN_CONFIRMATION' => '¿Está seguro que desea suspender el dominio %s?', + 'UNSUSPEND_DOMAIN_CONFIRMATION' => '¿Está seguro que desea habilitar el dominio %s?', + 'DELETE_RECORD_CONFIRMATION' => '¿Está seguro que desea eliminar el registro %s?', + 'SUSPEND_RECORD_CONFIRMATION' => '¿Está seguro que desea suspender el registro %s?', + 'UNSUSPEND_RECORD_CONFIRMATION' => '¿Está seguro que desea habilitar el registro %s?', + 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => '¿Está seguro que desea eliminar la cuenta de correo %s?', + 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '¿Está seguro que desea suspender la cuenta de correo %s?', + 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '¿Está seguro que desea habilitar la cuenta de correo %s?', + 'DELETE_DATABASE_CONFIRMATION' => '¿Está seguro que desea eliminar la base de datos %s?', + 'SUSPEND_DATABASE_CONFIRMATION' => '¿Está seguro que desea suspender la base de datos %s?', + 'UNSUSPEND_DATABASE_CONFIRMATION' => '¿Está seguro que desea habilitar la base de datos %s?', + 'DELETE_CRON_CONFIRMATION' => '¿Está seguro que desea eliminar la tarea programada %s?', + 'SUSPEND_CRON_CONFIRMATION' => '¿Está seguro que desea suspender la tarea programada %s?', + 'UNSUSPEND_CRON_CONFIRMATION' => '¿Está seguro que desea habilitar la tarea programada %s?', + 'DELETE_BACKUP_CONFIRMATION' => '¿Está seguro que desea eliminar el resplado %s?', + 'DELETE_EXCLUSION_CONFIRMATION' => '¿Está seguro que desea eliminar la exclusión %s?', + 'DELETE_PACKAGE_CONFIRMATION' => '¿Está seguro que desea eliminar el plan %s?', + 'DELETE_IP_CONFIRMATION' => '¿Está seguro que desea eliminar la dirección IP %s?', + 'DELETE_RULE_CONFIRMATION' => '¿Está seguro que desea eliminar la regla #%s', + 'SUSPEND_RULE_CONFIRMATION' => '¿Está seguro que desea suspender la regla #%s?', + 'UNSUSPEND_RULE_CONFIRMATION' => '¿Está seguro que desea habilitar la regla #%s?', 'LEAVE_PAGE_CONFIRMATION' => '¿Está seguro de que quiere abandonar esta página?', - 'RESTART_CONFIRMATION' => '¿Está seguro de que desea reiniciar %s?', + 'RESTART_CONFIRMATION' => '¿Está seguro que desea reiniciar %s?', 'Welcome' => 'Bienvenido', 'LOGGED_IN_AS' => 'Has iniciado sesión exitosamente con el usuario %s.', 'Error' => 'Error', @@ -506,10 +506,10 @@ $LANG['es'] = array( 'Error code:' => 'Código de Error: %s', 'SERVICE_ACTION_FAILED' => '"%s" "%s" ha fallado', 'IP address is in use' => 'La Dirección IP está en uso.', - 'BACKUP_SCHEDULED' => 'La tarea se ha añadido a la cola. Recibirá un correo de notificación cuando el respaldo esté listo para su descarga.', - 'BACKUP_EXISTS' => 'Se está realizando un respaldo en este momento. Por favor espere a que este termine.', + 'BACKUP_SCHEDULED' => 'La tarea se ha añadido a la cola. Recibirá un correo de notificación cuando el respaldo esté listo para su descarga.', + 'BACKUP_EXISTS' => 'Se está realizando un respaldo en este momento. Por favor espere a que éste termine.', 'RESTORE_SCHEDULED' => 'La tarea se ha añadido a la cola. Recibirá un correo de notificación cuando la restauración haya terminado.', - 'RESTORE_EXISTS' => 'Se está realizando una restauración en este momento. Por favor espere a que esta termine.', + 'RESTORE_EXISTS' => 'Se está realizando una restauración en este momento. Por favor espere a que ésta termine.', 'WEB_EXCLUSIONS' => 'Ingrese el nombre de dominio, uno por línea. Para excluir a todos utilice *. Para excluir directorios específicos utilice el siguiente formato: dominio.com:public_html/cache:public_html/tmp', 'DNS_EXCLUSIONS' => 'Ingrese el nombre de dominio, uno por línea. Para excluir a todos utilice *', @@ -557,7 +557,7 @@ $LANG['es'] = array( 'Configuring Server' => 'Configurar Servidor', 'Hostname' => 'Nombre del Servidor', 'Time Zone' => 'Zona Horaria', - 'Default Language' => 'Idioma Predeterminado', + 'Default Language' => 'Idioma por Defecto', 'Proxy Server' => 'Servidor Proxy', 'Web Server' => 'Servidor Web', 'Backend Server' => 'Backend Server', @@ -567,7 +567,6 @@ $LANG['es'] = array( 'MAIL Server' => 'Servidor de Correo', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Utilizar el certificado SSL de un dominio', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'Soportar MYSQL', 'phpMyAdmin URL' => 'phpMyAdmin URL', @@ -616,7 +615,7 @@ $LANG['es'] = array( 'EXTRACT' => 'EXTRAER', 'DOWNLOAD' => 'DESCARGAR', 'Are you sure?' => '¿Estás seguro?', - 'Hit' => 'Pulsa', + 'Hit' => 'Hit', 'to reload the page' => 'para recargar la página', 'Directory name cannot be empty' => 'El nombre del directorio no puede estar vacío', 'File name cannot be empty' => 'El nombre del archivo no puede estar vacío', @@ -639,12 +638,12 @@ $LANG['es'] = array( 'OK' => 'OK', 'YOU ARE COPYING' => 'ESTÁS COPIANDO', 'YOU ARE REMOVING' => 'ESTÁS ELIMINANDO', - 'Delete items' => 'Eliminar elementos', + 'Delete items' => 'Eliminando items', 'Copy files' => 'Copiar archivos', 'Move files' => 'Mover archivos', - 'Are you sure you want to copy' => 'Estás seguro de que deseas copiar', - 'Are you sure you want to move' => 'Estás seguro de que deseas mover', - 'Are you sure you want to delete' => 'Estás seguro de que deseas eliminar', + 'Are you sure you want to copy' => 'Estás seguro que deseas copiar', + 'Are you sure you want to move' => 'Estás seguro que deseas mover', + 'Are you sure you want to delete' => 'Estás seguro que deseas eliminar', 'into' => 'en', 'existing files will be replaced' => 'los archivos existentes serán reemplazados', 'Original name' => 'Nombre original', @@ -666,13 +665,13 @@ $LANG['es'] = array( 'Add New object' => 'Añadir Objeto Nuevo', 'Save Form' => 'Guardar Formulario', 'Cancel saving form' => 'Omitir guardar el formulario', - 'Go to USER list' => 'Ir a USUARIOS', + 'Go to USER list' => 'Ir a USUARIOS', // En mi opinión queda mejor "Ir a" que "Ir a Listado o Catalogo" 'Go to WEB list' => 'Ir a DOMINIOS / WEB', 'Go to DNS list' => 'Ir a DNS', 'Go to MAIL list' => 'Ir a CORREOS', 'Go to DB list' => 'Ir a BASES DE DATOS', - 'Go to CRON list' => 'Ir a TAREAS PROGRAMADAS', - 'Go to BACKUP list' => 'Ir a RESPALDOS', + 'Go to CRON list' => 'IR a TAREAS PROGRAMADAS', + 'Go to BACKUP list' => 'IR a RESPALDOS', 'Focus on search' => 'Desplegar Buscador', 'Display/Close shortcuts' => 'Mostrar/Ocultar atajos', 'Move backward through top menu' => 'Desplazarse hacia atrás en el menú superior', @@ -712,7 +711,7 @@ $LANG['es'] = array( 'Disable and Cancel Licence' => 'Deshabilitar y Cancelar Licencia', 'Licence Activated' => 'Licencia Activada', 'Licence Deactivated' => 'Licencia Desactivada', - 'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restringe a los usuarios para que sólo puedan ingresar a su directorio local y prohíbe el acceso a SSH.', + 'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restringue a los usuarios para que sólo puedan ingresar a su directorio local y prohíbe el acceso a SSH.', 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Navegar, copiar, editar, ver y descargar todos los archivos de tu página web utilizando el Administrador de Archivos.', 'This is a commercial module, you would need to purchace license key to enable it.' => 'Este es un módulo comercial, tendrás que adquirir una licencia para poder activarlo.', @@ -753,8 +752,8 @@ $LANG['es'] = array( 'PUB_KEY' => 'CLAVE PÚBLICA', 'ISSUER' => 'EMITIDO POR', - 'Use server hostname' => 'Usar el nombre del servidor', - 'Use domain hostname' => 'Usar el dominio', + 'Use server hostname' => 'Usar hostname del servidor', + 'Use domain hostname' => 'Usar hostname del dominio', 'Use STARTTLS' => 'Usar STARTTLS', 'Use SSL / TLS' => 'Usar SSL / TLS', 'No encryption' => 'Sin encriptación', @@ -762,6 +761,6 @@ $LANG['es'] = array( 'maximum characters length, including prefix' => 'usar un máximo de %s caracteres, incluyendo prefijo', - 'Email Credentials' => 'Datos de acceso a la cuenta de correo', - + 'Email Credentials' => 'Email Credentials', + ); diff --git a/web/inc/i18n/fa.php b/web/inc/i18n/fa.php index 8355691aa..57295481f 100644 --- a/web/inc/i18n/fa.php +++ b/web/inc/i18n/fa.php @@ -543,7 +543,6 @@ $LANG['fa'] = array( 'MAIL Server' => 'سرور پستی', 'Antivirus' => 'ضد ویروس', 'AntiSpam' => 'ضد هرزنامه', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'نشانی وب میل', 'MySQL Support' => 'پشتیبانی MySQL', 'phpMyAdmin URL' => 'نشانی phpMyAdmin', diff --git a/web/inc/i18n/fi.php b/web/inc/i18n/fi.php index 951f8da3e..aff1375b8 100644 --- a/web/inc/i18n/fi.php +++ b/web/inc/i18n/fi.php @@ -2,7 +2,7 @@ /** * Vesta Finnish language file * OHakala (onni@koodimonni.fi) -* RJuho (juho.rasanen@setuppi.fi) +* RJuho (juho.rasanen@kotikone.fi) * theel0ja (theel0ja@theel0ja.info) */ @@ -40,9 +40,9 @@ $LANG['fi'] = array( 'MEMORY' => 'MUISTI', 'DISK' => 'LEVY', 'NETWORK' => 'VERKKO', - 'Web Log Manager' => 'Verkkolokimanageri', + 'Web Log Manager' => 'Web Log Manager', - 'no notifications' => 'ei ilmoituksia', + 'no notifications' => 'no notifications', 'Add User' => 'Lisää käyttäjä', 'Add Domain' => 'Lisää domaini', @@ -111,7 +111,7 @@ $LANG['fi'] = array( 'disable autoupdate' => 'älä päivitä automaattisesti', 'turn on notifications' => 'päälle ilmoitus', 'turn off notifications' => 'sammuta ilmoitus', - 'configure' => 'määritä', + 'configure' => 'configure', 'Adding User' => 'Lisätään käyttäjää', 'Editing User' => 'Muokataan käyttäjää', @@ -195,14 +195,14 @@ $LANG['fi'] = array( 'template' => 'pohjat', 'SSL Support' => 'SSL-tuki', 'SSL Home Directory' => 'SSL-kotihakemisto', - 'Lets Encrypt Support' => 'Lets Encrypt Tuki', + 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', - 'Your certificate will be automatically issued in 5 minutes' => 'Sertifikaattisi käsitellään viiden minuutin sisään', + 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Proxy-tuki', 'Proxy Extensions' => 'Proxy-laajennukset', 'Web Statistics' => 'Web-tilastot', 'Additional FTP Account' => 'Ylimääräinen FTP-tili', - 'Path' => 'Polku', + 'Path' => 'Path', 'SOA' => 'SOA', 'TTL' => 'TTL', 'Expire' => 'Päättyy', @@ -217,19 +217,19 @@ $LANG['fi'] = array( 'Autoreply' => 'Automaattinen vastaus', 'Forward to' => 'Uudelleenohjaa', 'Do not store forwarded mail' => 'Älä säilytä uudelleenohjattuja viestejä', - 'IMAP hostname' => 'IMAP osoite', - 'IMAP port' => 'IMAP portti', - 'IMAP security' => 'IMAP turvallisuus', - 'IMAP auth method' => 'IMAP auth-menetelmä', - 'SMTP hostname' => 'SMTP osoite', - 'SMTP port' => 'SMTP portti', - 'SMTP security' => 'SMTP turvallisuus', - 'SMTP auth method' => 'SMTP auth-menetelmä', + 'IMAP hostname' => 'IMAP hostname', + 'IMAP port' => 'IMAP port', + 'IMAP security' => 'IMAP security', + 'IMAP auth method' => 'IMAP auth method', + 'SMTP hostname' => 'SMTP-hostname', + 'SMTP port' => 'SMTP-portti', + 'SMTP security' => 'SMTP-turvallisuus', + 'SMTP auth method' => 'SMTP auth method', 'STARTTLS' => 'STARTTLS', 'Normal password' => 'Normaali salasana', 'database' => 'tietokanta', 'User' => 'Käyttäjä', - 'Host' => 'Isäntä', + 'Host' => 'Host', 'Charset' => 'Merkistö', 'Min' => 'Min', 'Hour' => 'Tunti', @@ -243,7 +243,7 @@ $LANG['fi'] = array( 'Domains' => 'Domainit', 'Status' => 'Tila', 'shared' => 'jaetut', - 'dedicated' => 'omistautunut', + 'dedicated' => 'dedicated', 'Owner' => 'Omistaja', 'Users' => 'Käyttäjät', 'Load Average' => 'Keskimääräinen Käyttöaste', @@ -268,8 +268,8 @@ $LANG['fi'] = array( 'database server' => 'tietokantapalvelin', 'ftp server' => 'ftp-palvelin', 'job scheduler' => 'ajastettu työ', //no-idea E: @theel0ja: ajastettu työ would be good. - 'firewall' => 'palomuuri', - 'brute-force monitor' => 'raaka voima monitori', + 'firewall' => 'firewall', + 'brute-force monitor' => 'brute-force monitor', 'CPU' => 'Prosessori', 'Memory' => 'Muisti', 'Uptime' => 'Käyttöaika', @@ -282,7 +282,7 @@ $LANG['fi'] = array( 'Object' => 'Objekti', 'Username' => 'Käyttäjä', 'Password' => 'Salasana', - 'Email' => 'Sähköposti', + 'Email' => 'Email', 'Package' => 'Paketti', 'Language' => 'Kieli', 'First Name' => 'Etunimi', @@ -290,15 +290,15 @@ $LANG['fi'] = array( 'Send login credentials to email address' => 'Lähetä kirjautumistiedot sähköpostilla.', 'Default Template' => 'Oletuspohja', 'Default Name Servers' => 'Oletusnimipalvelimet', - 'Domain' => 'Domaini', + 'Domain' => 'Domain', 'DNS Support' => 'Tarvitsee DNS:n', 'Mail Support' => 'Tarvitsee sähköpostin', 'Advanced options' => 'Lisäasetukset', - 'Basic options' => 'Perusasetukset', + 'Basic options' => 'Basic options', 'Aliases' => 'Aliakset', 'SSL Certificate' => 'SSL-sertifikaatti', 'SSL Key' => 'SSL-avain', - 'SSL Certificate Authority / Intermediate' => 'SSL varmenteen tarjoaja', //no-idea + 'SSL Certificate Authority / Intermediate' => 'SSL Certificate Authority / Intermediate', //no-idea 'SSL CSR' => 'SSL CSR', 'optional' => 'valinnainen', 'internal' => 'sisäinen', @@ -311,12 +311,12 @@ $LANG['fi'] = array( 'YYYY-MM-DD' => 'YYYY-MM-DD', 'Name servers' => 'Nimipalvelimet', 'Record' => 'Tietue', - 'IP or Value' => 'IP tai Arvo', //no-idea + 'IP or Value' => 'IP or Value', //no-idea 'Priority' => 'Prioriteetti', 'Record Number' => 'Tietueen numero', 'in megabytes' => 'megatavuissa', 'Message' => 'Viesti', - 'use local-part' => 'käytä paikallista osaa', //no-idea + 'use local-part' => 'use local-part', //no-idea 'one or more email addresses' => 'yksi tai useampia sähköposteja', 'Prefix will be automaticaly added to database name and database user' => 'Etuliite %s lisätään automaattisesti tietokannan nimeen ja käyttäjään', 'Database' => 'Tietokanta', @@ -324,12 +324,12 @@ $LANG['fi'] = array( 'Minute' => 'Minuutti', 'Command' => 'Käsky', 'Package Name' => 'Paketin nimi', - 'Netmask' => 'Verkkopeite', //no-idea - 'Interface' => 'Käyttöliittymä', //no-idea + 'Netmask' => 'Netmask', //no-idea + 'Interface' => 'Interface', //no-idea 'Shared' => 'Jaettu', 'Assigned user' => 'Määritetty käyttäjä', 'Assigned domain' => 'Määritetty domain', - 'NAT IP association' => 'NAT IP yhteys', //no-idea + 'NAT IP association' => 'NAT IP association', //no-idea 'shell' => 'shell', 'web domains' => 'web-domainit', 'web aliases' => 'web-aliakset', @@ -351,12 +351,12 @@ $LANG['fi'] = array( 'username' => 'käyttäjänimi', 'password' => 'salasana', 'type' => 'tyyppi', - 'charset' => 'merkistö', + 'charset' => 'charset', 'domain' => 'domain', 'ip' => 'ip', 'ip address' => 'ip-osoite', 'IP address' => 'IP-osoite', - 'netmask' => 'verkkopeite', + 'netmask' => 'netmask', 'interface' => 'yhdyskäytävä', 'assigned user' => 'omistaja', 'ns1' => 'ns1', @@ -385,35 +385,35 @@ $LANG['fi'] = array( 'Organization' => 'Organisaatio', 'Action' => 'Toiminta', 'Protocol' => 'Protokolla', - 'Port' => 'Portti', + 'Port' => 'Port', 'Comment' => 'Kommentti', 'Banlist' => 'Bannilista', 'ranges are acceptable' => 'vaihteluvälit ovat hyväksyttäviä', 'CIDR format is supported' => 'CIDR muotoa tuetaan', - 'ACCEPT' => 'HYVÄKSY', - 'DROP' => 'TIPUTA', + 'ACCEPT' => 'ACCEPT', + 'DROP' => 'DROP', 'TCP' => 'TCP', 'UDP' => 'UDP', 'ICMP' => 'ICMP', 'SSH' => 'SSH', 'FTP' => 'FTP', 'VESTA' => 'VESTA', - 'Add one more Name Server' => 'Lisää vielä yksi nimipalvelin', + 'Add one more Name Server' => 'Add one more Name Server', - 'web domain' => 'web domaini', - 'dns domain' => 'dns domaini', - 'dns record' => 'dns tietue', - 'mail domain' => 'mail domaini', - 'mail account' => 'mail tili', - 'cron job' => 'cron-tehtävä', + 'web domain' => 'web domain', + 'dns domain' => 'dns domain', + 'dns record' => 'dns record', + 'mail domain' => 'mail domain', + 'mail account' => 'mail account', + 'cron job' => 'cron job', 'cron' => 'cron', - 'user dir' => 'käyttäjän hakemisto', + 'user dir' => 'user dir', - 'unlimited' => 'rajoittamaton', + 'unlimited' => 'unlimited', '1 account' => '1 tili', '%s accounts' => '%s tiliä', - '1 domain' => '1 domaini', + '1 domain' => '1 domain', '%s domains' => '%s domainia', '1 record' => '1 tietue', '%s records' => '%s tietuetta', @@ -423,10 +423,10 @@ $LANG['fi'] = array( '%s databases' => '%s tietokantaa', '1 cron job' => '1 cron-tehtävä', '%s cron jobs' => '%s cron-tehtävää', - '1 archive' => '1 arkisto', - '%s archives' => '%s arkistoa', - '1 item' => '1 kohde', - '%s items' => '%s kohdetta', + '1 archive' => '1 archive', + '%s archives' => '%s archives', + '1 item' => '1 item', + '%s items' => '%s items', '1 package' => '1 paketti', '%s packages' => '%s pakettia', '1 IP address' => '1 IP-osoite', @@ -454,11 +454,11 @@ $LANG['fi'] = array( 'PACKAGE_CREATED_OK' => 'Paketti %s lisättiin onnistuneesti.', 'SSL_GENERATED_OK' => 'Sertifikaatti lisättiin onnistuneesti.', 'RULE_CREATED_OK' => 'Sääntö lisättiin onnistuneesti.', - 'BANLIST_CREATED_OK' => 'IP-osoite on bannattu onnistuneesti', + 'BANLIST_CREATED_OK' => 'IP address has been banned successfully', 'Autoupdate has been successfully enabled' => 'Automaattinen päivitys otettu käyttöön', 'Autoupdate has been successfully disabled' => 'Automaattinen päivitys poistettu käytöstä', - 'Cronjob email reporting has been successfully enabled' => 'Ajoitettu sähköposti raportointi onnistuneesti aktivoitu', - 'Cronjob email reporting has been successfully disabled' => 'Ajoitettu sähköposti raportointi onnistuneesti poistettu käytöstä', + 'Cronjob email reporting has been successfully enabled' => 'Cronjob sähköposti raportointi on onnistuneesti mahdollistanut', + 'Cronjob email reporting has been successfully disabled' => 'Cronjob sähköposti raportointi on onnistuneesti poistettu', 'Changes has been saved.' => 'Muutokset tallennettu.', 'Confirmation' => 'Hyväksyntä', 'DELETE_USER_CONFIRMATION' => 'Haluatko varmasti poistaa käyttäjän %s?', @@ -530,7 +530,7 @@ $LANG['fi'] = array( 'Confirm Password' => 'Hyväksy salasana', 'Reset' => 'Nollaa', 'Reset Code' => 'Nollauskoodi', - 'RESET_NOTICE' => '', + 'RESET_NOTICE' => '', // should we add something here? 'RESET_CODE_SENT' => 'Salasanan nollauskoodi on lähetetty sähköpostiisi
    ', 'MAIL_RESET_SUBJECT' => 'Salana vaihdettiin %s', 'PASSWORD_RESET_REQUEST' => "Nollataksesi hallintapaneelin salasanan, seuraa tätä linkkiä:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nVaihtoehtoisesti voit mennä https://%s/reset/?action=code&user=%s ja syöttää nollauskoodin:\n%s\n\nJos et varta vasten pyytänyt tätä salasananvaihtoa, mene paniikkiin ja ota yhteyttä ylläpitoon.\n\n--\nVesta-hallintapaneeli\n", @@ -549,55 +549,54 @@ $LANG['fi'] = array( 'Dec' => 'Jou', 'Configuring Server' => 'Konfiguroidaan palvelinta', - 'Hostname' => 'Osoite', + 'Hostname' => 'Hostname', 'Time Zone' => 'Aikavyöhyke', 'Default Language' => 'Oletuskieli', 'Proxy Server' => 'Välityspalvelin', 'Web Server' => 'Web Server', - 'Backend Server' => 'Taustapalvelin', - 'Backend Pool Mode' => 'Taustapalvelin Allas Tila', + 'Backend Server' => 'Backend Server', + 'Backend Pool Mode' => 'Backend Pool Mode', 'DNS Server' => 'DNS-palvelin', 'DNS Cluster' => 'DNS-klusteri', 'MAIL Server' => 'MAIL-palvelin', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmailin URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', - 'PostgreSQL Support' => 'PostgreSQL Tuki', + 'PostgreSQL Support' => 'PostgreSQL Support', 'phpPgAdmin URL' => 'phpPgAdmin URL', 'Maximum Number Of Databases' => 'Maksimimäärä tietokantoja', - 'Current Number Of Databases' => 'Nykyisten tietokantojen lukumäärä', + 'Current Number Of Databases' => 'Current Number Of Databases', 'Local backup' => 'Paikallinen varmuuskopio', - 'Compression level' => 'Pakkausaste', + 'Compression level' => 'Compression level', 'Directory' => 'Hakemisto', - 'Remote backup' => 'Etävarmuuskopiointi', + 'Remote backup' => 'Remote backup', 'ftp' => 'FTP', 'sftp' => 'SFTP', 'SFTP Chroot' => 'SFTP Chroot', - 'FileSystem Disk Quota' => 'FileSystem Levykiintiö', - 'Vesta Control Panel Plugins' => 'Vesta Hallintapaneeli Lisäosat', - 'preview' => 'esikatselu', - 'Reseller Role' => 'Jälleenmyyjän Rooli', - 'Web Config Editor' => 'Web-määrityseditori', - 'Template Manager' => 'Pohja Hallinta', - 'Backup Migration Manager' => 'Varmuuskopion Siirtymänhallinta', + 'FileSystem Disk Quota' => 'FileSystem Disk Quota', + 'Vesta Control Panel Plugins' => 'Vesta Control Panel Plugins', + 'preview' => 'preview', + 'Reseller Role' => 'Reseller Role', + 'Web Config Editor' => 'Web Config Editor', + 'Template Manager' => 'Template Manager', + 'Backup Migration Manager' => 'Backup Migration Manager', 'FileManager' => 'FileManager', - 'show: CPU / MEM / NET / DISK' => 'näytä: CPU / MEM / NET / DISK', + 'show: CPU / MEM / NET / DISK' => 'show: CPU / MEM / NET / DISK', - 'sort by' => 'järjestä', + 'sort by' => 'sort by', 'Date' => 'Päivämäärä', - 'Starred' => 'Tähditetty', + 'Starred' => 'Starred', 'Name' => 'Nimi', - 'save to favorites' => 'tallenna suosikkeihin', + 'save to favorites' => 'save to favorites', 'File Manager' => 'Tiedostonhallinta', 'size' => 'koko', 'date' => 'päivämäärä', 'name' => 'nimi', - 'Initializing' => 'Alustetaan', + 'Initializing' => 'Initializing', 'UPLOAD' => 'LÄHETÄ', 'NEW FILE' => 'UUSI TIEDOSTO', 'NEW DIR' => 'UUSI HAKEMISTO', @@ -610,117 +609,117 @@ $LANG['fi'] = array( 'EXTRACT' => 'PURA', 'DOWNLOAD' => 'LATAA', 'Are you sure?' => 'Oletko varma?', // unused? - 'Hit' => 'Osuma', - 'to reload the page' => 'ladataksesi sivu uudelleen', - 'Directory name cannot be empty' => 'Hakemiston nimi ei voi olla tyhjä', - 'File name cannot be empty' => 'Tiedostonimi ei voi olla tyhjä', - 'No file selected' => 'Ei tiedostoa valittuna', - 'No file or folder selected' => 'Ei tiedostoa tai kansiota valittuna', - 'File type not supported' => 'Tiedostotyyppiä ei tueta', - 'Directory download not available in current version' => 'Hakemiston lataus ei ole saatavilla nykyisessä versiossa', - 'Directory not available' => 'Hakemisto ei ole käytettävissä', - 'Done' => 'Tehty', + 'Hit' => 'Hit', + 'to reload the page' => 'to reload the page', + 'Directory name cannot be empty' => 'Directory name cannot be empty', + 'File name cannot be empty' => 'File name cannot be empty', + 'No file selected' => 'No file selected', + 'No file or folder selected' => 'No file or folder selected', + 'File type not supported' => 'File type not supported', + 'Directory download not available in current version' => 'Directory download not available in current version', + 'Directory not available' => 'Directory not available', + 'Done' => 'Done', 'Close' => 'Sulje', 'Copy' => 'Kopioi', 'Cancel' => 'Peru', 'Rename' => 'Uudelleennimeä', 'Move' => 'Siirrä', - 'Change Rights' => 'Muuta Oikeuksia', + 'Change Rights' => 'Change Rights', 'Delete' => 'Poista', 'Extract' => 'Pura', 'Create' => 'Luo', 'Compress' => 'Pakkaa', 'OK' => 'OK', - 'YOU ARE COPYING' => 'OLET KOPIOIMASSA', // unused? - 'YOU ARE REMOVING' => 'OLET POISTAMASSA', - 'Delete items' => 'Poista kohteet', + 'YOU ARE COPYING' => 'YOU ARE COPYING', // unused? + 'YOU ARE REMOVING' => 'YOU ARE REMOVING', + 'Delete items' => 'Delete items', 'Copy files' => 'Kopioi tiedostoja', 'Move files' => 'Siirrä tiedostoja', - 'Are you sure you want to copy' => 'Haluatko varmasti kopioida', - 'Are you sure you want to move' => 'Haluatko varmasti siirtää', - 'Are you sure you want to delete' => 'Haluatko varmasti poistaa', - 'into' => 'osaksi', - 'existing files will be replaced' => 'olemassa olevat tiedostot korvataan', - 'Original name' => 'Alkuperäinen nimi', + 'Are you sure you want to copy' => 'Are you sure you want to copy', + 'Are you sure you want to move' => 'Are you sure you want to move', + 'Are you sure you want to delete' => 'Are you sure you want to delete', + 'into' => 'into', + 'existing files will be replaced' => 'existing files will be replaced', + 'Original name' => 'Original name', 'File' => 'Tiedosto', 'already exists' => 'on jo olemassa', 'Create file' => 'Luo tiedosto', 'Create directory' => 'Luo hakemisto', - 'read by owner' => 'read by owner', // no idea - 'write by owner' => 'write by owner', // no idea - 'execute/search by owner' => 'execute/search by owner', // no idea - 'read by group' => 'read by group',// no idea - 'write by group' => 'write by group', // no idea - 'execute/search by group' => 'execute/search by group', // no idea - 'read by others' => 'read by others', // no idea - 'write by others' => 'write by others', // no idea - 'execute/search by others' => 'execute/search by others', // no idea + 'read by owner' => 'read by owner', + 'write by owner' => 'write by owner', + 'execute/search by owner' => 'execute/search by owner', + 'read by group' => 'read by group', + 'write by group' => 'write by group', + 'execute/search by group' => 'execute/search by group', + 'read by others' => 'read by others', + 'write by others' => 'write by others', + 'execute/search by others' => 'execute/search by others', - 'Shortcuts' => 'Pikavalinnat', - 'Add New object' => 'Lisää uusi objekti', - 'Save Form' => 'Tallenna Lomake', - 'Cancel saving form' => 'Peruuta tallennuslomake', - 'Go to USER list' => 'Mene USER listaan', - 'Go to WEB list' => 'Mene WEB listaan', - 'Go to DNS list' => 'Mene DNS listaan', - 'Go to MAIL list' => 'Mene MAIL listaan', - 'Go to DB list' => 'Mene DB listaan', - 'Go to CRON list' => 'Mene CRON listaan', - 'Go to BACKUP list' => 'Mene BACKUP listaan', - 'Focus on search' => 'Keskity hakuun', - 'Display/Close shortcuts' => 'Näytä/Piilota pikavalinnat', - 'Move backward through top menu' => 'Siirrä taaksepäin ylävalikosta', - 'Move forward through top menu' => 'Siirry eteenpäin ylävalikosta', - 'Enter focused element' => 'Anna valittuun elementtiin', - 'Move up through elements list' => 'Siirry ylöspäin elementtien listassa', - 'Move down through elements list' => 'Siirry alaspäin elementtien listassa', + 'Shortcuts' => 'Shortcuts', + 'Add New object' => 'Add New object', + 'Save Form' => 'Save Form', + 'Cancel saving form' => 'Cancel saving form', + 'Go to USER list' => 'Go to USER list', + 'Go to WEB list' => 'Go to WEB list', + 'Go to DNS list' => 'Go to DNS list', + 'Go to MAIL list' => 'Go to MAIL list', + 'Go to DB list' => 'Go to DB list', + 'Go to CRON list' => 'Go to CRON list', + 'Go to BACKUP list' => 'Go to BACKUP list', + 'Focus on search' => 'Focus on search', + 'Display/Close shortcuts' => 'Display/Close shortcuts', + 'Move backward through top menu' => 'Move backward through top menu', + 'Move forward through top menu' => 'Move forward through top menu', + 'Enter focused element' => 'Enter focused element', + 'Move up through elements list' => 'Move up through elements list', + 'Move down through elements list' => 'Move down through elements list', 'Upload' => 'Lähetä', 'New File' => 'Uusi kansio', 'New Folder' => 'Uusi hakemisto', 'Download' => 'Lataa', 'Archive' => 'Arkisto', - 'Save File (in text editor)' => 'Tallenna tiedosto (tekstieditorissa)', - 'Close Popup / Cancel' => 'Sulje ponnahdusikkuna / Peruuta', - 'Move Cursor Up' => 'Siirrä Osoitin Ylös', - 'Move Cursor Down' => 'Siirrä Osoitin Alas', - 'Switch to Left Tab' => 'Vaihda Vasempaan Välilehteen', - 'Switch to Right Tab' => 'Vaihda Oikeaan Välilehteen', - 'Switch Tab' => 'Vaihda Välilehteä', - 'Go to the Top of the File List' => 'Siirry Tiedosto Luettelon Yläreunaan', - 'Go to the Last File' => 'Siirry Viimeiseen Tiedostoon', - 'Open File / Enter Directory' => 'Avaa Tiedosto / Anna hakemisto', - 'Edit File' => 'Muokkaa tiedostoa', - 'Go to Parent Directory' => 'Mene emohakemistoon', - 'Select Current File' => 'Valitse Nykyinen Tiedosto', - 'Select Bunch of Files' => 'Valitse Joukko Tiedostoja', - 'Add File to the Current Selection' => 'Lisää Tiedosto Nykyiseen Valintaan', + 'Save File (in text editor)' => 'Save File (in text editor)', + 'Close Popup / Cancel' => 'Close Popup / Cancel', + 'Move Cursor Up' => 'Move Cursor Up', + 'Move Cursor Down' => 'Move Cursor Down', + 'Switch to Left Tab' => 'Switch to Left Tab', + 'Switch to Right Tab' => 'Switch to Right Tab', + 'Switch Tab' => 'Switch Tab', + 'Go to the Top of the File List' => 'Go to the Top of the File List', + 'Go to the Last File' => 'Go to the Last File', + 'Open File / Enter Directory' => 'Open File / Enter Directory', + 'Edit File' => 'Edit File', + 'Go to Parent Directory' => 'Go to Parent Directory', + 'Select Current File' => 'Select Current File', + 'Select Bunch of Files' => 'Select Bunch of Files', + 'Add File to the Current Selection' => 'Add File to the Current Selection', 'Select All Files' => 'Valitse kaikki tiedostot', 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => - 'pikavalinnat inspiroi upea GNU Midnight Commander tiedostonhallinta', + 'shortcuts are inspired by magnificent GNU Midnight Commander file manager', 'Licence Key' => 'Lisenssiavain', - 'Enter License Key' => 'Syötä Lisenssi Avain', + 'Enter License Key' => 'Enter License Key', 'Buy Licence' => 'Osta lisenssi', 'Buy Lifetime License' => 'Osta elinikäinen lisenssi', - 'Disable and Cancel Licence' => 'Poista Käytöstä ja Peruuta Lisenssi', + 'Disable and Cancel Licence' => 'Disable and Cancel Licence', 'Licence Activated' => 'Lisenssi aktivoitu', 'Licence Deactivated' => 'Lisenssi deaktivoitu', - 'Restrict users so that they cannot use SSH and access only their home directory.' => 'Rajoita käyttäjiä siten, että he eivät voi käyttää SSH:ta ja heillä on pääsy vain kotikansioonsa.', - 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Selaa, kopioi, muokkaa, tarkastele ja hae kaikista web palveluista täysin varustellulla File Managerilla.', - 'This is a commercial module, you would need to purchace license key to enable it.' => 'Tämä on kaupallinen moduuli, sinun on ostettava lisenssiavain, ottaaksesi se käyttöön.', + 'Restrict users so that they cannot use SSH and access only their home directory.' => 'Restrict users so that they cannot use SSH and access only their home directory.', + 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.', + 'This is a commercial module, you would need to purchace license key to enable it.' => 'This is a commercial module, you would need to purchace license key to enable it.', 'Minutes' => 'Minuutittain', // fuzzy 'Hourly' => 'Tunneittain', 'Run Command' => 'Aja Komento', 'every month' => 'joka kuukausi', 'every odd month' => 'joka toinen kuukausi', - 'every even month' => 'joka parillinen kuukausi', + 'every even month' => 'every even month', 'every day' => 'joka päivä', 'every odd day' => 'joka toinen päivä', - 'every even day' => 'joka parillinen päivä', - 'weekdays (5 days)' => 'arkisin (5 päivää)', - 'weekend (2 days)' => 'viikonloppu (2 päivää)', + 'every even day' => 'every even day', + 'weekdays (5 days)' => 'weekdays (5 days)', + 'weekend (2 days)' => 'weekend (2 days)', 'Monday' => 'Maanantai', 'Tuesday' => 'Tiistai', 'Wednesday' => 'Keskiviikko', @@ -732,7 +731,7 @@ $LANG['fi'] = array( 'every two hours' => 'joka toinen tunti', 'every minute' => 'joka minuutti', 'every two minutes' => 'joka toinen minuutti', - 'every' => 'joka', + 'every' => 'every', 'Generate' => 'Generoi', 'webalizer' => 'webalizer', @@ -747,16 +746,16 @@ $LANG['fi'] = array( 'PUB_KEY' => 'PUB_KEY', 'ISSUER' => 'ISSUER', - 'Use server hostname' => 'Käytä palvelimen isäntänimeä', - 'Use domain hostname' => 'Käytä verkkotunnuksen isäntänimeä', - 'Use STARTTLS' => 'Käytä STARTTLS', - 'Use SSL / TLS' => 'Käytä SSL / TLS', - 'No encryption' => 'Ei salausta', - 'Do not use encryption' => 'Älä käytä salausta', + 'Use server hostname' => 'Use server hostname', + 'Use domain hostname' => 'Use domain hostname', + 'Use STARTTLS' => 'Use STARTTLS', + 'Use SSL / TLS' => 'Use SSL / TLS', + 'No encryption' => 'No encryption', + 'Do not use encryption' => 'Do not use encryption', - 'maximum characters length, including prefix' => 'maksimissaan %s merkkiä pitkä, mukaan lukien etuliite', + 'maximum characters length, including prefix' => 'maximum %s characters length, including prefix', - 'Email Credentials' => 'Sähköpostitiedot', + 'Email Credentials' => 'Email Credentials', // Texts below doesn't exist in en.php 'traffic' => 'tiedonsiirto', diff --git a/web/inc/i18n/fr.php b/web/inc/i18n/fr.php index 4e2e3144a..c57e6266f 100644 --- a/web/inc/i18n/fr.php +++ b/web/inc/i18n/fr.php @@ -559,7 +559,6 @@ $LANG['fr'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/hu.php b/web/inc/i18n/hu.php index 1c37f93f4..af461107d 100644 --- a/web/inc/i18n/hu.php +++ b/web/inc/i18n/hu.php @@ -563,7 +563,6 @@ $LANG['hu'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/id.php b/web/inc/i18n/id.php index dd870f0d4..1a55af74b 100644 --- a/web/inc/i18n/id.php +++ b/web/inc/i18n/id.php @@ -158,10 +158,10 @@ $LANG['id'] = array( 'minute' => 'menit', 'hour' => 'jam', 'day' => 'hari', - 'days' => 'hari', - 'hours' => 'jam', - 'minutes' => 'menit', - 'month' => 'bulan', + 'days' => ' hari', + 'hours' => ' jam', + 'minutes' => ' menit', + 'month' => ' bulan', 'package' => 'paket', 'Bandwidth' => 'Bandwidth', 'Disk' => 'Diska', @@ -196,7 +196,7 @@ $LANG['id'] = array( 'SSL Home Directory' => 'Direktori Home SSL', 'Lets Encrypt Support' => 'Dukungan Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', - 'Your certificate will be automatically issued in 5 minutes' => 'Sertifikat anda akan otomatis diterbitkan dalam 5 menit', + 'Your certificate will be automatically issued in 5 minutes' => 'Sertifikat anda akan otomatis didapat dalam 5 menit', 'Proxy Support' => 'Dukungan Proxy', 'Proxy Extensions' => 'Ekstensi Proxy', 'Web Statistics' => 'Statistik Web', @@ -219,11 +219,11 @@ $LANG['id'] = array( 'IMAP hostname' => 'hostname IMAP', 'IMAP port' => 'port IMAP', 'IMAP security' => 'keamanan IMAP', - 'IMAP auth method' => 'metode otentikasi IMAP', + 'IMAP auth method' => 'metode autentikasi IMAP', 'SMTP hostname' => 'hostname SMTP', 'SMTP port' => 'port SMTP', 'SMTP security' => 'keamanan SMTP', - 'SMTP auth method' => 'metode otentikasi SMTP', + 'SMTP auth method' => 'metode autentikasi SMTP', 'STARTTLS' => 'STARTTLS', 'Normal password' => 'kata sandi', 'database' => 'basis data', @@ -237,7 +237,7 @@ $LANG['id'] = array( 'Day of week' => 'Hari dalam Minggu', 'local' => 'lokal', 'Run Time' => 'Run Time', - 'Backup Size' => 'Ukuran Cadangan', + 'Backup Size' => 'Ukuran Backup', 'SYS' => 'SYS', 'Domains' => 'Domains', 'Status' => 'Status', @@ -268,25 +268,25 @@ $LANG['id'] = array( 'ftp server' => 'server ftp', 'job scheduler' => 'jadwal pekerjaan', 'firewall' => 'firewall', - 'brute-force monitor' => 'pantau brute-force', + 'brute-force monitor' => 'brute-force monitor', 'CPU' => 'CPU', 'Memory' => 'Memori', 'Uptime' => 'Uptime', 'core package' => 'paket inti', 'php interpreter' => 'php interpreter', - 'internal web server' => 'server web internal', + 'internal web server' => 'internal web server', 'Version' => 'Versi', 'Release' => 'Rilis', 'Architecture' => 'Arsitektur', 'Object' => 'Objek', 'Username' => 'Nama Pengguna', 'Password' => 'Kata sandi', - 'Email' => 'Surel', + 'Email' => 'Email', 'Package' => 'Paket', 'Language' => 'Bahasa', 'First Name' => 'Nama Depan', 'Last Name' => 'Nama Belakang', - 'Send login credentials to email address' => 'Kirim kredensial login ke alamat surel', + 'Send login credentials to email address' => 'Kirim kredensial login ke alamat email', 'Default Template' => 'Template Standar', 'Default Name Servers' => 'Name Servers Standar', 'Domain' => 'Domain', @@ -300,13 +300,13 @@ $LANG['id'] = array( 'SSL Certificate Authority / Intermediate' => 'Otoritas Sertifikat SSL / Menengah', 'SSL CSR' => 'SSL CSR', 'optional' => 'opsi', - 'internal' => 'internal', + 'internal' => 'intern', 'Statistics Authorization' => 'Statistik Otoritas', 'Statistics Auth' => 'Statistik Otoritas', 'Account' => 'Pengguna', - 'Prefix will be automaticaly added to username' => 'Prefix %s akan otomatis ditambahkan ke nama pengguna', - 'Send FTP credentials to email' => 'Kirim kredensial FTP ke surel', - 'Expiration Date' => 'Tanggal Kadaluwarsa', + 'Prefix will be automaticaly added to username' => 'Prefix %s nantinya ditambahin otomatis ke nama pengguna', + 'Send FTP credentials to email' => 'Kirim kredensial FTP ke email', + 'Expiration Date' => 'Tanggal Kadaluarsa', 'YYYY-MM-DD' => 'YYYY-MM-DD', 'Name servers' => 'Name server', 'Record' => 'Record', @@ -316,7 +316,7 @@ $LANG['id'] = array( 'in megabytes' => 'dalam megabytes', 'Message' => 'Pesan', 'use local-part' => 'gunakan part lokal', - 'one or more email addresses' => 'satu atau lebih alamat surel', + 'one or more email addresses' => 'satu atau lebih alamat email', 'Prefix will be automaticaly added to database name and database user' => 'Prefix %s akan otomatis ditambahkan ke nama basis data dan pengguna basis data', 'Database' => 'Basis Data', 'Type' => 'Jenis', @@ -407,7 +407,7 @@ $LANG['id'] = array( 'cron job' => 'cron job', 'cron' => 'cron', - 'user dir' => 'direktori pengguna', + 'user dir' => 'dir pengguna', 'unlimited' => 'tidak terbatas', '1 account' => '1 pengguna', @@ -489,14 +489,14 @@ $LANG['id'] = array( 'RESTART_CONFIRMATION' => 'Apakah anda yakin ingin me-restart %s?', 'Welcome' => 'Selamat Datang', 'LOGGED_IN_AS' => 'Masuk sebagai pengguna %s', - 'Error' => 'Galat', + 'Error' => 'Kesalahan', 'Invalid username or password' => 'Nama pengguna atau kata sandi salah', 'Invalid username or code' => 'Kode atau nama pengguna salah', 'Passwords not match' => 'Kata sandi tidak sama', 'Please enter valid email address.' => 'Masukkan alamat surel yang valid.', 'Field "%s" can not be blank.' => 'Field "%s" tidak boleh kosong.', 'Password is too short.' => 'Kata sandi terlalu pendek (minimal 6 karakter)', - 'Error code:' => 'Kode galat: %s', + 'Error code:' => 'Kode kesalahan: %s', 'SERVICE_ACTION_FAILED' => '"%s" "%s" gagal', 'IP address is in use' => 'Alamat IP sudah digunakan', 'BACKUP_SCHEDULED' => 'Tugas sudah ditambahkan ke antrian. email pemberitahuan akan dikirim ketika cadangan telah siap diunduh.', @@ -560,11 +560,10 @@ $LANG['id'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Gunakan Sertifikat SSL Domain Web', 'Webmail URL' => 'Webmail URL', - 'MySQL Support' => 'Dukungan MySQL', + 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', - 'PostgreSQL Support' => 'Dukungan PostgreSQL', + 'PostgreSQL Support' => 'PostgreSQL Support', 'phpPgAdmin URL' => 'phpPgAdmin URL', 'Maximum Number Of Databases' => 'Jumlah maximal basis data', 'Current Number Of Databases' => 'Jumlah database saat ini', @@ -581,7 +580,7 @@ $LANG['id'] = array( 'Reseller Role' => 'Aturan Reseller', 'Web Config Editor' => 'Web Config Editor', 'Template Manager' => 'Template Manager', - 'Backup Migration Manager' => 'Manajer Migrasi Cadangan', + 'Backup Migration Manager' => 'Backup Migration Manager', 'FileManager' => 'FileManager', 'show: CPU / MEM / NET / DISK' => 'tampilkan: CPU / MEM / NET / DISK', @@ -598,7 +597,7 @@ $LANG['id'] = array( 'name' => 'nama', 'Initializing' => 'Inisialisasi', 'UPLOAD' => 'UNGGAH', - 'NEW FILE' => 'BERKAS BARU', + 'NEW FILE' => 'FILE BARU', 'NEW DIR' => 'DIREKTORI BARU', 'DELETE' => 'HAPUS', 'RENAME' => 'GANTI', @@ -612,10 +611,10 @@ $LANG['id'] = array( 'Hit' => 'Hit', 'to reload the page' => 'untuk memuat ulang halaman', 'Directory name cannot be empty' => 'Nama Direktori tidak boleh kosong', - 'File name cannot be empty' => 'Nama berkas tidak boleh kosong', - 'No file selected' => 'Tidak ada berkas yang dipilih', - 'No file or folder selected' => 'Tidak ada berkas atau folder yg dipilih', - 'File type not supported' => 'Tipe berkas tidak didukung', + 'File name cannot be empty' => 'Nama File tidak boleh kosong', + 'No file selected' => 'Tidak ada file yang dipilih', + 'No file or folder selected' => 'Tidak ada file atau folder yg dipilih', + 'File type not supported' => 'Tipe file tidak didukung', 'Directory download not available in current version' => 'Direktori Unduh tidak tersedia di versi ini', 'Directory not available' => 'Direktori tidak tersedia', 'Done' => 'Selesai', @@ -633,21 +632,21 @@ $LANG['id'] = array( 'YOU ARE COPYING' => 'ANDA MENYALIN', 'YOU ARE REMOVING' => 'ANDA MENGHAPUS', 'Delete items' => 'Hapus item', - 'Copy files' => 'Salin berkas', - 'Move files' => 'Pindah berkas', + 'Copy files' => 'Salin file', + 'Move files' => 'Pindah file', 'Are you sure you want to copy' => 'Apakah anda yakin ingin menyalin', 'Are you sure you want to move' => 'Apakah anda yakin ingin memindahkan', 'Are you sure you want to delete' => 'Aapakah anda Yakin ingin menghapus', 'into' => 'ke', - 'existing files will be replaced' => 'berkas yang sudah ada akan diganti', + 'existing files will be replaced' => 'file yang sudah ada akan diganti', 'Original name' => 'Nama orisinal', - 'File' => 'Berkas', + 'File' => 'File', 'already exists' => 'sudah ada', - 'Create file' => 'Buat berkas', + 'Create file' => 'Buat file', 'Create directory' => 'Buat direktori', - 'read by owner' => 'dibaca oleh pemilik', - 'write by owner' => 'ditulis oleh pemilik', - 'execute/search by owner' => 'eksekusi/cari oleh pemilik', + 'read by owner' => 'dibaca oleh owner', + 'write by owner' => 'ditulis oleh owner', + 'execute/search by owner' => 'eksekusi/cari oleh owner', 'read by group' => 'dibaca oleh grup', 'write by group' => 'ditulis oleh grup', 'execute/search by group' => 'ekseskusi/cari oleh grup', @@ -671,30 +670,30 @@ $LANG['id'] = array( 'Move backward through top menu' => 'Pindah ke sebelumnya lewat menu atas', 'Move forward through top menu' => 'Pindah ke setelahnya lewat menu atas', 'Enter focused element' => 'Masuk ke fokus elemen', - 'Move up through elements list' => 'Pindah ke atas melalui daftar elemen', - 'Move down through elements list' => 'Pindah ke bawah melalui daftar elemen', + 'Move up through elements list' => 'Move up through elements list', + 'Move down through elements list' => 'Move down through elements list', 'Upload' => 'Unggah', - 'New File' => 'Berkas baru', + 'New File' => 'File baru', 'New Folder' => 'Folder baru', 'Download' => 'Unduh', 'Archive' => 'Arsip', - 'Save File (in text editor)' => 'Simpan berkas (di penyunting teks)', + 'Save File (in text editor)' => 'Simpan File (di text editor)', 'Close Popup / Cancel' => 'Tutup Popup / Batal', 'Move Cursor Up' => 'Pindahkan kursor keatas', 'Move Cursor Down' => 'Pindahkan kursor kebawah', 'Switch to Left Tab' => 'Pindah ke tab kiri', 'Switch to Right Tab' => 'Pindah ke tab kanan', 'Switch Tab' => 'Pindah Tab', - 'Go to the Top of the File List' => 'Pindah Ke atas dari Daftar Berkas', - 'Go to the Last File' => 'Pindah Berkas terakhir', - 'Open File / Enter Directory' => 'Buka Berkas/Masuk ke Direktori', - 'Edit File' => 'Sunting Berkas', + 'Go to the Top of the File List' => 'Pindah Ke atas dari Daftar File', + 'Go to the Last File' => 'Pindah File terakhir', + 'Open File / Enter Directory' => 'Buka File/Masuk ke Direktori', + 'Edit File' => 'Sunting File', 'Go to Parent Directory' => 'Ke Direktori Induk', - 'Select Current File' => 'Pilih Berkas ini', - 'Select Bunch of Files' => 'Pilih banyak berkas', - 'Add File to the Current Selection' => 'Tambahkan Berkas diseleksi ini', - 'Select All Files' => 'Pilih semua berkas', + 'Select Current File' => 'Pilih File ini', + 'Select Bunch of Files' => 'Pilih Bunch of Files', + 'Add File to the Current Selection' => 'Tambahkan File di Seleksi ini', + 'Select All Files' => 'Pilih semua file', 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => 'pintasan terinspirasi oleh magnificent GNU Midnight Commander file manager', @@ -706,7 +705,7 @@ $LANG['id'] = array( 'Licence Activated' => 'Lisensi telah aktif', 'Licence Deactivated' => 'Lisensi telah di nonaktifkan', 'Restrict users so that they cannot use SSH and access only their home directory.' => 'Batasi pengguna agar tidak dapat menggunakan SSH dan hanya dapat mengakses direktori home.', - 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Jelajahi, salin, sunting, lihat dan dapatkan semua berkas web anda menggunakan File Manager.', + 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'Jelajahi, salin, sunting, lihat dan dapatkan semua file web anda menggunakan File Manager.', 'This is a commercial module, you would need to purchace license key to enable it.' => 'Ini modul komersial, anda perlu membayar lisensi untuk mengaktifkannya.', 'Minutes' => 'Permenit', diff --git a/web/inc/i18n/it.php b/web/inc/i18n/it.php index 1e104c51a..ec7a83d50 100644 --- a/web/inc/i18n/it.php +++ b/web/inc/i18n/it.php @@ -560,7 +560,6 @@ $LANG['it'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/ja.php b/web/inc/i18n/ja.php index a592fd7bf..f2836948e 100644 --- a/web/inc/i18n/ja.php +++ b/web/inc/i18n/ja.php @@ -559,7 +559,6 @@ $LANG['ja'] = array( 'MAIL Server' => 'メールサーバー', 'Antivirus' => 'アンチウイルス', 'AntiSpam' => 'アンチスパム', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'ウェブメールのURL', 'MySQL Support' => 'MySQLのサポート', 'phpMyAdmin URL' => 'phpMyAdminのURL', diff --git a/web/inc/i18n/ka.php b/web/inc/i18n/ka.php index c6ccc32a8..0ebf2d116 100644 --- a/web/inc/i18n/ka.php +++ b/web/inc/i18n/ka.php @@ -22,7 +22,7 @@ $LANG['ka'] = array( 'DNS' => 'დომენები', 'MAIL' => 'ფოსტა', 'DB' => 'ბაზები', - 'CRON' => 'ქრონი', + 'CRON' => 'კრონი', 'BACKUP' => 'მარქაფი', 'LOGIN' => 'შესვლა', @@ -109,7 +109,7 @@ $LANG['ka'] = array( 'disable autoupdate' => 'ავტომატური განახლების გამორთვა', 'turn on notifications' => 'შეტყობინებების ჩართვა', 'turn off notifications' => 'შტყობინებების გამორთვა', - 'configure' => 'კონფიგურაცია', + 'configure' => 'configure', 'Adding User' => 'კლიენტის დამატება', 'Editing User' => 'კლიენტის რედაქტირება', @@ -178,7 +178,7 @@ $LANG['ka'] = array( 'Web Aliases' => 'Web ალიასები', 'per domain' => 'დომენზე', 'DNS Domains' => 'DNS დომენები', - 'DNS domains' => 'DNS დომენები', + 'DNS domains' => 'DNS domains', 'DNS records' => 'DNS ჩანაწერები', 'Name Servers' => 'Name სერვერები', 'Mail Domains' => 'ელფოსტის დომენები', @@ -193,9 +193,9 @@ $LANG['ka'] = array( 'template' => 'შაბლონი', 'SSL Support' => 'SSL მხარდაჭერა', 'SSL Home Directory' => 'SSL მთავარი დირექტორია', - 'Lets Encrypt Support' => 'Lets Encrypt-ის მხარდაჭერა', + 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', - 'Your certificate will be automatically issued in 5 minutes' => 'თქვენი სერტიფიკატები ავტომატურად დამზადდება 5 წუთში', + 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'პროქსის მხარდაჭერა', 'Proxy Extensions' => 'პროქსის გაფართოებები', 'Web Statistics' => 'ვებ სტატისტიკა', @@ -203,7 +203,7 @@ $LANG['ka'] = array( 'Path' => 'გზა', 'SOA' => 'SOA', 'TTL' => 'TTL', - 'Expire' => 'ვადის გასვლა', + 'Expire' => 'ვადა', 'Records' => 'ჩანაწერები', 'Serial' => 'სერიული', 'Catchall email' => 'Catchall ელფოსტა', @@ -253,7 +253,7 @@ $LANG['ka'] = array( 'PostgreSQL Usage on localhost' => 'PostgreSQL მოხმარება localhost-ზე', 'Bandwidth Usage eth0' => 'ტრაფიკის მოხმარება eth0-ზე', 'Bandwidth Usage eth1' => 'ტრაფიკის მოხმარება eth1-ზე', - 'Exim Usage' => 'Exim-ის მოხმარება', + 'Exim Usage' => 'Exim Usage', 'FTP Usage' => 'FTP მოხმარება', 'SSH Usage' => 'SSH მოხმარება', 'reverse proxy' => 'რევერსული პროქსი', @@ -405,8 +405,8 @@ $LANG['ka'] = array( 'mail account' => 'ელფოსტის ანგარიში', 'cron job' => 'კრონის დავალება', - 'cron' => 'ქრონი', - 'user dir' => 'მომხმარებლის დირექტორია', + 'cron' => 'კრონი', + 'user dir' => 'მომხამრებლის დირექტორია', 'unlimited' => 'ულიმიტო', '1 account' => '1 ანგარიში', @@ -559,7 +559,6 @@ $LANG['ka'] = array( 'MAIL Server' => 'ელფოსტის სერვერი', 'Antivirus' => 'ანტივირუსი', 'AntiSpam' => 'ანტისპამი', - 'Use Web Domain SSL Certificate' => 'ვებ დომენის SSL სერტიფიკატის გამოყენება', 'Webmail URL' => 'ვებფოსტის URL', 'MySQL Support' => 'MySQL-ის მხარდაჭერა', 'phpMyAdmin URL' => 'phpMyAdmin-ის URL', @@ -666,7 +665,7 @@ $LANG['ka'] = array( 'Go to CRON list' => 'კრონის სიაზე გადასვლა', 'Go to BACKUP list' => 'მარქაფების სიაზე გადასვლა', 'Focus on search' => 'ძიაბაზე ფოკუსირება', - 'Display/Close shortcuts' => 'მალსახმობების ჩვენება/დახურვა', + 'Display/Close shortcuts' => 'Display/Close shortcuts', 'Move backward through top menu' => 'უკან გადასვლა მთავარ მენიუში', 'Move forward through top menu' => 'წინ გადასვლა მთავარ მენიუში', 'Enter focused element' => 'ფოკუსირებულ ელემენტზე გადასვლა', @@ -693,7 +692,7 @@ $LANG['ka'] = array( 'Select Current File' => 'მიმდინარე ფაილის მონიშვნა', 'Select Bunch of Files' => 'ვებრი ფაილის მონიშვნა', 'Add File to the Current Selection' => 'ფაილის მონიშნულებში დამატება', - 'Select All Files' => 'ყველა ფაილის მონიშვნა', + 'Select All Files' => 'Select All Files', 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => 'მალსახმობები შექმნილია უძლიერესი GNU Midnight Commander ფაილური მენეჯერის მიხედვით', @@ -745,14 +744,14 @@ $LANG['ka'] = array( 'PUB_KEY' => 'PUB_KEY', 'ISSUER' => 'ISSUER', - 'Use server hostname' => 'სერვერის hostname-ის გამოყენება', - 'Use domain hostname' => 'დეომენის hostname-ის გამოყენება', - 'Use STARTTLS' => 'STARTTLS-ის გამოყენება', - 'Use SSL / TLS' => 'SSL / TLS-ის გამოყენება', - 'No encryption' => 'დაშიფრვის გარეშე', - 'Do not use encryption' => 'არ გამოიყენო დაშიფრვა', + 'Use server hostname' => 'Use server hostname', + 'Use domain hostname' => 'Use domain hostname', + 'Use STARTTLS' => 'Use STARTTLS', + 'Use SSL / TLS' => 'Use SSL / TLS', + 'No encryption' => 'No encryption', + 'Do not use encryption' => 'Do not use encryption', - 'maximum characters length, including prefix' => 'დასაშვებია მაქსიმუმ %s სიმბოლო, პრეფიქსის ჩათვლით', + 'maximum characters length, including prefix' => 'maximum %s characters length, including prefix', - 'Email Credentials' => 'რეკვიზიტების ელ-ფოსტით გაგზავნა', + 'Email Credentials' => 'Email Credentials', ); diff --git a/web/inc/i18n/ko.php b/web/inc/i18n/ko.php index 1b09de256..a032f2651 100644 --- a/web/inc/i18n/ko.php +++ b/web/inc/i18n/ko.php @@ -559,7 +559,6 @@ $LANG['ko'] = array( 'MAIL Server' => 'MAIL 서버', 'Antivirus' => '바이러스 필터링', 'AntiSpam' => '스팸 필터링', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => '웹메일 주소', 'MySQL Support' => 'MySQL 지원', 'phpMyAdmin URL' => 'phpMyAdmin 주소', diff --git a/web/inc/i18n/nl.php b/web/inc/i18n/nl.php index b5d68ec44..fc86a88b2 100644 --- a/web/inc/i18n/nl.php +++ b/web/inc/i18n/nl.php @@ -563,7 +563,6 @@ $LANG['nl'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', @@ -758,5 +757,5 @@ $LANG['nl'] = array( 'maximum characters length, including prefix' => 'maximaal %s karakters lang, inclusief prefix', - 'Email Credentials' => 'E-mailreferenties', + 'Email Credentials' => 'Email Credentials', ); diff --git a/web/inc/i18n/no.php b/web/inc/i18n/no.php index fe026f390..45c23f228 100644 --- a/web/inc/i18n/no.php +++ b/web/inc/i18n/no.php @@ -560,7 +560,6 @@ $LANG['no'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/pl.php b/web/inc/i18n/pl.php index e649a22cd..23c8016cb 100644 --- a/web/inc/i18n/pl.php +++ b/web/inc/i18n/pl.php @@ -560,7 +560,6 @@ $LANG['pl'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/pt-BR.php b/web/inc/i18n/pt-BR.php index 303ae53fe..686af9007 100644 --- a/web/inc/i18n/pt-BR.php +++ b/web/inc/i18n/pt-BR.php @@ -559,7 +559,6 @@ $LANG['pt-BR'] = array( 'MAIL Server' => 'Servidor de E-MAIL', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'Suporte MySQL', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/pt.php b/web/inc/i18n/pt.php index 02d3bf513..ec1eb670d 100644 --- a/web/inc/i18n/pt.php +++ b/web/inc/i18n/pt.php @@ -559,7 +559,6 @@ $LANG['pt'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/ro.php b/web/inc/i18n/ro.php index 5b70f5d55..0a9e93e3d 100644 --- a/web/inc/i18n/ro.php +++ b/web/inc/i18n/ro.php @@ -561,7 +561,6 @@ $LANG['ro'] = array( 'MAIL Server' => 'Server MAIL', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Foloseşte certificatul SSL din domeniul WEB', 'Webmail URL' => 'URL Webmail', 'MySQL Support' => 'Suport MySQL', 'phpMyAdmin URL' => 'URL phpMyAdmin', diff --git a/web/inc/i18n/ru.php b/web/inc/i18n/ru.php index 3ff08aa4a..a109056ca 100644 --- a/web/inc/i18n/ru.php +++ b/web/inc/i18n/ru.php @@ -561,7 +561,6 @@ $LANG['ru'] = array( 'MAIL Server' => 'MAIL Сервер', 'Antivirus' => 'Антивирус', 'AntiSpam' => 'АнтиСпам', - 'Use Web Domain SSL Certificate' => 'Использовать SSL сертификат веб домена', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'Поддержка MySQL', 'phpMyAdmin URL' => 'phpMyAdmin URL', @@ -580,6 +579,7 @@ $LANG['ru'] = array( 'Vesta Control Panel Plugins' => 'Плагины Vesta Control Panel', 'preview' => 'предпросмотр', 'Reseller Role' => 'Реселлер', + 'Reseller Role' => 'Реселлер', 'Web Config Editor' => 'Веб Редактор Конфигов', 'Template Manager' => 'Менеджер Шаблонов', 'Backup Migration Manager' => 'Менеджер Миграции Бэкапов', diff --git a/web/inc/i18n/se.php b/web/inc/i18n/se.php index 96c5af9c6..87bb1910f 100644 --- a/web/inc/i18n/se.php +++ b/web/inc/i18n/se.php @@ -559,7 +559,6 @@ $LANG['se'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/sr.php b/web/inc/i18n/sr.php index 2b91b293e..dc1f315c5 100644 --- a/web/inc/i18n/sr.php +++ b/web/inc/i18n/sr.php @@ -1,7 +1,7 @@ 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Koristi Web Domain SSL sertifikat', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL podrška', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/th.php b/web/inc/i18n/th.php index 2878192ff..07beb85ee 100644 --- a/web/inc/i18n/th.php +++ b/web/inc/i18n/th.php @@ -562,7 +562,6 @@ $LANG['th'] = array( 'MAIL Server' => 'เซิร์ฟเวอร์เมล', 'Antivirus' => 'ป้องกันไวรัส', 'AntiSpam' => 'ป้องกันเมลขยะ', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'สนับสนุน MySQL', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/tr.php b/web/inc/i18n/tr.php index a7fadc43d..7f2875b99 100644 --- a/web/inc/i18n/tr.php +++ b/web/inc/i18n/tr.php @@ -560,7 +560,6 @@ $LANG['tr'] = array( 'MAIL Server' => 'MAIL Server', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'MySQL Support', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/tw.php b/web/inc/i18n/tw.php index 163bee624..d35cba4aa 100644 --- a/web/inc/i18n/tw.php +++ b/web/inc/i18n/tw.php @@ -4,9 +4,11 @@ * This language file is translate by * Clark's Hosting Service (https://host.clark-chen.com) * Clark Chen (clark@clark-chen.com) + * + * Translation recheck by: + * pan93412 */ $LANG['tw'] = array( - 'Packages' => '方案設定', 'IP' => 'IP 管理', 'Graphs' => '資源使用圖表', @@ -81,8 +83,8 @@ $LANG['tw'] = array( 'rebuild db' => '重建資料庫', 'rebuild cron' => '重建任務排程', 'update counters' => '更新計數器', - 'suspend' => '停用', - 'unsuspend' => '解除停用', + 'suspend' => '暫停', + 'unsuspend' => '解除暫停', 'delete' => '刪除', 'show per user' => '依選擇的使用者', 'login as' => '登入帳號', @@ -142,8 +144,8 @@ $LANG['tw'] = array( 'Adding IP Address to Banlist' => '新增IP至黑名單', 'active' => '正常', - 'spnd' => '停用', - 'suspended' => '已停用', + 'spnd' => '暫停', + 'suspended' => '已暫停', 'running' => '執行中', 'stopped' => '已停止', 'outdated' => '有可升級的新版本', @@ -197,9 +199,9 @@ $LANG['tw'] = array( 'SSL Home Directory' => 'SSL 主目錄', 'Lets Encrypt Support' => 'Lets Encrypt 支援', 'Lets Encrypt' => 'Lets Encrypt', - 'Your certificate will be automatically issued in 5 minutes' => '您的憑證會在五分鐘內完成簽發', + 'Your certificate will be automatically issued in 5 minutes' => '您的憑證會在五分鐘內完成簽署', 'Proxy Support' => 'Proxy 支援', - 'Proxy Extensions' => 'Proxy 副檔名', + 'Proxy Extensions' => 'Proxy 擴充', 'Web Statistics' => '網站統計', 'Additional FTP Account' => '其他 FTP 帳號', 'Path' => '路徑', @@ -217,6 +219,7 @@ $LANG['tw'] = array( 'Autoreply' => '自動回覆', 'Forward to' => '轉寄到', 'Do not store forwarded mail' => '不保留已轉發的郵件', + 'Email Credentials' => '信箱登入資訊', 'IMAP hostname' => 'IMAP 主機名稱', 'IMAP port' => 'IMAP 連接埠', 'IMAP security' => 'IMAP 安全性', @@ -390,8 +393,8 @@ $LANG['tw'] = array( 'Banlist' => '封鎖清單', 'ranges are acceptable' => '可接受陣列', 'CIDR format is supported' => '支援 CIDR 格式', - 'ACCEPT' => '允許', - 'DROP' => '封鎖', + 'ACCEPT' => 'ACCEPT', + 'DROP' => 'DROP', 'TCP' => 'TCP', 'UDP' => 'UDP', 'ICMP' => 'ICMP', @@ -400,11 +403,11 @@ $LANG['tw'] = array( 'VESTA' => 'VESTA', 'Add one more Name Server' => '新增至少一個域名伺服器', - 'web domain' => 'Web 網域', - 'dns domain' => 'DNS 網域', - 'dns record' => 'DNS 紀錄', - 'mail domain' => 'Mail 紀錄', - 'mail account' => 'Mail 帳號', + 'web domain' => 'web 網域', + 'dns domain' => 'dns 網域', + 'dns record' => 'dns 紀錄', + 'mail domain' => 'mail 紀錄', + 'mail account' => 'mail 帳號', 'cron job' => '任務排程', 'cron' => '任務排程', @@ -462,30 +465,30 @@ $LANG['tw'] = array( 'Changes has been saved.' => '已儲存變更', 'Confirmation' => '確認', 'DELETE_USER_CONFIRMATION' => '確定要刪除使用者 %s 嗎?', - 'SUSPEND_USER_CONFIRMATION' => '確定要停用使用者 %s 嗎?', - 'UNSUSPEND_USER_CONFIRMATION' => '確定要解除停用使用者 %s 嗎?', + 'SUSPEND_USER_CONFIRMATION' => '確定要暫停使用者 %s 嗎?', + 'UNSUSPEND_USER_CONFIRMATION' => '確定要解除暫停使用者 %s 嗎?', 'DELETE_DOMAIN_CONFIRMATION' => '確定要刪除網域 %s 嗎?', - 'SUSPEND_DOMAIN_CONFIRMATION' => '確定要停用網域 %s 嗎?', - 'UNSUSPEND_DOMAIN_CONFIRMATION' => '確定要解除停用網域 %s 嗎?', + 'SUSPEND_DOMAIN_CONFIRMATION' => '確定要暫停網域 %s 嗎?', + 'UNSUSPEND_DOMAIN_CONFIRMATION' => '確定要解除暫停網域 %s 嗎?', 'DELETE_RECORD_CONFIRMATION' => '確定要刪除記錄 %s 嗎?', - 'SUSPEND_RECORD_CONFIRMATION' => '確定要停用記錄 %s 嗎?', - 'UNSUSPEND_RECORD_CONFIRMATION' => '確定要解除停用紀錄 %s 嗎?', + 'SUSPEND_RECORD_CONFIRMATION' => '確定要暫停記錄 %s 嗎?', + 'UNSUSPEND_RECORD_CONFIRMATION' => '確定要解除暫停紀錄 %s 嗎?', 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => '確定要刪除 %s 嗎?', - 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '確定要停用 %s 嗎?', - 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '確定要解除停用 %s 嗎?', + 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '確定要暫停 %s 嗎?', + 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '確定要解除暫停 %s 嗎?', 'DELETE_DATABASE_CONFIRMATION' => '確定要刪除資料庫 %s 嗎?', - 'SUSPEND_DATABASE_CONFIRMATION' => '確定要停用資料庫 %s 嗎?', - 'UNSUSPEND_DATABASE_CONFIRMATION' => '確定要解除停用資料庫 %s 嗎?', + 'SUSPEND_DATABASE_CONFIRMATION' => '確定要暫停資料庫 %s 嗎?', + 'UNSUSPEND_DATABASE_CONFIRMATION' => '確定要解除暫停資料庫 %s 嗎?', 'DELETE_CRON_CONFIRMATION' => '確定要刪除 任務排程嗎?', - 'SUSPEND_CRON_CONFIRMATION' => '確定要停用 任務排程嗎?', - 'UNSUSPEND_CRON_CONFIRMATION' => '確定要解除停用 任務排程嗎?', + 'SUSPEND_CRON_CONFIRMATION' => '確定要暫停 任務排程嗎?', + 'UNSUSPEND_CRON_CONFIRMATION' => '確定要解除暫停 任務排程嗎?', 'DELETE_BACKUP_CONFIRMATION' => '確定要刪除 %s 備份嗎?', 'DELETE_EXCLUSION_CONFIRMATION' => '確定要刪除 %s 例外嗎?', 'DELETE_PACKAGE_CONFIRMATION' => '確定要刪除方案 %s 嗎?', 'DELETE_IP_CONFIRMATION' => '確定要刪除 IP 地址 %s 嗎?', - 'DELETE_RULE_CONFIRMATION' => '確定要刪除防火牆規則 #%s 嗎?', - 'SUSPEND_RULE_CONFIRMATION' => '確定要停用防火牆規則 #%s 嗎?', - 'UNSUSPEND_RULE_CONFIRMATION' => '確定要解除停用防火牆規則 #%s 嗎?', + 'DELETE_RULE_CONFIRMATION' => '確定要刪除規則 #%s 嗎?', + 'SUSPEND_RULE_CONFIRMATION' => '確定要暫停規則 #%s 嗎?', + 'UNSUSPEND_RULE_CONFIRMATION' => '確定要解除暫停規則 #%s 嗎?', 'LEAVE_PAGE_CONFIRMATION' => '確定離開嗎?', 'RESTART_CONFIRMATION' => '確定要重新啟動 %s 嗎?', 'Welcome' => '歡迎', @@ -561,7 +564,6 @@ $LANG['tw'] = array( 'MAIL Server' => 'MAIL 伺服器', 'Antivirus' => '病毒防護', 'AntiSpam' => '垃圾郵件防護', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Webmail 路徑', 'MySQL Support' => 'MySQL 支援', 'phpMyAdmin URL' => 'phpMyAdmin 路徑', @@ -755,6 +757,4 @@ $LANG['tw'] = array( 'Do not use encryption' => '不要使用加密', 'maximum characters length, including prefix' => '最多 %s 字元 (包含前綴)', - - 'Email Credentials' => '信箱登入資訊', ); diff --git a/web/inc/i18n/ua.php b/web/inc/i18n/ua.php index 136cc73f8..cf47496d8 100644 --- a/web/inc/i18n/ua.php +++ b/web/inc/i18n/ua.php @@ -560,7 +560,6 @@ $LANG['ua'] = array( 'MAIL Server' => 'MAIL сервер', 'Antivirus' => 'Антивірус', 'AntiSpam' => 'АнтиСпам', - 'Use Web Domain SSL Certificate' => 'Використовувати SSL сертифікат веб домену', 'Webmail URL' => 'Webmail URL', 'MySQL Support' => 'Підтримка MySQL', 'phpMyAdmin URL' => 'phpMyAdmin URL', diff --git a/web/inc/i18n/ur.php b/web/inc/i18n/ur.php index 2c95e8217..d01a401de 100644 --- a/web/inc/i18n/ur.php +++ b/web/inc/i18n/ur.php @@ -70,7 +70,6 @@ $LANG['ur'] = array( 'Back' => 'پیچھے', 'Save' => 'محفوظ کریں', 'Submit' => 'جمع', - 'toggle all' => 'تمام ٹاگل', 'apply to selected' => 'منتخب شدہ پر لاگو', 'rebuild' => 'تعمیر نو', @@ -109,7 +108,6 @@ $LANG['ur'] = array( 'enable autoupdate' => 'آٹو اپ ڈیٹ کو چالو', 'disable autoupdate' => 'غیر فعال آٹو اپ ڈیٹ', 'configure' => 'ترتیب دے', - 'Adding User' => 'شامل کرنے صارف', 'Editing User' => 'ترمیم صارف', 'Adding Domain' => 'ڈومین کو شامل کرنے سے', @@ -137,7 +135,6 @@ $LANG['ur'] = array( 'Adding Firewall Rule' => 'فصیل اصول کو شامل کرنے سے', 'Editing Firewall Rule' => 'ترمیم فصیل اصول', 'Adding IP Address to Banlist' => 'Banlist کرنے IP ایڈریس کو شامل کرنے سے', - 'active' => 'فعال', 'spnd' => 'معطل', 'suspended' => 'معطل', @@ -145,7 +142,6 @@ $LANG['ur'] = array( 'stopped' => 'بند کر دیا', 'outdated' => 'فرسودہ', 'updated' => 'اپ ڈیٹ', - 'yes' => 'جی ہاں', 'no' => 'نہیں', 'none' => 'کوئی بھی', @@ -396,17 +392,14 @@ $LANG['ur'] = array( 'FTP' => 'FTP', 'VESTA' => 'Vesta کی', 'Add one more Name Server' => 'ایک اور نام سرور شامل کریں', - 'web domain' => 'ویب ڈومین', 'dns domain' => 'DNS ڈومین', 'dns record' => 'DNS ریکارڈ', 'mail domain' => 'میل ڈومین', 'mail account' => 'میل اکاؤنٹ', 'cron job' => 'کرون کام', - 'cron' => 'کرون', 'user dir' => 'صارف دیر', - 'unlimited' => 'لامحدود', '1 account' => '1 اکاؤنٹ', '%s accounts' => '٪s کے اکاؤنٹس', @@ -501,14 +494,12 @@ $LANG['ur'] = array( 'BACKUP_EXISTS' => 'ایک موجودہ بیک اپ کو پہلے ہی چل رہا ہے. کہ بیک اپ کو ختم کرنے کے لئے براہ کرم انتظار کریں.', 'RESTORE_SCHEDULED' => 'ٹاسک قطار میں شامل کیا گیا ہے. جب آپ کو بحال مکمل کیا گیا ہے آپ کو ایک ای میل کی اطلاع وصول کریں گے.', 'RESTORE_EXISTS' => 'ایک موجودہ بحالی کا کام پہلے سے ہی چل رہا ہے. جو اسے دوبارہ شروع کرنے سے پہلے ختم کرنے کے لئے براہ کرم انتظار کریں.', - 'WEB_EXCLUSIONS' => 'قسم ڈومین کا نام ہے، ایک فی لائن. تمام ڈومینز استعمال کرتے خارج کرنے کے *. شکل مندرجہ ذیل مخصوص dirs استعمال کو خارج کرنے کے لئے: domain.com:public_html/cache:public_html/tmp', 'DNS_EXCLUSIONS' => 'قسم ڈومین کا نام ہے، ایک فی لائن. تمام ڈومینز استعمال کرتے خارج کرنے کے *', 'MAIL_EXCLUSIONS' => 'قسم ڈومین کا نام ہے، ایک فی لائن. تمام ڈومینز استعمال کرتے خارج کرنے کے *. شکل مندرجہ ذیل مخصوص اکاؤنٹس کے استعمال کو خارج کرنے کے لئے: domain.com:info:support:postmaster', 'DB_EXCLUSIONS' => 'مکمل ڈیٹا بیس کا نام ٹائپ کریں، فی لائن ایک. تمام ڈیٹا بیس کا استعمال کرتے خارج کرنے کے *', 'CRON_EXCLUSIONS' => 'تمام ملازمتوں کا استعمال کرتے خارج کرنے کے *', 'USER_EXCLUSIONS' => 'قسم ڈائریکٹری کا نام ہے، ایک فی لائن. تمام dirs استعمال کرتے exlude کرنے *', - 'Welcome to Vesta Control Panel' => 'Vesta کی کنٹرول پینل میں خوش آمدید', 'MAIL_FROM' => ' Vesta کی کنٹرول پینل ', 'GREETINGS_GORDON_FREEMAN' => "ہیلو, %s %s,\n", @@ -544,7 +535,6 @@ $LANG['ur'] = array( 'Oct' => 'اکتوبر', 'Nov' => 'نومبر', 'Dec' => 'دسمبر', - 'Configuring Server' => 'ترتیب سرور', 'Hostname' => 'میزبان کا نام', 'Time Zone' => 'ٹائم زون', @@ -558,7 +548,6 @@ $LANG['ur'] = array( 'MAIL Server' => 'میل سرور', 'Antivirus' => 'اینٹی وائرس', 'AntiSpam' => 'اینٹی سپیم', - 'Use Web Domain SSL Certificate' => 'ایس ایس ایل ویب ڈومین سرٹیفکیٹ کااستعمال کریں', 'Webmail URL' => 'ویب میل URL', 'MySQL Support' => 'ایس کیو ایل کی معاونت کی', 'phpMyAdmin URL' => 'phpMyAdmin کے یو آر ایل', @@ -582,14 +571,11 @@ $LANG['ur'] = array( 'Backup Migration Manager' => 'بیک اپ مائیگریشن مینیجر', 'FileManager' => 'فائل مینیجر', 'show: CPU / MEM / NET / DISK' => 'دکھائیں: CPU / MEM / NET / ڈسک', - 'sort by' => 'بہ ترتیب', 'Date' => 'تاریخ', 'Starred' => 'ستارے کے نشان', 'Name' => 'نام', - 'save to favorites' => 'پسندیدہ میں محفوظ کریں', - 'File Manager' => 'فائل منیجر', 'size' => 'سائز', 'date' => 'تاریخ', @@ -652,7 +638,6 @@ $LANG['ur'] = array( 'read by others' => 'دوسروں کی طرف سے پڑھا', 'write by others' => 'دوسروں کی طرف سے لکھ', 'execute/search by others' => 'پھانسی دوسروں کی طرف سے / تلاش', - 'Shortcuts' => 'شارٹ کٹ', 'Add New object' => 'نیا اعتراض شامل کریں', 'Save Form' => 'فارم محفوظ کریں', @@ -671,7 +656,6 @@ $LANG['ur'] = array( 'Enter focused element' => 'مرکوز عنصر درج', 'Move up through elements list' => 'عناصر فہرست کے ذریعے اوپر منتقل کریں', 'Move down through elements list' => 'عناصر فہرست کے ذریعے نیچے لے جائیں', - 'Upload' => 'اپ لوڈ کریں', 'New File' => 'نئی فائل', 'New Folder' => 'نیا فولڈر', @@ -695,7 +679,6 @@ $LANG['ur'] = array( 'Select All Files' => 'تمام فائلوں کو منتخب', 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => '.فائل مینیجر Midnight Commander شارٹ کٹ شاندار GNU سے متاثر ہیں', - 'Licence Key' => 'لائسنس کلید', 'Enter License Key' => 'لائسنس کلید درج کریں', 'Buy Licence' => 'ابھی لائسنس', @@ -706,7 +689,6 @@ $LANG['ur'] = array( 'Restrict users so that they cannot use SSH and access only their home directory.' => 'وہ SSH اور رسائی صرف ان کے گھر کی ڈائریکٹری کا استعمال نہیں کر سکتے ہیں تاکہ صارفین کو محدود کریں.', 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => 'براؤز کریں، کاپی، ترمیم، دیکھیں، اور مکمل طور پر نمایاں فائل مینیجر کا استعمال کرتے ہوئے آپ کی ویب ڈومین فائلوں کی تمام بازیافت.', 'This is a commercial module, you would need to purchace license key to enable it.' => 'یہ ایک تجارتی ماڈیول ہے، آپ اسے چالو کرنے کے لئے لائسنس کی چابی purchace کرنے کی ضرورت گا.', - 'Minutes' => 'منٹس', 'Hourly' => 'گھنٹہ وار', 'Run Command' => 'چلائیں کمان', @@ -731,10 +713,8 @@ $LANG['ur'] = array( 'every two minutes' => 'ہر دو منٹ', 'every' => 'ہر کوئی', 'Generate' => 'بنائیں', - 'webalizer' => 'webalizer', 'awstats' => 'awstats', - 'Vesta SSL' => 'Vesta کی SSL', 'SUBJECT' => 'مضمون', 'ALIASES' => 'عرفیتیں', @@ -743,18 +723,14 @@ $LANG['ur'] = array( 'SIGNATURE' => 'دستخط', 'PUB_KEY' => 'PUB_KEY', 'ISSUER' => 'ISSUER', - 'Use server hostname' => 'سرور استعمال میزبان نام', 'Use domain hostname' => 'ڈومین کا استعمال میزبان نام', 'Use STARTTLS' => 'STARTTLS استعمال', 'Use SSL' => 'SSL استعمال کریں', 'No encryption' => 'کوئی خفیہ کاری', 'Do not use encryption' => 'خفیہ کاری کا استعمال نہ کریں', - 'maximum characters length, including prefix' => 'زیادہ سے زیادہ ٪s کو حروف لمبائی، سابقہ سم', - 'Email Credentials' => 'ای میل کی سند', - '%s rule' => 'قواعد %s', 'MainDomain' => 'اہم ڈومین', 'SubDomain' => 'ذیلی ڈومین', diff --git a/web/inc/i18n/uz.php b/web/inc/i18n/uz.php deleted file mode 100644 index 1b3e3df20..000000000 --- a/web/inc/i18n/uz.php +++ /dev/null @@ -1,765 +0,0 @@ - 'Paketlar', - 'IP' => 'IP', - 'Graphs' => 'Grafiklar', - 'Statistics' => 'Statistika', - 'Log' => 'Log', - 'Server' => 'Server', - 'Services' => 'Xizmatlar', - 'Firewall' => 'Firewall', - 'Updates' => 'Yangilanishlar', - 'Log in' => 'Kirish', - 'Log out' => 'Chiqish', - - 'USER' => 'USER', - 'WEB' => 'WEB', - 'DNS' => 'DNS', - 'MAIL' => 'MAIL', - 'DB' => 'DB', - 'CRON' => 'CRON', - 'BACKUP' => 'BACKUP', - - 'LOGIN' => 'KIRISH', - 'RESET PASSWORD' => 'PAROLNI TIKLASH', - 'SEARCH' => 'QIDIRISH', - 'PACKAGE' => 'PAKETLAR', - 'RRD' => 'RRD', - 'STATS' => 'STATISTIKA', - 'LOG' => 'LOG', - 'UPDATES' => 'YANGILANISHLAR', - 'FIREWALL' => 'FIREWALL', - 'SERVER' => 'SERVER', - 'MEMORY' => 'XOTIRA', - 'DISK' => 'DISK', - 'NETWORK' => 'NETWORK', - 'Web Log Manager' => 'Menedjer Web jurnali', - - 'no notifications' => "bildirishnomalar yo'q", - - 'Add User' => "Foydalanuvchi qo'shish", - 'Add Domain' => "Domen qo'shish", - 'Add Web Domain' => "Domen qo'shish", - 'Add DNS Domain' => "Domen qo'shish", - 'Add DNS Record' => "DNS yozuvini qo'shish", - 'Add Mail Domain' => "Domen qo'shish", - 'Add Mail Account' => "Pochta qo'shish", - 'Add Database' => "DB yaratish", - 'Add Cron Job' => "Vazifa qo'shish", - 'Create Backup' => "Zaxira nusxasini yaratish", - 'Configure' => 'Sozlang', - 'Restore All' => 'Barchasini tiklash', - 'Add Package' => "Paket qo'shish", - 'Add IP' => "IP qo'shish", - 'Add Rule' => "Qoida qo'shish", - 'Ban IP Address' => "IPni bloklash", - 'Search' => 'Qidirish', - 'Add one more FTP Account' => "Yana bitta FTP hisobini qo'shish", - 'Overall Statistics' => 'Umumiy statistika', - 'Daily' => 'Kundalik', - 'Weekly' => 'Haftalik', - 'Monthly' => 'Oylik', - 'Yearly' => 'Yillik', - 'Add' => "Qo'shish", - 'Back' => 'Orqaga', - 'Save' => 'Saqlash', - 'Submit' => 'Yuborish', - - 'toggle all' => 'hammasini belgilash', - 'apply to selected' => "tanlanganlarga qo'llaniladi", - 'rebuild' => 'qayta qurish', - 'rebuild web' => "WEBni qayta yaratish", - 'rebuild dns' => 'DNS qayta yaratish', - 'rebuild mail' => 'MAIL qayta yaratish', - 'rebuild db' => 'DB qayta yaratish', - 'rebuild cron' => 'CRON qayta yaratish', - 'update counters' => 'hisoblagichlarni hisoblash', - 'suspend' => 'bloklash', - 'unsuspend' => 'aktivlashtirish', - 'delete' => "O'chirish", - 'show per user' => 'foydalanuvchini tanlang', - 'login as' => 'sifatida tizimga kiring', - 'logout' => 'chiqish', - 'edit' => 'taxrirlash', - 'open webstats' => "webstats ochish", - 'view logs' => "jurnallarni ko'rish", - 'list records' => "yozuvlar ro'yxati", - 'add record' => "rekord qo'shish", - 'list accounts' => "%s hisoblarni ko'rsatish", - 'add account' => "hisob qo'shing", - 'open webmail' => 'pochtani ochish', - 'list fail2ban' => "fail2ban-ni ko'rsatish", - 'open %s' => '%s ni oching', - 'download' => 'yuklab olish', - 'restore' => 'tiklash', - 'configure restore settings' => 'tiklash sozlamalarini sozlash', - 'stop' => "to'xta", - 'start' => 'boshlash', - 'restart' => 'qayta ishga tushirish', - 'update' => 'yangilash', - 'generate' => 'hosil qilish', - 'Generate CSR' => "CSR so'rovini yarating", - 'reread IP' => "IP-ni qayta o'qing", - 'enable autoupdate' => "avtomatik yangilashni yoqish", - 'disable autoupdate' => 'avtomatik yangilashni o`chirish', - 'turn on notifications' => "bildirishnomalarni yoqish", - 'turn off notifications' => 'bildirishnomalarni o`chirish', - 'configure' => 'configure', - - 'Adding User' => "Hisob qo'shish", - 'Editing User' => "Hisobni tahrirlash", - 'Adding Domain' => "Domen qo'shish", - 'Editing Domain' => "Domenni tahrirlash", - 'Adding DNS Domain' => "DNS domenini qo'shish", - 'Editing DNS Domain' => "DNS domenini tahrirlash", - 'Adding DNS Record' => "DNS yozuvini qo'shish", - 'Editing DNS Record' => 'DNS yozuvini tahrirlash', - 'Adding Mail Domain' => "Pochta domenini qo'shish", - 'Editing Mail Domain' => "Pochta domenini tahrirlash", - 'Adding Mail Account' => "Pochta hisobini qo'shish", - 'Editing Mail Account' => "Pochta hisobini tahrirlash", - 'Adding database' => "Ma'lumotlar bazasini qo'shish", - 'Editing Cron Job' => 'Cron ishini tahrirlash', - 'Adding Cron Job' => "Cron ishini qo'shish", - 'Editing Database' => "Ma'lumotlar bazasini tahrirlash", - 'Adding Package' => "Paket qo'shish", - 'Editing Package' => "Paketni tahrirlash", - 'Adding IP address' => "IP manzilini qo'shish", - 'Editing IP Address' => "IP manzilni tahrirlash", - 'Editing Backup Exclusions' => "Tahrirlash istisnolari", - 'Generating CSR' => "CSR so'rovini yaratish", - 'Listing' => "Ko'rinish", - 'Search Results' => 'Qidiruv natijalari', - 'Adding Firewall Rule' => "Xavfsizlik devori qoidasini qo'shish", - 'Editing Firewall Rule' => 'Xavfsizlik devori qoidasini tahrirlash', - 'Adding IP Address to Banlist' => 'IP-manzilni blokirovka qilish', - - 'active' => 'faol', - 'spnd' => 'bloklangan', - 'suspended' => 'bloklangan', - 'running' => 'ishlamoqda', - 'stopped' => "to'xtatilgan", - 'outdated' => 'eskirgan', - 'updated' => 'yangilangan', - - 'yes' => 'ha', - 'no' => "yo'q", - 'none' => "yo'q", - 'pb' => 'Pb', - 'tb' => 'Tb', - 'gb' => 'Gb', - 'mb' => 'Mb', - 'minute' => 'min.', - 'hour' => 'soat', - 'day' => 'kun', - 'days' => 'kunlar', - 'hours' => 'soat', - 'minutes' => 'min.', - 'month' => 'oy', - 'package' => 'paket', - 'Bandwidth' => 'Trafik', - 'Disk' => 'Disk', - 'Web' => 'Veb', - 'Mail' => 'Pochta', - 'Databases' => "Ma'lumotlar bazalari", - 'User Directories' => 'Foydalanuvchi papkalari', - 'Template' => 'Shablon', - 'Web Template' => 'Web shablon', - 'Backend Template' => 'Backend shablon ', - 'Proxy Template' => 'Proxy shablon', - 'DNS Template' => 'DNS shablon', - 'Web Domains' => 'Veb-domenlar', - 'SSL Domains' => 'SSL domenlar', - 'Web Aliases' => 'Veb taxalluslari', - 'per domain' => 'domen uchun', - 'DNS Domains' => 'DNS domenlar', - 'DNS domains' => 'DNS domenlar', - 'DNS records' => 'DNS yozuvlar', - 'Name Servers' => 'Sever nomi', - 'Mail Domains' => 'Pochta domenlari', - 'Mail Accounts' => 'Pochta hisoblari', - 'Cron Jobs' => 'Cron Jobs', - 'SSH Access' => 'SSH kirish', - 'IP Address' => 'IP Address', - 'IP Addresses' => 'IP адреса', - 'Backups' => 'Zaxira nusxalari', - 'Backup System' => 'Zaxira tizimi', - 'backup exclusions' => 'istisnolar', - 'template' => 'shablon', - 'SSL Support' => "SSL qo'llab-quvvatlash", - 'SSL Home Directory' => "SSL katalogi", - 'Lets Encrypt Support' => 'Lets Encrypt Support', - 'Lets Encrypt' => 'Lets Encrypt', - - 'Proxy Support' => 'Proksi-server', - 'Proxy Extensions' => 'Proksi kengaytmalari', - 'Web Statistics' => 'Sayt statistikasi', - 'Additional FTP Account' => "Qo'shimcha FTP hisobi", - 'Path' => "Yo'l", - 'SOA' => 'SOA', - 'TTL' => 'TTL', - 'Expire' => 'Muddati tugaydi', - 'Records' => 'DNS записи', - 'Serial' => 'Serial', - 'Catchall email' => 'Ловушка почты', - 'AntiVirus Support' => "Antivirusni qo'llab-quvvatlash", - 'AntiSpam Support' => "Antispamni qo'llab-quvvatlash", - 'DKIM Support' => 'DKIM', - 'Accounts' => 'Hisoblar', - 'Quota' => 'Kvota', - 'Autoreply' => 'Avtomatik javob', - 'Forward to' => 'Yo‘naltirish', - 'Do not store forwarded mail' => "Yo'naltirilgan elektron pochta xabarlarini saqlamang", - 'IMAP hostname' => 'IMAP hostname', - 'IMAP port' => 'IMAP port', - 'IMAP security' => 'IMAP security', - 'IMAP auth method' => 'IMAP auth method', - 'SMTP hostname' => 'SMTP hostname', - 'SMTP port' => 'SMTP port', - 'SMTP security' => 'SMTP security', - 'SMTP auth method' => 'SMTP auth method', - 'STARTTLS' => 'STARTTLS', - 'Normal password' => 'Normal password', - 'database' => 'malumotlar bazasi', - 'User' => 'Foydalanuvchi', - 'Host' => 'Server', - 'Charset' => 'Kodlash', - 'Min' => 'Min', - 'Hour' => 'Soat', - 'Day' => 'Kun', - 'Month' => 'Oy', - 'Day of week' => 'Hafta kuni', - 'local' => 'mahalliy', - 'Run Time' => 'Ish vaqti', - 'Backup Size' => 'Zaxira hajmi', - 'SYS' => 'SYS', - 'Domains' => 'Domenlar', - 'Status' => 'Status', - 'shared' => 'birgalikda', - 'dedicated' => 'dedicated', - 'Owner' => 'Egasi', - 'Users' => 'Foydalanuvchilar', - 'Load Average' => "O'rtacha yuk", - 'Memory Usage' => 'Xotiradan foydalanish', - 'APACHE2 Usage' => 'Использование APACHE2', - 'HTTPD Usage' => 'Использование HTTPd', - 'NGINX Usage' => 'Использование NGINX', - 'MySQL Usage on localhost' => 'Использование локальной MySQL', - 'PostgreSQL Usage on localhost' => 'Использование локальной PostgreSQL', - 'Bandwidth Usage eth0' => 'Использование cети: eth0', - 'Bandwidth Usage eth1' => 'Использование cети: eth1', - 'Exim Usage' => 'Использование Exim', - 'FTP Usage' => 'Использование FTP', - 'SSH Usage' => 'Использование SSH', - 'reverse proxy' => 'обратный прокси', - 'web server' => 'web server', - 'dns server' => 'dns server', - 'mail server' => 'mail server', - 'pop/imap server' => 'pop/imap server', - 'email antivirus' => 'email antivirus', - 'email antispam' => 'email antispam', - 'database server' => "ma'lumotlar bazasi serveri", - 'ftp server' => 'ftp сервер', - 'job scheduler' => "vazifalarni rejalashtiruvchi", - 'firewall' => 'xavfsizlik devori', - 'brute-force monitor' => 'brute-force монитор', - 'CPU' => 'Процессор', - 'Memory' => 'Xotira', - 'Uptime' => 'Ishga tushirildi', - 'core package' => 'asosiy paket', - 'php interpreter' => 'php interpreter', - 'internal web server' => 'внутренний веб сервер', - 'Version' => 'Versiya', - 'Release' => 'Chiqarish', - 'Architecture' => 'Arxitektura', - 'Object' => "Ob'ekt", - 'Username' => 'Foydalanuvchi nomi', - 'Password' => 'Parol', - 'Email' => 'E-mail', - 'Package' => 'Paket', - 'Language' => 'Til', - 'First Name' => 'Ism', - 'Last Name' => 'Familiya', - 'Default Template' => 'Standart shablon', - 'Default Name Servers' => 'Standart nom serverlari', - 'Domain' => 'Domen', - 'DNS Support' => "DNS qo'llab-quvvatlash", - 'Mail Support' => "Pochta yordami", - 'Advanced options' => "Qo'shimcha variantlar", - 'Basic options' => 'Asosiy variantlar', - 'Aliases' => 'Taxalluslar', - 'SSL Certificate' => 'SSL sertifikati', - 'SSL Key' => 'SSL kalit', - 'SSL CSR' => 'SSL CSR', - 'optional' => 'ixtiyoriy', - 'internal' => 'ichki', - 'Statistics Authorization' => 'Statistika avtorizatsiyasi', - 'Statistics Auth' => 'Avtorizatsiya statistikasi', - 'Account' => 'Hisob', - 'Send FTP credentials to email' => 'Ftp hisob qaydnoma tafsilotlarini quyidagi manzilga yuboring', - 'Expiration Date' => 'Muddati', - 'YYYY-MM-DD' => 'YYYY-MM-DD', - 'Name servers' => 'Server nomi', - 'Record' => 'Record', - 'IP or Value' => 'IP адрес или значение', - 'Priority' => 'Ustuvorlik', - 'Record Number' => 'Tartib raqam', - 'in megabytes' => 'megabaytda', - 'Message' => 'Xabar', - 'use local-part' => 'mahalliy qismdan foydalaning', - 'one or more email addresses' => 'bir yoki bir nechta elektron pochta manzillari', - - 'SSL Certificate Authority / Intermediate' => "SSL sertifikat organi / O'rta daraja", - 'Send login credentials to email address' => "Kirish ma'lumotlarini elektron pochta manziliga yuborish", - 'Prefix will be automaticaly added to username' => "%s prefiksi hisob nomiga avtomatik ravishda qo'shiladi", - 'Your certificate will be automatically issued in 5 minutes' => "Sertifikat avtomatik ravishda 5 daqiqa ichida yaratiladi", - 'Prefix will be automaticaly added to database name and database user' => "%s prefiksi ma'lumotlar bazasiga va ma'lumotlar bazasi foydalanuvchisiga avtomatik ravishda qo'shiladi", - - - 'Database' => "Ma'lumotlar bazasi", - 'Type' => 'Turi', - 'Minute' => 'Daqiqa', - 'Command' => 'Buyruq', - 'Package Name' => 'Paket nomi', - 'Netmask' => 'Tarmoq maskasi', - 'Interface' => 'Interfeys', - 'Shared' => 'Shared', - 'Assigned user' => 'Belgilangan foydalanuvchi', - 'Assigned domain' => 'Belgilangan domen', - 'NAT IP association' => 'Ассоциированный NAT IP', - 'shell' => 'ssh kirish', - 'web domains' => 'veb-domenlar', - 'web aliases' => 'web aliases', - 'dns records' => 'DNS yozuvlari', - 'mail domains' => 'pochta domenlari', - 'mail accounts' => 'pochta hisoblari', - 'accounts' => 'hisoblar', - 'databases' => "ma'lumotlar bazalari", - 'cron jobs' => 'cron ishlari', - 'backups' => 'zaxira nusxalari', - 'quota' => 'disk kvotasi', - 'day of week' => 'hafta kuni', - 'cmd' => 'cmd', - 'users' => 'foydalanuvchilar', - 'domains' => 'domenlar', - 'aliases' => 'aliases', - 'records' => 'records', - 'jobs' => 'jobs', - 'username' => 'foydalanuvchi nomi', - 'password' => 'parol', - 'type' => 'turi', - 'charset' => 'charset', - 'domain' => 'domen', - 'ip' => 'IP', - 'ip address' => 'IP адрес', - 'IP address' => 'IP адрес', - 'netmask' => 'маска подсети', - 'interface' => 'интерфейс', - 'assigned user' => 'назначенный пользователь', - 'ns1' => 'сервер имен #1', - 'ns2' => 'сервер имен #2', - 'user' => 'пользователь', - 'email' => 'email', - 'first name' => 'ism', - 'last name' => 'familiya', - 'account' => 'hisob', - 'ssl certificate' => 'SSL сертификат', - 'ssl key' => 'ssl kaliti', - 'stats user password' => "statistik ma'lumotlarga kirish uchun parol", - 'stats username' => "statistika ma'lumotlarga kirish foydalanuvchi nomi", - 'stats password' => 'statistika foydalanuvchi paroli', - 'ftp user password' => "FTP kirish paroli", - 'ftp user' => "FTP foydalanuvchisi", - 'Last 70 lines of %s.%s.log' => 'Last 70 lines of %s.%s.log', - 'AccessLog' => 'AccessLog', - 'ErrorLog' => 'ErrorLog', - 'Download AccessLog' => 'AccessLog-ni yuklab olish', - 'Download ErrorLog' => 'ErrorLog-nu yuklab olish', - 'Country' => 'Mamlakat', - '2 letter code' => 'ikki harfli kod', - 'State / Province' => 'Mintaqa', - 'City / Locality' => 'Shahar / tuman', - 'Organization' => 'Tashkilot', - 'Action' => 'Harakat', - 'Protocol' => 'Protokol', - 'Port' => 'Port', - 'Comment' => 'Izoh', - 'Banlist' => "Qora ro'yxat", - 'ranges are acceptable' => "diapazonlardan foydalanish mumkin", - 'CIDR format is supported' => "CIDR formati qo'llab-quvvatlanadi", - 'ACCEPT' => 'ACCEPT', - 'DROP' => 'DROP', - 'TCP' => 'TCP', - 'UDP' => 'UDP', - 'ICMP' => 'ICMP', - 'SSH' => 'SSH', - 'FTP' => 'FTP', - 'VESTA' => 'VESTA', - 'Add one more Name Server' => "Yana bitta nom serverini qo'shish", - - 'web domain' => 'web domen', - 'dns domain' => 'dns domen', - 'dns record' => 'dns yozuv', - 'mail domain' => 'mail domen', - 'mail account' => 'mail hisob', - 'cron job' => 'cron job', - - 'cron' => 'cron', - 'user dir' => 'foydalanuvchi papkasi', - - 'unlimited' => 'cheklanmagan', - '1 account' => 'Har bir sahifadagi foydalanuvchilar: 1', - '%s accounts' => 'sahifadagi foydalanuvchilar: %s', - '1 domain' => 'har bir sahifa uchun domenlar: 1', - '%s domains' => 'har bir sahifa uchun domenlar: %s', - '1 record' => 'har bir sahifaga yozuvlar: 1', - '%s records' => 'har bir sahifaga xabarlar: %s', - '1 mail account' => "har bir sahifadagi hisoblar: 1", - '%s mail accounts' => 'har bir sahifadagi hisoblar: %s', - '1 database' => "har bir sahifa uchun ma'lumotlar bazalari: 1", - '%s databases' => "sahifadagi ma'lumotlar bazalari: %s", - '1 cron job' => "Har bir sahifa uchun vazifalar: 1", - '%s cron jobs' => 'заданий на странице: %s', - '1 archive' => 'архивов на странице: 1', - '%s archives' => 'архивов на странице: %s', - '1 item' => '1 элемент', - '%s items' => '%s элементы', - '1 package' => 'пакетов на странице: 1', - '%s packages' => 'пакетов на странице: %s', - '1 IP address' => 'IP адресов на странице: 1', - '%s IP addresses' => 'IP адресов на странице: %s', - '1 month' => 'месяцев на странице: 1', - '%s months' => 'месяцев на странице: %s', - '1 log record' => 'записей на странице: 1', - '%s log records' => 'записей на странице %s', - '1 object' => 'объектов на странице: 1', - '%s objects' => 'объектов на странице: %s', - 'no exclusions' => "istisnolar yo'q", - '1 rule' => 'правил на странице: 1', - '%s rules' => 'правил на странице: %s', - 'There are no currently banned IP' => "Hozirda taqiqlangan IP yo'q", - - 'USER_CREATED_OK' => '%s hisobi muvaffaqiyatli yaratildi', - 'WEB_DOMAIN_CREATED_OK' => '%s domeni muvaffaqiyatli yaratildi.', - 'DNS_DOMAIN_CREATED_OK' => '%s domeni muvaffaqiyatli yaratildi.', - 'DNS_RECORD_CREATED_OK' => '%s.%s yozuvi muvaffaqiyatli yaratildi.', - 'MAIL_DOMAIN_CREATED_OK' => '%s domeni muvaffaqiyatli yaratildi.', - 'MAIL_ACCOUNT_CREATED_OK' => '%s@%s hisobi muvaffaqiyatli yaratildi', - 'DATABASE_CREATED_OK' => '%s ma\'lumotlar bazasi muvaffaqiyatli yaratildi', - 'CRON_CREATED_OK' => "Cron Job muvaffaqiyatli yaratildi", - 'IP_CREATED_OK' => 'IP manzil %s muvaffaqiyatli yaratildi.', - 'PACKAGE_CREATED_OK' => '%s to‘plami muvaffaqiyatli yaratildi.', - 'SSL_GENERATED_OK' => 'SSL sertifikati muvaffaqiyatli yaratildi.', - 'RULE_CREATED_OK' => "Qoida muvaffaqiyatli qo'shildi", - 'BANLIST_CREATED_OK' => "IP manzili muvaffaqiyatli taqiqlandi", - 'Autoupdate has been successfully enabled' => "Avtomatik yangilash muvaffaqiyatli yoqildi", - 'Autoupdate has been successfully disabled' => "Avtomatik yangilash muvaffaqiyatli o'chirildi", - 'Cronjob email reporting has been successfully enabled' => "Cron bildirishnomalari muvaffaqiyatli yoqildi", - 'Cronjob email reporting has been successfully disabled' => "Cron bildirishnomalari muvaffaqiyatli o'chirildi", - 'Changes has been saved.' => "O'zgarishlar saqlandi.", - 'Confirmation' => 'Tasdiqlash', - 'DELETE_USER_CONFIRMATION' => "%s foydalanuvchisini o'chirib tashlamoqchimisiz ? ", - 'SUSPEND_USER_CONFIRMATION' => '% s foydalanuvchisini bloklamoqchimisiz ? ', - 'UNSUSPEND_USER_CONFIRMATION' => 'Siz % s foydalanuvchisini blokdan chiqarmoqchimisiz ? ', - 'DELETE_DOMAIN_CONFIRMATION' => "% s domenini o'chirib tashlamoqchimisiz? ", - 'SUSPEND_DOMAIN_CONFIRMATION' => '% s domenini bloklamoqchimisiz? ', - 'UNSUSPEND_DOMAIN_CONFIRMATION' => '% s domenini blokdan bloklamoqchimisiz? ', - 'DELETE_RECORD_CONFIRMATION' => "% s yozuvini o'chirib tashlamoqchimisiz? ", - 'SUSPEND_RECORD_CONFIRMATION' => '% s yozuvini bloklaysizmi? ', - 'UNSUSPEND_RECORD_CONFIRMATION' => '% s yozuvini blokdan chiqarmoqchimisiz? ', - 'DELETE_MAIL_ACCOUNT_CONFIRMATION' => "% s pochta qutisini o'chirasizmi? ", - 'SUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '% s pochta qutisini taqiqlaysizmi? ', - 'UNSUSPEND_MAIL_ACCOUNT_CONFIRMATION' => '% s pochtani blokini olib tashlamoqchimisiz? ', - 'DELETE_DATABASE_CONFIRMATION' => "% s ma'lumotlar bazasini o'chirasizmi? ", - 'SUSPEND_DATABASE_CONFIRMATION' => "% s ma'lumotlar bazasini bloklaysizmi? ", - 'UNSUSPEND_DATABASE_CONFIRMATION' => "% s ma'lumotlar bazasi taqiqni olib tashlamoqchimisiz? '", - 'DELETE_CRON_CONFIRMATION' => "Cron Jobni o'chirib tashlamoqchimisiz? ", - 'SUSPEND_CRON_CONFIRMATION' => 'Cron Jobni bloklamoqchimisiz? ', - 'UNSUSPEND_CRON_CONFIRMATION' => 'Cron Jobni ochmoqchimisiz ?', - 'DELETE_BACKUP_CONFIRMATION' => "% s arxivini o'chirmoqchimisiz? ", - 'DELETE_EXCLUSION_CONFIRMATION' => '% s istisnosini olib tashlamoqchimisiz? ', - 'DELETE_PACKAGE_CONFIRMATION' => "% s paketini o'chirasizmi", - 'DELETE_IP_CONFIRMATION' => "% s IP manzilini o'chirasizmi? '", - 'DELETE_RULE_CONFIRMATION' => "Haqiqatan ham #% s ni o'chirasizmi? ", - 'SUSPEND_RULE_CONFIRMATION' => '#% s qoidasini taqiqlamoqchimisiz? ', - 'UNSUSPEND_RULE_CONFIRMATION' => 'Haqiqatan ham #% s taqiqni olib tashlamoqchimisiz? ', - 'LEAVE_PAGE_CONFIRMATION' => 'Sahifadan chiqmib ketmoqchimisiz? ', - 'RESTART_CONFIRMATION' => '% s ni qayta yuklamoqchimisiz? ', - 'Welcome' => 'Xush kelibsiz', - 'LOGGED_IN_AS' => "Siz % s foydalanuvchisi sifatida tizimga kirdingiz", - 'Error' => 'Xato', - 'Invalid username or password' => "Login yoki parol noto'g'ri", - 'Invalid username or code' => "Foydalanuvchi nomi yoki parolni tiklash kodi noto'g'ri", - 'Passwords not match' => 'Parollar mos kelmayapti', - 'Please enter valid email address.' => "Iltimos, to'g'ri e-pochta manzilini kiriting.", - 'Field "%s" can not be blank.' => '"%s" maydoni bo\'sh bo\'lishi mumkin emas.', - 'Password is too short.' => "Parol juda qisqa. Iltimos, kamida 6 ta belgidan foydalaning.", - 'Error code:' => 'Xato kodi: %s', - 'SERVICE_ACTION_FAILED' => '"%s" "%s" muvaffaqiyatsiz tugadi', - 'IP address is in use' => "IP-manzil ishlatilmoqda", - 'BACKUP_SCHEDULED' => "Ish navbatga muvaffaqiyatli qo'shildi. Tugallangach, sizga to'liq hisobot pochta orqali yuboriladi.", - 'BACKUP_EXISTS' => "Zaxiralash allaqachon amalga oshirilmoqda, kuting.", - 'RESTORE_SCHEDULED' => "Ish navbatga muvaffaqiyatli qo'shildi. Tugallangach, siz pochta orqali to'liq hisobot olasiz.", - 'RESTORE_EXISTS' => "Vazifa allaqachon bajarilmoqda, oxirigacha kuting.", - - 'WEB_EXCLUSIONS' => "Har bir satrda bitta domenni belgilang. Barchasini chiqarib tashlash uchun * dan foydalaning. Faqat ayrim papkalarni chiqarib tashlash uchun quyidagi formatdan foydalaning: domain.com:public_html / cache:public_html / tmp", - 'DNS_EXCLUSIONS' => "Har bir satrda bitta domen belgilang. Barchasini chiqarib tashlash uchun * dan foydalaning.", - 'MAIL_EXCLUSIONS' => "Har bir satrda bitta domenni belgilang. Barchasini chiqarib tashlash uchun * dan foydalaning. Shaxsiy hisoblarni istisno qilish uchun quyidagi formatdan foydalaning: domain.com:info:support:postmaster", - 'DB_EXCLUSIONS' => "Har bir satrda bitta asosni belgilang. Barchasini chiqarib tashlash uchun * dan foydalaning.", - 'CRON_EXCLUSIONS' => 'Для того чтобы исключить все задания, используйте * ', - 'USER_EXCLUSIONS' => 'Укажите папки по одной в строке.Для того чтобы исключить все, используйте * ', - - 'Welcome to Vesta Control Panel' => "Vesta boshqaruv paneliga xush kelibsiz", - 'MAIL_FROM' => 'Vesta Control Panel < noreply@%s > ', - 'GREETINGS_GORDON_FREEMAN' => "Salom %s %s,\n", - 'GREETINGS' => "Salom,\n", - 'ACCOUNT_READY' => "Hisob muvaffaqiyatli yaratildi va foydalanishga tayyor.\n\nhttps://%s/login/\nFoydalanuvchi nomi: %s\nParol: %s\n\n--\nVesta boshqaruv paneli\n", - - 'FTP login credentials' => "FTP kirish ma'lumotlari", - 'FTP_ACCOUNT_READY' => "FTP hisobi muvaffaqiyatli yaratildi va foydalanishga tayyor.\n\nXost: %s\nFoydalanuvchi nomi: %s_%s\nParol: %s\n\n--\nVesta boshqaruv paneli\n", - - 'Database Credentials' => "Ma'lumotlar bazasiga kirish uchun ma'lumotlar", - 'DATABASE_READY' => "Ma'lumotlar bazasi muvaffaqiyatli yaratildi.\n\nMa'lumotlar bazasi: %s\nFoydalanuvchi: %s\nParol: %s\n%s\n\n--\nVesta boshqaruv paneli\n", - - 'forgot password' => 'eslatmoq', - 'Confirm' => 'Tasdiqlang', - 'new Password' => 'Yangi parol', - 'Confirm Password' => 'Parolni takrorlash', - 'Reset' => 'Tozalash', - 'Reset Code' => 'Kodni tiklash', - 'RESET_NOTICE' => '', - 'RESET_CODE_SENT' => 'Parolni tiklash kodi elektron pochta manzilingizga yuborildi..
    ', - 'MAIL_RESET_SUBJECT' => ' % s parolni tiklash', - 'PASSWORD_RESET_REQUEST' => "Boshqaruv paneli parolini tiklash uchun quyidagi havolaga oʻting:\nhttps://%s/reset/?action=confirm&user=%s&code=%s\n\nBoʻlmasa, https://%s/reset/ sahifasiga oʻting. ?action=code&user=%s va quyidagi tiklash kodini kiriting:\n%s\n\nAgar siz parolni tiklashni soʻramagan boʻlsangiz, ushbu xabarga eʼtibor bermang va uzrimizni qabul qiling.\n\n--\nVesta boshqaruv paneli\n", - - 'Jan' => 'Yan', - 'Feb' => 'Fev', - 'Mar' => 'Mart', - 'Apr' => 'Apr', - 'May' => 'May', - 'Jun' => 'Iyun', - 'Jul' => 'Iyul', - 'Aug' => 'Avg', - 'Sep' => 'Sen', - 'Oct' => 'Okt', - 'Nov' => 'Noy', - 'Dec' => 'Dek', - - 'Configuring Server' => "Server sozlamalari", - 'Hostname' => 'Xost nomi', - 'Time Zone' => 'Vaqt zonasi', - 'default Language' => 'Standart til', - 'Proxy Server' => 'Proxy Server', - 'Web Server' => 'Web Server', - 'Backend Server' => 'Backend Server', - 'Backend Pool Mode' => 'Backend Pool Mode', - 'DNS Server' => 'DNS Сервер', - 'DNS Cluster' => 'DNS Кластер', - 'MAIL Server' => 'MAIL Сервер', - 'Antivirus' => 'Antivirus', - 'AntiSpam' => 'AntiSpam', - 'use Web Domain SSL Certificate' => "Veb-domen uchun SSL sertifikatidan foydalaning", - 'Webmail URL' => 'Webmail URL', - 'MySQL Support' => "MySQL-ni qo'llab-quvvatlash", - 'phpMyAdmin URL' => 'phpMyAdmin URL', - 'PostgreSQL Support' => 'Поддержка PostgreSQL', - 'phpPgAdmin URL' => 'phpPgAdmin URL', - 'Maximum Number Of Databases' => "Ma'lumotlar bazalarining maksimal soni", - 'Current Number Of Databases' => "Ma'lumotlar bazalarining joriy soni", - 'Local backup' => "Mahalliy arxiv", - 'Compression level' => "siqish darajasi", - 'Directory' => 'Katalog', - 'Remote backup' => 'masofaviy arxiv', - 'ftp' => 'FTP', - 'sftp' => 'SFTP', - 'SFTP Chroot' => 'SFTP Chroot', - 'FileSystem Disk Quota' => "Fayl tizimi disk kvotasi", - 'Vesta Control Panel Plugins' => 'Плагины Vesta Control Panel', - 'preview' => "oldindan ko'rish", - 'Reseller Role' => 'Sotuvchi roli', - 'Web Config Editor' => "Veb konfiguratsiya muharriri", - 'Template Manager' => "Shablon menejeri", - 'Backup Migration Manager' => "Zaxiraviy migratsiya menejeri", - 'FileManager' => "Fayl menejeri", - 'show: CPU / MEM / NET / DISK' => "ko'rsatkichlar: CPU / MEMORY / NETWORK / DISK", - - 'sort by' => 'tartiblash', - 'Date' => 'Sana', - 'Starred' => 'Sevimlilar', - 'Name' => 'Nomi', - - 'save to favorites' => "Sevimlilarga qo'shish", - - 'File Manager' => 'Fayllar', - 'size' => 'hajmi', - 'date' => 'sana', - 'name' => 'nomi', - 'Initializing' => 'Initializatsiya', - 'UPLOAD' => 'YUKLASH', - 'new FILE' => 'Yangi fayl', - 'new DIR' => 'Yangi papka', - 'DELETE' => 'OʻCHIRISH', - 'RENAME' => 'NOMINI O‘GARTIRISH', - 'MOVE' => "KO'CHIRISH", - 'RIGHTS' => 'HUQUQLAR', - 'COPY' => 'NUSHALASH', - 'ARCHIVE' => 'ARXIVLASH', - 'EXTRACT' => 'OCHISH', - 'DOWNLOAD' => 'YUKLAB OLISH', - 'Are you sure ? ' => "Ishonchingiz komilmi", - 'Hit' => 'bosing', - 'to reload the page' => "sahifani qayta yuklash", - 'Directory name cannot be empty' => "Katalog nomi bo'sh bo'lishi mumkin emas", - 'File name cannot be empty' => "Fayl nomi bo'sh bo'lishi mumkin emas", - 'No file selected' => "Hech narsa tanlanmagan", - 'No file or folder selected' => "Hech qanday fayl yoki papka tanlanmagan", - 'File type not supported' => "Ushbu fayl turi qo'llab-quvvatlanmaydi", - 'Directory download not available in current version' => "Panelning ushbu versiyasida papkalarni yuklash hali qo'llab-quvvatlanmaydi", - 'Directory not available' => "Papka mavjud emas", - 'Done' => 'bajarildi', - 'Close' => 'Yopish', - 'Copy' => 'Nushalash', - 'Cancel' => 'Bekor qilish', - 'Rename' => "Nomini o'zgartirish", - 'Move' => "Ko'chirish", - 'Change Rights' => "Huquqlarni o'zgartirish", - 'Delete' => "Oʻchirish", - 'Extract' => "Paketdan chiqaring", - 'Create' => 'Yaratish', - 'Compress' => 'Siqish', - 'OK' => 'OK', - 'YOU ARE COPYING' => 'ВЫ КОПИРУЕТЕ', - 'YOU ARE REMOVING' => 'ВЫ УДАЛЯЕТЕ', - 'Delete items' => "Elementlarni o'chirish", - 'Copy files' => "Fayllarni nusxalash", - 'Move files' => "Fayllarni ko'chirish", - 'Are you sure you want to copy' => "Nusxa olmoqchimisiz", - 'Are you sure you want to move' => "Ko'chmoqchimisiz", - 'Are you sure you want to delete' => "Oʻchirib tashlamoqchimisiz", - 'into' => 'ichiga', - 'existing files will be replaced' => "mavjud fayllar ustiga yoziladi", - 'Original name' => "Asl ism", - 'File' => "Fayl", - 'already exists' => "allaqachon mavjud", - 'Create file' => "Fayl yaratish", - 'Create directory' => "Jild yaratish", - 'read by owner' => "egasi uchun o'qish", - 'write by owner' => "egasi uchun kirish", - 'execute / search by owner' => "boshlash/egasini qidirish", - 'read by group' => 'чтение для группы', - 'write by group' => 'запись для группы', - 'execute / search by group' => 'запуск / поиск для группы', - 'read by others' => 'чтение для остальных', - 'write by others' => 'запись для остальных', - 'execute / search by others' => 'запуск / поиск для остальных', - - 'Shortcuts' => 'Qisqartmalar', - 'Add new object' => 'Перейти к Форме Добавления', - 'Save Form' => "Formani saqlang", - 'Cancel saving form' => "Saqlashni bekor qilish", - 'Go to USER list' => "USERga o'tish", - 'Go to WEB list' => 'WEB ga o\'tish', - 'Go to DNS list' => 'DNS ga o\'tish', - 'Go to MAIL list' => 'MAIL ga o\'tish', - 'Go to DB list' => 'DB ga o\'tish', - 'Go to CRON list' => 'CRON ga o\'tish', - 'Go to BACKUP list' => 'BACKUP ga o\'tish', - 'Focus on search' => "Qidiruv formasiga e'tibor qarating", - 'Display / Close shortcuts' => "Tezkor tugmalar ro'yxatini ko'rsatish/yashirish", - 'Move backward through top menu' => "E'tiborni oldingi menyu bandiga qarating", - 'Move forward through top menu' => "Keyingi menyu bandiga e'tibor qarating", - 'Enter focused element' => "Menyuning faol bandiga o'ting", - 'Move up through elements list' => "E'tiborni oldingi ro'yxat bandiga qarating", - 'Move down through elements list' => "Ro'yxatning keyingi elementiga e'tibor qarating", - - 'Upload' => "Faylni yuklash", - 'new File' => "Fayl yaratish", - 'new Folder' => "Jild yaratish", - 'Download' => 'Yuklab olish', - 'Archive' => 'Arxivlash', - 'Save File(in text editor)' => "Faylni saqlash (matn muharriri ichida)", - 'Close Popup / Cancel' => "Qalqib chiquvchi oynani yopish / Bekor qilish", - 'Move Cursor Up' => "Kursorni yuqoriga siljitish", - 'Move Cursor Down' => "Kursorni pastga siljitish", - 'switch to Left Tab' => "Chapga o'tish", - 'switch to Right Tab' => "O'ngga o'tish", - 'switch Tab' => "Faol varaqni almashtirish", - 'Go to the Top of the File list' => "Birinchi faylga o'ting", - 'Go to the Last File' => "Oxirgi faylga o'tish", - 'Open File / Enter Directory' => "Fayl/papkani ochish", - 'Edit File' => "Faylni tahrirlash", - 'Go to Parent Directory' => "Bosh katalogga o'tish", - 'Select Current File' => "Joriy faylni tanlang", - 'Select Bunch of Files' => "Fayllar to'plamini tanlang", - 'Add File to the Current Selection' => "Tanlanganga fayl qo'shish", - 'Select All Files' => "Barcha fayllarni tanlash", - - 'shortcuts are inspired by magnificent GNU < a href = "https://www.midnight-commander.org/" > Midnight Commander file manager' => - 'tezkor tugmalar ajoyib GNU fayl menejeridan olingan < a href = "https://www.midnight-commander.org/" > Midnight Commander ', - - 'Licence Key' => 'Litsenziya kaliti', - 'Enter License Key' => 'Litsenziya kalitini kiriting', - 'Buy Licence' => 'Litsenziya kalitini sotib oling', - 'Buy Lifetime License' => 'Cheksiz litsenziya kalitini sotib oling ', - 'Disable and Cancel Licence' => "Litsenziyani o'chirish va yopish", - 'Licence Activated' => "Litsenziya faollashtirilgan", - 'Licence Deactivated' => "Litsenziya o'chirilgan", - 'Restrict users so that they cannot use SSH and access only their home directory.' => "Foydalanuvchilarni cheklang, shunda ular SSH-dan foydalana olmaydilar va faqat bosh papkaga kira oladilar.", - 'Browse, copy, edit, view, and retrieve all of your web domain files using fully featured File Manager.' => "To'liq ishlaydigan Fayl menejeri bilan barcha veb-domen fayllarini ko'ring, nusxa ko'chiring, tahrirlang, ko'ring va foydalaning.", - 'This is a commercial module, you would need to purchace license key to enable it.' => "Bu tijorat moduli, uni yoqish uchun litsenziya sotib olishingiz kerak.", - - 'Minutes' => 'daqiqada', - 'Hourly' => "soatda", - 'Run Command' => 'Buyruqni ishga tushirish', - 'every month' => 'har oy', - 'every odd month' => 'har toq oy', - 'every even month' => 'otda bir marta', - 'every day' => 'har kuni', - 'every odd day' => 'kunora', - 'every even day' => 'har bir kun', - 'weekdays(5 days)' => 'ish kunlari', - 'weekend(2 days)' => 'dam olish kunlari', - 'Monday' => 'dushanba', - 'Tuesday' => 'seshanba', - 'Wednesday' => 'chorshanba', - 'Thursday' => 'payshanba', - 'Friday' => 'juma', - 'Saturday' => 'shanba', - 'Sunday' => 'yakshanba', - 'every hour' => 'har soatda', - 'every two hours' => 'har ikki soatda', - 'every minute' => 'har daqiqada', - 'every two minutes' => 'har 2 daqiqada', - 'every' => 'har', - 'Generate' => 'Yaratish', - - 'webalizer' => 'webalizer', - 'awstats' => 'awstats', - - 'Vesta SSL' => 'Vesta SSL', - 'SUBJECT' => "OB'YEKT", - 'ALIASES' => 'ALIASES', - 'NOT_BEFORE' => 'НЕДОСТУПЕН ДО', - 'NOT_AFTER' => 'НЕДОСТУПЕН ПОСЛЕ', - 'SIGNATURE' => 'IMZO', - 'PUB_KEY' => 'OMAVIY KALT', - 'ISSUER' => 'ISSUER', - - 'use server hostname' => "Server host nomidan foydalanish", - 'use domain hostname' => "Xost domen nomidan foydalanish", - 'use STARTTLS' => "STARTTLS dan foydalanish", - 'use SSL / TLS' => "SSL/TLS dan foydalanish", - 'No encryption' => 'Shifrlashsiz', - 'do not use encryption' => "Shifrlashdan foydalanmang", - - 'maximum characters length, including prefix' => "maxsus % s belgilar soni, shu jumladan prefiks", - - 'Email Credentials' => "Elektron pochta ma'lumotlari", -]; diff --git a/web/inc/i18n/vi.php b/web/inc/i18n/vi.php index 2de145b40..40d40cbe3 100644 --- a/web/inc/i18n/vi.php +++ b/web/inc/i18n/vi.php @@ -562,7 +562,6 @@ $LANG['vi'] = array( 'MAIL Server' => 'Máy chủ MAIL', 'Antivirus' => 'Trình diệt virus', 'AntiSpam' => 'Trình chống spam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', 'Webmail URL' => 'Đường dẫn Webmail', 'MySQL Support' => 'Hỗ trợ MySQL', 'phpMyAdmin URL' => 'Đường dẫn phpMyAdmin', diff --git a/web/inc/main.php b/web/inc/main.php index 036702d72..dfa482a15 100644 --- a/web/inc/main.php +++ b/web/inc/main.php @@ -58,10 +58,9 @@ if ((!isset($_SESSION['user'])) && (!defined('NO_AUTH_REQUIRED'))) { exit; } -// Generate CSRF Token if (isset($_SESSION['user'])) { - if (!isset($_SESSION['token'])){ - $token = bin2hex(file_get_contents('/dev/urandom', false, null, 0, 16)); + if(!isset($_SESSION['token'])){ + $token = uniqid(mt_rand(), true); $_SESSION['token'] = $token; } } @@ -132,6 +131,44 @@ function check_return_code($return_var,$output) { } } +function render_page($user, $TAB, $page) { + $__template_dir = dirname(__DIR__) . '/templates/'; + $__pages_js_dir = dirname(__DIR__) . '/js/pages/'; + + // Header + include($__template_dir . 'header.html'); + + // Panel + top_panel(empty($_SESSION['look']) ? $_SESSION['user'] : $_SESSION['look'], $TAB); + + // Extarct global variables + // I think those variables should be passed via arguments + //* + extract($GLOBALS, EXTR_SKIP); + /*/ + $variables = array_filter($GLOBALS, function($key){return preg_match('/^(v_|[a-z])[a-z\d]+$/', $key);}, ARRAY_FILTER_USE_KEY); + extract($variables, EXTR_OVERWRITE); + //*/ + + // Body + if (($_SESSION['user'] !== 'admin') && (@include($__template_dir . "user/$page.html"))) { + // User page loaded + } else { + // Not admin or user page doesn't exist + // Load admin page + @include($__template_dir . "admin/$page.html"); + } + + // Including common js files + @include_once(dirname(__DIR__) . '/templates/scripts.html'); + // Including page specific js file + if(file_exists($__pages_js_dir.$page.'.js')) + echo ''; + + // Footer + include($__template_dir . 'footer.html'); +} + function top_panel($user, $TAB) { global $panel; $command = VESTA_CMD."v-list-user '".$user."' 'json'"; @@ -155,6 +192,13 @@ function top_panel($user, $TAB) { } } unset($output); + + + if ( $user == 'admin' ) { + include(dirname(__FILE__).'/../templates/admin/panel.html'); + } else { + include(dirname(__FILE__).'/../templates/user/panel.html'); + } } function translate_date($date){ diff --git a/web/index.php b/web/index.php index 30e3dec0b..2f0707473 100644 --- a/web/index.php +++ b/web/index.php @@ -1 +1,7 @@ - + + + + + + 0 ) { + header("Location: /error/"); + exit; + } + $panel = json_decode(implode('', $output), true); +} + +$path_a = !empty($_REQUEST['dir_a']) ? $_REQUEST['dir_a'] : ''; +$path_b = !empty($_REQUEST['dir_b']) ? $_REQUEST['dir_b'] : ''; +$GLOBAL_JS = ''; +$GLOBAL_JS .= ''; +$GLOBAL_JS .= ''; + + +// Footer +include($_SERVER['DOCUMENT_ROOT'].'/templates/file_manager/main.php'); \ No newline at end of file diff --git a/web/list/dns/index.php b/web/list/dns/index.php index 30e3dec0b..df5b4a83a 100644 --- a/web/list/dns/index.php +++ b/web/list/dns/index.php @@ -1 +1,26 @@ - + + Favorites:
    '; + + // Data + exec (VESTA_CMD."v-list-user-favourites ".$_SESSION['user']." json", $output, $return_var); + + +// print_r(implode('', $output)); +// $json = '{ "Favourites": { "USER": "", "WEB": "bulletfarm.com", "DNS": "", "MAIL": "", "DB": "", "CRON": "", "BACKUP": "", "IP": "", "PACKAGE": "", "FIREWALL": ""}}'; +// $data = json_decode($json, true); + + + $data = json_decode(implode('', $output).'}', true); + $data = array_reverse($data,true); + + print_r($data); +// $data = array_reverse($data,true); + +// $data = json_decode(implode('', $output), true); + +?> \ No newline at end of file diff --git a/web/list/firewall/banlist/index.php b/web/list/firewall/banlist/index.php index 30e3dec0b..6d8cddb4b 100644 --- a/web/list/firewall/banlist/index.php +++ b/web/list/firewall/banlist/index.php @@ -1 +1,24 @@ - + + + diff --git a/web/list/ip/index.php b/web/list/ip/index.php index 30e3dec0b..04f4fbe72 100644 --- a/web/list/ip/index.php +++ b/web/list/ip/index.php @@ -1 +1,25 @@ - + + + + $note){ + $note['ID'] = $key; + $data[$key] = $note; + } + echo json_encode($data); + exit; +} + + + +$TAB = 'NOTIFICATIONS'; + +// Data +exec (VESTA_CMD."v-list-user-notifications $user json", $output, $return_var); +$data = json_decode(implode('', $output), true); +$data = array_reverse($data,true); + +// Render page +render_page($user, $TAB, 'list_notifications'); + +// Back uri +$_SESSION['back'] = $_SERVER['REQUEST_URI']; diff --git a/web/list/package/index.php b/web/list/package/index.php index 30e3dec0b..7d7f35e50 100644 --- a/web/list/package/index.php +++ b/web/list/package/index.php @@ -1 +1,24 @@ - + + +\n\n\n"; + exit(); +} + +// Memory info +if (isset($_GET['mem'])) { + $TAB = 'MEMORY'; + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/list_server_info.html'); + exec (VESTA_CMD.'v-list-sys-memory-status', $output, $return_var); + foreach($output as $file) { + echo $file . "\n"; + } + echo " \n\n\n"; + exit(); +} + +// Disk info +if (isset($_GET['disk'])) { + $TAB = 'DISK'; + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/list_server_info.html'); + exec (VESTA_CMD.'v-list-sys-disk-status', $output, $return_var); + foreach($output as $file) { + echo $file . "\n"; + } + echo " \n\n\n"; + exit(); +} + +// Network info +if (isset($_GET['net'])) { + $TAB = 'NETWORK'; + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/list_server_info.html'); + exec (VESTA_CMD.'v-list-sys-network-status', $output, $return_var); + foreach($output as $file) { + echo $file . "\n"; + } + echo " \n\n\n"; + exit(); +} + +// Web info +if (isset($_GET['web'])) { + $TAB = 'WEB'; + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/list_server_info.html'); + exec (VESTA_CMD.'v-list-sys-web-status', $output, $return_var); + foreach($output as $file) { + $file=str_replace('border="0"', 'border="1"', $file); + echo $file . "\n"; + } + echo " \n\n\n"; + exit(); +} + + +// DNS info +if (isset($_GET['dns'])) { + $TAB = 'DNS'; + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/list_server_info.html'); + exec (VESTA_CMD.'v-list-sys-dns-status', $output, $return_var); + foreach($output as $file) { + echo $file . "\n"; + } + echo " \n\n\n"; + exit(); +} + +// Mail info +if (isset($_GET['mail'])) { + $TAB = 'MAIL'; + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/list_server_info.html'); + exec (VESTA_CMD.'v-list-sys-mail-status', $output, $return_var); + if ($return_var == 0 ) { + foreach($output as $file) { + echo $file . "\n"; + } + } + echo " \n\n\n"; + exit(); +} + +// DB info +if (isset($_GET['db'])) { + $TAB = 'DB'; + include($_SERVER['DOCUMENT_ROOT'].'/templates/admin/list_server_info.html'); + exec (VESTA_CMD.'v-list-sys-db-status', $output, $return_var); + if ($return_var == 0 ) { + foreach($output as $file) { + echo $file . "\n"; + } + } + echo " \n\n\n"; + exit(); +} + +// Data +exec (VESTA_CMD."v-list-sys-info json", $output, $return_var); +$sys = json_decode(implode('', $output), true); +unset($output); +exec (VESTA_CMD."v-list-sys-services json", $output, $return_var); +$data = json_decode(implode('', $output), true); +unset($output); + +// Render page +render_page($user, $TAB, 'list_services'); + +// Back uri +$_SESSION['back'] = $_SERVER['REQUEST_URI']; diff --git a/web/list/stats/index.php b/web/list/stats/index.php index 30e3dec0b..c758705a6 100644 --- a/web/list/stats/index.php +++ b/web/list/stats/index.php @@ -1 +1,37 @@ - + + + +\n\n\n"; diff --git a/web/list/web/index.php b/web/list/web/index.php index 30e3dec0b..688dfeaa9 100644 --- a/web/list/web/index.php +++ b/web/list/web/index.php @@ -1 +1,18 @@ - + + 0 ) { + $ERROR = "".__('Invalid username or password').""; + } else { + $user = $_POST['user']; + $password = $_POST['password']; + $salt = $pam[$user]['SALT']; + $method = $pam[$user]['METHOD']; + + if ($method == 'md5' ) { + $hash = crypt($password, '$1$'.$salt.'$'); + } + if ($method == 'sha-512' ) { + $hash = crypt($password, '$6$rounds=5000$'.$salt.'$'); + $hash = str_replace('$rounds=5000','',$hash); + } + if ($method == 'des' ) { + $hash = crypt($password, $salt); + } + + // Send hash via tmp file + $v_hash = exec('mktemp -p /tmp'); + $fp = fopen($v_hash, "w"); + fwrite($fp, $hash."\n"); + fclose($fp); + + // Check user hash + exec(VESTA_CMD ."v-check-user-hash ".$v_user." ".$v_hash." ".$v_ip, $output, $return_var); + unset($output); + + // Remove tmp file + unlink($v_hash); + + // Check API answer + if ( $return_var > 0 ) { + $ERROR = "".__('Invalid username or password').""; + } else { + + // Make root admin user + if ($_POST['user'] == 'root') $v_user = 'admin'; + + // Get user speciefic parameters + exec (VESTA_CMD . "v-list-user ".$v_user." json", $output, $return_var); + $data = json_decode(implode('', $output), true); + + // Define session user + $_SESSION['user'] = key($data); + $v_user = $_SESSION['user']; + + // Get user favorites + get_favourites(); + + // Define language + $output = ''; + exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var); + $languages = json_decode(implode('', $output), true); + if (in_array($data[$v_user]['LANGUAGE'], $languages)){ + $_SESSION['language'] = $data[$v_user]['LANGUAGE']; + } else { + $_SESSION['language'] = 'en'; + } + + // Regenerate session id to prevent session fixation + session_regenerate_id(); + + // Redirect request to control panel interface + if (!empty($_SESSION['request_uri'])) { + header("Location: ".$_SESSION['request_uri']); + unset($_SESSION['request_uri']); + exit; + } else { + header("Location: /"); + exit; + } + } + } + } else { + $ERROR = "".__('Invalid or missing token').""; + } +} + +// Check system configuration +exec (VESTA_CMD . "v-list-sys-config json", $output, $return_var); +$data = json_decode(implode('', $output), true); +$sys_arr = $data['config']; +foreach ($sys_arr as $key => $value) { + $_SESSION[$key] = $value; +} + +// Detect language +if (empty($_SESSION['language'])) { + $output = ''; + exec (VESTA_CMD."v-list-sys-config json", $output, $return_var); + $config = json_decode(implode('', $output), true); + $lang = $config['config']['LANGUAGE']; + + $output = ''; + exec (VESTA_CMD."v-list-sys-languages json", $output, $return_var); + $languages = json_decode(implode('', $output), true); + if(in_array($lang, $languages)){ + $_SESSION['language'] = $lang; + } + else { + $_SESSION['language'] = 'en'; + } +} + +// Generate CSRF token +$_SESSION['token'] = md5(uniqid(mt_rand(), true)); + +require_once($_SERVER['DOCUMENT_ROOT'].'/inc/i18n/'.$_SESSION['language'].'.php'); +require_once('../templates/header.html'); +require_once('../templates/login.html'); diff --git a/web/logout/index.php b/web/logout/index.php index 30e3dec0b..51c89198a 100644 --- a/web/logout/index.php +++ b/web/logout/index.php @@ -1 +1,13 @@ - + diff --git a/web/reset/index.php b/web/reset/index.php index 30e3dec0b..0d90d15de 100644 --- a/web/reset/index.php +++ b/web/reset/index.php @@ -1 +1,93 @@ - + 0 ) { + $ERROR = "".__('An internal error occurred').""; + } else { + $_SESSION['user'] = $_POST['user']; + header("Location: /"); + exit; + } + } else { + $ERROR = "".__('Invalid username or code').""; + } + } else { + $ERROR = "".__('Invalid username or code').""; + } + } else { + $ERROR = "".__('Passwords not match').""; + } +} + +// Detect language +if (empty($_SESSION['language'])) $_SESSION['language'] = detect_user_language(); + +if (empty($_GET['action'])) { + require_once '../templates/header.html'; + require_once '../templates/reset_1.html'; +} else { + require_once '../templates/header.html'; + if ($_GET['action'] == 'code' ) { + require_once '../templates/reset_2.html'; + } + if (($_GET['action'] == 'confirm' ) && (!empty($_GET['code']))) { + require_once '../templates/reset_3.html'; + } +} + +?> diff --git a/web/reset/mail/index.php b/web/reset/mail/index.php index 30e3dec0b..5350f9b93 100644 --- a/web/reset/mail/index.php +++ b/web/reset/mail/index.php @@ -1 +1,165 @@ - + $arr_val) { + // search for NAT IPs and allow them + if ($ip==$arr_key || $ip==$arr_val['NAT']) { + $ok=1; + break; + } +} +if ($ip == $_SERVER['SERVER_ADDR']) $ok=1; +if ($ip == '127.0.0.1') $ok=1; +if ($ok==0) exit; + +// +// sourceforge.net/projects/postfixadmin/ +// md5crypt +// Action: Creates MD5 encrypted password +// Call: md5crypt (string cleartextpassword) +// + +function md5crypt ($pw, $salt="", $magic="") +{ + $MAGIC = "$1$"; + + if ($magic == "") $magic = $MAGIC; + if ($salt == "") $salt = create_salt (); + $slist = explode ("$", $salt); + if ($slist[0] == "1") $salt = $slist[1]; + + $salt = substr ($salt, 0, 8); + $ctx = $pw . $magic . $salt; + $final = hex2bin (md5 ($pw . $salt . $pw)); + + for ($i=strlen ($pw); $i>0; $i-=16) + { + if ($i > 16) + { + $ctx .= substr ($final,0,16); + } + else + { + $ctx .= substr ($final,0,$i); + } + } + $i = strlen ($pw); + + while ($i > 0) + { + if ($i & 1) $ctx .= chr (0); + else $ctx .= $pw[0]; + $i = $i >> 1; + } + $final = hex2bin (md5 ($ctx)); + + for ($i=0;$i<1000;$i++) + { + $ctx1 = ""; + if ($i & 1) + { + $ctx1 .= $pw; + } + else + { + $ctx1 .= substr ($final,0,16); + } + if ($i % 3) $ctx1 .= $salt; + if ($i % 7) $ctx1 .= $pw; + if ($i & 1) + { + $ctx1 .= substr ($final,0,16); + } + else + { + $ctx1 .= $pw; + } + $final = hex2bin (md5 ($ctx1)); + } + $passwd = ""; + $passwd .= to64 (((ord ($final[0]) << 16) | (ord ($final[6]) << 8) | (ord ($final[12]))), 4); + $passwd .= to64 (((ord ($final[1]) << 16) | (ord ($final[7]) << 8) | (ord ($final[13]))), 4); + $passwd .= to64 (((ord ($final[2]) << 16) | (ord ($final[8]) << 8) | (ord ($final[14]))), 4); + $passwd .= to64 (((ord ($final[3]) << 16) | (ord ($final[9]) << 8) | (ord ($final[15]))), 4); + $passwd .= to64 (((ord ($final[4]) << 16) | (ord ($final[10]) << 8) | (ord ($final[5]))), 4); + $passwd .= to64 (ord ($final[11]), 2); + return "$magic$salt\$$passwd"; +} + + +// +// sourceforge.net/projects/postfixadmin/ +// to64 +// + +function to64 ($v, $n) +{ + $ITOA64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + $ret = ""; + while (($n - 1) >= 0) + { + $n--; + $ret .= $ITOA64[$v & 0x3f]; + $v = $v >> 6; + } + return $ret; +} + + +// Check arguments +if ((!empty($_POST['email'])) && (!empty($_POST['password'])) && (!empty($_POST['new']))) { + list($v_account, $v_domain) = explode('@', $_POST['email']); + $v_domain = escapeshellarg($v_domain); + $v_account = escapeshellarg($v_account); + $v_password = $_POST['password']; + + // Get domain owner + exec (VESTA_CMD."v-search-domain-owner ".$v_domain." 'mail'", $output, $return_var); + if ($return_var == 0) { + $v_user = $output[0]; + } + unset($output); + + // Get current md5 hash + if (!empty($v_user)) { + exec (VESTA_CMD."v-get-mail-account-value '".$v_user."' ".$v_domain." ".$v_account." 'md5'", $output, $return_var); + if ($return_var == 0) { + $v_hash = $output[0]; + } + } + unset($output); + + // Compare hashes + if (!empty($v_hash)) { + $salt = explode('$', $v_hash); + $n_hash = md5crypt($v_password, $salt[2]); + $n_hash = '{MD5}'.$n_hash; + + // Change password + if ( $v_hash == $n_hash ) { + $v_new_password = tempnam("/tmp","vst"); + $fp = fopen($v_new_password, "w"); + fwrite($fp, $_POST['new']."\n"); + fclose($fp); + exec (VESTA_CMD."v-change-mail-account-password '".$v_user."' ".$v_domain." ".$v_account." ".$v_new_password, $output, $return_var); + if ($return_var == 0) { + echo "ok"; + exit; + } + } + } +} + +echo 'error'; + +exit; diff --git a/web/restart/service/index.php b/web/restart/service/index.php index 30e3dec0b..5f42e5e5d 100644 --- a/web/restart/service/index.php +++ b/web/restart/service/index.php @@ -1 +1,26 @@ - +', $output); + if (empty($error)) $error = __('SERVICE_ACTION_FAILED',__('restart'),$v_service); + $_SESSION['error_msg'] = $error; + } + unset($output); +} + +header("Location: /list/server/"); +exit; diff --git a/web/restart/system/index.php b/web/restart/system/index.php index 30e3dec0b..4facc5a5a 100644 --- a/web/restart/system/index.php +++ b/web/restart/system/index.php @@ -1 +1,17 @@ - + +', $output); + if (empty($_SESSION['error_msg'])) { + $_SESSION['error_msg'] = __('Error: vesta did not return any output.'); + } + + if ($return_var == 4) { + $_SESSION['error_msg'] = __('BACKUP_EXISTS'); + } + +} +unset($output); +header("Location: /list/backup/"); +exit; diff --git a/web/schedule/restore/index.php b/web/schedule/restore/index.php index 30e3dec0b..ce7d5d03d 100644 --- a/web/schedule/restore/index.php +++ b/web/schedule/restore/index.php @@ -1 +1,44 @@ - +', $output); + if (empty($_SESSION['error_msg'])) { + $_SESSION['error_msg'] = __('Error: vesta did not return any output.'); + } + if ($return_var == 4) { + $_SESSION['error_msg'] = __('RESTORE_EXISTS'); + } +} + +header("Location: /list/backup/?backup=" . $_GET['backup']); diff --git a/web/search/index.php b/web/search/index.php index 30e3dec0b..808b6f41f 100644 --- a/web/search/index.php +++ b/web/search/index.php @@ -1 +1,33 @@ - + +', $output); + if (empty($error)) $error = __('SERVICE_ACTION_FAILED',__('start'),$v_service);; + $_SESSION['error_srv'] = $error; + } + unset($output); +} + +header("Location: /list/server/"); +exit; diff --git a/web/static/css/2.6c9f324a.chunk.css b/web/static/css/2.6c9f324a.chunk.css deleted file mode 100644 index e11223424..000000000 --- a/web/static/css/2.6c9f324a.chunk.css +++ /dev/null @@ -1,9 +0,0 @@ -.Toastify__toast-container{z-index:9999;-webkit-transform:translateZ(9999px);position:fixed;padding:4px;width:320px;box-sizing:border-box;color:#fff}.Toastify__toast-container--top-left{top:1em;left:1em}.Toastify__toast-container--top-center{top:1em;left:50%;margin-left:-160px}.Toastify__toast-container--top-right{top:1em;right:1em}.Toastify__toast-container--bottom-left{bottom:1em;left:1em}.Toastify__toast-container--bottom-center{bottom:1em;left:50%;margin-left:-160px}.Toastify__toast-container--bottom-right{bottom:1em;right:1em}@media only screen and (max-width:480px){.Toastify__toast-container{width:100vw;padding:0;left:0;margin:0}.Toastify__toast-container--top-center,.Toastify__toast-container--top-left,.Toastify__toast-container--top-right{top:0}.Toastify__toast-container--bottom-center,.Toastify__toast-container--bottom-left,.Toastify__toast-container--bottom-right{bottom:0}.Toastify__toast-container--rtl{right:0;left:auto}}.Toastify__toast{position:relative;min-height:64px;box-sizing:border-box;margin-bottom:1rem;padding:8px;border-radius:1px;box-shadow:0 1px 10px 0 rgba(0,0,0,.1),0 2px 15px 0 rgba(0,0,0,.05);display:flex;justify-content:space-between;max-height:800px;overflow:hidden;font-family:sans-serif;cursor:pointer;direction:ltr}.Toastify__toast--rtl{direction:rtl}.Toastify__toast--default{background:#fff;color:#aaa}.Toastify__toast--info{background:#3498db}.Toastify__toast--success{background:#07bc0c}.Toastify__toast--warning{background:#f1c40f}.Toastify__toast--error{background:#e74c3c}.Toastify__toast-body{margin:auto 0;flex:1 1}@media only screen and (max-width:480px){.Toastify__toast{margin-bottom:0}}.Toastify__close-button{color:#fff;font-weight:700;font-size:14px;background:transparent;outline:none;border:none;padding:0;cursor:pointer;opacity:.7;transition:.3s ease;align-self:flex-start}.Toastify__close-button--default{color:#000;opacity:.3}.Toastify__close-button:focus,.Toastify__close-button:hover{opacity:1}@-webkit-keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes Toastify__trackProgress{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}to{-webkit-transform:scaleX(0);transform:scaleX(0)}}.Toastify__progress-bar{position:absolute;bottom:0;left:0;width:100%;height:5px;z-index:9999;opacity:.7;background-color:hsla(0,0%,100%,.7);-webkit-transform-origin:left;transform-origin:left}.Toastify__progress-bar--animated{-webkit-animation:Toastify__trackProgress linear 1 forwards;animation:Toastify__trackProgress linear 1 forwards}.Toastify__progress-bar--controlled{transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s,-webkit-transform .2s}.Toastify__progress-bar--rtl{right:0;left:auto;-webkit-transform-origin:right;transform-origin:right}.Toastify__progress-bar--default{background:linear-gradient(90deg,#4cd964,#5ac8fa,#007aff,#34aadc,#5856d6,#ff2d55)}@-webkit-keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes Toastify__bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@-webkit-keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes Toastify__bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes Toastify__bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@keyframes Toastify__bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:none;transform:none}}@-webkit-keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes Toastify__bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.Toastify__bounce-enter--bottom-left,.Toastify__bounce-enter--top-left{-webkit-animation-name:Toastify__bounceInLeft;animation-name:Toastify__bounceInLeft}.Toastify__bounce-enter--bottom-right,.Toastify__bounce-enter--top-right{-webkit-animation-name:Toastify__bounceInRight;animation-name:Toastify__bounceInRight}.Toastify__bounce-enter--top-center{-webkit-animation-name:Toastify__bounceInDown;animation-name:Toastify__bounceInDown}.Toastify__bounce-enter--bottom-center{-webkit-animation-name:Toastify__bounceInUp;animation-name:Toastify__bounceInUp}.Toastify__bounce-exit--bottom-left,.Toastify__bounce-exit--top-left{-webkit-animation-name:Toastify__bounceOutLeft;animation-name:Toastify__bounceOutLeft}.Toastify__bounce-exit--bottom-right,.Toastify__bounce-exit--top-right{-webkit-animation-name:Toastify__bounceOutRight;animation-name:Toastify__bounceOutRight}.Toastify__bounce-exit--top-center{-webkit-animation-name:Toastify__bounceOutUp;animation-name:Toastify__bounceOutUp}.Toastify__bounce-exit--bottom-center{-webkit-animation-name:Toastify__bounceOutDown;animation-name:Toastify__bounceOutDown}@-webkit-keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes Toastify__zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@-webkit-keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes Toastify__zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.Toastify__zoom-enter{-webkit-animation-name:Toastify__zoomIn;animation-name:Toastify__zoomIn}.Toastify__zoom-exit{-webkit-animation-name:Toastify__zoomOut;animation-name:Toastify__zoomOut}@-webkit-keyframes Toastify__flipIn{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes Toastify__flipIn{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@-webkit-keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes Toastify__flipOut{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.Toastify__flip-enter{-webkit-animation-name:Toastify__flipIn;animation-name:Toastify__flipIn}.Toastify__flip-exit{-webkit-animation-name:Toastify__flipOut;animation-name:Toastify__flipOut}@-webkit-keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInRight{0%{-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInLeft{0%{-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInUp{0%{-webkit-transform:translate3d(0,110%,0);transform:translate3d(0,110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes Toastify__slideInDown{0%{-webkit-transform:translate3d(0,-110%,0);transform:translate3d(0,-110%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@-webkit-keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0)}}@keyframes Toastify__slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(110%,0,0);transform:translate3d(110%,0,0)}}@-webkit-keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0)}}@keyframes Toastify__slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-110%,0,0);transform:translate3d(-110%,0,0)}}@-webkit-keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0)}}@keyframes Toastify__slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,500px,0);transform:translate3d(0,500px,0)}}@-webkit-keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0)}}@keyframes Toastify__slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-500px,0);transform:translate3d(0,-500px,0)}}.Toastify__slide-enter--bottom-left,.Toastify__slide-enter--top-left{-webkit-animation-name:Toastify__slideInLeft;animation-name:Toastify__slideInLeft}.Toastify__slide-enter--bottom-right,.Toastify__slide-enter--top-right{-webkit-animation-name:Toastify__slideInRight;animation-name:Toastify__slideInRight}.Toastify__slide-enter--top-center{-webkit-animation-name:Toastify__slideInDown;animation-name:Toastify__slideInDown}.Toastify__slide-enter--bottom-center{-webkit-animation-name:Toastify__slideInUp;animation-name:Toastify__slideInUp}.Toastify__slide-exit--bottom-left,.Toastify__slide-exit--top-left{-webkit-animation-name:Toastify__slideOutLeft;animation-name:Toastify__slideOutLeft}.Toastify__slide-exit--bottom-right,.Toastify__slide-exit--top-right{-webkit-animation-name:Toastify__slideOutRight;animation-name:Toastify__slideOutRight}.Toastify__slide-exit--top-center{-webkit-animation-name:Toastify__slideOutUp;animation-name:Toastify__slideOutUp}.Toastify__slide-exit--bottom-center{-webkit-animation-name:Toastify__slideOutDown;animation-name:Toastify__slideOutDown}.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5)}.cm-animate-fat-cursor,.cm-fat-cursor-mark{-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;background-color:#7e7}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;-webkit-font-feature-settings:"calt";font-feature-settings:"calt";font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none} - -/*! - * Bootstrap v4.3.1 (https://getbootstrap.com/) - * Copyright 2011-2019 The Bootstrap Authors - * Copyright 2011-2019 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.333333%;max-width:8.333333%}.col-2{flex:0 0 16.666667%;max-width:16.666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.333333%;max-width:33.333333%}.col-5{flex:0 0 41.666667%;max-width:41.666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.333333%;max-width:58.333333%}.col-8{flex:0 0 66.666667%;max-width:66.666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.333333%;max-width:83.333333%}.col-11{flex:0 0 91.666667%;max-width:91.666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle:after{display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label:after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;-webkit-appearance:none;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;grid-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1 1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spinner-border{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.857143%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} -/*# sourceMappingURL=2.6c9f324a.chunk.css.map */ \ No newline at end of file diff --git a/web/static/css/2.6c9f324a.chunk.css.map b/web/static/css/2.6c9f324a.chunk.css.map deleted file mode 100644 index d4c9114d2..000000000 --- a/web/static/css/2.6c9f324a.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["ReactToastify.css","codemirror.css","../../scss/bootstrap.scss","bootstrap.css","../../scss/_root.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/vendor/_rfs.scss","../../scss/mixins/_hover.scss","../../scss/_type.scss","../../scss/mixins/_lists.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/mixins/_border-radius.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_transition.scss","../../scss/mixins/_forms.scss","../../scss/_functions.scss","../../scss/mixins/_gradients.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_transitions.scss","../../scss/_dropdown.scss","../../scss/mixins/_caret.scss","../../scss/mixins/_nav-divider.scss","../../scss/_button-group.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_badge.scss","../../scss/mixins/_badge.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_close.scss","../../scss/_toasts.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/mixins/_clearfix.scss","../../scss/_spinners.scss","../../scss/utilities/_align.scss","../../scss/mixins/_background-variant.scss","../../scss/utilities/_background.scss","../../scss/utilities/_borders.scss","../../scss/utilities/_display.scss","../../scss/utilities/_embed.scss","../../scss/utilities/_flex.scss","../../scss/utilities/_float.scss","../../scss/utilities/_overflow.scss","../../scss/utilities/_position.scss","../../scss/utilities/_screenreaders.scss","../../scss/mixins/_screen-reader.scss","../../scss/utilities/_shadows.scss","../../scss/utilities/_sizing.scss","../../scss/utilities/_stretched-link.scss","../../scss/utilities/_spacing.scss","../../scss/utilities/_text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_text-hide.scss","../../scss/utilities/_visibility.scss","../../scss/_print.scss"],"names":[],"mappings":"AAAA,2BACE,YAAa,CACb,oCAA4C,CAC5C,cAAe,CACf,WAAY,CACZ,WAAY,CACZ,qBAAsB,CACtB,UAAa,CACb,qCACE,OAAQ,CACR,QAAW,CACb,uCACE,OAAQ,CACR,QAAS,CACT,kBAAqB,CACvB,sCACE,OAAQ,CACR,SAAY,CACd,wCACE,UAAW,CACX,QAAW,CACb,0CACE,UAAW,CACX,QAAS,CACT,kBAAqB,CACvB,yCACE,UAAW,CACX,SAAY,CAEhB,yCACE,2BACE,WAAY,CACZ,SAAU,CACV,MAAO,CACP,QAAW,CACX,kHACE,KAAQ,CACV,2HACE,QAAW,CACb,gCACE,OAAQ,CACR,SAAe,CAAE,CAEvB,iBACE,iBAAkB,CAClB,eAAgB,CAChB,qBAAsB,CACtB,kBAAmB,CACnB,WAAY,CACZ,iBAAkB,CAClB,mEAA6E,CAC7E,YAAa,CACb,6BAA8B,CAC9B,gBAAiB,CACjB,eAAgB,CAChB,sBAAuB,CACvB,cAAe,CACf,aAAgB,CAChB,sBACE,aAAgB,CAClB,0BACE,eAAgB,CAChB,UAAa,CACf,uBACE,kBAAqB,CACvB,0BACE,kBAAqB,CACvB,0BACE,kBAAqB,CACvB,wBACE,kBAAqB,CACvB,sBACE,aAAc,CACd,QAAS,CAEb,yCACE,iBACE,eAAkB,CAAE,CAExB,wBACE,UAAW,CACX,eAAiB,CACjB,cAAe,CACf,sBAAuB,CACvB,YAAa,CACb,WAAY,CACZ,SAAU,CACV,cAAe,CACf,UAAY,CACZ,mBAAqB,CACrB,qBAAwB,CACxB,iCACE,UAAW,CACX,UAAc,CAChB,4DACE,SAAY,CAEhB,2CACE,GACE,2BAAoB,CAApB,mBAAsB,CACxB,GACE,2BAAoB,CAApB,mBAAsB,CAAE,CAJ5B,mCACE,GACE,2BAAoB,CAApB,mBAAsB,CACxB,GACE,2BAAoB,CAApB,mBAAsB,CAAE,CAE5B,wBACE,iBAAkB,CAClB,QAAS,CACT,MAAO,CACP,UAAW,CACX,UAAW,CACX,YAAa,CACb,UAAY,CACZ,mCAA0C,CAC1C,6BAAsB,CAAtB,qBAAwB,CACxB,kCACE,2DAAoD,CAApD,mDAAsD,CACxD,oCACE,gCAAyB,CAAzB,wBAAyB,CAAzB,8CAA2B,CAC7B,6BACE,OAAQ,CACR,SAAa,CACb,8BAAuB,CAAvB,sBAAyB,CAC3B,iCACE,iFAA6F,CAEjG,2CACE,kBAKE,+DAA8D,CAA9D,uDAAgE,CAClE,GACE,SAAU,CACV,yCAAoC,CAApC,iCAAsC,CACxC,IACE,SAAU,CACV,wCAAmC,CAAnC,gCAAqC,CACvC,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,GACE,sBAAe,CAAf,cAAiB,CAAE,CAlBvB,mCACE,kBAKE,+DAA8D,CAA9D,uDAAgE,CAClE,GACE,SAAU,CACV,yCAAoC,CAApC,iCAAsC,CACxC,IACE,SAAU,CACV,wCAAmC,CAAnC,gCAAqC,CACvC,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,GACE,sBAAe,CAAf,cAAiB,CAAE,CAEvB,4CACE,IACE,SAAU,CACV,wCAAmC,CAAnC,gCAAqC,CACvC,GACE,SAAU,CACV,yCAAoC,CAApC,iCAAsC,CAAE,CAN5C,oCACE,IACE,SAAU,CACV,wCAAmC,CAAnC,gCAAqC,CACvC,GACE,SAAU,CACV,yCAAoC,CAApC,iCAAsC,CAAE,CAE5C,0CACE,kBAKE,+DAA8D,CAA9D,uDAAgE,CAClE,GACE,SAAU,CACV,0CAAqC,CAArC,kCAAuC,CACzC,IACE,SAAU,CACV,uCAAkC,CAAlC,+BAAoC,CACtC,IACE,wCAAmC,CAAnC,gCAAqC,CACvC,IACE,sCAAiC,CAAjC,8BAAmC,CACrC,GACE,sBAAe,CAAf,cAAiB,CAAE,CAlBvB,kCACE,kBAKE,+DAA8D,CAA9D,uDAAgE,CAClE,GACE,SAAU,CACV,0CAAqC,CAArC,kCAAuC,CACzC,IACE,SAAU,CACV,uCAAkC,CAAlC,+BAAoC,CACtC,IACE,wCAAmC,CAAnC,gCAAqC,CACvC,IACE,sCAAiC,CAAjC,8BAAmC,CACrC,GACE,sBAAe,CAAf,cAAiB,CAAE,CAEvB,2CACE,IACE,SAAU,CACV,uCAAkC,CAAlC,+BAAoC,CACtC,GACE,SAAU,CACV,0CAAqC,CAArC,kCAAuC,CAAE,CAN7C,mCACE,IACE,SAAU,CACV,uCAAkC,CAAlC,+BAAoC,CACtC,GACE,SAAU,CACV,0CAAqC,CAArC,kCAAuC,CAAE,CAE7C,wCACE,kBAKE,+DAA8D,CAA9D,uDAAgE,CAClE,GACE,SAAU,CACV,yCAAoC,CAApC,iCAAsC,CACxC,IACE,SAAU,CACV,wCAAmC,CAAnC,gCAAqC,CACvC,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CAlBvC,gCACE,kBAKE,+DAA8D,CAA9D,uDAAgE,CAClE,GACE,SAAU,CACV,yCAAoC,CAApC,iCAAsC,CACxC,IACE,SAAU,CACV,wCAAmC,CAAnC,gCAAqC,CACvC,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CAEvC,yCACE,IACE,wCAAmC,CAAnC,gCAAqC,CACvC,QAEE,SAAU,CACV,uCAAkC,CAAlC,+BAAoC,CACtC,GACE,SAAU,CACV,0CAAqC,CAArC,kCAAuC,CAAE,CAT7C,iCACE,IACE,wCAAmC,CAAnC,gCAAqC,CACvC,QAEE,SAAU,CACV,uCAAkC,CAAlC,+BAAoC,CACtC,GACE,SAAU,CACV,0CAAqC,CAArC,kCAAuC,CAAE,CAE7C,0CACE,kBAKE,+DAA8D,CAA9D,uDAAgE,CAClE,GACE,SAAU,CACV,0CAAqC,CAArC,kCAAuC,CACzC,IACE,SAAU,CACV,uCAAkC,CAAlC,+BAAoC,CACtC,IACE,wCAAmC,CAAnC,gCAAqC,CACvC,IACE,sCAAiC,CAAjC,8BAAmC,CACrC,GACE,sBAAe,CAAf,cAAiB,CAAE,CAlBvB,kCACE,kBAKE,+DAA8D,CAA9D,uDAAgE,CAClE,GACE,SAAU,CACV,0CAAqC,CAArC,kCAAuC,CACzC,IACE,SAAU,CACV,uCAAkC,CAAlC,+BAAoC,CACtC,IACE,wCAAmC,CAAnC,gCAAqC,CACvC,IACE,sCAAiC,CAAjC,8BAAmC,CACrC,GACE,sBAAe,CAAf,cAAiB,CAAE,CAEvB,2CACE,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,QAEE,SAAU,CACV,wCAAmC,CAAnC,gCAAqC,CACvC,GACE,SAAU,CACV,yCAAoC,CAApC,iCAAsC,CAAE,CAT5C,mCACE,IACE,uCAAkC,CAAlC,+BAAoC,CACtC,QAEE,SAAU,CACV,wCAAmC,CAAnC,gCAAqC,CACvC,GACE,SAAU,CACV,yCAAoC,CAApC,iCAAsC,CAAE,CAE5C,uEACE,6CAAsC,CAAtC,qCAAwC,CAE1C,yEACE,8CAAuC,CAAvC,sCAAyC,CAE3C,oCACE,6CAAsC,CAAtC,qCAAwC,CAE1C,uCACE,2CAAoC,CAApC,mCAAsC,CAExC,qEACE,8CAAuC,CAAvC,sCAAyC,CAE3C,uEACE,+CAAwC,CAAxC,uCAA0C,CAE5C,mCACE,4CAAqC,CAArC,oCAAuC,CAEzC,sCACE,8CAAuC,CAAvC,sCAAyC,CAE3C,oCACE,GACE,SAAU,CACV,mCAAiC,CAAjC,2BAAmC,CACrC,IACE,SAAY,CAAE,CALlB,4BACE,GACE,SAAU,CACV,mCAAiC,CAAjC,2BAAmC,CACrC,IACE,SAAY,CAAE,CAElB,qCACE,GACE,SAAY,CACd,IACE,SAAU,CACV,mCAAiC,CAAjC,2BAAmC,CACrC,GACE,SAAY,CAAE,CAPlB,6BACE,GACE,SAAY,CACd,IACE,SAAU,CACV,mCAAiC,CAAjC,2BAAmC,CACrC,GACE,SAAY,CAAE,CAElB,sBACE,uCAAgC,CAAhC,+BAAkC,CAEpC,qBACE,wCAAiC,CAAjC,gCAAmC,CAErC,oCACE,GACE,mDAAsD,CAAtD,2CAAsD,CACtD,yCAAkC,CAAlC,iCAAkC,CAClC,SAAY,CACd,IACE,oDAAuD,CAAvD,4CAAuD,CACvD,yCAAkC,CAAlC,iCAAoC,CACtC,IACE,mDAAsD,CAAtD,2CAAsD,CACtD,SAAY,CACd,IACE,mDAAsD,CAAtD,2CAAwD,CAC1D,GACE,oCAA6B,CAA7B,4BAA+B,CAAE,CAdrC,4BACE,GACE,mDAAsD,CAAtD,2CAAsD,CACtD,yCAAkC,CAAlC,iCAAkC,CAClC,SAAY,CACd,IACE,oDAAuD,CAAvD,4CAAuD,CACvD,yCAAkC,CAAlC,iCAAoC,CACtC,IACE,mDAAsD,CAAtD,2CAAsD,CACtD,SAAY,CACd,IACE,mDAAsD,CAAtD,2CAAwD,CAC1D,GACE,oCAA6B,CAA7B,4BAA+B,CAAE,CAErC,qCACE,GACE,oCAA6B,CAA7B,4BAA+B,CACjC,IACE,oDAAuD,CAAvD,4CAAuD,CACvD,SAAY,CACd,GACE,mDAAsD,CAAtD,2CAAsD,CACtD,SAAY,CAAE,CARlB,6BACE,GACE,oCAA6B,CAA7B,4BAA+B,CACjC,IACE,oDAAuD,CAAvD,4CAAuD,CACvD,SAAY,CACd,GACE,mDAAsD,CAAtD,2CAAsD,CACtD,SAAY,CAAE,CAElB,sBACE,uCAAgC,CAAhC,+BAAkC,CAEpC,qBACE,wCAAiC,CAAjC,gCAAmC,CAErC,0CACE,GACE,uCAAkC,CAAlC,+BAAkC,CAClC,kBAAqB,CACvB,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CALvC,kCACE,GACE,uCAAkC,CAAlC,+BAAkC,CAClC,kBAAqB,CACvB,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CAEvC,yCACE,GACE,wCAAmC,CAAnC,gCAAmC,CACnC,kBAAqB,CACvB,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CALvC,iCACE,GACE,wCAAmC,CAAnC,gCAAmC,CACnC,kBAAqB,CACvB,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CAEvC,uCACE,GACE,uCAAkC,CAAlC,+BAAkC,CAClC,kBAAqB,CACvB,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CALvC,+BACE,GACE,uCAAkC,CAAlC,+BAAkC,CAClC,kBAAqB,CACvB,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CAEvC,yCACE,GACE,wCAAmC,CAAnC,gCAAmC,CACnC,kBAAqB,CACvB,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CALvC,iCACE,GACE,wCAAmC,CAAnC,gCAAmC,CACnC,kBAAqB,CACvB,GACE,+BAA+B,CAA/B,uBAAiC,CAAE,CAEvC,2CACE,GACE,+BAA+B,CAA/B,uBAAiC,CACnC,GACE,iBAAkB,CAClB,uCAAkC,CAAlC,+BAAoC,CAAE,CAL1C,mCACE,GACE,+BAA+B,CAA/B,uBAAiC,CACnC,GACE,iBAAkB,CAClB,uCAAkC,CAAlC,+BAAoC,CAAE,CAE1C,0CACE,GACE,+BAA+B,CAA/B,uBAAiC,CACnC,GACE,iBAAkB,CAClB,wCAAmC,CAAnC,gCAAqC,CAAE,CAL3C,kCACE,GACE,+BAA+B,CAA/B,uBAAiC,CACnC,GACE,iBAAkB,CAClB,wCAAmC,CAAnC,gCAAqC,CAAE,CAE3C,0CACE,GACE,+BAA+B,CAA/B,uBAAiC,CACnC,GACE,iBAAkB,CAClB,wCAAmC,CAAnC,gCAAqC,CAAE,CAL3C,kCACE,GACE,+BAA+B,CAA/B,uBAAiC,CACnC,GACE,iBAAkB,CAClB,wCAAmC,CAAnC,gCAAqC,CAAE,CAE3C,wCACE,GACE,+BAA+B,CAA/B,uBAAiC,CACnC,GACE,iBAAkB,CAClB,yCAAoC,CAApC,iCAAsC,CAAE,CAL5C,gCACE,GACE,+BAA+B,CAA/B,uBAAiC,CACnC,GACE,iBAAkB,CAClB,yCAAoC,CAApC,iCAAsC,CAAE,CAE5C,qEACE,4CAAqC,CAArC,oCAAuC,CAEzC,uEACE,6CAAsC,CAAtC,qCAAwC,CAE1C,mCACE,4CAAqC,CAArC,oCAAuC,CAEzC,sCACE,0CAAmC,CAAnC,kCAAqC,CAEvC,mEACE,6CAAsC,CAAtC,qCAAwC,CAE1C,qEACE,8CAAuC,CAAvC,sCAAyC,CAE3C,kCACE,2CAAoC,CAApC,mCAAsC,CAExC,qCACE,6CAAsC,CAAtC,qCAAwC,CC5Y1C,YAEE,qBAAsB,CACtB,YAAa,CACb,UAAY,CACZ,aACF,CAIA,kBACE,aACF,CACA,qEAEE,aACF,CAEA,uDACE,qBACF,CAIA,oBACE,2BAA4B,CAC5B,wBAAyB,CACzB,kBACF,CAEA,uBACE,mBAAoB,CACpB,cAAe,CACf,gBAAiB,CACjB,UAAW,CACX,kBACF,CAEA,yBAA2B,UAAc,CACzC,gCAAkC,UAAa,CAI/C,mBACE,0BAA4B,CAC5B,iBAAkB,CAClB,OACF,CAEA,2CACE,4BACF,CACA,kCACE,UAAW,CACX,kBAAoB,CACpB,eACF,CACA,sCACE,SACF,CACA,oBACE,mCAIF,CACA,2CAJE,+CAAgD,CAEhD,uCAQF,CANA,uBACE,UAAW,CAIX,qBACF,CAMA,yBAEE,IAAM,4BAA+B,CAEvC,CACA,iBAEE,IAAM,4BAA+B,CAEvC,CAKA,QAAU,oBAAqB,CAAE,uBAA0B,CAE3D,mBACE,iBAAkB,CAClB,MAAO,CAAE,OAAQ,CAAE,SAAU,CAAE,QAAS,CACxC,eACF,CACA,kBACE,0BAA2B,CAC3B,KAAM,CAAE,QAAS,CACjB,iBACF,CAIA,yBAA0B,UAAY,CACtC,wBAAyB,UAAY,CACrC,aAAc,UAAY,CAC1B,aAAc,UAAY,CAC1B,sBAAwB,eAAkB,CAC1C,OAAQ,iBAAmB,CAC3B,SAAU,yBAA2B,CACrC,kBAAmB,4BAA8B,CAEjD,0BAA2B,UAAY,CACvC,uBAAwB,UAAY,CACpC,yBAA0B,UAAY,CACtC,sBAAuB,UAAY,CAKnC,6BAA8B,UAAY,CAC1C,oDAAsD,UAAY,CAClE,0BAA2B,UAAY,CACvC,yBAA0B,UAAY,CACtC,2BAA4B,UAAY,CAExC,mDAA6B,UAAY,CACzC,0BAA2B,UAAY,CACvC,0BAA2B,UAAY,CACvC,sBAAuB,UAAY,CACnC,4BAA6B,UAAY,CACzC,qBAAsB,UAAY,CAClC,uBAAwB,UAAY,CAGpC,wCAAiB,SAAY,CAE7B,sBAAwB,uBAA0B,CAIlD,+CAAgD,UAAY,CAC5D,kDAAmD,UAAY,CAC/D,wBAA0B,6BAAmC,CAC7D,kCAAmC,kBAAoB,CAOvD,YACE,iBAAkB,CAClB,eAAgB,CAChB,eACF,CAEA,mBACE,yBAA2B,CAG3B,mBAAoB,CAAE,kBAAmB,CACzC,mBAAoB,CACpB,WAAY,CACZ,YAAa,CACb,iBACF,CACA,kBACE,iBAAkB,CAClB,mCACF,CAKA,qGACE,iBAAkB,CAClB,SAAU,CACV,YAAa,CACb,YACF,CACA,uBACE,OAAQ,CAAE,KAAM,CAChB,iBAAkB,CAClB,iBACF,CACA,uBACE,QAAS,CAAE,MAAO,CAClB,iBAAkB,CAClB,iBACF,CACA,6BACE,OAAQ,CAAE,QACZ,CACA,0BACE,MAAO,CAAE,QACX,CAEA,oBACE,iBAAkB,CAAE,MAAO,CAAE,KAAM,CACnC,eAAgB,CAChB,SACF,CACA,mBACE,kBAAmB,CACnB,WAAY,CACZ,oBAAqB,CACrB,kBAAmB,CACnB,mBACF,CACA,2BACE,iBAAkB,CAClB,SAAU,CACV,yBAA2B,CAC3B,qBACF,CACA,8BACE,iBAAkB,CAClB,KAAM,CAAE,QAAS,CACjB,SACF,CACA,uBACE,iBAAkB,CAClB,cAAe,CACf,SACF,CACA,uCAAyC,4BAA8B,CACvE,4CAA8C,4BAA8B,CAE5E,kBACE,WAAY,CACZ,cACF,CACA,qEAGmD,eAAgB,CACjE,cAAe,CACf,sBAAuB,CACvB,mBAAoB,CACpB,iBAAkB,CAClB,QAAS,CACT,eAAgB,CAChB,gBAAiB,CACjB,mBAAoB,CACpB,aAAc,CACd,SAAU,CACV,iBAAkB,CAClB,gBAAiB,CACjB,uCAAwC,CACxC,yCAA0C,CAC1C,oCAAkC,CAAlC,4BAAkC,CAAlC,iCACF,CACA,+EAEE,oBAAqB,CACrB,oBAAqB,CACrB,iBACF,CAEA,2BACE,iBAAkB,CAClB,MAAO,CAAE,OAAQ,CAAE,KAAM,CAAE,QAAS,CACpC,SACF,CAEA,uBACE,iBAAkB,CAClB,SAAU,CACV,YACF,CAIA,oBAAsB,aAAgB,CAEtC,iBACE,YACF,CAGA,mGAME,sBACF,CAEA,oBACE,iBAAkB,CAClB,UAAW,CACX,QAAS,CACT,eAAgB,CAChB,iBACF,CAEA,mBACE,iBAAkB,CAClB,mBACF,CACA,wBAA0B,eAAkB,CAE5C,uBACE,iBAAkB,CAClB,iBAAkB,CAClB,SACF,CAKA,sEACE,kBACF,CAEA,qBAAuB,kBAAqB,CAC5C,yCAA2C,kBAAqB,CAChE,sBAAwB,gBAAmB,CAC3C,mGAA6G,kBAAqB,CAClI,kHAA4H,kBAAqB,CAEjJ,cACE,qBAAsB,CACtB,mCACF,CAGA,iBAAmB,kBAAqB,CAExC,aAEE,mCACE,iBACF,CACF,CAGA,wBAA0B,UAAa,CAGvC,6BAA+B,eAAkB;;AC5VjD;;;;;ECKE,CCLF,MAGI,cAAc,CAAd,gBAAc,CAAd,gBAAc,CAAd,cAAc,CAAd,aAAc,CAAd,gBAAc,CAAd,gBAAc,CAAd,eAAc,CAAd,cAAc,CAAd,cAAc,CAAd,YAAc,CAAd,cAAc,CAAd,mBAAc,CAId,iBAAc,CAAd,mBAAc,CAAd,iBAAc,CAAd,cAAc,CAAd,iBAAc,CAAd,gBAAc,CAAd,eAAc,CAAd,cAAc,CAId,iBAAiC,CAAjC,qBAAiC,CAAjC,qBAAiC,CAAjC,qBAAiC,CAAjC,sBAAiC,CAKnC,mMAAyB,CACzB,sGDkBF,CEjBA,iBAGE,qBFoBF,CEjBA,KACE,sBAAuB,CACvB,gBAAiB,CACjB,6BAA8B,CAC9B,yCFoBF,CEdA,sEACE,aFiBF,CEPA,KACE,QAAS,CACT,sLCiOiN,CCjJ7M,cAtCY,CFxChB,eC0O+B,CDzO/B,eC8O+B,CD7O/B,aCnCgB,CDoChB,eAAgB,CAChB,qBFUF,CAEA,sBEHE,mBFKF,CEIA,GACE,sBAAuB,CACvB,QAAS,CACT,gBFDF,CEcA,kBACE,YAAa,CACb,mBFXF,CEkBA,EACE,YAAa,CACb,kBFfF,CE0BA,sCAEE,yBAA0B,CAC1B,gCAAiC,CACjC,WAAY,CACZ,eAAgB,CAChB,6BFvBF,CE0BA,QAEE,iBAAkB,CAClB,mBFvBF,CE0BA,iBALE,kBFdF,CEmBA,SAGE,YFtBF,CE0BA,wBAIE,eFvBF,CE0BA,GACE,eFvBF,CE0BA,GACE,mBAAoB,CACpB,aFvBF,CE0BA,WACE,eFvBF,CE0BA,SAEE,kBFvBF,CE0BA,MEpFI,aJ8DJ,CE+BA,QAEE,iBAAkB,CE/FhB,aAAW,CFiGb,aAAc,CACd,uBF5BF,CE+BA,IAAM,aF3BN,CE4BA,IAAM,SFxBN,CE+BA,EACE,aClJe,CDmJf,oBCX4C,CDY5C,4BF5BF,CKhJE,QH+KE,aCd8D,CDe9D,yBF3BJ,CEqCA,8BACE,aAAc,CACd,oBFlCF,CKtJE,wEH2LE,aAAc,CACd,oBFjCJ,CE2BA,oCAUI,SFjCJ,CE0CA,kBAIE,0FCoDgH,CCzM9G,aJ+GJ,CE0CA,IAEE,YAAa,CAEb,kBAAmB,CAEnB,aF1CF,CEkDA,OAEE,eFhDF,CEwDA,IAEE,iBFrDF,CEwDA,QAJE,qBF/CF,CEmDA,IAGE,eFtDF,CE+DA,MACE,wBF5DF,CE+DA,QACE,kBC2EkC,CD1ElC,qBC0EkC,CDzElC,aCpQgB,CDqQhB,eAAgB,CAChB,mBF5DF,CE+DA,GAGE,kBF9DF,CEsEA,MAEE,oBAAqB,CACrB,mBFpEF,CE0EA,OAEE,eFxEF,CE+EA,aACE,kBAAmB,CACnB,yCF5EF,CE+EA,sCAKE,QAAS,CACT,mBAAoB,CEtPlB,iBAAW,CFwPb,mBF5EF,CE+EA,aAEE,gBF5EF,CE+EA,cAEE,mBF5EF,CEkFA,OACE,gBF/EF,CEsFA,gDAIE,yBFnFF,CEwFE,4GAKI,cFtFN,CE4FA,wHAIE,SAAU,CACV,iBFzFF,CE4FA,uCAEE,qBAAsB,CACtB,SFzFF,CE6FA,+EASE,0BF/FF,CEkGA,SACE,aAAc,CAEd,eFhGF,CEmGA,SAME,WAAY,CAEZ,SAAU,CACV,QAAS,CACT,QFtGF,CE2GA,OACE,aAAc,CACd,UAAW,CACX,cAAe,CACf,SAAU,CACV,mBAAoB,CElShB,gBAtCY,CF0UhB,mBAAoB,CACpB,aAAc,CACd,kBFxGF,CE2GA,SACE,uBFxGF,CAEA,kFE4GE,WFzGF,CAEA,cE+GE,mBAAoB,CACpB,uBF7GF,CAEA,yCEmHE,uBFjHF,CEyHA,6BACE,YAAa,CACb,yBFtHF,CE6HA,OACE,oBF1HF,CE6HA,QACE,iBAAkB,CAClB,cF1HF,CE6HA,SACE,YF1HF,CAEA,SE8HE,sBF5HF,CM/VA,0CAEE,mBHiSuC,CG/RvC,eHiS+B,CGhS/B,eNiWF,CM7VA,OFgHM,gBJiPN,CMhWA,OF+GM,cJqPN,CMnWA,OF8GM,iBJyPN,CMtWA,OF6GM,gBJ6PN,CMzWA,OF4GM,iBJiQN,CM5WA,OF2GM,cJqQN,CM9WA,MFyGM,iBAtCY,CEjEhB,eNiXF,CM7WA,WFmGM,cJgRN,CM9WA,sBAHE,eHsR+B,CGrR/B,eNsXF,CMpXA,WF8FM,gBJsRN,CM/WA,WFyFM,gBJ4RN,CMhXA,sBAHE,eH8Q+B,CG7Q/B,eNwXF,CMtXA,WFoFM,gBJkSN,CE1VA,GIhBE,eH0EW,CGzEX,kBHyEW,CGxEX,QAAS,CACT,mCN8WF,CMtWA,aFMI,aAAW,CEHb,eNyWF,CMtWA,WAEE,YH8PgC,CG7PhC,wBNyWF,CM5VA,4BCpFE,cAAe,CACf,ePybF,CMnWA,kBACE,oBNsWF,CMvWA,mCAII,kBNuWJ,CM7VA,YFjCI,aAAW,CEmCb,wBNgWF,CM5VA,YACE,kBHiBW,CCFP,iBJiVN,CM5VA,mBACE,aAAc,CF7CZ,aAAW,CE+Cb,aN+VF,CMlWA,0BAMI,oBNgWJ,CQ7cA,0BCFE,cAAe,CAGf,WT0dF,CQ3dA,eACE,cL++BwC,CK9+BxC,qBLRa,CKSb,wBLNgB,COLd,oBVmeJ,CQ5cA,QAEE,oBR8cF,CQ3cA,YACE,mBAA0B,CAC1B,aR8cF,CQ3cA,gBJkCI,aAAW,CIhCb,aR8cF,CWrfA,KPuEI,eAAW,COrEb,aRoCe,CQnCf,qBXwfF,CWrfE,OACE,aXwfJ,CWnfA,IACE,mBRikCuC,CCvgCrC,eAAW,COxDb,URTa,CQUb,wBRDgB,COXd,mBVmgBJ,CW3fA,QASI,SAAU,CPkDV,cAAW,COhDX,eXsfJ,CE7SA,ISlME,aAAc,CPyCZ,eAAW,COvCb,aXmfF,CWtfA,SP0CI,iBAAW,COlCX,aAAc,CACd,iBXmfJ,CW9eA,gBACE,gBRwiCuC,CQviCvC,iBXifF,CY1hBE,WCAA,UAAW,CACX,kBAA0B,CAC1B,iBAAyB,CACzB,iBAAkB,CAClB,gBb8hBF,Cc3eI,yBFvDF,WCYI,eb2hBJ,CACF,CcjfI,yBFvDF,WCYI,ebiiBJ,CACF,CcvfI,yBFvDF,WCYI,ebuiBJ,CACF,Cc7fI,0BFvDF,WCYI,gBb6iBJ,CACF,CY9iBE,iBCZA,UAAW,CACX,kBAA0B,CAC1B,iBAAyB,CACzB,iBAAkB,CAClB,gBb8jBF,CY5iBE,KCJA,YAAa,CACb,cAAe,CACf,kBAA0B,CAC1B,iBbojBF,CY7iBE,YACE,cAAe,CACf,aZgjBJ,CYljBE,2CAMI,eAAgB,CAChB,cZijBN,CellBE,sqBACE,iBAAkB,CAClB,UAAW,CACX,kBAA0B,CAC1B,iBf0lBJ,CevkBM,KACE,YAAa,CACb,WAAY,CACZ,cf0kBR,CexkBM,UACE,aAAc,CACd,UAAW,CACX,cf2kBR,CevkBQ,OFFN,kBAAsC,CAItC,mBb0kBF,Ce5kBQ,OFFN,mBAAsC,CAItC,oBb+kBF,CejlBQ,OFFN,YAAsC,CAItC,abolBF,CetlBQ,OFFN,mBAAsC,CAItC,oBbylBF,Ce3lBQ,OFFN,mBAAsC,CAItC,oBb8lBF,CehmBQ,OFFN,YAAsC,CAItC,abmmBF,CermBQ,OFFN,mBAAsC,CAItC,oBbwmBF,Ce1mBQ,OFFN,mBAAsC,CAItC,oBb6mBF,Ce/mBQ,OFFN,YAAsC,CAItC,abknBF,CepnBQ,QFFN,mBAAsC,CAItC,oBbunBF,CeznBQ,QFFN,mBAAsC,CAItC,oBb4nBF,Ce9nBQ,QFFN,aAAsC,CAItC,cbioBF,Ce9nBM,aAAwB,QfkoB9B,CehoBM,YAAuB,QfooB7B,CejoBQ,SAAwB,OfqoBhC,CeroBQ,SAAwB,OfyoBhC,CezoBQ,SAAwB,Of6oBhC,Ce7oBQ,SAAwB,OfipBhC,CejpBQ,SAAwB,OfqpBhC,CerpBQ,SAAwB,OfypBhC,CezpBQ,SAAwB,Of6pBhC,Ce7pBQ,SAAwB,OfiqBhC,CejqBQ,SAAwB,OfqqBhC,CerqBQ,SAAwB,OfyqBhC,CezqBQ,UAAwB,Qf6qBhC,Ce7qBQ,UAAwB,QfirBhC,CejrBQ,UAAwB,QfqrBhC,Ce/qBU,UFTR,qBb4rBF,CenrBU,UFTR,sBbgsBF,CevrBU,UFTR,ebosBF,Ce3rBU,UFTR,sBbwsBF,Ce/rBU,UFTR,sBb4sBF,CensBU,UFTR,ebgtBF,CevsBU,UFTR,sBbotBF,Ce3sBU,UFTR,sBbwtBF,Ce/sBU,UFTR,eb4tBF,CentBU,WFTR,sBbguBF,CevtBU,WFTR,sBbouBF,CcztBI,yBC9BE,QACE,YAAa,CACb,WAAY,CACZ,cf2vBN,CezvBI,aACE,aAAc,CACd,UAAW,CACX,cf2vBN,CevvBM,UFFN,kBAAsC,CAItC,mBbyvBA,Ce3vBM,UFFN,mBAAsC,CAItC,oBb6vBA,Ce/vBM,UFFN,YAAsC,CAItC,abiwBA,CenwBM,UFFN,mBAAsC,CAItC,oBbqwBA,CevwBM,UFFN,mBAAsC,CAItC,oBbywBA,Ce3wBM,UFFN,YAAsC,CAItC,ab6wBA,Ce/wBM,UFFN,mBAAsC,CAItC,oBbixBA,CenxBM,UFFN,mBAAsC,CAItC,oBbqxBA,CevxBM,UFFN,YAAsC,CAItC,abyxBA,Ce3xBM,WFFN,mBAAsC,CAItC,oBb6xBA,Ce/xBM,WFFN,mBAAsC,CAItC,oBbiyBA,CenyBM,WFFN,aAAsC,CAItC,cbqyBA,CelyBI,gBAAwB,QfqyB5B,CenyBI,eAAuB,QfsyB3B,CenyBM,YAAwB,OfsyB9B,CetyBM,YAAwB,OfyyB9B,CezyBM,YAAwB,Of4yB9B,Ce5yBM,YAAwB,Of+yB9B,Ce/yBM,YAAwB,OfkzB9B,CelzBM,YAAwB,OfqzB9B,CerzBM,YAAwB,OfwzB9B,CexzBM,YAAwB,Of2zB9B,Ce3zBM,YAAwB,Of8zB9B,Ce9zBM,YAAwB,Ofi0B9B,Cej0BM,aAAwB,Qfo0B9B,Cep0BM,aAAwB,Qfu0B9B,Cev0BM,aAAwB,Qf00B9B,Cep0BQ,aFTR,abg1BA,Cev0BQ,aFTR,qBbm1BA,Ce10BQ,aFTR,sBbs1BA,Ce70BQ,aFTR,eby1BA,Ceh1BQ,aFTR,sBb41BA,Cen1BQ,aFTR,sBb+1BA,Cet1BQ,aFTR,ebk2BA,Cez1BQ,aFTR,sBbq2BA,Ce51BQ,aFTR,sBbw2BA,Ce/1BQ,aFTR,eb22BA,Cel2BQ,cFTR,sBb82BA,Cer2BQ,cFTR,sBbi3BA,CACF,Ccv2BI,yBC9BE,QACE,YAAa,CACb,WAAY,CACZ,cfy4BN,Cev4BI,aACE,aAAc,CACd,UAAW,CACX,cfy4BN,Cer4BM,UFFN,kBAAsC,CAItC,mBbu4BA,Cez4BM,UFFN,mBAAsC,CAItC,oBb24BA,Ce74BM,UFFN,YAAsC,CAItC,ab+4BA,Cej5BM,UFFN,mBAAsC,CAItC,oBbm5BA,Cer5BM,UFFN,mBAAsC,CAItC,oBbu5BA,Cez5BM,UFFN,YAAsC,CAItC,ab25BA,Ce75BM,UFFN,mBAAsC,CAItC,oBb+5BA,Cej6BM,UFFN,mBAAsC,CAItC,oBbm6BA,Cer6BM,UFFN,YAAsC,CAItC,abu6BA,Cez6BM,WFFN,mBAAsC,CAItC,oBb26BA,Ce76BM,WFFN,mBAAsC,CAItC,oBb+6BA,Cej7BM,WFFN,aAAsC,CAItC,cbm7BA,Ceh7BI,gBAAwB,Qfm7B5B,Cej7BI,eAAuB,Qfo7B3B,Cej7BM,YAAwB,Ofo7B9B,Cep7BM,YAAwB,Ofu7B9B,Cev7BM,YAAwB,Of07B9B,Ce17BM,YAAwB,Of67B9B,Ce77BM,YAAwB,Ofg8B9B,Ceh8BM,YAAwB,Ofm8B9B,Cen8BM,YAAwB,Ofs8B9B,Cet8BM,YAAwB,Ofy8B9B,Cez8BM,YAAwB,Of48B9B,Ce58BM,YAAwB,Of+8B9B,Ce/8BM,aAAwB,Qfk9B9B,Cel9BM,aAAwB,Qfq9B9B,Cer9BM,aAAwB,Qfw9B9B,Cel9BQ,aFTR,ab89BA,Cer9BQ,aFTR,qBbi+BA,Cex9BQ,aFTR,sBbo+BA,Ce39BQ,aFTR,ebu+BA,Ce99BQ,aFTR,sBb0+BA,Cej+BQ,aFTR,sBb6+BA,Cep+BQ,aFTR,ebg/BA,Cev+BQ,aFTR,sBbm/BA,Ce1+BQ,aFTR,sBbs/BA,Ce7+BQ,aFTR,eby/BA,Ceh/BQ,cFTR,sBb4/BA,Cen/BQ,cFTR,sBb+/BA,CACF,Ccr/BI,yBC9BE,QACE,YAAa,CACb,WAAY,CACZ,cfuhCN,CerhCI,aACE,aAAc,CACd,UAAW,CACX,cfuhCN,CenhCM,UFFN,kBAAsC,CAItC,mBbqhCA,CevhCM,UFFN,mBAAsC,CAItC,oBbyhCA,Ce3hCM,UFFN,YAAsC,CAItC,ab6hCA,Ce/hCM,UFFN,mBAAsC,CAItC,oBbiiCA,CeniCM,UFFN,mBAAsC,CAItC,oBbqiCA,CeviCM,UFFN,YAAsC,CAItC,abyiCA,Ce3iCM,UFFN,mBAAsC,CAItC,oBb6iCA,Ce/iCM,UFFN,mBAAsC,CAItC,oBbijCA,CenjCM,UFFN,YAAsC,CAItC,abqjCA,CevjCM,WFFN,mBAAsC,CAItC,oBbyjCA,Ce3jCM,WFFN,mBAAsC,CAItC,oBb6jCA,Ce/jCM,WFFN,aAAsC,CAItC,cbikCA,Ce9jCI,gBAAwB,QfikC5B,Ce/jCI,eAAuB,QfkkC3B,Ce/jCM,YAAwB,OfkkC9B,CelkCM,YAAwB,OfqkC9B,CerkCM,YAAwB,OfwkC9B,CexkCM,YAAwB,Of2kC9B,Ce3kCM,YAAwB,Of8kC9B,Ce9kCM,YAAwB,OfilC9B,CejlCM,YAAwB,OfolC9B,CeplCM,YAAwB,OfulC9B,CevlCM,YAAwB,Of0lC9B,Ce1lCM,YAAwB,Of6lC9B,Ce7lCM,aAAwB,QfgmC9B,CehmCM,aAAwB,QfmmC9B,CenmCM,aAAwB,QfsmC9B,CehmCQ,aFTR,ab4mCA,CenmCQ,aFTR,qBb+mCA,CetmCQ,aFTR,sBbknCA,CezmCQ,aFTR,ebqnCA,Ce5mCQ,aFTR,sBbwnCA,Ce/mCQ,aFTR,sBb2nCA,CelnCQ,aFTR,eb8nCA,CernCQ,aFTR,sBbioCA,CexnCQ,aFTR,sBbooCA,Ce3nCQ,aFTR,ebuoCA,Ce9nCQ,cFTR,sBb0oCA,CejoCQ,cFTR,sBb6oCA,CACF,CcnoCI,0BC9BE,QACE,YAAa,CACb,WAAY,CACZ,cfqqCN,CenqCI,aACE,aAAc,CACd,UAAW,CACX,cfqqCN,CejqCM,UFFN,kBAAsC,CAItC,mBbmqCA,CerqCM,UFFN,mBAAsC,CAItC,oBbuqCA,CezqCM,UFFN,YAAsC,CAItC,ab2qCA,Ce7qCM,UFFN,mBAAsC,CAItC,oBb+qCA,CejrCM,UFFN,mBAAsC,CAItC,oBbmrCA,CerrCM,UFFN,YAAsC,CAItC,aburCA,CezrCM,UFFN,mBAAsC,CAItC,oBb2rCA,Ce7rCM,UFFN,mBAAsC,CAItC,oBb+rCA,CejsCM,UFFN,YAAsC,CAItC,abmsCA,CersCM,WFFN,mBAAsC,CAItC,oBbusCA,CezsCM,WFFN,mBAAsC,CAItC,oBb2sCA,Ce7sCM,WFFN,aAAsC,CAItC,cb+sCA,Ce5sCI,gBAAwB,Qf+sC5B,Ce7sCI,eAAuB,QfgtC3B,Ce7sCM,YAAwB,OfgtC9B,CehtCM,YAAwB,OfmtC9B,CentCM,YAAwB,OfstC9B,CettCM,YAAwB,OfytC9B,CeztCM,YAAwB,Of4tC9B,Ce5tCM,YAAwB,Of+tC9B,Ce/tCM,YAAwB,OfkuC9B,CeluCM,YAAwB,OfquC9B,CeruCM,YAAwB,OfwuC9B,CexuCM,YAAwB,Of2uC9B,Ce3uCM,aAAwB,Qf8uC9B,Ce9uCM,aAAwB,QfivC9B,CejvCM,aAAwB,QfovC9B,Ce9uCQ,aFTR,ab0vCA,CejvCQ,aFTR,qBb6vCA,CepvCQ,aFTR,sBbgwCA,CevvCQ,aFTR,ebmwCA,Ce1vCQ,aFTR,sBbswCA,Ce7vCQ,aFTR,sBbywCA,CehwCQ,aFTR,eb4wCA,CenwCQ,aFTR,sBb+wCA,CetwCQ,aFTR,sBbkxCA,CezwCQ,aFTR,ebqxCA,Ce5wCQ,cFTR,sBbwxCA,Ce/wCQ,cFTR,sBb2xCA,CACF,CgBz0CA,OACE,UAAW,CACX,kBb2HW,Ca1HX,ahB40CF,CgB/0CA,oBAQI,cb8UgC,Ca7UhC,kBAAmB,CACnB,4BhB40CJ,CgBt1CA,gBAcI,qBAAsB,CACtB,+BhB40CJ,CgB31CA,mBAmBI,4BhB40CJ,CgBn0CA,0BAGI,ahBq0CJ,CgB5zCA,sDAKI,wBhBg0CJ,CgBr0CA,kDAWM,uBhB+zCN,CgB1zCA,mGAKI,QhB4zCJ,CgBpzCA,yCAEI,gChBszCJ,CKr3CE,4BW2EI,abvEY,CawEZ,iChB8yCN,CiBj4CE,mDAII,wBjBm4CN,CiBv4CE,uFAYM,oBjBk4CR,CKv4CE,kCYiBM,wBjB03CR,CiB/3CE,0EASQ,wBjB23CV,CiBv5CE,yDAII,wBjBy5CN,CiB75CE,+FAYM,oBjBw5CR,CK75CE,oCYiBM,wBjBg5CR,CiBr5CE,8EASQ,wBjBi5CV,CiB76CE,mDAII,wBjB+6CN,CiBn7CE,uFAYM,oBjB86CR,CKn7CE,kCYiBM,wBjBs6CR,CiB36CE,0EASQ,wBjBu6CV,CiBn8CE,0CAII,wBjBq8CN,CiBz8CE,2EAYM,oBjBo8CR,CKz8CE,+BYiBM,wBjB47CR,CiBj8CE,oEASQ,wBjB67CV,CiBz9CE,mDAII,wBjB29CN,CiB/9CE,uFAYM,oBjB09CR,CK/9CE,kCYiBM,wBjBk9CR,CiBv9CE,0EASQ,wBjBm9CV,CiB/+CE,gDAII,wBjBi/CN,CiBr/CE,mFAYM,oBjBg/CR,CKr/CE,iCYiBM,wBjBw+CR,CiB7+CE,wEASQ,wBjBy+CV,CiBrgDE,6CAII,wBjBugDN,CiB3gDE,+EAYM,oBjBsgDR,CK3gDE,gCYiBM,wBjB8/CR,CiBngDE,sEASQ,wBjB+/CV,CiB3hDE,0CAII,wBjB6hDN,CiBjiDE,2EAYM,oBjB4hDR,CKjiDE,+BYiBM,wBjBohDR,CiBzhDE,oEASQ,wBjBqhDV,CiBjjDE,gDAII,iCjBmjDN,CKhjDE,iCYiBM,iCjBmiDR,CiBxiDE,wEASQ,iCjBoiDV,CgBt9CA,sBAGM,Ub3GS,Ca4GT,wBbpGY,CaqGZ,oBhBu9CN,CgB59CA,uBAWM,ab5GY,Ca6GZ,wBblHY,CamHZ,oBhBq9CN,CgBh9CA,YACE,Ub3Ha,Ca4Hb,wBhBm9CF,CgBr9CA,mDAOI,oBhBo9CJ,CgB39CA,2BAWI,QhBo9CJ,CgB/9CA,oDAgBM,oChBm9CN,CKxlDE,uCW4IM,UbjJO,CakJP,qChBg9CR,CchiDI,4BEiGA,qBAEI,aAAc,CACd,UAAW,CACX,eAAgB,CAChB,gChBk8CN,CgBv8CG,qCASK,QhBi8CR,CACF,Cc5iDI,4BEiGA,qBAEI,aAAc,CACd,UAAW,CACX,eAAgB,CAChB,gChB88CN,CgBn9CG,qCASK,QhB68CR,CACF,CcxjDI,4BEiGA,qBAEI,aAAc,CACd,UAAW,CACX,eAAgB,CAChB,gChB09CN,CgB/9CG,qCASK,QhBy9CR,CACF,CcpkDI,6BEiGA,qBAEI,aAAc,CACd,UAAW,CACX,eAAgB,CAChB,gChBs+CN,CgB3+CG,qCASK,QhBq+CR,CACF,CgBp/CA,kBAOQ,aAAc,CACd,UAAW,CACX,eAAgB,CAChB,gChBi/CR,CgB3/CA,kCAcU,QhBi/CV,CkB9pDA,cACE,aAAc,CACd,UAAW,CACX,iCfqe2H,Cepe3H,sBfqXkC,CChQ9B,cAtCY,Cc5EhB,ef8Q+B,Ce7Q/B,efkR+B,CejR/B,afDgB,CeEhB,qBfTa,CeUb,2BAA4B,CAC5B,wBfPgB,CONd,oBPqOgC,CgBpO9B,oEnB8qDN,CmBzqDI,uCDLJ,cCMM,enB6qDJ,CACF,CkBprDA,0BAsBI,4BAA6B,CAC7B,QlBkqDJ,CoBlrDE,oBACE,ajBAc,CiBCd,qBjBRW,CiBSX,oBjBgdsE,CiB/ctE,SAAU,CAKR,0CpBirDN,CkBjsDA,yCA+BI,afxBc,Ce0Bd,SlBqqDJ,CkBtsDA,2BA+BI,afxBc,Ce0Bd,SlBqqDJ,CkBtsDA,+CA2CI,wBfxCc,Ce0Cd,SlB8pDJ,CkB1pDA,qCAOI,afhDc,CeiDd,qBlBupDJ,CkBlpDA,uCAEE,aAAc,CACd,UlBqpDF,CkB3oDA,gBACE,+BAA+D,CAC/D,kCAAkE,CAClE,eAAgB,CdZd,iBAAW,Cccb,elB8oDF,CkB3oDA,mBACE,6BAAkE,CAClE,gCAAqE,CdoCjE,iBAtCY,CcIhB,elB8oDF,CkB3oDA,mBACE,8BAAkE,CAClE,iCAAqE,Cd6BjE,iBAtCY,CcWhB,elB8oDF,CkBroDA,wBACE,aAAc,CACd,UAAW,CACX,mBf8QmC,Ce7QnC,sBf6QmC,Ce5QnC,eAAgB,CAChB,ef6K+B,Ce5K/B,afpGgB,CeqGhB,4BAA6B,CAE7B,wBAAmC,CAAnC,kBlBwoDF,CkBlpDA,gFAcI,eAAgB,CAChB,clBwoDJ,CkB5nDA,iBACE,gCfsWqI,CerWrI,oBf+PiC,CC1Q7B,iBAtCY,CcmDhB,efyF+B,COhO7B,mBVuwDJ,CkB5nDA,iBACE,+Bf+VqI,Ce9VrI,kBf4PgC,CC/Q5B,iBAtCY,Cc2DhB,efgF+B,CO/N7B,mBV+wDJ,CkB3nDA,wDAGI,WlB4nDJ,CkBxnDA,sBACE,WlB2nDF,CkBnnDA,YACE,kBlBsnDF,CkBnnDA,WACE,aAAc,CACd,iBlBsnDF,CkB9mDA,UACE,YAAa,CACb,cAAe,CACf,iBAA0C,CAC1C,gBlBinDF,CkBrnDA,uCAQI,iBAA0C,CAC1C,gBlBknDJ,CkBzmDA,YACE,iBAAkB,CAClB,aAAc,CACd,oBlB4mDF,CkBzmDA,kBACE,iBAAkB,CAClB,gBfsS2C,CerS3C,oBlB4mDF,CkB/mDA,6CAMI,alB6mDJ,CkBzmDA,kBACE,elB4mDF,CkBzmDA,mBACE,mBAAoB,CACpB,kBAAmB,CACnB,cAAe,CACf,mBlB4mDF,CkBhnDA,qCAQI,eAAgB,CAChB,YAAa,CACb,qBfoR4C,CenR5C,alB4mDJ,CoBvzDE,gBACE,YAAa,CACb,UAAW,CACX,iBjBod0C,CC5a1C,aAAW,CgBtCX,apB0zDJ,CoBvzDE,eACE,iBAAkB,CAClB,QAAS,CACT,SAAU,CACV,YAAa,CACb,cAAe,CACf,oBjBsyBqC,CiBryBrC,gBAAiB,ChBmFf,iBAtCY,CgB3Cd,ejBkP6B,CiBjP7B,UjBxCW,CiByCX,mCjBLa,COtCb,oBVs2DJ,CoBtzDI,0DAEE,oBjBZW,CiBeT,kCjBgb2F,CiB/a3F,yQCfmI,CDgBnI,2BAA4B,CAC5B,gDjB+a6F,CiB9a7F,2DpBszDR,CoB/zDI,sEAaI,oBjBvBS,CiBwBT,0CpBszDR,CoBp0DI,kLAmBI,apBuzDR,CoBhzDI,0EAGI,kCjBwZ2F,CiBvZ3F,6EpBizDR,CoB3yDI,4DAEE,oBjBhDW,CiBmDT,+CjBqe0J,CiBpe1J,kiBpB2yDR,CoBjzDI,wEAUI,oBjBxDS,CiByDT,0CpB2yDR,CoBtzDI,sLAgBI,apB4yDR,CoBryDI,sMAII,apBuyDR,CoBjyDI,sGAGI,apBkyDR,CoBryDI,kMAQI,apBmyDR,CoB7xDI,sHAGI,apB8xDR,CoBjyDI,oIAMM,oBpB+xDV,CoBryDI,kNAYI,apB+xDR,CoB3yDI,oJAiBM,oBAAkC,CEnJxC,wBtBk7DJ,CoBhzDI,gJAwBM,0CpB4xDV,CoBpzDI,4KA4BM,oBpB4xDV,CoBpxDI,0GAGI,oBpBqxDR,CoBxxDI,sMAQI,apBsxDR,CoB9xDI,sHAaM,oBjB9IO,CiB+IP,0CpBqxDV,CoBl7DE,kBACE,YAAa,CACb,UAAW,CACX,iBjBod0C,CC5a1C,aAAW,CgBtCX,apBq7DJ,CoBl7DE,iBACE,iBAAkB,CAClB,QAAS,CACT,SAAU,CACV,YAAa,CACb,cAAe,CACf,oBjBsyBqC,CiBryBrC,gBAAiB,ChBmFf,iBAtCY,CgB3Cd,ejBkP6B,CiBjP7B,UjBxCW,CiByCX,mCjBRa,COnCb,oBVi+DJ,CoBj7DI,8DAEE,oBjBfW,CiBkBT,kCjBgb2F,CiB/a3F,mTCfmI,CDgBnI,2BAA4B,CAC5B,gDjB+a6F,CiB9a7F,2DpBi7DR,CoB17DI,0EAaI,oBjB1BS,CiB2BT,0CpBi7DR,CoB/7DI,kMAmBI,apBk7DR,CoB36DI,8EAGI,kCjBwZ2F,CiBvZ3F,6EpB46DR,CoBt6DI,gEAEE,oBjBnDW,CiBsDT,+CjBqe0J,CiBpe1J,4kBpBs6DR,CoB56DI,4EAUI,oBjB3DS,CiB4DT,0CpBs6DR,CoBj7DI,sMAgBI,apBu6DR,CoBh6DI,sNAII,apBk6DR,CoB55DI,0GAGI,apB65DR,CoBh6DI,kNAQI,apB85DR,CoBx5DI,0HAGI,apBy5DR,CoB55DI,wIAMM,oBpB05DV,CoBh6DI,kOAYI,apB05DR,CoBt6DI,wJAiBM,oBAAkC,CEnJxC,wBtB6iEJ,CoB36DI,oJAwBM,0CpBu5DV,CoB/6DI,gLA4BM,oBpBu5DV,CoB/4DI,8GAGI,oBpBg5DR,CoBn5DI,sNAQI,apBi5DR,CoBz5DI,0HAaM,oBjBjJO,CiBkJP,0CpBg5DV,CkBz0DA,aACE,YAAa,CACb,kBAAmB,CACnB,kBlB40DF,CkB/0DA,yBASI,UlB00DJ,CcxhEI,yBIqMJ,mBAiBM,sBlB00DJ,CkB31DF,4CAeM,YAAa,CACb,kBAAmB,CAEnB,elBg1DJ,CkBl2DF,yBAwBM,aAAc,CACd,kBlBy0DJ,CkBl2DF,2BAgCM,oBAAqB,CACrB,UAAW,CACX,qBlBq0DJ,CkBv2DF,qCAuCM,oBlBm0DJ,CkB12DF,sDA4CM,UlBk0DJ,CkB92DF,yBAkDM,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,UAAW,CACX,clB+zDJ,CkBr3DF,+BAyDM,iBAAkB,CAClB,aAAc,CACd,YAAa,CACb,mBf2LwC,Ce1LxC,alB+zDJ,CkB53DF,6BAiEM,kBAAmB,CACnB,sBlB8zDJ,CkBh4DF,mCAqEM,elB8zDJ,CACF,CuB/nEA,KACE,oBAAqB,CAErB,epBkR+B,CoBjR/B,apBMgB,CoBLhB,iBAAkB,CAClB,qBAAsB,CACtB,wBAAiB,CAAjB,gBAAiB,CACjB,4BAA6B,CAC7B,4BAA2C,CCsF3C,sBrB0RkC,CChQ9B,cAtCY,CoBchB,erByL+B,CO3R7B,oBPqOgC,CgBpO9B,6HnB+oEN,CmB1oEI,uCILJ,KJMM,enB8oEJ,CACF,CK/oEE,WkBQE,apBJc,CoBKd,oBvB2oEJ,CuB1pEA,sBAoBI,SAAU,CACV,0CvB0oEJ,CuB/pEA,4BA2BI,WvBwoEJ,CuBznEA,uCAEE,mBvB4nEF,CuBnnEE,aCrDA,UrBCa,CmBDX,wBnB8Ba,CqB5Bf,oBxB4qEF,CKxqEE,mBmBAE,UrBLW,CmBDX,wBEDoF,CASpF,oBxB4qEJ,CwBzqEE,sCAMI,0CxBuqEN,CwBlqEE,4CAEE,UrBvBW,CqBwBX,wBrBKa,CqBJb,oBxBoqEJ,CwB7pEE,uIAGE,UrBnCW,CqBoCX,wBAtCuK,CA0CvK,oBxB4pEJ,CwB1pEI,yJAKI,0CxB0pER,CuBrpEE,eCrDA,UrBCa,CmBDX,wBnBOc,CqBLhB,oBxB8sEF,CK1sEE,qBmBAE,UrBLW,CmBDX,wBEDoF,CASpF,oBxB8sEJ,CwB3sEE,0CAMI,2CxBysEN,CwBpsEE,gDAEE,UrBvBW,CqBwBX,wBrBlBc,CqBmBd,oBxBssEJ,CwB/rEE,6IAGE,UrBnCW,CqBoCX,wBAtCuK,CA0CvK,oBxB8rEJ,CwB5rEI,+JAKI,2CxB4rER,CuBvrEE,aCrDA,UrBCa,CmBDX,wBnBqCa,CqBnCf,oBxBgvEF,CK5uEE,mBmBAE,UrBLW,CmBDX,wBEDoF,CASpF,oBxBgvEJ,CwB7uEE,sCAMI,yCxB2uEN,CwBtuEE,4CAEE,UrBvBW,CqBwBX,wBrBYa,CqBXb,oBxBwuEJ,CwBjuEE,uIAGE,UrBnCW,CqBoCX,wBAtCuK,CA0CvK,oBxBguEJ,CwB9tEI,yJAKI,yCxB8tER,CuBztEE,UCrDA,UrBCa,CmBDX,wBnBuCa,CqBrCf,oBxBkxEF,CK9wEE,gBmBAE,UrBLW,CmBDX,wBEDoF,CASpF,oBxBkxEJ,CwB/wEE,gCAMI,0CxB6wEN,CwBxwEE,sCAEE,UrBvBW,CqBwBX,wBrBca,CqBbb,oBxB0wEJ,CwBnwEE,8HAGE,UrBnCW,CqBoCX,wBAtCuK,CA0CvK,oBxBkwEJ,CwBhwEI,gJAKI,0CxBgwER,CuB3vEE,aCrDA,arBUgB,CmBVd,wBnBoCa,CqBlCf,oBxBozEF,CKhzEE,mBmBAE,arBIc,CmBVd,wBEDoF,CASpF,oBxBozEJ,CwBjzEE,sCAMI,0CxB+yEN,CwB1yEE,4CAEE,arBdc,CqBed,wBrBWa,CqBVb,oBxB4yEJ,CwBryEE,uIAGE,arB1Bc,CqB2Bd,wBAtCuK,CA0CvK,oBxBoyEJ,CwBlyEI,yJAKI,0CxBkyER,CuB7xEE,YCrDA,UrBCa,CmBDX,wBnBkCa,CqBhCf,oBxBs1EF,CKl1EE,kBmBAE,UrBLW,CmBDX,wBEDoF,CASpF,oBxBs1EJ,CwBn1EE,oCAMI,yCxBi1EN,CwB50EE,0CAEE,UrBvBW,CqBwBX,wBrBSa,CqBRb,oBxB80EJ,CwBv0EE,oIAGE,UrBnCW,CqBoCX,wBAtCuK,CA0CvK,oBxBs0EJ,CwBp0EI,sJAKI,yCxBo0ER,CuB/zEE,WCrDA,arBUgB,CmBVd,wBnBEc,CqBAhB,oBxBw3EF,CKp3EE,iBmBAE,arBIc,CmBVd,wBEDoF,CASpF,oBxBw3EJ,CwBr3EE,kCAMI,2CxBm3EN,CwB92EE,wCAEE,arBdc,CqBed,wBrBvBc,CqBwBd,oBxBg3EJ,CwBz2EE,iIAGE,arB1Bc,CqB2Bd,wBAtCuK,CA0CvK,oBxBw2EJ,CwBt2EI,mJAKI,2CxBs2ER,CuBj2EE,UCrDA,UrBCa,CmBDX,wBnBSc,CqBPhB,oBxB05EF,CKt5EE,gBmBAE,UrBLW,CmBDX,wBEDoF,CASpF,oBxB05EJ,CwBv5EE,gCAMI,wCxBq5EN,CwBh5EE,sCAEE,UrBvBW,CqBwBX,wBrBhBc,CqBiBd,oBxBk5EJ,CwB34EE,8HAGE,UrBnCW,CqBoCX,wBAtCuK,CA0CvK,oBxB04EJ,CwBx4EI,gJAKI,wCxBw4ER,CuB73EE,qBCJA,arBzBe,CqB0Bf,oBxBq4EF,CKv7EE,2BmBqDE,UrB1DW,CqB2DX,wBrB9Ba,CqB+Bb,oBxBs4EJ,CwBn4EE,sDAEE,yCxBq4EJ,CwBl4EE,4DAEE,arBzCa,CqB0Cb,4BxBo4EJ,CwBj4EE,+JAGE,UrB7EW,CqB8EX,wBrBjDa,CqBkDb,oBxBm4EJ,CwBj4EI,iLAKI,yCxBi4ER,CuB75EE,uBCJA,arBhDgB,CqBiDhB,oBxBq6EF,CKv9EE,6BmBqDE,UrB1DW,CqB2DX,wBrBrDc,CqBsDd,oBxBs6EJ,CwBn6EE,0DAEE,2CxBq6EJ,CwBl6EE,gEAEE,arBhEc,CqBiEd,4BxBo6EJ,CwBj6EE,qKAGE,UrB7EW,CqB8EX,wBrBxEc,CqByEd,oBxBm6EJ,CwBj6EI,uLAKI,2CxBi6ER,CuB77EE,qBCJA,arBlBe,CqBmBf,oBxBq8EF,CKv/EE,2BmBqDE,UrB1DW,CqB2DX,wBrBvBa,CqBwBb,oBxBs8EJ,CwBn8EE,sDAEE,yCxBq8EJ,CwBl8EE,4DAEE,arBlCa,CqBmCb,4BxBo8EJ,CwBj8EE,+JAGE,UrB7EW,CqB8EX,wBrB1Ca,CqB2Cb,oBxBm8EJ,CwBj8EI,iLAKI,yCxBi8ER,CuB79EE,kBCJA,arBhBe,CqBiBf,oBxBq+EF,CKvhFE,wBmBqDE,UrB1DW,CqB2DX,wBrBrBa,CqBsBb,oBxBs+EJ,CwBn+EE,gDAEE,0CxBq+EJ,CwBl+EE,sDAEE,arBhCa,CqBiCb,4BxBo+EJ,CwBj+EE,sJAGE,UrB7EW,CqB8EX,wBrBxCa,CqByCb,oBxBm+EJ,CwBj+EI,wKAKI,0CxBi+ER,CuB7/EE,qBCJA,arBnBe,CqBoBf,oBxBqgFF,CKvjFE,2BmBqDE,arBjDc,CqBkDd,wBrBxBa,CqByBb,oBxBsgFJ,CwBngFE,sDAEE,yCxBqgFJ,CwBlgFE,4DAEE,arBnCa,CqBoCb,4BxBogFJ,CwBjgFE,+JAGE,arBpEc,CqBqEd,wBrB3Ca,CqB4Cb,oBxBmgFJ,CwBjgFI,iLAKI,yCxBigFR,CuB7hFE,oBCJA,arBrBe,CqBsBf,oBxBqiFF,CKvlFE,0BmBqDE,UrB1DW,CqB2DX,wBrB1Ba,CqB2Bb,oBxBsiFJ,CwBniFE,oDAEE,yCxBqiFJ,CwBliFE,0DAEE,arBrCa,CqBsCb,4BxBoiFJ,CwBjiFE,4JAGE,UrB7EW,CqB8EX,wBrB7Ca,CqB8Cb,oBxBmiFJ,CwBjiFI,8KAKI,yCxBiiFR,CuB7jFE,mBCJA,arBrDgB,CqBsDhB,oBxBqkFF,CKvnFE,yBmBqDE,arBjDc,CqBkDd,wBrB1Dc,CqB2Dd,oBxBskFJ,CwBnkFE,kDAEE,2CxBqkFJ,CwBlkFE,wDAEE,arBrEc,CqBsEd,4BxBokFJ,CwBjkFE,yJAGE,arBpEc,CqBqEd,wBrB7Ec,CqB8Ed,oBxBmkFJ,CwBjkFI,2KAKI,2CxBikFR,CuB7lFE,kBCJA,arB9CgB,CqB+ChB,oBxBqmFF,CKvpFE,wBmBqDE,UrB1DW,CqB2DX,wBrBnDc,CqBoDd,oBxBsmFJ,CwBnmFE,gDAEE,wCxBqmFJ,CwBlmFE,sDAEE,arB9Dc,CqB+Dd,4BxBomFJ,CwBjmFE,sJAGE,UrB7EW,CqB8EX,wBrBtEc,CqBuEd,oBxBmmFJ,CwBjmFI,wKAKI,wCxBimFR,CuBlnFA,UACE,epB8M+B,CoB7M/B,apB1Ce,CoB2Cf,oBvBqnFF,CKxrFE,gBkBsEE,apB2F8D,CoB1F9D,yBvBsnFJ,CuB7nFA,gCAYI,yBpBsF+C,CoBrF/C,evBqnFJ,CuBloFA,sCAkBI,apBjFc,CoBkFd,mBvBonFJ,CuBzmFA,2BCLE,kBrBySgC,CC/Q5B,iBAtCY,CoBchB,erB6H+B,CO/N7B,mBVqtFJ,CuB5mFA,2BCTE,oBrBoSiC,CC1Q7B,iBAtCY,CoBchB,erB8H+B,COhO7B,mBV4tFJ,CuB1mFA,WACE,aAAc,CACd,UvB6mFF,CuB/mFA,sBAMI,gBvB6mFJ,CuBxmFA,sFAII,UvB0mFJ,CyBhvFA,MNMM,8BnB8uFN,CmBzuFI,uCMXJ,MNYM,enB6uFJ,CACF,CyB1vFA,iBAII,SzB0vFJ,CyBtvFA,qBAEI,YzBwvFJ,CyBpvFA,YACE,iBAAkB,CAClB,QAAS,CACT,eAAgB,CNXZ,2BnBmwFN,CmB9vFI,uCMGJ,YNFM,enBkwFJ,CACF,C0B9wFA,uCAIE,iB1BixFF,C0B9wFA,iBACE,kB1BixFF,C2B7vFI,uBACE,oBAAqB,CACrB,kBxB0N0C,CwBzN1C,qBxBwN0C,CwBvN1C,UAAW,CAhCf,qBAA8B,CAC9B,mCAA4C,CAC5C,eAAgB,CAChB,kC3BiyFF,C2B5uFI,6BACE,a3B+uFN,C0BzxFA,eACE,iBAAkB,CAClB,QAAS,CACT,MAAO,CACP,YvBipBsC,CuBhpBtC,YAAa,CACb,UAAW,CACX,evButBuC,CuBttBvC,eAA8B,CAC9B,kBAA4B,CtBsGxB,cAtCY,CsB9DhB,avBXgB,CuBYhB,eAAgB,CAChB,eAAgB,CAChB,qBvBvBa,CuBwBb,2BAA4B,CAC5B,gCvBfa,COZX,oBVwzFJ,C0BpxFI,oBACE,UAAW,CACX,M1BuxFN,C0BpxFI,qBACE,OAAQ,CACR,S1BuxFN,Cc3wFI,yBYnBA,uBACE,UAAW,CACX,M1BkyFJ,C0B/xFE,wBACE,OAAQ,CACR,S1BiyFJ,CACF,CctxFI,yBYnBA,uBACE,UAAW,CACX,M1B6yFJ,C0B1yFE,wBACE,OAAQ,CACR,S1B4yFJ,CACF,CcjyFI,yBYnBA,uBACE,UAAW,CACX,M1BwzFJ,C0BrzFE,wBACE,OAAQ,CACR,S1BuzFJ,CACF,Cc5yFI,0BYnBA,uBACE,UAAW,CACX,M1Bm0FJ,C0Bh0FE,wBACE,OAAQ,CACR,S1Bk0FJ,CACF,C0B5zFA,uBAEI,QAAS,CACT,WAAY,CACZ,YAAa,CACb,qB1B8zFJ,C2B71FI,+BACE,oBAAqB,CACrB,kBxB0N0C,CwBzN1C,qBxBwN0C,CwBvN1C,UAAW,CAzBf,YAAa,CACb,mCAA4C,CAC5C,wBAAiC,CACjC,kC3B03FF,C2B50FI,qCACE,a3B+0FN,C0Br0FA,0BAEI,KAAM,CACN,UAAW,CACX,SAAU,CACV,YAAa,CACb,mB1Bu0FJ,C2Bp3FI,kCACE,oBAAqB,CACrB,kBxB0N0C,CwBzN1C,qBxBwN0C,CwBvN1C,UAAW,CAlBf,iCAA0C,CAC1C,cAAe,CACf,oCAA6C,CAC7C,sB3B04FF,C2Bn2FI,wCACE,a3Bs2FN,C2Bn4FI,kCDmDE,gB1Bo1FN,C0B/0FA,yBAEI,KAAM,CACN,UAAW,CACX,SAAU,CACV,YAAa,CACb,oB1Bi1FJ,C2B/4FI,iCACE,oBAAqB,CACrB,kBxB0N0C,CwBzN1C,qBxBwN0C,CwBvN1C,U3Bk5FN,C2Bt5FI,iCAgBI,Y3B04FR,C2Bv4FM,kCACE,oBAAqB,CACrB,mBxBuMwC,CwBtMxC,qBxBqMwC,CwBpMxC,UAAW,CA9BjB,iCAA0C,CAC1C,uBAAgC,CAChC,oC3By6FF,C2Bx4FI,uCACE,a3B24FN,C2Br5FM,kCDiDA,gB1Bw2FN,C0Bj2FA,0IAKI,UAAW,CACX,W1Bg2FJ,C0B31FA,kBE9GE,QAAS,CACT,cAAmB,CACnB,eAAgB,CAChB,4B5B68FF,C0B31FA,eACE,aAAc,CACd,UAAW,CACX,qBvByoBwC,CuBxoBxC,UAAW,CACX,evB4J+B,CuB3J/B,avBhHgB,CuBiHhB,kBAAmB,CACnB,kBAAmB,CACnB,4BAA6B,CAC7B,Q1B81FF,CKl9FE,0CqBmIE,avB0mBqD,CuBzmBrD,oBAAqB,CJ9IrB,wBtBk+FJ,C0B92FA,4CAgCI,UvBnJW,CuBoJX,oBAAqB,CJrJrB,wBtBw+FJ,C0Bp3FA,gDAuCI,avBpJc,CuBqJd,mBAAoB,CACpB,4B1Bi1FJ,C0Bz0FA,oBACE,a1B40FF,C0Bx0FA,iBACE,aAAc,CACd,oBvBolBwC,CuBnlBxC,eAAgB,CtBpDZ,iBAtCY,CsB4FhB,avBxKgB,CuByKhB,kB1B20FF,C0Bv0FA,oBACE,aAAc,CACd,qBvB0kBwC,CuBzkBxC,a1B00FF,C6BpgGA,+BAEE,iBAAkB,CAClB,mBAAoB,CACpB,qB7BugGF,C6B3gGA,yCAOI,iBAAkB,CAClB,a7BygGJ,CKxgGE,qDwBII,S7BygGN,C6BthGA,mKAkBM,S7B2gGN,C6BrgGA,aACE,YAAa,CACb,cAAe,CACf,0B7BwgGF,C6B3gGA,0BAMI,U7BygGJ,C6BrgGA,0EAII,gB7BsgGJ,C6B1gGA,mGnBhBI,yBmB0B8B,CnBzB9B,4BV+hGJ,C6BhhGA,+EnBFI,wBmBiB6B,CnBhB7B,2BVuhGJ,C6Bv/FA,uBACE,sBAAmC,CACnC,qB7B0/FF,C6B5/FA,0GAOI,a7B2/FJ,C6Bx/FE,wCACE,c7B2/FJ,C6Bv/FA,yEACE,qBAAsC,CACtC,oB7B0/FF,C6Bv/FA,yEACE,oBAAsC,CACtC,mB7B0/FF,C6Bt+FA,oBACE,qBAAsB,CACtB,sBAAuB,CACvB,sB7By+FF,C6B5+FA,wDAOI,U7B0+FJ,C6Bj/FA,4FAYI,e7B0+FJ,C6Bt/FA,qHnBlFI,4BmBoG+B,CnBnG/B,2BV6kGJ,C6B5/FA,iGnBhGI,wBmBuH4B,CnBtH5B,yBVimGJ,C6B19FA,yDAGI,e7B49FJ,C6B/9FA,gMAOM,iBAAkB,CAClB,kBAAsB,CACtB,mB7B+9FN,C8BxnGA,aACE,iBAAkB,CAClB,YAAa,CACb,cAAe,CACf,mBAAoB,CACpB,U9B2nGF,C8BhoGA,sHAWI,iBAAkB,CAClB,aAAc,CAGd,QAAS,CACT,e9B0nGJ,C8B1oGA,0gBAqBM,gB9BooGN,C8BzpGA,yIA6BI,S9BkoGJ,C8B/pGA,mDAkCI,S9BioGJ,C8BnqGA,yFpBeI,yBoBwBmD,CpBvBnD,4BVypGJ,C8BzqGA,2FpB6BI,wBoBWmD,CpBVnD,2BVipGJ,C8B/qGA,0BA8CI,YAAa,CACb,kB9BqoGJ,C8BprGA,kIpBeI,yBoBmC6E,CpBlC7E,4BV0qGJ,C8B1rGA,+DpB6BI,wBoBsBsE,CpBrBtE,2BViqGJ,C8BjoGA,yCAEE,Y9BooGF,C8BtoGA,mDAQI,iBAAkB,CAClB,S9BmoGJ,C8B5oGA,+DAYM,S9BqoGN,C8BjpGA,4VAoBI,gB9BwoGJ,C8BpoGA,qBAAuB,iB9BwoGvB,C8BvoGA,oBAAsB,gB9B2oGtB,C8BnoGA,kBACE,YAAa,CACb,kBAAmB,CACnB,sB3BuRkC,C2BtRlC,eAAgB,C1BsBZ,cAtCY,C0BkBhB,e3BgL+B,C2B/K/B,e3BoL+B,C2BnL/B,a3B/FgB,C2BgGhB,iBAAkB,CAClB,kBAAmB,CACnB,wB3BvGgB,C2BwGhB,wB3BtGgB,CONd,oBVmvGJ,C8BnpGA,2EAkBI,Y9BsoGJ,C8B5nGA,2EAEE,+B9B+nGF,C8B5nGA,6PAME,kB3BkQgC,CC/Q5B,iBAtCY,C0BqDhB,e3BsF+B,CO/N7B,mBVywGJ,C8B5nGA,2EAEE,gC9B+nGF,C8B5nGA,6PAME,oB3B4OiC,CC1Q7B,iBAtCY,C0BsEhB,e3BsE+B,COhO7B,mBV0xGJ,C8B5nGA,8DAEE,qB9B+nGF,C8BpnGA,6XpB3JI,yBoBiK4B,CpBhK5B,4BVwxGJ,C8BrnGA,+WpBtJI,wBoB4J2B,CpB3J3B,2BVoxGJ,C+B/yGA,gBACE,iBAAkB,CAClB,aAAc,CACd,iBAA+C,CAC/C,mB/BkzGF,C+B/yGA,uBACE,mBAAoB,CACpB,iB/BkzGF,C+B/yGA,sBACE,iBAAkB,CAClB,UAAW,CACX,S/BkzGF,C+BrzGA,2DAMI,U5BpBW,C4BqBX,oB5BQa,CmB9Bb,wBtB00GJ,C+B3zGA,yDAiBM,0C/B8yGN,C+B/zGA,uEAsBI,oB/B6yGJ,C+Bn0GA,yEA0BI,U5BxCW,C4ByCX,wB5B8e8E,C4B7e9E,oB/B6yGJ,C+Bz0GA,qDAkCM,a/B2yGN,C+B70GA,4DAqCQ,wB/B4yGR,C+BlyGA,sBACE,iBAAkB,CAClB,eAAgB,CAChB,kB/BqyGF,C+BxyGA,6BAOI,iBAAkB,CAClB,UAA+E,CAC/E,YAA+D,CAC/D,aAAc,CACd,U5B0bwC,C4BzbxC,W5BybwC,C4BxbxC,mBAAoB,CACpB,UAAW,CACX,qB5B5EW,C4B6EX,wB/BqyGJ,C+BrzGA,4BAsBI,iBAAkB,CAClB,UAA+E,CAC/E,YAA+D,CAC/D,aAAc,CACd,U5B2awC,C4B1axC,W5B0awC,C4BzaxC,UAAW,CACX,gC/BmyGJ,C+B1xGA,8CrBrGI,oBVm4GJ,C+B9xGA,2EAOM,0N/B2xGN,C+BlyGA,kFAaM,oB5BnFW,CmB9Bb,wBtB24GJ,C+BvyGA,iFAkBM,uK/ByxGN,C+B3yGA,qFAwBM,mC/BuxGN,C+B/yGA,2FA2BM,mC/BwxGN,C+B/wGA,2CAGI,iB/BgxGJ,C+BnxGA,wEAQM,oK/B+wGN,C+BvxGA,kFAcM,mC/B6wGN,C+BnwGA,eACE,oB/BswGF,C+BvwGA,4CAKM,aAAqD,CACrD,a5BkY+E,C4BjY/E,kBAAmB,CAEnB,mB/BqwGN,C+B9wGA,2CAaM,sBAA0I,CAC1I,yBAA+G,CAC/G,sB5B2XiI,C4B1XjI,uB5B0XiI,C4BzXjI,wB5B3KY,C4B6KZ,mB5BsX4E,CgBziB5E,yIhB8f+H,CgB9f/H,iIhB8f+H,CgB9f/H,oKnBw7GN,CmBn7GI,uCY2JJ,2CZ1JM,enBu7GJ,CACF,C+B9xGA,yEA0BM,qB5BzLS,C4B0LT,oCAA4E,CAA5E,4B/BwwGN,C+BnyGA,mFAiCM,mC/BswGN,C+B1vGA,eACE,oBAAqB,CACrB,UAAW,CACX,iC5BwR2H,C4BvR3H,sC5BwKkC,CChQ9B,cAtCY,C2BiIhB,e5BiE+B,C4BhE/B,e5BqE+B,C4BpE/B,a5B9MgB,C4B+MhB,qBAAsB,CACtB,yN5BmWmI,C4BlWnI,qB5BxNa,C4ByNb,wB5BrNgB,CONd,oBPqOgC,C4BPlC,uBAAgB,CAAhB,e/B2vGF,C+B3wGA,qBAmBI,oB5B0PsE,C4BzPtE,SAAU,CAIR,0C/ByvGN,C+BjxGA,gCAiCM,a5BtOY,C4BuOZ,qB/BovGN,C+BtxGA,8DAwCI,WAAY,CACZ,oB5BmIgC,C4BlIhC,qB/BkvGJ,C+B5xGA,wBA8CI,a5BpPc,C4BqPd,wB/BkvGJ,C+BjyGA,2BAoDI,Y/BivGJ,C+B7uGA,kBACE,gC5BmOqI,C4BlOrI,kB5B2HkC,C4B1HlC,qB5B0HkC,C4BzHlC,kB5B0HiC,CC1Q7B,iBJi4GN,C+B7uGA,kBACE,+B5B4NqI,C4B3NrI,iB5BwHiC,C4BvHjC,oB5BuHiC,C4BtHjC,iB5BuHgC,CC/Q5B,iBJy4GN,C+BxuGA,aAEE,oBAAqB,CAGrB,e/B2uGF,C+BxuGA,gCAPE,iBAAkB,CAElB,UAAW,CACX,iC/BqvGF,C+BjvGA,mBAEE,SAAU,CAGV,QAAS,CACT,S/B2uGF,C+BjvGA,4CASI,oB5B+KsE,C4B9KtE,0C/B4uGJ,C+BtvGA,+CAcI,wB/B4uGJ,C+B1vGA,qDAmBM,gB/B2uGN,C+B9vGA,yDAwBI,yB/B0uGJ,C+BtuGA,mBACE,iBAAkB,CAClB,KAAM,CACN,OAAQ,CACR,MAAO,CACP,SAAU,CACV,iC5BoK2H,C4BnK3H,sB5BoDkC,C4BlDlC,e5BlD+B,C4BmD/B,e5B9C+B,C4B+C/B,a5BjUgB,C4BkUhB,qB5BzUa,C4B0Ub,wB5BtUgB,CONd,oBVqjHJ,C+BtvGA,yBAkBI,iBAAkB,CAClB,KAAM,CACN,OAAQ,CACR,QAAS,CACT,SAAU,CACV,aAAc,CACd,2B5B8I+F,C4B7I/F,sB5BkCgC,C4BjChC,e5B9D6B,C4B+D7B,a5BjVc,C4BkVd,gBAAiB,CT1VjB,wBnBGc,C4ByVd,mBAAoB,CrB7VpB,+BVskHJ,C+B9tGA,cACE,UAAW,CACX,aAA+F,CAC/F,SAAU,CACV,4BAA6B,CAC7B,uBAAgB,CAAhB,e/BiuGF,C+BtuGA,oBAQI,Y/BkuGJ,C+B1uGA,0CAY8B,yD/BkuG9B,C+B9uGA,sCAa8B,yD/BquG9B,C+BlvGA,+BAc8B,yD/BwuG9B,C+BtvGA,gCAkBI,Q/BwuGJ,C+B1vGA,oCAsBI,U5B8N6C,C4B7N7C,W5B6N6C,C4B5N7C,kBAAyE,CT/XzE,wBnB8Ba,C4BmWb,Q5B6N0C,CO/lB1C,kBPgmB6C,CgB/lB3C,8GhB8f+H,CgB9f/H,sGhB8f+H,C4BzHjI,uBAAgB,CAAhB,e/BuuGJ,CmBvmHI,uCYkWJ,oCZjWM,uBAAgB,CAAhB,enB2mHJ,CACF,C+B3wGA,2CTvWI,wBtBsnHJ,C+B/wGA,6CAsCI,U5BuMoC,C4BtMpC,Y5BuMqC,C4BtMrC,iBAAkB,CAClB,c5BsMuC,C4BrMvC,wB5B7Yc,C4B8Yd,wBAAyB,CrBnZzB,kBVioHJ,C+BzxGA,gCAiDI,U5BmM6C,C4BlM7C,W5BkM6C,CmB3lB7C,wBnB8Ba,C4B6Xb,Q5BmM0C,CO/lB1C,kBPgmB6C,CgB/lB3C,2GhB8f+H,CgB9f/H,sGhB8f+H,C4B/FjI,e/B2uGJ,CmBroHI,uCYkWJ,gCZjWM,oBAAgB,CAAhB,enByoHJ,CACF,C+BzyGA,uCTvWI,wBtBopHJ,C+B7yGA,gCAgEI,U5B6KoC,C4B5KpC,Y5B6KqC,C4B5KrC,iBAAkB,CAClB,c5B4KuC,C4B3KvC,wB5Bvac,C4Bwad,wBAAyB,CrB7azB,kBV+pHJ,C+BvzGA,yBA2EI,U5ByK6C,C4BxK7C,W5BwK6C,C4BvK7C,YAAa,CACb,kB5BvD+B,C4BwD/B,iB5BxD+B,CmB9X/B,wBnB8Ba,C4B0Zb,Q5BsK0C,CO/lB1C,kBPgmB6C,CgB/lB3C,0GhB8f+H,CgB9f/H,sGhB8f+H,C4BlEjI,e/B+uGJ,CmBtqHI,uCYkWJ,yBZjWM,mBAAgB,CAAhB,enB0qHJ,CACF,C+B10GA,gCTvWI,wBtBqrHJ,C+B90GA,yBA6FI,U5BgJoC,C4B/IpC,Y5BgJqC,C4B/IrC,iBAAkB,CAClB,c5B+IuC,C4B9IvC,4BAA6B,CAC7B,wBAAyB,CACzB,kB/BqvGJ,C+Bx1GA,4DAwGI,wB5B3cc,COLd,kBV2sHJ,C+Bn2GA,8BA6GI,iB/BsvGJ,C+Bn2GA,6CAoHM,wB/BmvGN,C+Bv2GA,sDAwHM,c/BmvGN,C+B32GA,yCA4HM,wB/BmvGN,C+B/2GA,yCAgIM,c/BmvGN,C+Bn3GA,kCAoIM,wB/BmvGN,C+B9uGA,+DZhfM,sGnBouHN,CmB/tHI,uCY2eJ,+DZ1eM,enBquHJ,CACF,CgC7uHA,KACE,YAAa,CACb,cAAe,CACf,cAAe,CACf,eAAgB,CAChB,ehCgvHF,CgC7uHA,UACE,aAAc,CACd,kBhCgvHF,CK/uHE,gC2BEE,oBhCivHJ,CgCtvHA,mBAUI,a7BVc,C6BWd,mBAAoB,CACpB,chCgvHJ,CgCxuHA,UACE,+BhC2uHF,CgC5uHA,oBAII,kBhC4uHJ,CgChvHA,oBAQI,4BAAgD,CtB3BhD,6BP4NgC,CO3NhC,8BVwwHJ,CKvwHE,oD2B6BI,oChC8uHN,CgC1vHA,6BAgBM,a7BpCY,C6BqCZ,4BAA6B,CAC7B,wBhC8uHN,CgChwHA,8DAwBI,a7B3Cc,C6B4Cd,qB7BnDW,C6BoDX,iChC6uHJ,CgCvwHA,yBA+BI,e7BuK6B,COzN7B,wBsBoD4B,CtBnD5B,yBV+xHJ,CgCnuHA,qBtBtEI,oBV6yHJ,CgCvuHA,uDAOI,U7B3EW,C6B4EX,wBhCquHJ,CgC5tHA,oBAEI,aAAc,CACd,iBhC8tHJ,CgC1tHA,yBAEI,YAAa,CACb,WAAY,CACZ,iBhC4tHJ,CgCntHA,uBAEI,YhCqtHJ,CgCvtHA,qBAKI,ahCstHJ,CiC1zHA,QACE,iBAAkB,CAClB,YAAa,CACb,cAAe,CACf,kBAAmB,CACnB,6BAA8B,CAC9B,kBjC6zHF,CiCn0HA,4CAYI,YAAa,CACb,cAAe,CACf,kBAAmB,CACnB,6BjC4zHJ,CiCnzHA,cACE,oBAAqB,CACrB,oB9BoqB+E,C8BnqB/E,uB9BmqB+E,C8BlqB/E,iB9BoFW,CCFP,iBAtCY,C6B1ChB,mBAAoB,CACpB,kBjCszHF,CKt1HE,wC4BmCE,oBjCuzHJ,CiC9yHA,YACE,YAAa,CACb,qBAAsB,CACtB,cAAe,CACf,eAAgB,CAChB,ejCizHF,CiCtzHA,sBAQI,eAAgB,CAChB,cjCkzHJ,CiC3zHA,2BAaI,eAAgB,CAChB,UjCkzHJ,CiCzyHA,aACE,oBAAqB,CACrB,iB9B2lBuC,C8B1lBvC,oBjC4yHF,CiChyHA,iBACE,eAAgB,CAChB,WAAY,CAGZ,kBjCiyHF,CiC7xHA,gBACE,qB9BsmBwC,CCnlBpC,iBAtCY,C6BqBhB,aAAc,CACd,4BAA6B,CAC7B,4BAAuC,CvB3GrC,oBV44HJ,CKj4HE,4C4BoGE,oBjCiyHJ,CiC3xHA,qBACE,oBAAqB,CACrB,WAAY,CACZ,YAAa,CACb,qBAAsB,CACtB,UAAW,CACX,wBAAmC,CACnC,yBjC8xHF,Cct1HI,4BmBkEC,gEAIK,eAAgB,CAChB,cjCsxHR,CACF,Cc32HI,yBmB+EA,kBAUI,oBAAqB,CACrB,0BjCuxHN,CiClyHG,8BAcK,kBjCuxHR,CiCryHG,6CAiBO,iBjCuxHV,CiCxyHG,wCAqBO,mB9ByiB6B,C8BxiB7B,kBjCsxHV,CiC5yHG,gEA6BK,gBjCmxHR,CiChzHG,mCAiCK,sBAAwB,CAGxB,ejCgxHR,CiCpzHG,kCAwCK,YjC+wHR,CACF,Cc13HI,4BmBkEC,gEAIK,eAAgB,CAChB,cjC0zHR,CACF,Cc/4HI,yBmB+EA,kBAUI,oBAAqB,CACrB,0BjC2zHN,CiCt0HG,8BAcK,kBjC2zHR,CiCz0HG,6CAiBO,iBjC2zHV,CiC50HG,wCAqBO,mB9ByiB6B,C8BxiB7B,kBjC0zHV,CiCh1HG,gEA6BK,gBjCuzHR,CiCp1HG,mCAiCK,sBAAwB,CAGxB,ejCozHR,CiCx1HG,kCAwCK,YjCmzHR,CACF,Cc95HI,4BmBkEC,gEAIK,eAAgB,CAChB,cjC81HR,CACF,Ccn7HI,yBmB+EA,kBAUI,oBAAqB,CACrB,0BjC+1HN,CiC12HG,8BAcK,kBjC+1HR,CiC72HG,6CAiBO,iBjC+1HV,CiCh3HG,wCAqBO,mB9ByiB6B,C8BxiB7B,kBjC81HV,CiCp3HG,gEA6BK,gBjC21HR,CiCx3HG,mCAiCK,sBAAwB,CAGxB,ejCw1HR,CiC53HG,kCAwCK,YjCu1HR,CACF,Ccl8HI,6BmBkEC,gEAIK,eAAgB,CAChB,cjCk4HR,CACF,Ccv9HI,0BmB+EA,kBAUI,oBAAqB,CACrB,0BjCm4HN,CiC94HG,8BAcK,kBjCm4HR,CiCj5HG,6CAiBO,iBjCm4HV,CiCp5HG,wCAqBO,mB9ByiB6B,C8BxiB7B,kBjCk4HV,CiCx5HG,gEA6BK,gBjC+3HR,CiC55HG,mCAiCK,sBAAwB,CAGxB,ejC43HR,CiCh6HG,kCAwCK,YjC23HR,CACF,CiCz6HA,eAeQ,oBAAqB,CACrB,0BjC85HR,CiC96HA,0DASU,eAAgB,CAChB,cjC06HV,CiCp7HA,2BAmBU,kBjCq6HV,CiCx7HA,0CAsBY,iBjCs6HZ,CiC57HA,qCA0BY,mB9ByiB6B,C8BxiB7B,kBjCs6HZ,CiCj8HA,0DAkCU,gBjCo6HV,CiCt8HA,gCAsCU,sBAAwB,CAGxB,ejCk6HV,CiC38HA,+BA6CU,YjCk6HV,CiCr5HA,4BAEI,oBjCu5HJ,CKzkIE,oE4BqLI,oBjCw5HN,CiC75HA,oCAWM,oBjCs5HN,CKjlIE,oF4B8LM,oBjCu5HR,CiCr6HA,6CAkBQ,oBjCu5HR,CiCz6HA,0KA0BM,oBjCs5HN,CiCh7HA,8BA+BI,oB9B9MW,C8B+MX,2BjCq5HJ,CiCr7HA,mCAoCI,qQjCq5HJ,CiCz7HA,2BAwCI,oBjCq5HJ,CiC77HA,6BA0CM,oBjCu5HN,CKjnIE,sE4B6NM,oBjCw5HR,CiCj5HA,2BAEI,UjCm5HJ,CKznIE,kE4ByOI,UjCo5HN,CiCz5HA,mCAWM,wBjCk5HN,CKjoIE,kF4BkPM,yBjCm5HR,CiCj6HA,4CAkBQ,yBjCm5HR,CiCr6HA,sKA0BM,UjCk5HN,CiC56HA,6BA+BI,wB9B5QW,C8B6QX,+BjCi5HJ,CiCj7HA,kCAoCI,2QjCi5HJ,CiCr7HA,0BAwCI,wBjCi5HJ,CiCz7HA,4BA0CM,UjCm5HN,CKjqIE,oE4BiRM,UjCo5HR,CkCjrIA,MACE,iBAAkB,CAClB,YAAa,CACb,qBAAsB,CACtB,WAAY,CACZ,oBAAqB,CACrB,qB/BHa,C+BIb,0BAA2B,CAC3B,iC/BKa,COZX,oBV4rIJ,CkC7rIA,SAYI,cAAe,CACf,alCqrIJ,CkClsIA,2DxBUI,6BP4NgC,CO3NhC,8BV4rIJ,CkCvsIA,yDxBwBI,iCP8MgC,CO7MhC,gCVmrIJ,CkC/qIA,WAGE,aAAc,CACd,elCgrIF,CkC5qIA,YACE,oBlC+qIF,CkC5qIA,eACE,mBAA+B,CAC/B,elC+qIF,CkC5qIA,sBACE,elC+qIF,CKttIE,iB6B4CE,oBlC8qIJ,CkChrIA,sBAMI,mBlC8qIJ,CkCtqIA,aACE,sB/B+uByC,C+B9uBzC,eAAgB,CAEhB,gC/BvDa,C+BwDb,wClCwqIF,CkC7qIA,yBxB/DI,uDVgvIJ,CkCjrIA,sDAaM,YlCwqIN,CkCnqIA,aACE,sB/B6tByC,C+B5tBzC,gC/BvEa,C+BwEb,qClCsqIF,CkCzqIA,wBxBjFI,uDV8vIJ,CkC9pIA,kBAEE,qB/B4sBwC,C+B1sBxC,elCiqIF,CkC9pIA,qCANE,qBAAiC,CAEjC,oBlCuqIF,CkC7pIA,kBACE,iBAAkB,CAClB,KAAM,CACN,OAAQ,CACR,QAAS,CACT,MAAO,CACP,elCgqIF,CkC7pIA,UACE,UAAW,CxBvHT,gCVwxIJ,CkC5pIA,cACE,UAAW,CxBpHT,yCP0yBoF,COzyBpF,0CVoxIJ,CkC7pIA,iBACE,UAAW,CxB3GT,6CP4xBoF,CO3xBpF,4CV4wIJ,CkC3pIA,WACE,YAAa,CACb,qBlC8pIF,CkChqIA,iBAKI,kBlC+pIJ,CctvII,yBoBkFJ,WASI,kBAAmB,CACnB,kB/BwqBsD,C+BvqBtD,iBlCgqIF,CkC3qIF,iBAcM,YAAa,CAEb,QAAY,CACZ,qBAAsB,CACtB,iB/BgqBoD,C+B/pBpD,eAAgB,CAChB,gBlC+pIJ,CACF,CkCtpIA,YACE,YAAa,CACb,qBlCypIF,CkC3pIA,kBAOI,kBlCwpIJ,Cc/wII,yBoBgHJ,YAWI,kBlCypIF,CkCpqIF,kBAgBM,QAAY,CACZ,elCupIJ,CkCxqIF,wBAoBQ,aAAc,CACd,alCupIN,CkC5qIF,mCxBvJI,yBwBkLoC,CxBjLpC,4BVs0IF,CkChrIF,iGAgCY,yBlCopIV,CkCprIF,oGAqCY,4BlCmpIV,CkCxrIF,oCxBzII,wBwBmLmC,CxBlLnC,2BVo0IF,CkC5rIF,mGA+CY,wBlCipIV,CkChsIF,sGAoDY,2BlCgpIV,CACF,CkCpoIA,oBAEI,oBlCsoIJ,CczzII,yBoBiLJ,cAMI,sB/BglBiC,C+BhlBjC,c/BglBiC,C+B/kBjC,0B/BglBuC,C+BhlBvC,uB/BglBuC,C+BhlBvC,uB/BglBuC,C+BhlBvC,kB/BglBuC,C+B/kBvC,SAAU,CACV,QlCuoIF,CkChpIF,oBAYM,oBAAqB,CACrB,UlCuoIJ,CACF,CkC9nIA,iBAEI,elCgoIJ,CkCloIA,8DxB/PI,eVq4IJ,CkCtoIA,wDAUQ,eAAgB,CxBzQpB,eV04IJ,CkC3oIA,+BAgBM,eAAgB,CxBxPlB,4BwByPiC,CxBxPjC,2BVw3IJ,CkCjpIA,8BxBtPI,wBwB2Q8B,CxB1Q9B,yBV24IJ,CkCtpIA,8BAyBM,kBlCioIN,CmC95IA,YACE,YAAa,CACb,cAAe,CACf,mBhC2gCsC,CgC1gCtC,kBhC6gCsC,CgC5gCtC,eAAgB,CAChB,wBhCGgB,COJd,oBVm6IJ,CmC95IA,kCAGI,kBnC+5IJ,CmCl6IA,yCAMM,oBAAqB,CACrB,mBhC8/BmC,CgC7/BnC,ahCLY,CgCMZ,WnCg6IN,CmCz6IA,+CAoBI,yBnCy5IJ,CmC76IA,+CAwBI,oBnCy5IJ,CmCj7IA,wBA4BI,anCy5IJ,CoC/7IA,YACE,YAAa,C7BGb,cAAe,CACf,eAAgB,CGAd,oBVi8IJ,CoCh8IA,WACE,iBAAkB,CAClB,aAAc,CACd,oBjCqwBwC,CiCpwBxC,gBjC6N+B,CiC5N/B,gBjCwwBsC,CiCvwBtC,ajCwBe,CiCvBf,qBjCNa,CiCOb,wBpCm8IF,CoC38IA,iBAWI,SAAU,CACV,ajC2J8D,CiC1J9D,oBAAqB,CACrB,wBjCXc,CiCYd,oBpCo8IJ,CoCn9IA,iBAmBI,SAAU,CACV,SjCiwBiC,CiChwBjC,0CpCo8IJ,CoCh8IA,kCAGM,aAAc,C1BChB,6BPuMgC,COtMhC,gCVi8IJ,CoCt8IA,iC1BVI,8BPqNgC,COpNhC,iCVo9IJ,CoC38IA,6BAcI,SAAU,CACV,UjCvCW,CiCwCX,wBjCXa,CiCYb,oBpCi8IJ,CoCl9IA,+BAqBI,ajCvCc,CiCwCd,mBAAoB,CAEpB,WAAY,CACZ,qBjCjDW,CiCkDX,oBpCg8IJ,CqCt/IE,0BACE,qBlC8wBsC,CCnpBpC,iBAtCY,CiCnFd,erCy/IJ,CqCp/IM,iD3BwBF,4BPwM+B,COvM/B,+BVg+IJ,CqCp/IM,gD3BKF,6BPsN+B,COrN/B,gCVm/IJ,CqCtgJE,0BACE,oBlC4wBqC,CCjpBnC,iBAtCY,CiCnFd,erCygJJ,CqCpgJM,iD3BwBF,4BPyM+B,COxM/B,+BVg/IJ,CqCpgJM,gD3BKF,6BPuN+B,COtN/B,gCVmgJJ,CsCphJA,OACE,oBAAqB,CACrB,kBnC24BsC,CC10BpC,aAAW,CkC/Db,enCmR+B,CmClR/B,aAAc,CACd,iBAAkB,CAClB,kBAAmB,CACnB,uBAAwB,C5BRtB,oBPqOgC,CgBpO9B,6HnBgiJN,CmB3hJI,uCmBNJ,OnBOM,enB+hJJ,CACF,CK5hJE,4BiCGI,oBtC6hJN,CsC3iJA,aAoBI,YtC2hJJ,CsCthJA,YACE,iBAAkB,CAClB,QtCyhJF,CsClhJA,YACE,kBnCg3BsC,CmC/2BtC,iBnC+2BsC,COn5BpC,mBV0jJJ,CsC7gJE,eCjDA,UpCMa,CoCLb,wBvCkkJF,CKpjJE,4CkCVI,UpCCS,CoCAT,wBvCkkJN,CuCrkJU,4CAQJ,SAAU,CACV,yCvCikJN,CsC5hJE,iBCjDA,UpCMa,CoCLb,wBvCilJF,CKnkJE,gDkCVI,UpCCS,CoCAT,wBvCilJN,CuCplJU,gDAQJ,SAAU,CACV,2CvCglJN,CsC3iJE,eCjDA,UpCMa,CoCLb,wBvCgmJF,CKllJE,4CkCVI,UpCCS,CoCAT,wBvCgmJN,CuCnmJU,4CAQJ,SAAU,CACV,yCvC+lJN,CsC1jJE,YCjDA,UpCMa,CoCLb,wBvC+mJF,CKjmJE,sCkCVI,UpCCS,CoCAT,wBvC+mJN,CuClnJU,sCAQJ,SAAU,CACV,0CvC8mJN,CsCzkJE,eCjDA,apCegB,CoCdhB,wBvC8nJF,CKhnJE,4CkCVI,apCUY,CoCTZ,wBvC8nJN,CuCjoJU,4CAQJ,SAAU,CACV,yCvC6nJN,CsCxlJE,cCjDA,UpCMa,CoCLb,wBvC6oJF,CK/nJE,0CkCVI,UpCCS,CoCAT,wBvC6oJN,CuChpJU,0CAQJ,SAAU,CACV,yCvC4oJN,CsCvmJE,aCjDA,apCegB,CoCdhB,wBvC4pJF,CK9oJE,wCkCVI,apCUY,CoCTZ,wBvC4pJN,CuC/pJU,wCAQJ,SAAU,CACV,2CvC2pJN,CsCtnJE,YCjDA,UpCMa,CoCLb,wBvC2qJF,CK7pJE,sCkCVI,UpCCS,CoCAT,wBvC2qJN,CuC9qJU,sCAQJ,SAAU,CACV,wCvC0qJN,CwCvrJA,WACE,iBAAoD,CACpD,kBrC0yBsC,CqCxyBtC,wBrCKgB,COJd,mBVyrJJ,CcloJI,yB0B5DJ,WAQI,iBxC2rJF,CACF,CwCxrJA,iBACE,eAAgB,CAChB,cAAe,C9BTb,eVqsJJ,CyCtsJA,OACE,iBAAkB,CAClB,sBtCm8ByC,CsCl8BzC,kBtCm8BsC,CsCl8BtC,4BAA6C,C/BH3C,oBV6sJJ,CyCrsJA,eAEE,azCusJF,CyCnsJA,YACE,ezCssJF,CyC9rJA,mBACE,kBzCisJF,CyClsJA,0BAKI,iBAAkB,CAClB,KAAM,CACN,OAAQ,CACR,sBtCq6BuC,CsCp6BvC,azCisJJ,CyCvrJE,eC9CA,arBmFgE,CC9E9D,wBD8E8D,CqBjFhE,oB1CyuJF,C0CvuJE,kBACE,wB1C0uJJ,C0CvuJE,2BACE,a1C0uJJ,CyCrsJE,iBC9CA,arBmFgE,CC9E9D,wBD8E8D,CqBjFhE,oB1CuvJF,C0CrvJE,oBACE,wB1CwvJJ,C0CrvJE,6BACE,a1CwvJJ,CyCntJE,eC9CA,arBmFgE,CC9E9D,wBD8E8D,CqBjFhE,oB1CqwJF,C0CnwJE,kBACE,wB1CswJJ,C0CnwJE,2BACE,a1CswJJ,CyCjuJE,YC9CA,arBmFgE,CC9E9D,wBD8E8D,CqBjFhE,oB1CmxJF,C0CjxJE,eACE,wB1CoxJJ,C0CjxJE,wBACE,a1CoxJJ,CyC/uJE,eC9CA,arBmFgE,CC9E9D,wBD8E8D,CqBjFhE,oB1CiyJF,C0C/xJE,kBACE,wB1CkyJJ,C0C/xJE,2BACE,a1CkyJJ,CyC7vJE,cC9CA,arBmFgE,CC9E9D,wBD8E8D,CqBjFhE,oB1C+yJF,C0C7yJE,iBACE,wB1CgzJJ,C0C7yJE,0BACE,a1CgzJJ,CyC3wJE,aC9CA,arBmFgE,CC9E9D,wBD8E8D,CqBjFhE,oB1C6zJF,C0C3zJE,gBACE,wB1C8zJJ,C0C3zJE,yBACE,a1C8zJJ,CyCzxJE,YC9CA,arBmFgE,CC9E9D,wBD8E8D,CqBjFhE,oB1C20JF,C0Cz0JE,eACE,wB1C40JJ,C0Cz0JE,wBACE,a1C40JJ,C2Cp1JE,wCACE,GAAO,0B3Cw1JT,C2Cv1JE,GAAK,uB3C01JP,CACF,C2C71JE,gCACE,GAAO,0B3Cw1JT,C2Cv1JE,GAAK,uB3C01JP,CACF,C2Cv1JA,UACE,YAAa,CACb,WxC48BsC,CwC38BtC,eAAgB,CvCoHZ,gBAtCY,CuC5EhB,wBxCJgB,COJd,oBVm2JJ,C2Ct1JA,cACE,YAAa,CACb,qBAAsB,CACtB,sBAAuB,CACvB,UxCfa,CwCgBb,iBAAkB,CAClB,kBAAmB,CACnB,wBxCWe,CgB9BX,yBnB62JN,CmBx2JI,uCwBOJ,cxBNM,enB42JJ,CACF,C2C51JA,sBrBcE,qKAA6I,CqBZ7I,yB3C+1JF,C2C31JE,uBACE,yDxCy7BkD,CwCz7BlD,iD3C81JJ,C2C51JI,uCAHF,uBAII,sBAAe,CAAf,c3Cg2JJ,CACF,C4Cx4JA,OACE,YAAa,CACb,sB5C24JF,C4Cx4JA,YACE,Q5C24JF,C6C74JA,YACE,YAAa,CACb,qBAAsB,CAGtB,cAAe,CACf,e7C84JF,C6Cr4JA,wBACE,UAAW,CACX,a1CPgB,C0CQhB,kB7Cw4JF,CK94JE,4DwCUE,SAAU,CACV,a1Cbc,C0Ccd,oBAAqB,CACrB,wB7Cw4JJ,C6Cl5JA,+BAcI,a1CjBc,C0CkBd,wB7Cw4JJ,C6C/3JA,iBACE,iBAAkB,CAClB,aAAc,CACd,sB1C47ByC,C0C17BzC,kB1CuL+B,C0CrL/B,qB1C3Ca,C0C4Cb,iC7Cg4JF,C6Cx4JA,6BnC7BI,6BP4NgC,CO3NhC,8BVy6JJ,C6C74JA,4BAeI,eAAgB,CnC9BhB,iCP8MgC,CO7MhC,gCVi6JJ,C6Cn5JA,oDAqBI,a1CnDc,C0CoDd,mBAAoB,CACpB,qB7Ck4JJ,C6Cz5JA,wBA4BI,SAAU,CACV,U1CjEW,C0CkEX,wB1CrCa,C0CsCb,oB7Ci4JJ,C6Cp3JI,uBACE,kB7Cu3JN,C6Cx3JI,wCAII,iB1C4IyB,C0C3IzB,e7Cw3JR,C6C73JI,oDnCpDA,6BPuMgC,COtMhC,gCPsMgC,CO1LhC,yBV06JJ,C6Cn4JI,mDAaM,cAAe,CnC/ErB,8BPqNgC,COpNhC,iCPoNgC,CO9KhC,2BVq6JJ,Ccr6JI,yB+B2BA,0BACE,kB7C84JJ,C6C/4JE,2CAII,iB1C4IyB,C0C3IzB,e7C84JN,C6Cn5JE,uDnCpDA,6BPuMgC,COtMhC,gCPsMgC,CO1LhC,yBV+7JF,C6Cx5JE,sDAaM,cAAe,CnC/ErB,8BPqNgC,COpNhC,iCPoNgC,CO9KhC,2BVy7JF,CACF,Cc17JI,yB+B2BA,0BACE,kB7Cm6JJ,C6Cp6JE,2CAII,iB1C4IyB,C0C3IzB,e7Cm6JN,C6Cx6JE,uDnCpDA,6BPuMgC,COtMhC,gCPsMgC,CO1LhC,yBVo9JF,C6C76JE,sDAaM,cAAe,CnC/ErB,8BPqNgC,COpNhC,iCPoNgC,CO9KhC,2BV88JF,CACF,Cc/8JI,yB+B2BA,0BACE,kB7Cw7JJ,C6Cz7JE,2CAII,iB1C4IyB,C0C3IzB,e7Cw7JN,C6C77JE,uDnCpDA,6BPuMgC,COtMhC,gCPsMgC,CO1LhC,yBVy+JF,C6Cl8JE,sDAaM,cAAe,CnC/ErB,8BPqNgC,COpNhC,iCPoNgC,CO9KhC,2BVm+JF,CACF,Ccp+JI,0B+B2BA,0BACE,kB7C68JJ,C6C98JE,2CAII,iB1C4IyB,C0C3IzB,e7C68JN,C6Cl9JE,uDnCpDA,6BPuMgC,COtMhC,gCPsMgC,CO1LhC,yBV8/JF,C6Cv9JE,sDAaM,cAAe,CnC/ErB,8BPqNgC,COpNhC,iCPoNgC,CO9KhC,2BVw/JF,CACF,C6Cl8JA,mCAEI,cAAe,CACf,aAAc,CnCjHd,eVsjKJ,C6Cx8JA,8CAOM,kB7Cq8JN,C6C58JA,2DAaM,Y7Cm8JN,C6Ch9JA,yDAmBM,eAAgB,CAChB,e7Ci8JN,C8CrkKE,yBACE,azBgF8D,CyB/E9D,wB9CwkKJ,CK7jKE,4GyCPM,azB2E0D,CyB1E1D,wB9CwkKR,C8C/kKE,uDAWM,U3CPO,C2CQP,wBzBqE0D,CyBpE1D,oB9CwkKR,C8CrlKE,2BACE,azBgF8D,CyB/E9D,wB9CwlKJ,CK7kKE,gHyCPM,azB2E0D,CyB1E1D,wB9CwlKR,C8C/lKE,yDAWM,U3CPO,C2CQP,wBzBqE0D,CyBpE1D,oB9CwlKR,C8CrmKE,yBACE,azBgF8D,CyB/E9D,wB9CwmKJ,CK7lKE,4GyCPM,azB2E0D,CyB1E1D,wB9CwmKR,C8C/mKE,uDAWM,U3CPO,C2CQP,wBzBqE0D,CyBpE1D,oB9CwmKR,C8CrnKE,sBACE,azBgF8D,CyB/E9D,wB9CwnKJ,CK7mKE,sGyCPM,azB2E0D,CyB1E1D,wB9CwnKR,C8C/nKE,oDAWM,U3CPO,C2CQP,wBzBqE0D,CyBpE1D,oB9CwnKR,C8CroKE,yBACE,azBgF8D,CyB/E9D,wB9CwoKJ,CK7nKE,4GyCPM,azB2E0D,CyB1E1D,wB9CwoKR,C8C/oKE,uDAWM,U3CPO,C2CQP,wBzBqE0D,CyBpE1D,oB9CwoKR,C8CrpKE,wBACE,azBgF8D,CyB/E9D,wB9CwpKJ,CK7oKE,0GyCPM,azB2E0D,CyB1E1D,wB9CwpKR,C8C/pKE,sDAWM,U3CPO,C2CQP,wBzBqE0D,CyBpE1D,oB9CwpKR,C8CrqKE,uBACE,azBgF8D,CyB/E9D,wB9CwqKJ,CK7pKE,wGyCPM,azB2E0D,CyB1E1D,wB9CwqKR,C8C/qKE,qDAWM,U3CPO,C2CQP,wBzBqE0D,CyBpE1D,oB9CwqKR,C8CrrKE,sBACE,azBgF8D,CyB/E9D,wB9CwrKJ,CK7qKE,sGyCPM,azB2E0D,CyB1E1D,wB9CwrKR,C8C/rKE,oDAWM,U3CPO,C2CQP,wBzBqE0D,CyBpE1D,oB9CwrKR,C+CxsKA,OACE,WAAY,C3C8HR,gBAtCY,C2CtFhB,e5CyR+B,C4CxR/B,aAAc,CACd,U5CYa,C4CXb,wB5CCa,C4CAb,U/C2sKF,CKtsKE,a0CDE,U5CMW,C4CLX,oB/C2sKJ,CKvsKE,sF0CCI,W/C0sKN,C+C/rKA,aACE,SAAU,CACV,4BAA6B,CAC7B,QAAS,CACT,uBAAgB,CAAhB,e/CksKF,C+C5rKA,iBACE,mB/C+rKF,CgDtuKA,OACE,e7C43BuC,C6C33BvC,eAAgB,C5C6HZ,iBAtCY,C4CpFhB,oC7CEa,C6CDb,2BAA4B,CAC5B,+B7C63BmD,C6C53BnD,yC7CSa,C6CRb,kCAA2B,CAA3B,0BAA2B,CAC3B,SAAU,CtCLR,oBV8uKJ,CgDnvKA,wBAcI,oBhDyuKJ,CgDvvKA,eAkBI,ShDyuKJ,CgD3vKA,YAsBI,aAAc,CACd,ShDyuKJ,CgDhwKA,YA2BI,YhDyuKJ,CgDruKA,cACE,YAAa,CACb,kBAAmB,CACnB,qB7C41BwC,C6C31BxC,a7CtBgB,C6CuBhB,oC7C7Ba,C6C8Bb,2BAA4B,CAC5B,uChDwuKF,CgDruKA,YACE,chDwuKF,CiD5wKA,YAEE,ejD8wKF,CiDhxKA,mBAKI,iBAAkB,CAClB,ejD+wKJ,CiD1wKA,OACE,cAAe,CACf,KAAM,CACN,MAAO,CACP,Y9CopBsC,C8CnpBtC,YAAa,CACb,UAAW,CACX,WAAY,CACZ,eAAgB,CAGhB,SjD2wKF,CiDpwKA,cACE,iBAAkB,CAClB,UAAW,CACX,Y9C63BuC,C8C33BvC,mBjDswKF,CiDnwKE,0B9BrCI,yChB27BoD,CgB37BpD,iChB27BoD,CgB37BpD,gEhB27BoD,C8Cp5BtD,mC9Ck5BmD,C8Cl5BnD,2BjDswKJ,CmBxyKI,uC8BgCF,0B9B/BI,enB4yKJ,CACF,CiD1wKE,0BACE,sB9Cg5BoC,C8Ch5BpC,cjD6wKJ,CiDzwKA,yBACE,YAAa,CACb,4BjD4wKF,CiD9wKA,wCAKI,6BAAqD,CACrD,ejD6wKJ,CiDnxKA,8EAWI,ajD6wKJ,CiDxxKA,qCAeI,ejD6wKJ,CiDzwKA,uBACE,YAAa,CACb,kBAAmB,CACnB,4BjD4wKF,CiD/wKA,8BAOI,aAAc,CACd,yBAAiD,CACjD,UjD4wKJ,CiDrxKA,+CAcI,qBAAsB,CACtB,sBAAuB,CACvB,WjD2wKJ,CiD3xKA,8DAmBM,ejD4wKN,CiD/xKA,sDAuBM,YjD4wKN,CiDtwKA,eACE,iBAAkB,CAClB,YAAa,CACb,qBAAsB,CACtB,UAAW,CAGX,mBAAoB,CACpB,qB9CrGa,C8CsGb,2BAA4B,CAC5B,+B9C7Fa,COZX,mBPsO+B,C8CzHjC,SjDqwKF,CiDjwKA,gBACE,cAAe,CACf,KAAM,CACN,MAAO,CACP,Y9C8iBsC,C8C7iBtC,WAAY,CACZ,YAAa,CACb,qBjDowKF,CiD3wKA,qBAUW,SjDqwKX,CiD/wKA,qBAWW,UjDwwKX,CiDnwKA,cACE,YAAa,CACb,sBAAuB,CACvB,6BAA8B,CAC9B,Y9C6yBsC,C8C5yBtC,+B9CjIgB,COId,4BP6N+B,CO5N/B,6BVo4KJ,CiD7wKA,qBASI,Y9CwyBoC,C8CtyBpC,6BjDuwKJ,CiDlwKA,aACE,eAAgB,CAChB,ejDqwKF,CiDhwKA,YACE,iBAAkB,CAGlB,aAAc,CACd,YjDiwKF,CiD7vKA,cACE,YAAa,CACb,kBAAmB,CACnB,wBAAyB,CACzB,Y9CuvBsC,C8CtvBtC,4B9CjKgB,COkBd,gCP+M+B,CO9M/B,+BVg5KJ,CiDvwKA,iCASyB,kBjDkwKzB,CiD3wKA,gCAUwB,mBjDqwKxB,CiDjwKA,yBACE,iBAAkB,CAClB,WAAY,CACZ,UAAW,CACX,WAAY,CACZ,ejDowKF,Ccj4KI,yBmCzBJ,cA6JI,e9C4vBqC,C8C3vBrC,mBjDkwKF,CiD/4KF,yBAiJI,8BjDiwKF,CiDl5KF,wCAoJM,+BjDiwKJ,CiDl4KF,uBAsII,8BjD+vKF,CiDr4KF,8BAyIM,2BjD+vKJ,CiDvvKA,UAAY,ejD0vKZ,CACF,Ccv5KI,yBmCgKF,oBAEE,ejD2vKF,CACF,Cc95KI,0BmCuKF,UAAY,gBjD4vKZ,CACF,CkD/9KA,SACE,iBAAkB,CAClB,Y/CwqBsC,C+CvqBtC,aAAc,CACd,Q/C60BmC,CgDj1BnC,sLhD+QiN,CgD7QjN,iBAAkB,CAClB,ehDuR+B,CgDtR/B,ehD2R+B,CgD1R/B,eAAgB,CAChB,gBAAiB,CACjB,oBAAqB,CACrB,gBAAiB,CACjB,mBAAoB,CACpB,qBAAsB,CACtB,iBAAkB,CAClB,mBAAoB,CACpB,kBAAmB,CACnB,eAAgB,C/CgHZ,iBAtCY,C8C9EhB,oBAAqB,CACrB,SlD4+KF,CkDv/KA,cAaW,UlD8+KX,CkD3/KA,gBAgBI,iBAAkB,CAClB,aAAc,CACd,W/Ci0BqC,C+Ch0BrC,YlD++KJ,CkDlgLA,uBAsBM,iBAAkB,CAClB,UAAW,CACX,wBAAyB,CACzB,kBlDg/KN,CkD3+KA,mDACE,elD8+KF,CkD/+KA,iEAII,QlD++KJ,CkDn/KA,+EAOM,KAAM,CACN,0BAAgE,CAChE,qBlDg/KN,CkD3+KA,uDACE,elD8+KF,CkD/+KA,qEAII,MAAO,CACP,W/CmyBqC,C+ClyBrC,YlD++KJ,CkDr/KA,mFASM,OAAQ,CACR,gCAA2F,CAC3F,uBlDg/KN,CkD3+KA,yDACE,elD8+KF,CkD/+KA,uEAII,KlD++KJ,CkDn/KA,qFAOM,QAAS,CACT,0B/CgxBmC,C+C/wBnC,wBlDg/KN,CkD3+KA,qDACE,elD8+KF,CkD/+KA,mEAII,OAAQ,CACR,W/CqwBqC,C+CpwBrC,YlD++KJ,CkDr/KA,iFASM,MAAO,CACP,gC/CgwBmC,C+C/vBnC,sBlDg/KN,CkD39KA,eACE,e/C+tBuC,C+C9tBvC,oB/CouBuC,C+CnuBvC,U/CvGa,C+CwGb,iBAAkB,CAClB,qB/C/Fa,COZX,oBV0kLJ,CoD/kLA,SAEE,KAAM,CACN,MAAO,CACP,YjDsqBsC,CiDpqBtC,ejD+1BuC,CgDp2BvC,sLhD+QiN,CgD7QjN,iBAAkB,CAClB,ehDuR+B,CgDtR/B,ehD2R+B,CgD1R/B,eAAgB,CAChB,gBAAiB,CACjB,oBAAqB,CACrB,gBAAiB,CACjB,mBAAoB,CACpB,qBAAsB,CACtB,iBAAkB,CAClB,mBAAoB,CACpB,kBAAmB,CACnB,eAAgB,C/CgHZ,iBAtCY,CgD7EhB,oBAAqB,CACrB,qBjDNa,CiDOb,2BAA4B,CAC5B,+BjDEa,COZX,mBVumLJ,CoD5mLA,yBACE,iBAAkB,CAIlB,apD+mLF,CoDpnLA,gBAsBI,UjD81BoC,CiD71BpC,YjD81BqC,CiD71BrC,cpD4lLJ,CoDpnLA,6CA4BM,iBAAkB,CAClB,aAAc,CACd,UAAW,CACX,wBAAyB,CACzB,kBpD4lLN,CoDvlLA,mDACE,mBpD0lLF,CoD3lLA,iEAII,0BpD2lLJ,CoD/lLA,+EAOM,QAAS,CACT,0BAAgE,CAChE,gCpD4lLN,CoDrmLA,6EAaM,UjDqL2B,CiDpL3B,0BAAgE,CAChE,qBpD4lLN,CoDvlLA,uDACE,iBpD0lLF,CoD3lLA,qEAII,wBAAsE,CACtE,WjDuzBqC,CiDtzBrC,WjDqzBoC,CiDpzBpC,cpD2lLJ,CoDlmLA,mFAUM,MAAO,CACP,gCAA2F,CAC3F,kCpD4lLN,CoDxmLA,iFAgBM,QjD8J2B,CiD7J3B,gCAA2F,CAC3F,uBpD4lLN,CoDvlLA,yDACE,gBpD0lLF,CoD3lLA,uEAII,uBpD2lLJ,CoD/lLA,qFAOM,KAAM,CACN,0BAA2F,CAC3F,mCpD4lLN,CoDrmLA,mFAaM,OjD0I2B,CiDzI3B,0BAA2F,CAC3F,wBpD4lLN,CoD3mLA,uGAqBI,iBAAkB,CAClB,KAAM,CACN,QAAS,CACT,aAAc,CACd,UjD2wBoC,CiD1wBpC,kBAAsC,CACtC,UAAW,CACX,+BpD0lLJ,CoDtlLA,qDACE,kBpDylLF,CoD1lLA,mEAII,yBAAuE,CACvE,WjDgwBqC,CiD/vBrC,WjD8vBoC,CiD7vBpC,cpD0lLJ,CoDjmLA,iFAUM,OAAQ,CACR,gCjD0vBmC,CiDzvBnC,iCpD2lLN,CoDvmLA,+EAgBM,SjDuG2B,CiDtG3B,gCjDovBmC,CiDnvBnC,sBpD2lLN,CoDrkLA,gBACE,oBjDqtBwC,CiDptBxC,eAAgB,ChD3BZ,cAtCY,CgDoEhB,wBjD8sByD,CiD7sBzD,+BAAyE,C1ChJvE,wC0CiJyE,C1ChJzE,yCVwtLJ,CoD/kLA,sBAWI,YpDwkLJ,CoDpkLA,cACE,oBjDssBwC,CiDrsBxC,apDukLF,CqDnuLA,UACE,iBrDsuLF,CqDnuLA,wBACE,kBrDsuLF,CqDnuLA,gBACE,iBAAkB,CAClB,UAAW,CACX,erDsuLF,CsD7vLE,sBACE,aAAc,CACd,UAAW,CACX,UtDgwLJ,CqDxuLA,eACE,iBAAkB,CAClB,YAAa,CACb,UAAW,CACX,UAAW,CACX,kBAAmB,CACnB,kCAA2B,CAA3B,0BAA2B,ClC5BvB,4ChB6iCkF,CgB7iClF,oChB6iCkF,CgB7iClF,sEnBwwLN,CmBnwLI,uCkCiBJ,elChBM,enBuwLJ,CACF,CqD9uLA,8DAGE,arDivLF,CqD9uLA,yEAEE,kCAA2B,CAA3B,0BrDivLF,CqD9uLA,yEAEE,mCAA4B,CAA5B,2BrDivLF,CqDzuLA,8BAEI,SAAU,CACV,2BAA4B,CAC5B,sBAAe,CAAf,crD2uLJ,CqD/uLA,kJAUI,SAAU,CACV,SrD2uLJ,CqDtvLA,qFAgBI,SAAU,CACV,SAAU,ClCtER,yBnBkzLN,CmB7yLI,uCkCgDJ,qFlC/CM,enBkzLJ,CACF,CqDzuLA,8CAEE,iBAAkB,CAClB,KAAM,CACN,QAAS,CACT,SAAU,CAEV,YAAa,CACb,kBAAmB,CACnB,sBAAuB,CACvB,SlD87BsC,CkD77BtC,UlD1Fa,CkD2Fb,iBAAkB,CAClB,UlD47BqC,CgBzhCjC,4BnBy0LN,CmBp0LI,uCkC2EJ,8ClC1EM,enBy0LJ,CACF,CKt0LE,oHgDwFE,UlDjGW,CkDkGX,oBAAqB,CACrB,SAAU,CACV,UrDovLJ,CqDjvLA,uBACE,MrDovLF,CqD/uLA,uBACE,OrDkvLF,CqD3uLA,wDAEE,oBAAqB,CACrB,UlD86BuC,CkD76BvC,WlD66BuC,CkD56BvC,kCrD8uLF,CqD5uLA,4BACE,8MrD+uLF,CqD7uLA,4BACE,+MrDgvLF,CqDvuLA,qBACE,iBAAkB,CAClB,OAAQ,CACR,QAAS,CACT,MAAO,CACP,UAAW,CACX,YAAa,CACb,sBAAuB,CACvB,cAAe,CAEf,gBlDo4BsC,CkDn4BtC,elDm4BsC,CkDl4BtC,erDyuLF,CqDrvLA,wBAeI,sBAAuB,CACvB,aAAc,CACd,UlDk4BqC,CkDj4BrC,UlDk4BoC,CkDj4BpC,gBlDm4BoC,CkDl4BpC,elDk4BoC,CkDj4BpC,kBAAmB,CACnB,cAAe,CACf,qBlDhKW,CkDiKX,2BAA4B,CAE5B,iCAAiE,CACjE,oCAAoE,CACpE,UAAW,ClCtKT,2BnBg5LN,CmB34LI,uCkCqIJ,wBlCpIM,enB+4LJ,CACF,CqD5wLA,6BAiCI,SrD+uLJ,CqDtuLA,kBACE,iBAAkB,CAClB,SAA2C,CAC3C,WAAY,CACZ,QAA0C,CAC1C,UAAW,CACX,gBAAiB,CACjB,mBAAoB,CACpB,UlD3La,CkD4Lb,iBrDyuLF,CuDx6LA,kCACE,GAAK,+BAAyB,CAAzB,uBvD46LL,CACF,CuD96LA,0BACE,GAAK,+BAAyB,CAAzB,uBvD46LL,CACF,CuD16LA,gBACE,oBAAqB,CACrB,UpD8iC0B,CoD7iC1B,WpD6iC0B,CoD5iC1B,0BAA2B,CAE3B,kBAA+B,CAA/B,oCAA+B,CAE/B,iBAAkB,CAClB,qDAA8C,CAA9C,6CvD46LF,CuDz6LA,mBACE,UpDuiC4B,CoDtiC5B,WpDsiC4B,CoDriC5B,iBvD46LF,CuDr6LA,gCACE,GACE,0BAAmB,CAAnB,kBvDw6LF,CuDt6LA,IACE,SvDw6LF,CACF,CuD96LA,wBACE,GACE,0BAAmB,CAAnB,kBvDw6LF,CuDt6LA,IACE,SvDw6LF,CACF,CuDr6LA,cACE,oBAAqB,CACrB,UpD+gC0B,CoD9gC1B,WpD8gC0B,CoD7gC1B,0BAA2B,CAC3B,6BAA8B,CAE9B,iBAAkB,CAClB,SAAU,CACV,mDAA4C,CAA5C,2CvDu6LF,CuDp6LA,iBACE,UpDwgC4B,CoDvgC5B,WvDu6LF,CwD19LA,gBAAqB,iCxD89LrB,CwD79LA,WAAqB,4BxDi+LrB,CwDh+LA,cAAqB,+BxDo+LrB,CwDn+LA,cAAqB,+BxDu+LrB,CwDt+LA,mBAAqB,oCxD0+LrB,CwDz+LA,gBAAqB,iCxD6+LrB,CyD/+LE,YACE,kCzDk/LJ,CKx+LE,sFoDLI,kCzDm/LN,CyDz/LE,cACE,kCzD4/LJ,CKl/LE,8FoDLI,kCzD6/LN,CyDngME,YACE,kCzDsgMJ,CK5/LE,sFoDLI,kCzDugMN,CyD7gME,SACE,kCzDghMJ,CKtgME,0EoDLI,kCzDihMN,CyDvhME,YACE,kCzD0hMJ,CKhhME,sFoDLI,kCzD2hMN,CyDjiME,WACE,kCzDoiMJ,CK1hME,kFoDLI,kCzDqiMN,CyD3iME,UACE,kCzD8iMJ,CKpiME,8EoDLI,kCzD+iMN,CyDrjME,SACE,kCzDwjMJ,CK9iME,0EoDLI,kCzDyjMN,C0DxjMA,UACE,+B1D2jMF,C0DxjMA,gBACE,sC1D2jMF,C2DtkMA,QAAkB,kC3D0kMlB,C2DzkMA,YAAkB,sC3D6kMlB,C2D5kMA,cAAkB,wC3DglMlB,C2D/kMA,eAAkB,yC3DmlMlB,C2DllMA,aAAkB,uC3DslMlB,C2DplMA,UAAmB,kB3DwlMnB,C2DvlMA,cAAmB,sB3D2lMnB,C2D1lMA,gBAAmB,wB3D8lMnB,C2D7lMA,iBAAmB,yB3DimMnB,C2DhmMA,eAAmB,uB3DomMnB,C2DjmME,gBACE,8B3DomMJ,C2DrmME,kBACE,8B3DwmMJ,C2DzmME,gBACE,8B3D4mMJ,C2D7mME,aACE,8B3DgnMJ,C2DjnME,gBACE,8B3DonMJ,C2DrnME,eACE,8B3DwnMJ,C2DznME,cACE,8B3D4nMJ,C2D7nME,aACE,8B3DgoMJ,C2D5nMA,cACE,2B3D+nMF,C2DxnMA,YACE,6B3D2nMF,C2DxnMA,SACE,8B3D2nMF,C2DxnMA,aACE,uC3D4nMF,C2DxnMA,4BAHE,wC3DgoMF,C2DxnMA,+BAHE,2C3DgoMF,C2DxnMA,8BAHE,0C3DgoMF,C2D7nMA,cACE,uC3D4nMF,C2DxnMA,YACE,6B3D2nMF,C2DxnMA,gBACE,2B3D2nMF,C2DxnMA,cACE,6B3D2nMF,C2DxnMA,WACE,yB3D2nMF,CsDnsME,gBACE,aAAc,CACd,UAAW,CACX,UtDssMJ,C4D/rMM,QAAwB,sB5DmsM9B,C4DnsMM,UAAwB,wB5DusM9B,C4DvsMM,gBAAwB,8B5D2sM9B,C4D3sMM,SAAwB,uB5D+sM9B,C4D/sMM,SAAwB,uB5DmtM9B,C4DntMM,aAAwB,2B5DutM9B,C4DvtMM,cAAwB,4B5D2tM9B,C4D3tMM,QAAwB,sB5D+tM9B,C4D/tMM,eAAwB,6B5DmuM9B,CclrMI,yB8CjDE,WAAwB,sB5DwuM5B,C4DxuMI,aAAwB,wB5D2uM5B,C4D3uMI,mBAAwB,8B5D8uM5B,C4D9uMI,YAAwB,uB5DivM5B,C4DjvMI,YAAwB,uB5DovM5B,C4DpvMI,gBAAwB,2B5DuvM5B,C4DvvMI,iBAAwB,4B5D0vM5B,C4D1vMI,WAAwB,sB5D6vM5B,C4D7vMI,kBAAwB,6B5DgwM5B,CACF,CchtMI,yB8CjDE,WAAwB,sB5DswM5B,C4DtwMI,aAAwB,wB5DywM5B,C4DzwMI,mBAAwB,8B5D4wM5B,C4D5wMI,YAAwB,uB5D+wM5B,C4D/wMI,YAAwB,uB5DkxM5B,C4DlxMI,gBAAwB,2B5DqxM5B,C4DrxMI,iBAAwB,4B5DwxM5B,C4DxxMI,WAAwB,sB5D2xM5B,C4D3xMI,kBAAwB,6B5D8xM5B,CACF,Cc9uMI,yB8CjDE,WAAwB,sB5DoyM5B,C4DpyMI,aAAwB,wB5DuyM5B,C4DvyMI,mBAAwB,8B5D0yM5B,C4D1yMI,YAAwB,uB5D6yM5B,C4D7yMI,YAAwB,uB5DgzM5B,C4DhzMI,gBAAwB,2B5DmzM5B,C4DnzMI,iBAAwB,4B5DszM5B,C4DtzMI,WAAwB,sB5DyzM5B,C4DzzMI,kBAAwB,6B5D4zM5B,CACF,Cc5wMI,0B8CjDE,WAAwB,sB5Dk0M5B,C4Dl0MI,aAAwB,wB5Dq0M5B,C4Dr0MI,mBAAwB,8B5Dw0M5B,C4Dx0MI,YAAwB,uB5D20M5B,C4D30MI,YAAwB,uB5D80M5B,C4D90MI,gBAAwB,2B5Di1M5B,C4Dj1MI,iBAAwB,4B5Do1M5B,C4Dp1MI,WAAwB,sB5Du1M5B,C4Dv1MI,kBAAwB,6B5D01M5B,CACF,C4Dj1MA,aAEI,cAAqB,sB5Do1MvB,C4Dp1ME,gBAAqB,wB5Du1MvB,C4Dv1ME,sBAAqB,8B5D01MvB,C4D11ME,eAAqB,uB5D61MvB,C4D71ME,eAAqB,uB5Dg2MvB,C4Dh2ME,mBAAqB,2B5Dm2MvB,C4Dn2ME,oBAAqB,4B5Ds2MvB,C4Dt2ME,cAAqB,sB5Dy2MvB,C4Dz2ME,qBAAqB,6B5D42MvB,CACF,C6Dl4MA,kBACE,iBAAkB,CAClB,aAAc,CACd,UAAW,CACX,SAAU,CACV,e7Dq4MF,C6D14MA,yBAQI,aAAc,CACd,U7Ds4MJ,C6D/4MA,2IAiBI,iBAAkB,CAClB,KAAM,CACN,QAAS,CACT,MAAO,CACP,UAAW,CACX,WAAY,CACZ,Q7Ds4MJ,C6D93ME,+BAEI,sB7Dg4MN,C6Dl4ME,+BAEI,kB7Do4MN,C6Dt4ME,8BAEI,e7Dw4MN,C6D14ME,8BAEI,gB7D44MN,C8Dr6MI,UAAgC,4B9Dy6MpC,C8Dx6MI,aAAgC,+B9D46MpC,C8D36MI,kBAAgC,oC9D+6MpC,C8D96MI,qBAAgC,uC9Dk7MpC,C8Dh7MI,WAA8B,wB9Do7MlC,C8Dn7MI,aAA8B,0B9Du7MlC,C8Dt7MI,mBAA8B,gC9D07MlC,C8Dz7MI,WAA8B,uB9D67MlC,C8D57MI,aAA8B,qB9Dg8MlC,C8D/7MI,aAA8B,qB9Dm8MlC,C8Dl8MI,eAA8B,uB9Ds8MlC,C8Dr8MI,eAA8B,uB9Dy8MlC,C8Dv8MI,uBAAoC,oC9D28MxC,C8D18MI,qBAAoC,kC9D88MxC,C8D78MI,wBAAoC,gC9Di9MxC,C8Dh9MI,yBAAoC,uC9Do9MxC,C8Dn9MI,wBAAoC,sC9Du9MxC,C8Dr9MI,mBAAiC,gC9Dy9MrC,C8Dx9MI,iBAAiC,8B9D49MrC,C8D39MI,oBAAiC,4B9D+9MrC,C8D99MI,sBAAiC,8B9Dk+MrC,C8Dj+MI,qBAAiC,6B9Dq+MrC,C8Dn+MI,qBAAkC,kC9Du+MtC,C8Dt+MI,mBAAkC,gC9D0+MtC,C8Dz+MI,sBAAkC,8B9D6+MtC,C8D5+MI,uBAAkC,qC9Dg/MtC,C8D/+MI,sBAAkC,oC9Dm/MtC,C8Dl/MI,uBAAkC,+B9Ds/MtC,C8Dp/MI,iBAAgC,yB9Dw/MpC,C8Dv/MI,kBAAgC,+B9D2/MpC,C8D1/MI,gBAAgC,6B9D8/MpC,C8D7/MI,mBAAgC,2B9DigNpC,C8DhgNI,qBAAgC,6B9DogNpC,C8DngNI,oBAAgC,4B9DugNpC,Cc3/MI,yBgDlDA,aAAgC,4B9DkjNlC,C8DjjNE,gBAAgC,+B9DojNlC,C8DnjNE,qBAAgC,oC9DsjNlC,C8DrjNE,wBAAgC,uC9DwjNlC,C8DtjNE,cAA8B,wB9DyjNhC,C8DxjNE,gBAA8B,0B9D2jNhC,C8D1jNE,sBAA8B,gC9D6jNhC,C8D5jNE,cAA8B,uB9D+jNhC,C8D9jNE,gBAA8B,qB9DikNhC,C8DhkNE,gBAA8B,qB9DmkNhC,C8DlkNE,kBAA8B,uB9DqkNhC,C8DpkNE,kBAA8B,uB9DukNhC,C8DrkNE,0BAAoC,oC9DwkNtC,C8DvkNE,wBAAoC,kC9D0kNtC,C8DzkNE,2BAAoC,gC9D4kNtC,C8D3kNE,4BAAoC,uC9D8kNtC,C8D7kNE,2BAAoC,sC9DglNtC,C8D9kNE,sBAAiC,gC9DilNnC,C8DhlNE,oBAAiC,8B9DmlNnC,C8DllNE,uBAAiC,4B9DqlNnC,C8DplNE,yBAAiC,8B9DulNnC,C8DtlNE,wBAAiC,6B9DylNnC,C8DvlNE,wBAAkC,kC9D0lNpC,C8DzlNE,sBAAkC,gC9D4lNpC,C8D3lNE,yBAAkC,8B9D8lNpC,C8D7lNE,0BAAkC,qC9DgmNpC,C8D/lNE,yBAAkC,oC9DkmNpC,C8DjmNE,0BAAkC,+B9DomNpC,C8DlmNE,oBAAgC,yB9DqmNlC,C8DpmNE,qBAAgC,+B9DumNlC,C8DtmNE,mBAAgC,6B9DymNlC,C8DxmNE,sBAAgC,2B9D2mNlC,C8D1mNE,wBAAgC,6B9D6mNlC,C8D5mNE,uBAAgC,4B9D+mNlC,CACF,CcpmNI,yBgDlDA,aAAgC,4B9D2pNlC,C8D1pNE,gBAAgC,+B9D6pNlC,C8D5pNE,qBAAgC,oC9D+pNlC,C8D9pNE,wBAAgC,uC9DiqNlC,C8D/pNE,cAA8B,wB9DkqNhC,C8DjqNE,gBAA8B,0B9DoqNhC,C8DnqNE,sBAA8B,gC9DsqNhC,C8DrqNE,cAA8B,uB9DwqNhC,C8DvqNE,gBAA8B,qB9D0qNhC,C8DzqNE,gBAA8B,qB9D4qNhC,C8D3qNE,kBAA8B,uB9D8qNhC,C8D7qNE,kBAA8B,uB9DgrNhC,C8D9qNE,0BAAoC,oC9DirNtC,C8DhrNE,wBAAoC,kC9DmrNtC,C8DlrNE,2BAAoC,gC9DqrNtC,C8DprNE,4BAAoC,uC9DurNtC,C8DtrNE,2BAAoC,sC9DyrNtC,C8DvrNE,sBAAiC,gC9D0rNnC,C8DzrNE,oBAAiC,8B9D4rNnC,C8D3rNE,uBAAiC,4B9D8rNnC,C8D7rNE,yBAAiC,8B9DgsNnC,C8D/rNE,wBAAiC,6B9DksNnC,C8DhsNE,wBAAkC,kC9DmsNpC,C8DlsNE,sBAAkC,gC9DqsNpC,C8DpsNE,yBAAkC,8B9DusNpC,C8DtsNE,0BAAkC,qC9DysNpC,C8DxsNE,yBAAkC,oC9D2sNpC,C8D1sNE,0BAAkC,+B9D6sNpC,C8D3sNE,oBAAgC,yB9D8sNlC,C8D7sNE,qBAAgC,+B9DgtNlC,C8D/sNE,mBAAgC,6B9DktNlC,C8DjtNE,sBAAgC,2B9DotNlC,C8DntNE,wBAAgC,6B9DstNlC,C8DrtNE,uBAAgC,4B9DwtNlC,CACF,Cc7sNI,yBgDlDA,aAAgC,4B9DowNlC,C8DnwNE,gBAAgC,+B9DswNlC,C8DrwNE,qBAAgC,oC9DwwNlC,C8DvwNE,wBAAgC,uC9D0wNlC,C8DxwNE,cAA8B,wB9D2wNhC,C8D1wNE,gBAA8B,0B9D6wNhC,C8D5wNE,sBAA8B,gC9D+wNhC,C8D9wNE,cAA8B,uB9DixNhC,C8DhxNE,gBAA8B,qB9DmxNhC,C8DlxNE,gBAA8B,qB9DqxNhC,C8DpxNE,kBAA8B,uB9DuxNhC,C8DtxNE,kBAA8B,uB9DyxNhC,C8DvxNE,0BAAoC,oC9D0xNtC,C8DzxNE,wBAAoC,kC9D4xNtC,C8D3xNE,2BAAoC,gC9D8xNtC,C8D7xNE,4BAAoC,uC9DgyNtC,C8D/xNE,2BAAoC,sC9DkyNtC,C8DhyNE,sBAAiC,gC9DmyNnC,C8DlyNE,oBAAiC,8B9DqyNnC,C8DpyNE,uBAAiC,4B9DuyNnC,C8DtyNE,yBAAiC,8B9DyyNnC,C8DxyNE,wBAAiC,6B9D2yNnC,C8DzyNE,wBAAkC,kC9D4yNpC,C8D3yNE,sBAAkC,gC9D8yNpC,C8D7yNE,yBAAkC,8B9DgzNpC,C8D/yNE,0BAAkC,qC9DkzNpC,C8DjzNE,yBAAkC,oC9DozNpC,C8DnzNE,0BAAkC,+B9DszNpC,C8DpzNE,oBAAgC,yB9DuzNlC,C8DtzNE,qBAAgC,+B9DyzNlC,C8DxzNE,mBAAgC,6B9D2zNlC,C8D1zNE,sBAAgC,2B9D6zNlC,C8D5zNE,wBAAgC,6B9D+zNlC,C8D9zNE,uBAAgC,4B9Di0NlC,CACF,CctzNI,0BgDlDA,aAAgC,4B9D62NlC,C8D52NE,gBAAgC,+B9D+2NlC,C8D92NE,qBAAgC,oC9Di3NlC,C8Dh3NE,wBAAgC,uC9Dm3NlC,C8Dj3NE,cAA8B,wB9Do3NhC,C8Dn3NE,gBAA8B,0B9Ds3NhC,C8Dr3NE,sBAA8B,gC9Dw3NhC,C8Dv3NE,cAA8B,uB9D03NhC,C8Dz3NE,gBAA8B,qB9D43NhC,C8D33NE,gBAA8B,qB9D83NhC,C8D73NE,kBAA8B,uB9Dg4NhC,C8D/3NE,kBAA8B,uB9Dk4NhC,C8Dh4NE,0BAAoC,oC9Dm4NtC,C8Dl4NE,wBAAoC,kC9Dq4NtC,C8Dp4NE,2BAAoC,gC9Du4NtC,C8Dt4NE,4BAAoC,uC9Dy4NtC,C8Dx4NE,2BAAoC,sC9D24NtC,C8Dz4NE,sBAAiC,gC9D44NnC,C8D34NE,oBAAiC,8B9D84NnC,C8D74NE,uBAAiC,4B9Dg5NnC,C8D/4NE,yBAAiC,8B9Dk5NnC,C8Dj5NE,wBAAiC,6B9Do5NnC,C8Dl5NE,wBAAkC,kC9Dq5NpC,C8Dp5NE,sBAAkC,gC9Du5NpC,C8Dt5NE,yBAAkC,8B9Dy5NpC,C8Dx5NE,0BAAkC,qC9D25NpC,C8D15NE,yBAAkC,oC9D65NpC,C8D55NE,0BAAkC,+B9D+5NpC,C8D75NE,oBAAgC,yB9Dg6NlC,C8D/5NE,qBAAgC,+B9Dk6NlC,C8Dj6NE,mBAAgC,6B9Do6NlC,C8Dn6NE,sBAAgC,2B9Ds6NlC,C8Dr6NE,wBAAgC,6B9Dw6NlC,C8Dv6NE,uBAAgC,4B9D06NlC,CACF,C+Dr9NI,YAAwB,oB/Dy9N5B,C+Dx9NI,aAAwB,qB/D49N5B,C+D39NI,YAAwB,oB/D+9N5B,Cc36NI,yBiDtDA,eAAwB,oB/Ds+N1B,C+Dr+NE,gBAAwB,qB/Dw+N1B,C+Dv+NE,eAAwB,oB/D0+N1B,CACF,Ccv7NI,yBiDtDA,eAAwB,oB/Dk/N1B,C+Dj/NE,gBAAwB,qB/Do/N1B,C+Dn/NE,eAAwB,oB/Ds/N1B,CACF,Ccn8NI,yBiDtDA,eAAwB,oB/D8/N1B,C+D7/NE,gBAAwB,qB/DggO1B,C+D//NE,eAAwB,oB/DkgO1B,CACF,Cc/8NI,0BiDtDA,eAAwB,oB/D0gO1B,C+DzgOE,gBAAwB,qB/D4gO1B,C+D3gOE,eAAwB,oB/D8gO1B,CACF,CgEphOE,eAAsB,uBhEwhOxB,CgExhOE,iBAAsB,yBhE4hOxB,CiE3hOE,iBAAyB,yBjE+hO3B,CiE/hOE,mBAAyB,2BjEmiO3B,CiEniOE,mBAAyB,2BjEuiO3B,CiEviOE,gBAAyB,wBjE2iO3B,CiE3iOE,iBAAyB,yBjE+iO3B,CiE1iOA,WAEE,KjEgjOF,CiE1iOA,yBAPE,cAAe,CAEf,OAAQ,CACR,MAAO,CACP,YjEqjOF,CiEljOA,cAGE,QjE+iOF,CiEziO8B,4BAD9B,YAEI,eAAgB,CAChB,KAAM,CACN,YjE6iOF,CACF,CkEvkOA,SCEE,iBAAkB,CAClB,SAAU,CACV,UAAW,CACX,SAAU,CACV,eAAgB,CAChB,kBAAsB,CACtB,kBAAmB,CACnB,QnEykOF,CmE/jOE,mDAEE,eAAgB,CAChB,UAAW,CACX,WAAY,CACZ,gBAAiB,CACjB,SAAU,CACV,kBnEikOJ,CoE7lOA,WAAa,sDpEimOb,CoEhmOA,QAAU,iDpEomOV,CoEnmOA,WAAa,iDpEumOb,CoEtmOA,aAAe,yBpE0mOf,CqEzmOI,MAAuB,mBrE6mO3B,CqE7mOI,MAAuB,mBrEinO3B,CqEjnOI,MAAuB,mBrEqnO3B,CqErnOI,OAAuB,oBrEynO3B,CqEznOI,QAAuB,oBrE6nO3B,CqE7nOI,MAAuB,oBrEioO3B,CqEjoOI,MAAuB,oBrEqoO3B,CqEroOI,MAAuB,oBrEyoO3B,CqEzoOI,OAAuB,qBrE6oO3B,CqE7oOI,QAAuB,qBrEipO3B,CqE7oOA,QAAU,wBrEipOV,CqEhpOA,QAAU,yBrEopOV,CqEhpOA,YAAc,yBrEopOd,CqEnpOA,YAAc,0BrEupOd,CqErpOA,QAAU,qBrEypOV,CqExpOA,QAAU,sBrE4pOV,CsE3qOA,sBAEI,iBAAkB,CAClB,KAAM,CACN,OAAQ,CACR,QAAS,CACT,MAAO,CACP,SAAU,CAEV,mBAAoB,CACpB,UAAW,CAEX,4BtE2qOJ,CuEjrOQ,KAAgC,kBvEqrOxC,CuEprOQ,YAEE,sBvEurOV,CuErrOQ,YAEE,wBvEwrOV,CuEtrOQ,YAEE,yBvEyrOV,CuEvrOQ,YAEE,uBvE0rOV,CuEzsOQ,KAAgC,uBvE6sOxC,CuE5sOQ,YAEE,2BvE+sOV,CuE7sOQ,YAEE,6BvEgtOV,CuE9sOQ,YAEE,8BvEitOV,CuE/sOQ,YAEE,4BvEktOV,CuEjuOQ,KAAgC,sBvEquOxC,CuEpuOQ,YAEE,0BvEuuOV,CuEruOQ,YAEE,4BvEwuOV,CuEtuOQ,YAEE,6BvEyuOV,CuEvuOQ,YAEE,2BvE0uOV,CuEzvOQ,KAAgC,qBvE6vOxC,CuE5vOQ,YAEE,yBvE+vOV,CuE7vOQ,YAEE,2BvEgwOV,CuE9vOQ,YAEE,4BvEiwOV,CuE/vOQ,YAEE,0BvEkwOV,CuEjxOQ,KAAgC,uBvEqxOxC,CuEpxOQ,YAEE,2BvEuxOV,CuErxOQ,YAEE,6BvEwxOV,CuEtxOQ,YAEE,8BvEyxOV,CuEvxOQ,YAEE,4BvE0xOV,CuEzyOQ,KAAgC,qBvE6yOxC,CuE5yOQ,YAEE,yBvE+yOV,CuE7yOQ,YAEE,2BvEgzOV,CuE9yOQ,YAEE,4BvEizOV,CuE/yOQ,YAEE,0BvEkzOV,CuEj0OQ,KAAgC,mBvEq0OxC,CuEp0OQ,YAEE,uBvEu0OV,CuEr0OQ,YAEE,yBvEw0OV,CuEt0OQ,YAEE,0BvEy0OV,CuEv0OQ,YAEE,wBvE00OV,CuEz1OQ,KAAgC,wBvE61OxC,CuE51OQ,YAEE,4BvE+1OV,CuE71OQ,YAEE,8BvEg2OV,CuE91OQ,YAEE,+BvEi2OV,CuE/1OQ,YAEE,6BvEk2OV,CuEj3OQ,KAAgC,uBvEq3OxC,CuEp3OQ,YAEE,2BvEu3OV,CuEr3OQ,YAEE,6BvEw3OV,CuEt3OQ,YAEE,8BvEy3OV,CuEv3OQ,YAEE,4BvE03OV,CuEz4OQ,KAAgC,sBvE64OxC,CuE54OQ,YAEE,0BvE+4OV,CuE74OQ,YAEE,4BvEg5OV,CuE94OQ,YAEE,6BvEi5OV,CuE/4OQ,YAEE,2BvEk5OV,CuEj6OQ,KAAgC,wBvEq6OxC,CuEp6OQ,YAEE,4BvEu6OV,CuEr6OQ,YAEE,8BvEw6OV,CuEt6OQ,YAEE,+BvEy6OV,CuEv6OQ,YAEE,6BvE06OV,CuEz7OQ,KAAgC,sBvE67OxC,CuE57OQ,YAEE,0BvE+7OV,CuE77OQ,YAEE,4BvEg8OV,CuE97OQ,YAEE,6BvEi8OV,CuE/7OQ,YAEE,2BvEk8OV,CuE17OQ,MAAwB,wBvE87OhC,CuE77OQ,cAEE,4BvEg8OV,CuE97OQ,cAEE,8BvEi8OV,CuE/7OQ,cAEE,+BvEk8OV,CuEh8OQ,cAEE,6BvEm8OV,CuEl9OQ,MAAwB,uBvEs9OhC,CuEr9OQ,cAEE,2BvEw9OV,CuEt9OQ,cAEE,6BvEy9OV,CuEv9OQ,cAEE,8BvE09OV,CuEx9OQ,cAEE,4BvE29OV,CuE1+OQ,MAAwB,sBvE8+OhC,CuE7+OQ,cAEE,0BvEg/OV,CuE9+OQ,cAEE,4BvEi/OV,CuE/+OQ,cAEE,6BvEk/OV,CuEh/OQ,cAEE,2BvEm/OV,CuElgPQ,MAAwB,wBvEsgPhC,CuErgPQ,cAEE,4BvEwgPV,CuEtgPQ,cAEE,8BvEygPV,CuEvgPQ,cAEE,+BvE0gPV,CuExgPQ,cAEE,6BvE2gPV,CuE1hPQ,MAAwB,sBvE8hPhC,CuE7hPQ,cAEE,0BvEgiPV,CuE9hPQ,cAEE,4BvEiiPV,CuE/hPQ,cAEE,6BvEkiPV,CuEhiPQ,cAEE,2BvEmiPV,CuE7hPI,QAAmB,qBvEiiPvB,CuEhiPI,kBAEE,yBvEmiPN,CuEjiPI,kBAEE,2BvEoiPN,CuEliPI,kBAEE,4BvEqiPN,CuEniPI,kBAEE,0BvEsiPN,Cc/iPI,yByDlDI,QAAgC,kBvEsmPtC,CuErmPM,kBAEE,sBvEumPR,CuErmPM,kBAEE,wBvEumPR,CuErmPM,kBAEE,yBvEumPR,CuErmPM,kBAEE,uBvEumPR,CuEtnPM,QAAgC,uBvEynPtC,CuExnPM,kBAEE,2BvE0nPR,CuExnPM,kBAEE,6BvE0nPR,CuExnPM,kBAEE,8BvE0nPR,CuExnPM,kBAEE,4BvE0nPR,CuEzoPM,QAAgC,sBvE4oPtC,CuE3oPM,kBAEE,0BvE6oPR,CuE3oPM,kBAEE,4BvE6oPR,CuE3oPM,kBAEE,6BvE6oPR,CuE3oPM,kBAEE,2BvE6oPR,CuE5pPM,QAAgC,qBvE+pPtC,CuE9pPM,kBAEE,yBvEgqPR,CuE9pPM,kBAEE,2BvEgqPR,CuE9pPM,kBAEE,4BvEgqPR,CuE9pPM,kBAEE,0BvEgqPR,CuE/qPM,QAAgC,uBvEkrPtC,CuEjrPM,kBAEE,2BvEmrPR,CuEjrPM,kBAEE,6BvEmrPR,CuEjrPM,kBAEE,8BvEmrPR,CuEjrPM,kBAEE,4BvEmrPR,CuElsPM,QAAgC,qBvEqsPtC,CuEpsPM,kBAEE,yBvEssPR,CuEpsPM,kBAEE,2BvEssPR,CuEpsPM,kBAEE,4BvEssPR,CuEpsPM,kBAEE,0BvEssPR,CuErtPM,QAAgC,mBvEwtPtC,CuEvtPM,kBAEE,uBvEytPR,CuEvtPM,kBAEE,yBvEytPR,CuEvtPM,kBAEE,0BvEytPR,CuEvtPM,kBAEE,wBvEytPR,CuExuPM,QAAgC,wBvE2uPtC,CuE1uPM,kBAEE,4BvE4uPR,CuE1uPM,kBAEE,8BvE4uPR,CuE1uPM,kBAEE,+BvE4uPR,CuE1uPM,kBAEE,6BvE4uPR,CuE3vPM,QAAgC,uBvE8vPtC,CuE7vPM,kBAEE,2BvE+vPR,CuE7vPM,kBAEE,6BvE+vPR,CuE7vPM,kBAEE,8BvE+vPR,CuE7vPM,kBAEE,4BvE+vPR,CuE9wPM,QAAgC,sBvEixPtC,CuEhxPM,kBAEE,0BvEkxPR,CuEhxPM,kBAEE,4BvEkxPR,CuEhxPM,kBAEE,6BvEkxPR,CuEhxPM,kBAEE,2BvEkxPR,CuEjyPM,QAAgC,wBvEoyPtC,CuEnyPM,kBAEE,4BvEqyPR,CuEnyPM,kBAEE,8BvEqyPR,CuEnyPM,kBAEE,+BvEqyPR,CuEnyPM,kBAEE,6BvEqyPR,CuEpzPM,QAAgC,sBvEuzPtC,CuEtzPM,kBAEE,0BvEwzPR,CuEtzPM,kBAEE,4BvEwzPR,CuEtzPM,kBAEE,6BvEwzPR,CuEtzPM,kBAEE,2BvEwzPR,CuEhzPM,SAAwB,wBvEmzP9B,CuElzPM,oBAEE,4BvEozPR,CuElzPM,oBAEE,8BvEozPR,CuElzPM,oBAEE,+BvEozPR,CuElzPM,oBAEE,6BvEozPR,CuEn0PM,SAAwB,uBvEs0P9B,CuEr0PM,oBAEE,2BvEu0PR,CuEr0PM,oBAEE,6BvEu0PR,CuEr0PM,oBAEE,8BvEu0PR,CuEr0PM,oBAEE,4BvEu0PR,CuEt1PM,SAAwB,sBvEy1P9B,CuEx1PM,oBAEE,0BvE01PR,CuEx1PM,oBAEE,4BvE01PR,CuEx1PM,oBAEE,6BvE01PR,CuEx1PM,oBAEE,2BvE01PR,CuEz2PM,SAAwB,wBvE42P9B,CuE32PM,oBAEE,4BvE62PR,CuE32PM,oBAEE,8BvE62PR,CuE32PM,oBAEE,+BvE62PR,CuE32PM,oBAEE,6BvE62PR,CuE53PM,SAAwB,sBvE+3P9B,CuE93PM,oBAEE,0BvEg4PR,CuE93PM,oBAEE,4BvEg4PR,CuE93PM,oBAEE,6BvEg4PR,CuE93PM,oBAEE,2BvEg4PR,CuE13PE,WAAmB,qBvE63PrB,CuE53PE,wBAEE,yBvE83PJ,CuE53PE,wBAEE,2BvE83PJ,CuE53PE,wBAEE,4BvE83PJ,CuE53PE,wBAEE,0BvE83PJ,CACF,Ccx4PI,yByDlDI,QAAgC,kBvE+7PtC,CuE97PM,kBAEE,sBvEg8PR,CuE97PM,kBAEE,wBvEg8PR,CuE97PM,kBAEE,yBvEg8PR,CuE97PM,kBAEE,uBvEg8PR,CuE/8PM,QAAgC,uBvEk9PtC,CuEj9PM,kBAEE,2BvEm9PR,CuEj9PM,kBAEE,6BvEm9PR,CuEj9PM,kBAEE,8BvEm9PR,CuEj9PM,kBAEE,4BvEm9PR,CuEl+PM,QAAgC,sBvEq+PtC,CuEp+PM,kBAEE,0BvEs+PR,CuEp+PM,kBAEE,4BvEs+PR,CuEp+PM,kBAEE,6BvEs+PR,CuEp+PM,kBAEE,2BvEs+PR,CuEr/PM,QAAgC,qBvEw/PtC,CuEv/PM,kBAEE,yBvEy/PR,CuEv/PM,kBAEE,2BvEy/PR,CuEv/PM,kBAEE,4BvEy/PR,CuEv/PM,kBAEE,0BvEy/PR,CuExgQM,QAAgC,uBvE2gQtC,CuE1gQM,kBAEE,2BvE4gQR,CuE1gQM,kBAEE,6BvE4gQR,CuE1gQM,kBAEE,8BvE4gQR,CuE1gQM,kBAEE,4BvE4gQR,CuE3hQM,QAAgC,qBvE8hQtC,CuE7hQM,kBAEE,yBvE+hQR,CuE7hQM,kBAEE,2BvE+hQR,CuE7hQM,kBAEE,4BvE+hQR,CuE7hQM,kBAEE,0BvE+hQR,CuE9iQM,QAAgC,mBvEijQtC,CuEhjQM,kBAEE,uBvEkjQR,CuEhjQM,kBAEE,yBvEkjQR,CuEhjQM,kBAEE,0BvEkjQR,CuEhjQM,kBAEE,wBvEkjQR,CuEjkQM,QAAgC,wBvEokQtC,CuEnkQM,kBAEE,4BvEqkQR,CuEnkQM,kBAEE,8BvEqkQR,CuEnkQM,kBAEE,+BvEqkQR,CuEnkQM,kBAEE,6BvEqkQR,CuEplQM,QAAgC,uBvEulQtC,CuEtlQM,kBAEE,2BvEwlQR,CuEtlQM,kBAEE,6BvEwlQR,CuEtlQM,kBAEE,8BvEwlQR,CuEtlQM,kBAEE,4BvEwlQR,CuEvmQM,QAAgC,sBvE0mQtC,CuEzmQM,kBAEE,0BvE2mQR,CuEzmQM,kBAEE,4BvE2mQR,CuEzmQM,kBAEE,6BvE2mQR,CuEzmQM,kBAEE,2BvE2mQR,CuE1nQM,QAAgC,wBvE6nQtC,CuE5nQM,kBAEE,4BvE8nQR,CuE5nQM,kBAEE,8BvE8nQR,CuE5nQM,kBAEE,+BvE8nQR,CuE5nQM,kBAEE,6BvE8nQR,CuE7oQM,QAAgC,sBvEgpQtC,CuE/oQM,kBAEE,0BvEipQR,CuE/oQM,kBAEE,4BvEipQR,CuE/oQM,kBAEE,6BvEipQR,CuE/oQM,kBAEE,2BvEipQR,CuEzoQM,SAAwB,wBvE4oQ9B,CuE3oQM,oBAEE,4BvE6oQR,CuE3oQM,oBAEE,8BvE6oQR,CuE3oQM,oBAEE,+BvE6oQR,CuE3oQM,oBAEE,6BvE6oQR,CuE5pQM,SAAwB,uBvE+pQ9B,CuE9pQM,oBAEE,2BvEgqQR,CuE9pQM,oBAEE,6BvEgqQR,CuE9pQM,oBAEE,8BvEgqQR,CuE9pQM,oBAEE,4BvEgqQR,CuE/qQM,SAAwB,sBvEkrQ9B,CuEjrQM,oBAEE,0BvEmrQR,CuEjrQM,oBAEE,4BvEmrQR,CuEjrQM,oBAEE,6BvEmrQR,CuEjrQM,oBAEE,2BvEmrQR,CuElsQM,SAAwB,wBvEqsQ9B,CuEpsQM,oBAEE,4BvEssQR,CuEpsQM,oBAEE,8BvEssQR,CuEpsQM,oBAEE,+BvEssQR,CuEpsQM,oBAEE,6BvEssQR,CuErtQM,SAAwB,sBvEwtQ9B,CuEvtQM,oBAEE,0BvEytQR,CuEvtQM,oBAEE,4BvEytQR,CuEvtQM,oBAEE,6BvEytQR,CuEvtQM,oBAEE,2BvEytQR,CuEntQE,WAAmB,qBvEstQrB,CuErtQE,wBAEE,yBvEutQJ,CuErtQE,wBAEE,2BvEutQJ,CuErtQE,wBAEE,4BvEutQJ,CuErtQE,wBAEE,0BvEutQJ,CACF,CcjuQI,yByDlDI,QAAgC,kBvEwxQtC,CuEvxQM,kBAEE,sBvEyxQR,CuEvxQM,kBAEE,wBvEyxQR,CuEvxQM,kBAEE,yBvEyxQR,CuEvxQM,kBAEE,uBvEyxQR,CuExyQM,QAAgC,uBvE2yQtC,CuE1yQM,kBAEE,2BvE4yQR,CuE1yQM,kBAEE,6BvE4yQR,CuE1yQM,kBAEE,8BvE4yQR,CuE1yQM,kBAEE,4BvE4yQR,CuE3zQM,QAAgC,sBvE8zQtC,CuE7zQM,kBAEE,0BvE+zQR,CuE7zQM,kBAEE,4BvE+zQR,CuE7zQM,kBAEE,6BvE+zQR,CuE7zQM,kBAEE,2BvE+zQR,CuE90QM,QAAgC,qBvEi1QtC,CuEh1QM,kBAEE,yBvEk1QR,CuEh1QM,kBAEE,2BvEk1QR,CuEh1QM,kBAEE,4BvEk1QR,CuEh1QM,kBAEE,0BvEk1QR,CuEj2QM,QAAgC,uBvEo2QtC,CuEn2QM,kBAEE,2BvEq2QR,CuEn2QM,kBAEE,6BvEq2QR,CuEn2QM,kBAEE,8BvEq2QR,CuEn2QM,kBAEE,4BvEq2QR,CuEp3QM,QAAgC,qBvEu3QtC,CuEt3QM,kBAEE,yBvEw3QR,CuEt3QM,kBAEE,2BvEw3QR,CuEt3QM,kBAEE,4BvEw3QR,CuEt3QM,kBAEE,0BvEw3QR,CuEv4QM,QAAgC,mBvE04QtC,CuEz4QM,kBAEE,uBvE24QR,CuEz4QM,kBAEE,yBvE24QR,CuEz4QM,kBAEE,0BvE24QR,CuEz4QM,kBAEE,wBvE24QR,CuE15QM,QAAgC,wBvE65QtC,CuE55QM,kBAEE,4BvE85QR,CuE55QM,kBAEE,8BvE85QR,CuE55QM,kBAEE,+BvE85QR,CuE55QM,kBAEE,6BvE85QR,CuE76QM,QAAgC,uBvEg7QtC,CuE/6QM,kBAEE,2BvEi7QR,CuE/6QM,kBAEE,6BvEi7QR,CuE/6QM,kBAEE,8BvEi7QR,CuE/6QM,kBAEE,4BvEi7QR,CuEh8QM,QAAgC,sBvEm8QtC,CuEl8QM,kBAEE,0BvEo8QR,CuEl8QM,kBAEE,4BvEo8QR,CuEl8QM,kBAEE,6BvEo8QR,CuEl8QM,kBAEE,2BvEo8QR,CuEn9QM,QAAgC,wBvEs9QtC,CuEr9QM,kBAEE,4BvEu9QR,CuEr9QM,kBAEE,8BvEu9QR,CuEr9QM,kBAEE,+BvEu9QR,CuEr9QM,kBAEE,6BvEu9QR,CuEt+QM,QAAgC,sBvEy+QtC,CuEx+QM,kBAEE,0BvE0+QR,CuEx+QM,kBAEE,4BvE0+QR,CuEx+QM,kBAEE,6BvE0+QR,CuEx+QM,kBAEE,2BvE0+QR,CuEl+QM,SAAwB,wBvEq+Q9B,CuEp+QM,oBAEE,4BvEs+QR,CuEp+QM,oBAEE,8BvEs+QR,CuEp+QM,oBAEE,+BvEs+QR,CuEp+QM,oBAEE,6BvEs+QR,CuEr/QM,SAAwB,uBvEw/Q9B,CuEv/QM,oBAEE,2BvEy/QR,CuEv/QM,oBAEE,6BvEy/QR,CuEv/QM,oBAEE,8BvEy/QR,CuEv/QM,oBAEE,4BvEy/QR,CuExgRM,SAAwB,sBvE2gR9B,CuE1gRM,oBAEE,0BvE4gRR,CuE1gRM,oBAEE,4BvE4gRR,CuE1gRM,oBAEE,6BvE4gRR,CuE1gRM,oBAEE,2BvE4gRR,CuE3hRM,SAAwB,wBvE8hR9B,CuE7hRM,oBAEE,4BvE+hRR,CuE7hRM,oBAEE,8BvE+hRR,CuE7hRM,oBAEE,+BvE+hRR,CuE7hRM,oBAEE,6BvE+hRR,CuE9iRM,SAAwB,sBvEijR9B,CuEhjRM,oBAEE,0BvEkjRR,CuEhjRM,oBAEE,4BvEkjRR,CuEhjRM,oBAEE,6BvEkjRR,CuEhjRM,oBAEE,2BvEkjRR,CuE5iRE,WAAmB,qBvE+iRrB,CuE9iRE,wBAEE,yBvEgjRJ,CuE9iRE,wBAEE,2BvEgjRJ,CuE9iRE,wBAEE,4BvEgjRJ,CuE9iRE,wBAEE,0BvEgjRJ,CACF,Cc1jRI,0ByDlDI,QAAgC,kBvEinRtC,CuEhnRM,kBAEE,sBvEknRR,CuEhnRM,kBAEE,wBvEknRR,CuEhnRM,kBAEE,yBvEknRR,CuEhnRM,kBAEE,uBvEknRR,CuEjoRM,QAAgC,uBvEooRtC,CuEnoRM,kBAEE,2BvEqoRR,CuEnoRM,kBAEE,6BvEqoRR,CuEnoRM,kBAEE,8BvEqoRR,CuEnoRM,kBAEE,4BvEqoRR,CuEppRM,QAAgC,sBvEupRtC,CuEtpRM,kBAEE,0BvEwpRR,CuEtpRM,kBAEE,4BvEwpRR,CuEtpRM,kBAEE,6BvEwpRR,CuEtpRM,kBAEE,2BvEwpRR,CuEvqRM,QAAgC,qBvE0qRtC,CuEzqRM,kBAEE,yBvE2qRR,CuEzqRM,kBAEE,2BvE2qRR,CuEzqRM,kBAEE,4BvE2qRR,CuEzqRM,kBAEE,0BvE2qRR,CuE1rRM,QAAgC,uBvE6rRtC,CuE5rRM,kBAEE,2BvE8rRR,CuE5rRM,kBAEE,6BvE8rRR,CuE5rRM,kBAEE,8BvE8rRR,CuE5rRM,kBAEE,4BvE8rRR,CuE7sRM,QAAgC,qBvEgtRtC,CuE/sRM,kBAEE,yBvEitRR,CuE/sRM,kBAEE,2BvEitRR,CuE/sRM,kBAEE,4BvEitRR,CuE/sRM,kBAEE,0BvEitRR,CuEhuRM,QAAgC,mBvEmuRtC,CuEluRM,kBAEE,uBvEouRR,CuEluRM,kBAEE,yBvEouRR,CuEluRM,kBAEE,0BvEouRR,CuEluRM,kBAEE,wBvEouRR,CuEnvRM,QAAgC,wBvEsvRtC,CuErvRM,kBAEE,4BvEuvRR,CuErvRM,kBAEE,8BvEuvRR,CuErvRM,kBAEE,+BvEuvRR,CuErvRM,kBAEE,6BvEuvRR,CuEtwRM,QAAgC,uBvEywRtC,CuExwRM,kBAEE,2BvE0wRR,CuExwRM,kBAEE,6BvE0wRR,CuExwRM,kBAEE,8BvE0wRR,CuExwRM,kBAEE,4BvE0wRR,CuEzxRM,QAAgC,sBvE4xRtC,CuE3xRM,kBAEE,0BvE6xRR,CuE3xRM,kBAEE,4BvE6xRR,CuE3xRM,kBAEE,6BvE6xRR,CuE3xRM,kBAEE,2BvE6xRR,CuE5yRM,QAAgC,wBvE+yRtC,CuE9yRM,kBAEE,4BvEgzRR,CuE9yRM,kBAEE,8BvEgzRR,CuE9yRM,kBAEE,+BvEgzRR,CuE9yRM,kBAEE,6BvEgzRR,CuE/zRM,QAAgC,sBvEk0RtC,CuEj0RM,kBAEE,0BvEm0RR,CuEj0RM,kBAEE,4BvEm0RR,CuEj0RM,kBAEE,6BvEm0RR,CuEj0RM,kBAEE,2BvEm0RR,CuE3zRM,SAAwB,wBvE8zR9B,CuE7zRM,oBAEE,4BvE+zRR,CuE7zRM,oBAEE,8BvE+zRR,CuE7zRM,oBAEE,+BvE+zRR,CuE7zRM,oBAEE,6BvE+zRR,CuE90RM,SAAwB,uBvEi1R9B,CuEh1RM,oBAEE,2BvEk1RR,CuEh1RM,oBAEE,6BvEk1RR,CuEh1RM,oBAEE,8BvEk1RR,CuEh1RM,oBAEE,4BvEk1RR,CuEj2RM,SAAwB,sBvEo2R9B,CuEn2RM,oBAEE,0BvEq2RR,CuEn2RM,oBAEE,4BvEq2RR,CuEn2RM,oBAEE,6BvEq2RR,CuEn2RM,oBAEE,2BvEq2RR,CuEp3RM,SAAwB,wBvEu3R9B,CuEt3RM,oBAEE,4BvEw3RR,CuEt3RM,oBAEE,8BvEw3RR,CuEt3RM,oBAEE,+BvEw3RR,CuEt3RM,oBAEE,6BvEw3RR,CuEv4RM,SAAwB,sBvE04R9B,CuEz4RM,oBAEE,0BvE24RR,CuEz4RM,oBAEE,4BvE24RR,CuEz4RM,oBAEE,6BvE24RR,CuEz4RM,oBAEE,2BvE24RR,CuEr4RE,WAAmB,qBvEw4RrB,CuEv4RE,wBAEE,yBvEy4RJ,CuEv4RE,wBAEE,2BvEy4RJ,CuEv4RE,wBAEE,4BvEy4RJ,CuEv4RE,wBAEE,0BvEy4RJ,CACF,CwEz8RA,gBAAkB,oGxE68RlB,CwEz8RA,cAAiB,4BxE68RjB,CwE58RA,WAAiB,4BxEg9RjB,CwE/8RA,aAAiB,4BxEm9RjB,CwEl9RA,eCTE,eAAgB,CAChB,sBAAuB,CACvB,kBzE+9RF,CwEh9RI,WAAwB,yBxEo9R5B,CwEn9RI,YAAwB,0BxEu9R5B,CwEt9RI,aAAwB,2BxE09R5B,Ccr7RI,yB0DvCA,cAAwB,yBxEi+R1B,CwEh+RE,eAAwB,0BxEm+R1B,CwEl+RE,gBAAwB,2BxEq+R1B,CACF,Ccj8RI,yB0DvCA,cAAwB,yBxE6+R1B,CwE5+RE,eAAwB,0BxE++R1B,CwE9+RE,gBAAwB,2BxEi/R1B,CACF,Cc78RI,yB0DvCA,cAAwB,yBxEy/R1B,CwEx/RE,eAAwB,0BxE2/R1B,CwE1/RE,gBAAwB,2BxE6/R1B,CACF,Ccz9RI,0B0DvCA,cAAwB,yBxEqgS1B,CwEpgSE,eAAwB,0BxEugS1B,CwEtgSE,gBAAwB,2BxEygS1B,CACF,CwEpgSA,gBAAmB,kCxEwgSnB,CwEvgSA,gBAAmB,kCxE2gSnB,CwE1gSA,iBAAmB,mCxE8gSnB,CwE1gSA,mBAAuB,yBxE8gSvB,CwE7gSA,qBAAuB,6BxEihSvB,CwEhhSA,oBAAuB,yBxEohSvB,CwEnhSA,kBAAuB,yBxEuhSvB,CwEthSA,oBAAuB,4BxE0hSvB,CwEzhSA,aAAuB,2BxE6hSvB,CwEzhSA,YAAc,oBxE6hSd,C0EpkSE,cACE,uB1EukSJ,CK7jSE,0CqELM,uB1EskSR,C0E5kSE,gBACE,uB1E+kSJ,CKrkSE,8CqELM,uB1E8kSR,C0EplSE,cACE,uB1EulSJ,CK7kSE,0CqELM,uB1EslSR,C0E5lSE,WACE,uB1E+lSJ,CKrlSE,oCqELM,uB1E8lSR,C0EpmSE,cACE,uB1EumSJ,CK7lSE,0CqELM,uB1EsmSR,C0E5mSE,aACE,uB1E+mSJ,CKrmSE,wCqELM,uB1E8mSR,C0EpnSE,YACE,uB1EunSJ,CK7mSE,sCqELM,uB1EsnSR,C0E5nSE,WACE,uB1E+nSJ,CKrnSE,oCqELM,uB1E8nSR,CwEvlSA,WAAa,uBxE2lSb,CwE1lSA,YAAc,uBxE8lSd,CwE5lSA,eAAiB,8BxEgmSjB,CwE/lSA,eAAiB,kCxEmmSjB,CwE/lSA,WGvDE,UAAW,CACX,iBAAkB,CAClB,gBAAiB,CACjB,4BAA6B,CAC7B,Q3E0pSF,CwEnmSA,sBAAwB,8BxEumSxB,CwErmSA,YACE,+BAAiC,CACjC,kCxEwmSF,CwEnmSA,YAAc,uBxEumSd,C4ExqSA,SACE,4B5E2qSF,C4ExqSA,WACE,2B5E2qSF,C6E3qSE,a3EOF,iB2EDM,0BAA4B,CAE5B,yB7E2qSJ,C6ExqSE,YAEI,yB7EyqSN,C6EhqSE,kBACE,4B7EkqSJ,CEn+RF,I2EhLM,8B7EspSJ,C6EppSE,eAEE,wB1EzCY,C0E0CZ,uB7EspSJ,C6E9oSE,MACE,0B7EgpSJ,C6E7oSE,OAEE,uB7E+oSJ,C6E5oSE,QAGE,SAAU,CACV,Q7E8oSJ,C6E3oSE,MAEE,sB7E6oSJ,C6EroSE,MACE,O7EuoSJ,CY3tSA,gBiE0FI,yB7EuoSJ,CiCrtSF,Q4CmFM,Y7EqoSJ,CsCpuSF,OuCkGM,qB7EqoSJ,CgBxuSF,O6DuGM,kC7EooSJ,C6EroSE,oBAKI,+B7EooSN,CgBvsSF,sC6D0EQ,kC7EioSN,CgBtnSF,Y6DNM,a7E+nSJ,CiBrvSA,2E4D4HM,oB7E+nSN,CgBjpSF,sB6DuBM,aAAc,CACd,oB7E6nSJ,CACF","file":"2.6c9f324a.chunk.css","sourcesContent":[".Toastify__toast-container {\n z-index: 9999;\n -webkit-transform: translate3d(0, 0, 9999px);\n position: fixed;\n padding: 4px;\n width: 320px;\n box-sizing: border-box;\n color: #fff; }\n .Toastify__toast-container--top-left {\n top: 1em;\n left: 1em; }\n .Toastify__toast-container--top-center {\n top: 1em;\n left: 50%;\n margin-left: -160px; }\n .Toastify__toast-container--top-right {\n top: 1em;\n right: 1em; }\n .Toastify__toast-container--bottom-left {\n bottom: 1em;\n left: 1em; }\n .Toastify__toast-container--bottom-center {\n bottom: 1em;\n left: 50%;\n margin-left: -160px; }\n .Toastify__toast-container--bottom-right {\n bottom: 1em;\n right: 1em; }\n\n@media only screen and (max-width: 480px) {\n .Toastify__toast-container {\n width: 100vw;\n padding: 0;\n left: 0;\n margin: 0; }\n .Toastify__toast-container--top-left, .Toastify__toast-container--top-center, .Toastify__toast-container--top-right {\n top: 0; }\n .Toastify__toast-container--bottom-left, .Toastify__toast-container--bottom-center, .Toastify__toast-container--bottom-right {\n bottom: 0; }\n .Toastify__toast-container--rtl {\n right: 0;\n left: initial; } }\n\n.Toastify__toast {\n position: relative;\n min-height: 64px;\n box-sizing: border-box;\n margin-bottom: 1rem;\n padding: 8px;\n border-radius: 1px;\n box-shadow: 0 1px 10px 0 rgba(0, 0, 0, 0.1), 0 2px 15px 0 rgba(0, 0, 0, 0.05);\n display: flex;\n justify-content: space-between;\n max-height: 800px;\n overflow: hidden;\n font-family: sans-serif;\n cursor: pointer;\n direction: ltr; }\n .Toastify__toast--rtl {\n direction: rtl; }\n .Toastify__toast--default {\n background: #fff;\n color: #aaa; }\n .Toastify__toast--info {\n background: #3498db; }\n .Toastify__toast--success {\n background: #07bc0c; }\n .Toastify__toast--warning {\n background: #f1c40f; }\n .Toastify__toast--error {\n background: #e74c3c; }\n .Toastify__toast-body {\n margin: auto 0;\n flex: 1; }\n\n@media only screen and (max-width: 480px) {\n .Toastify__toast {\n margin-bottom: 0; } }\n\n.Toastify__close-button {\n color: #fff;\n font-weight: bold;\n font-size: 14px;\n background: transparent;\n outline: none;\n border: none;\n padding: 0;\n cursor: pointer;\n opacity: 0.7;\n transition: 0.3s ease;\n align-self: flex-start; }\n .Toastify__close-button--default {\n color: #000;\n opacity: 0.3; }\n .Toastify__close-button:hover, .Toastify__close-button:focus {\n opacity: 1; }\n\n@keyframes Toastify__trackProgress {\n 0% {\n transform: scaleX(1); }\n 100% {\n transform: scaleX(0); } }\n\n.Toastify__progress-bar {\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 5px;\n z-index: 9999;\n opacity: 0.7;\n background-color: rgba(255, 255, 255, 0.7);\n transform-origin: left; }\n .Toastify__progress-bar--animated {\n animation: Toastify__trackProgress linear 1 forwards; }\n .Toastify__progress-bar--controlled {\n transition: transform .2s; }\n .Toastify__progress-bar--rtl {\n right: 0;\n left: initial;\n transform-origin: right; }\n .Toastify__progress-bar--default {\n background: linear-gradient(to right, #4cd964, #5ac8fa, #007aff, #34aadc, #5856d6, #ff2d55); }\n\n@keyframes Toastify__bounceInRight {\n from,\n 60%,\n 75%,\n 90%,\n to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n from {\n opacity: 0;\n transform: translate3d(3000px, 0, 0); }\n 60% {\n opacity: 1;\n transform: translate3d(-25px, 0, 0); }\n 75% {\n transform: translate3d(10px, 0, 0); }\n 90% {\n transform: translate3d(-5px, 0, 0); }\n to {\n transform: none; } }\n\n@keyframes Toastify__bounceOutRight {\n 20% {\n opacity: 1;\n transform: translate3d(-20px, 0, 0); }\n to {\n opacity: 0;\n transform: translate3d(2000px, 0, 0); } }\n\n@keyframes Toastify__bounceInLeft {\n from,\n 60%,\n 75%,\n 90%,\n to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n 0% {\n opacity: 0;\n transform: translate3d(-3000px, 0, 0); }\n 60% {\n opacity: 1;\n transform: translate3d(25px, 0, 0); }\n 75% {\n transform: translate3d(-10px, 0, 0); }\n 90% {\n transform: translate3d(5px, 0, 0); }\n to {\n transform: none; } }\n\n@keyframes Toastify__bounceOutLeft {\n 20% {\n opacity: 1;\n transform: translate3d(20px, 0, 0); }\n to {\n opacity: 0;\n transform: translate3d(-2000px, 0, 0); } }\n\n@keyframes Toastify__bounceInUp {\n from,\n 60%,\n 75%,\n 90%,\n to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n from {\n opacity: 0;\n transform: translate3d(0, 3000px, 0); }\n 60% {\n opacity: 1;\n transform: translate3d(0, -20px, 0); }\n 75% {\n transform: translate3d(0, 10px, 0); }\n 90% {\n transform: translate3d(0, -5px, 0); }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes Toastify__bounceOutUp {\n 20% {\n transform: translate3d(0, -10px, 0); }\n 40%,\n 45% {\n opacity: 1;\n transform: translate3d(0, 20px, 0); }\n to {\n opacity: 0;\n transform: translate3d(0, -2000px, 0); } }\n\n@keyframes Toastify__bounceInDown {\n from,\n 60%,\n 75%,\n 90%,\n to {\n animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n 0% {\n opacity: 0;\n transform: translate3d(0, -3000px, 0); }\n 60% {\n opacity: 1;\n transform: translate3d(0, 25px, 0); }\n 75% {\n transform: translate3d(0, -10px, 0); }\n 90% {\n transform: translate3d(0, 5px, 0); }\n to {\n transform: none; } }\n\n@keyframes Toastify__bounceOutDown {\n 20% {\n transform: translate3d(0, 10px, 0); }\n 40%,\n 45% {\n opacity: 1;\n transform: translate3d(0, -20px, 0); }\n to {\n opacity: 0;\n transform: translate3d(0, 2000px, 0); } }\n\n.Toastify__bounce-enter--top-left, .Toastify__bounce-enter--bottom-left {\n animation-name: Toastify__bounceInLeft; }\n\n.Toastify__bounce-enter--top-right, .Toastify__bounce-enter--bottom-right {\n animation-name: Toastify__bounceInRight; }\n\n.Toastify__bounce-enter--top-center {\n animation-name: Toastify__bounceInDown; }\n\n.Toastify__bounce-enter--bottom-center {\n animation-name: Toastify__bounceInUp; }\n\n.Toastify__bounce-exit--top-left, .Toastify__bounce-exit--bottom-left {\n animation-name: Toastify__bounceOutLeft; }\n\n.Toastify__bounce-exit--top-right, .Toastify__bounce-exit--bottom-right {\n animation-name: Toastify__bounceOutRight; }\n\n.Toastify__bounce-exit--top-center {\n animation-name: Toastify__bounceOutUp; }\n\n.Toastify__bounce-exit--bottom-center {\n animation-name: Toastify__bounceOutDown; }\n\n@keyframes Toastify__zoomIn {\n from {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n 50% {\n opacity: 1; } }\n\n@keyframes Toastify__zoomOut {\n from {\n opacity: 1; }\n 50% {\n opacity: 0;\n transform: scale3d(0.3, 0.3, 0.3); }\n to {\n opacity: 0; } }\n\n.Toastify__zoom-enter {\n animation-name: Toastify__zoomIn; }\n\n.Toastify__zoom-exit {\n animation-name: Toastify__zoomOut; }\n\n@keyframes Toastify__flipIn {\n from {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n animation-timing-function: ease-in;\n opacity: 0; }\n 40% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n animation-timing-function: ease-in; }\n 60% {\n transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n opacity: 1; }\n 80% {\n transform: perspective(400px) rotate3d(1, 0, 0, -5deg); }\n to {\n transform: perspective(400px); } }\n\n@keyframes Toastify__flipOut {\n from {\n transform: perspective(400px); }\n 30% {\n transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n opacity: 1; }\n to {\n transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n opacity: 0; } }\n\n.Toastify__flip-enter {\n animation-name: Toastify__flipIn; }\n\n.Toastify__flip-exit {\n animation-name: Toastify__flipOut; }\n\n@keyframes Toastify__slideInRight {\n from {\n transform: translate3d(110%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes Toastify__slideInLeft {\n from {\n transform: translate3d(-110%, 0, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes Toastify__slideInUp {\n from {\n transform: translate3d(0, 110%, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes Toastify__slideInDown {\n from {\n transform: translate3d(0, -110%, 0);\n visibility: visible; }\n to {\n transform: translate3d(0, 0, 0); } }\n\n@keyframes Toastify__slideOutRight {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(110%, 0, 0); } }\n\n@keyframes Toastify__slideOutLeft {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(-110%, 0, 0); } }\n\n@keyframes Toastify__slideOutDown {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(0, 500px, 0); } }\n\n@keyframes Toastify__slideOutUp {\n from {\n transform: translate3d(0, 0, 0); }\n to {\n visibility: hidden;\n transform: translate3d(0, -500px, 0); } }\n\n.Toastify__slide-enter--top-left, .Toastify__slide-enter--bottom-left {\n animation-name: Toastify__slideInLeft; }\n\n.Toastify__slide-enter--top-right, .Toastify__slide-enter--bottom-right {\n animation-name: Toastify__slideInRight; }\n\n.Toastify__slide-enter--top-center {\n animation-name: Toastify__slideInDown; }\n\n.Toastify__slide-enter--bottom-center {\n animation-name: Toastify__slideInUp; }\n\n.Toastify__slide-exit--top-left, .Toastify__slide-exit--bottom-left {\n animation-name: Toastify__slideOutLeft; }\n\n.Toastify__slide-exit--top-right, .Toastify__slide-exit--bottom-right {\n animation-name: Toastify__slideOutRight; }\n\n.Toastify__slide-exit--top-center {\n animation-name: Toastify__slideOutUp; }\n\n.Toastify__slide-exit--bottom-center {\n animation-name: Toastify__slideOutDown; }\n","/* BASICS */\n\n.CodeMirror {\n /* Set height, width, borders, and global font properties here */\n font-family: monospace;\n height: 300px;\n color: black;\n direction: ltr;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n border-right: 1px solid #ddd;\n background-color: #f7f7f7;\n white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n padding: 0 3px 0 5px;\n min-width: 20px;\n text-align: right;\n color: #999;\n white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror-cursor {\n border-left: 1px solid black;\n border-right: none;\n width: 0;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n border-left: 1px solid silver;\n}\n.cm-fat-cursor .CodeMirror-cursor {\n width: auto;\n border: 0 !important;\n background: #7e7;\n}\n.cm-fat-cursor div.CodeMirror-cursors {\n z-index: 1;\n}\n.cm-fat-cursor-mark {\n background-color: rgba(20, 255, 20, 0.5);\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n}\n.cm-animate-fat-cursor {\n width: auto;\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n background-color: #7e7;\n}\n@-moz-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n@-webkit-keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n@keyframes blink {\n 0% {}\n 50% { background-color: transparent; }\n 100% {}\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\n.CodeMirror-overwrite .CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-rulers {\n position: absolute;\n left: 0; right: 0; top: -50px; bottom: 0;\n overflow: hidden;\n}\n.CodeMirror-ruler {\n border-left: 1px solid #ccc;\n top: 0; bottom: 0;\n position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n position: relative;\n overflow: hidden;\n background: white;\n}\n\n.CodeMirror-scroll {\n overflow: scroll !important; /* Things will break if this is overridden */\n /* 50px is the magic margin used to hide the element's real scrollbars */\n /* See overflow: hidden in .CodeMirror */\n margin-bottom: -50px; margin-right: -50px;\n padding-bottom: 50px;\n height: 100%;\n outline: none; /* Prevent dragging from highlighting the element */\n position: relative;\n}\n.CodeMirror-sizer {\n position: relative;\n border-right: 50px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n before actual scrolling happens, thus preventing shaking and\n flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n position: absolute;\n z-index: 6;\n display: none;\n outline: none;\n}\n.CodeMirror-vscrollbar {\n right: 0; top: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n bottom: 0; left: 0;\n overflow-y: hidden;\n overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n position: absolute; left: 0; top: 0;\n min-height: 100%;\n z-index: 3;\n}\n.CodeMirror-gutter {\n white-space: normal;\n height: 100%;\n display: inline-block;\n vertical-align: top;\n margin-bottom: -50px;\n}\n.CodeMirror-gutter-wrapper {\n position: absolute;\n z-index: 4;\n background: none !important;\n border: none !important;\n}\n.CodeMirror-gutter-background {\n position: absolute;\n top: 0; bottom: 0;\n z-index: 4;\n}\n.CodeMirror-gutter-elt {\n position: absolute;\n cursor: default;\n z-index: 4;\n}\n.CodeMirror-gutter-wrapper ::selection { background-color: transparent }\n.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }\n\n.CodeMirror-lines {\n cursor: text;\n min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n /* Reset some styles that the rest of the page might have set */\n -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n border-width: 0;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n line-height: inherit;\n color: inherit;\n z-index: 2;\n position: relative;\n overflow: visible;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-variant-ligatures: contextual;\n font-variant-ligatures: contextual;\n}\n.CodeMirror-wrap pre.CodeMirror-line,\n.CodeMirror-wrap pre.CodeMirror-line-like {\n word-wrap: break-word;\n white-space: pre-wrap;\n word-break: normal;\n}\n\n.CodeMirror-linebackground {\n position: absolute;\n left: 0; right: 0; top: 0; bottom: 0;\n z-index: 0;\n}\n\n.CodeMirror-linewidget {\n position: relative;\n z-index: 2;\n padding: 0.1px; /* Force widget margins to stay inside of the container */\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-rtl pre { direction: rtl; }\n\n.CodeMirror-code {\n outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n position: absolute;\n width: 100%;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n}\n\n.CodeMirror-cursor {\n position: absolute;\n pointer-events: none;\n}\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n visibility: hidden;\n position: relative;\n z-index: 3;\n}\ndiv.CodeMirror-dragcursors {\n visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n background-color: #ffa;\n background-color: rgba(255, 255, 0, .4);\n}\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n /* Hide the cursor when printing */\n .CodeMirror div.CodeMirror-cursors {\n visibility: hidden;\n }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n","/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n@import \"functions\";\n@import \"variables\";\n@import \"mixins\";\n@import \"root\";\n@import \"reboot\";\n@import \"type\";\n@import \"images\";\n@import \"code\";\n@import \"grid\";\n@import \"tables\";\n@import \"forms\";\n@import \"buttons\";\n@import \"transitions\";\n@import \"dropdown\";\n@import \"button-group\";\n@import \"input-group\";\n@import \"custom-forms\";\n@import \"nav\";\n@import \"navbar\";\n@import \"card\";\n@import \"breadcrumb\";\n@import \"pagination\";\n@import \"badge\";\n@import \"jumbotron\";\n@import \"alert\";\n@import \"progress\";\n@import \"media\";\n@import \"list-group\";\n@import \"close\";\n@import \"toasts\";\n@import \"modal\";\n@import \"tooltip\";\n@import \"popover\";\n@import \"carousel\";\n@import \"spinners\";\n@import \"utilities\";\n@import \"print\";\n","/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n --blue: #007bff;\n --indigo: #6610f2;\n --purple: #6f42c1;\n --pink: #e83e8c;\n --red: #dc3545;\n --orange: #fd7e14;\n --yellow: #ffc107;\n --green: #28a745;\n --teal: #20c997;\n --cyan: #17a2b8;\n --white: #fff;\n --gray: #6c757d;\n --gray-dark: #343a40;\n --primary: #007bff;\n --secondary: #6c757d;\n --success: #28a745;\n --info: #17a2b8;\n --warning: #ffc107;\n --danger: #dc3545;\n --light: #f8f9fa;\n --dark: #343a40;\n --breakpoint-xs: 0;\n --breakpoint-sm: 576px;\n --breakpoint-md: 768px;\n --breakpoint-lg: 992px;\n --breakpoint-xl: 1200px;\n --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\nbody {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #212529;\n text-align: left;\n background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n cursor: help;\n border-bottom: 0;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\na {\n color: #007bff;\n text-decoration: none;\n background-color: transparent;\n}\n\na:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n color: inherit;\n text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 1em;\n}\n\npre {\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg {\n vertical-align: middle;\n border-style: none;\n}\n\nsvg {\n overflow: hidden;\n vertical-align: middle;\n}\n\ntable {\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n color: #6c757d;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n text-align: inherit;\n}\n\nlabel {\n display: inline-block;\n margin-bottom: 0.5rem;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\nselect {\n word-wrap: normal;\n}\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n cursor: pointer;\n}\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box;\n padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto;\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n padding: 0;\n margin-bottom: .5rem;\n font-size: 1.5rem;\n line-height: inherit;\n color: inherit;\n white-space: normal;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\ntemplate {\n display: none;\n}\n\n[hidden] {\n display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1, .h1 {\n font-size: 2.5rem;\n}\n\nh2, .h2 {\n font-size: 2rem;\n}\n\nh3, .h3 {\n font-size: 1.75rem;\n}\n\nh4, .h4 {\n font-size: 1.5rem;\n}\n\nh5, .h5 {\n font-size: 1.25rem;\n}\n\nh6, .h6 {\n font-size: 1rem;\n}\n\n.lead {\n font-size: 1.25rem;\n font-weight: 300;\n}\n\n.display-1 {\n font-size: 6rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-2 {\n font-size: 5.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-3 {\n font-size: 4.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\n.display-4 {\n font-size: 3.5rem;\n font-weight: 300;\n line-height: 1.2;\n}\n\nhr {\n margin-top: 1rem;\n margin-bottom: 1rem;\n border: 0;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n font-size: 80%;\n font-weight: 400;\n}\n\nmark,\n.mark {\n padding: 0.2em;\n background-color: #fcf8e3;\n}\n\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline {\n padding-left: 0;\n list-style: none;\n}\n\n.list-inline-item {\n display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n.blockquote {\n margin-bottom: 1rem;\n font-size: 1.25rem;\n}\n\n.blockquote-footer {\n display: block;\n font-size: 80%;\n color: #6c757d;\n}\n\n.blockquote-footer::before {\n content: \"\\2014\\00A0\";\n}\n\n.img-fluid {\n max-width: 100%;\n height: auto;\n}\n\n.img-thumbnail {\n padding: 0.25rem;\n background-color: #fff;\n border: 1px solid #dee2e6;\n border-radius: 0.25rem;\n max-width: 100%;\n height: auto;\n}\n\n.figure {\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: 0.5rem;\n line-height: 1;\n}\n\n.figure-caption {\n font-size: 90%;\n color: #6c757d;\n}\n\ncode {\n font-size: 87.5%;\n color: #e83e8c;\n word-break: break-word;\n}\n\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.2rem 0.4rem;\n font-size: 87.5%;\n color: #fff;\n background-color: #212529;\n border-radius: 0.2rem;\n}\n\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: 700;\n}\n\npre {\n display: block;\n font-size: 87.5%;\n color: #212529;\n}\n\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n\n.container {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container {\n max-width: 540px;\n }\n}\n\n@media (min-width: 768px) {\n .container {\n max-width: 720px;\n }\n}\n\n@media (min-width: 992px) {\n .container {\n max-width: 960px;\n }\n}\n\n@media (min-width: 1200px) {\n .container {\n max-width: 1140px;\n }\n}\n\n.container-fluid {\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n\n.row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -15px;\n margin-left: -15px;\n}\n\n.no-gutters {\n margin-right: 0;\n margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n position: relative;\n width: 100%;\n padding-right: 15px;\n padding-left: 15px;\n}\n\n.col {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n}\n\n.col-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n}\n\n.col-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n}\n\n.col-3 {\n flex: 0 0 25%;\n max-width: 25%;\n}\n\n.col-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n}\n\n.col-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n}\n\n.col-6 {\n flex: 0 0 50%;\n max-width: 50%;\n}\n\n.col-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n}\n\n.col-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n}\n\n.col-9 {\n flex: 0 0 75%;\n max-width: 75%;\n}\n\n.col-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n}\n\n.col-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n}\n\n.col-12 {\n flex: 0 0 100%;\n max-width: 100%;\n}\n\n.order-first {\n order: -1;\n}\n\n.order-last {\n order: 13;\n}\n\n.order-0 {\n order: 0;\n}\n\n.order-1 {\n order: 1;\n}\n\n.order-2 {\n order: 2;\n}\n\n.order-3 {\n order: 3;\n}\n\n.order-4 {\n order: 4;\n}\n\n.order-5 {\n order: 5;\n}\n\n.order-6 {\n order: 6;\n}\n\n.order-7 {\n order: 7;\n}\n\n.order-8 {\n order: 8;\n}\n\n.order-9 {\n order: 9;\n}\n\n.order-10 {\n order: 10;\n}\n\n.order-11 {\n order: 11;\n}\n\n.order-12 {\n order: 12;\n}\n\n.offset-1 {\n margin-left: 8.333333%;\n}\n\n.offset-2 {\n margin-left: 16.666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.333333%;\n}\n\n.offset-5 {\n margin-left: 41.666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.333333%;\n}\n\n.offset-8 {\n margin-left: 66.666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.333333%;\n}\n\n.offset-11 {\n margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-sm-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-sm-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-sm-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-sm-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-sm-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-sm-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-sm-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-sm-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-sm-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-sm-first {\n order: -1;\n }\n .order-sm-last {\n order: 13;\n }\n .order-sm-0 {\n order: 0;\n }\n .order-sm-1 {\n order: 1;\n }\n .order-sm-2 {\n order: 2;\n }\n .order-sm-3 {\n order: 3;\n }\n .order-sm-4 {\n order: 4;\n }\n .order-sm-5 {\n order: 5;\n }\n .order-sm-6 {\n order: 6;\n }\n .order-sm-7 {\n order: 7;\n }\n .order-sm-8 {\n order: 8;\n }\n .order-sm-9 {\n order: 9;\n }\n .order-sm-10 {\n order: 10;\n }\n .order-sm-11 {\n order: 11;\n }\n .order-sm-12 {\n order: 12;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.333333%;\n }\n .offset-sm-2 {\n margin-left: 16.666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.333333%;\n }\n .offset-sm-5 {\n margin-left: 41.666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.333333%;\n }\n .offset-sm-8 {\n margin-left: 66.666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.333333%;\n }\n .offset-sm-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 768px) {\n .col-md {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-md-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-md-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-md-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-md-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-md-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-md-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-md-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-md-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-md-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-md-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-md-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-md-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-md-first {\n order: -1;\n }\n .order-md-last {\n order: 13;\n }\n .order-md-0 {\n order: 0;\n }\n .order-md-1 {\n order: 1;\n }\n .order-md-2 {\n order: 2;\n }\n .order-md-3 {\n order: 3;\n }\n .order-md-4 {\n order: 4;\n }\n .order-md-5 {\n order: 5;\n }\n .order-md-6 {\n order: 6;\n }\n .order-md-7 {\n order: 7;\n }\n .order-md-8 {\n order: 8;\n }\n .order-md-9 {\n order: 9;\n }\n .order-md-10 {\n order: 10;\n }\n .order-md-11 {\n order: 11;\n }\n .order-md-12 {\n order: 12;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.333333%;\n }\n .offset-md-2 {\n margin-left: 16.666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.333333%;\n }\n .offset-md-5 {\n margin-left: 41.666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.333333%;\n }\n .offset-md-8 {\n margin-left: 66.666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.333333%;\n }\n .offset-md-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 992px) {\n .col-lg {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-lg-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-lg-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-lg-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-lg-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-lg-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-lg-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-lg-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-lg-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-lg-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-lg-first {\n order: -1;\n }\n .order-lg-last {\n order: 13;\n }\n .order-lg-0 {\n order: 0;\n }\n .order-lg-1 {\n order: 1;\n }\n .order-lg-2 {\n order: 2;\n }\n .order-lg-3 {\n order: 3;\n }\n .order-lg-4 {\n order: 4;\n }\n .order-lg-5 {\n order: 5;\n }\n .order-lg-6 {\n order: 6;\n }\n .order-lg-7 {\n order: 7;\n }\n .order-lg-8 {\n order: 8;\n }\n .order-lg-9 {\n order: 9;\n }\n .order-lg-10 {\n order: 10;\n }\n .order-lg-11 {\n order: 11;\n }\n .order-lg-12 {\n order: 12;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.333333%;\n }\n .offset-lg-2 {\n margin-left: 16.666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.333333%;\n }\n .offset-lg-5 {\n margin-left: 41.666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.333333%;\n }\n .offset-lg-8 {\n margin-left: 66.666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.333333%;\n }\n .offset-lg-11 {\n margin-left: 91.666667%;\n }\n}\n\n@media (min-width: 1200px) {\n .col-xl {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%;\n }\n .col-xl-1 {\n flex: 0 0 8.333333%;\n max-width: 8.333333%;\n }\n .col-xl-2 {\n flex: 0 0 16.666667%;\n max-width: 16.666667%;\n }\n .col-xl-3 {\n flex: 0 0 25%;\n max-width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 33.333333%;\n max-width: 33.333333%;\n }\n .col-xl-5 {\n flex: 0 0 41.666667%;\n max-width: 41.666667%;\n }\n .col-xl-6 {\n flex: 0 0 50%;\n max-width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 58.333333%;\n max-width: 58.333333%;\n }\n .col-xl-8 {\n flex: 0 0 66.666667%;\n max-width: 66.666667%;\n }\n .col-xl-9 {\n flex: 0 0 75%;\n max-width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 83.333333%;\n max-width: 83.333333%;\n }\n .col-xl-11 {\n flex: 0 0 91.666667%;\n max-width: 91.666667%;\n }\n .col-xl-12 {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .order-xl-first {\n order: -1;\n }\n .order-xl-last {\n order: 13;\n }\n .order-xl-0 {\n order: 0;\n }\n .order-xl-1 {\n order: 1;\n }\n .order-xl-2 {\n order: 2;\n }\n .order-xl-3 {\n order: 3;\n }\n .order-xl-4 {\n order: 4;\n }\n .order-xl-5 {\n order: 5;\n }\n .order-xl-6 {\n order: 6;\n }\n .order-xl-7 {\n order: 7;\n }\n .order-xl-8 {\n order: 8;\n }\n .order-xl-9 {\n order: 9;\n }\n .order-xl-10 {\n order: 10;\n }\n .order-xl-11 {\n order: 11;\n }\n .order-xl-12 {\n order: 12;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.333333%;\n }\n .offset-xl-2 {\n margin-left: 16.666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.333333%;\n }\n .offset-xl-5 {\n margin-left: 41.666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.333333%;\n }\n .offset-xl-8 {\n margin-left: 66.666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.333333%;\n }\n .offset-xl-11 {\n margin-left: 91.666667%;\n }\n}\n\n.table {\n width: 100%;\n margin-bottom: 1rem;\n color: #212529;\n}\n\n.table th,\n.table td {\n padding: 0.75rem;\n vertical-align: top;\n border-top: 1px solid #dee2e6;\n}\n\n.table thead th {\n vertical-align: bottom;\n border-bottom: 2px solid #dee2e6;\n}\n\n.table tbody + tbody {\n border-top: 2px solid #dee2e6;\n}\n\n.table-sm th,\n.table-sm td {\n padding: 0.3rem;\n}\n\n.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered th,\n.table-bordered td {\n border: 1px solid #dee2e6;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n border-bottom-width: 2px;\n}\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n border: 0;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n color: #212529;\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n background-color: #b8daff;\n}\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n border-color: #7abaff;\n}\n\n.table-hover .table-primary:hover {\n background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n background-color: #d6d8db;\n}\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n border-color: #b3b7bb;\n}\n\n.table-hover .table-secondary:hover {\n background-color: #c8cbcf;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n background-color: #c8cbcf;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n background-color: #c3e6cb;\n}\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n border-color: #8fd19e;\n}\n\n.table-hover .table-success:hover {\n background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n background-color: #bee5eb;\n}\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n border-color: #86cfda;\n}\n\n.table-hover .table-info:hover {\n background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n background-color: #ffeeba;\n}\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n border-color: #ffdf7e;\n}\n\n.table-hover .table-warning:hover {\n background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n background-color: #f5c6cb;\n}\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n border-color: #ed969e;\n}\n\n.table-hover .table-danger:hover {\n background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n background-color: #fdfdfe;\n}\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n border-color: #fbfcfc;\n}\n\n.table-hover .table-light:hover {\n background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n background-color: #c6c8ca;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n border-color: #95999c;\n}\n\n.table-hover .table-dark:hover {\n background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n color: #fff;\n background-color: #343a40;\n border-color: #454d55;\n}\n\n.table .thead-light th {\n color: #495057;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.table-dark {\n color: #fff;\n background-color: #343a40;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n border-color: #454d55;\n}\n\n.table-dark.table-bordered {\n border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n color: #fff;\n background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575.98px) {\n .table-responsive-sm {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-sm > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 767.98px) {\n .table-responsive-md {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-md > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 991.98px) {\n .table-responsive-lg {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-lg > .table-bordered {\n border: 0;\n }\n}\n\n@media (max-width: 1199.98px) {\n .table-responsive-xl {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n }\n .table-responsive-xl > .table-bordered {\n border: 0;\n }\n}\n\n.table-responsive {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.table-responsive > .table-bordered {\n border: 0;\n}\n\n.form-control {\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .form-control {\n transition: none;\n }\n}\n\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n\n.form-control:focus {\n color: #495057;\n background-color: #fff;\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::placeholder {\n color: #6c757d;\n opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n background-color: #e9ecef;\n opacity: 1;\n}\n\nselect.form-control:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n.col-form-label {\n padding-top: calc(0.375rem + 1px);\n padding-bottom: calc(0.375rem + 1px);\n margin-bottom: 0;\n font-size: inherit;\n line-height: 1.5;\n}\n\n.col-form-label-lg {\n padding-top: calc(0.5rem + 1px);\n padding-bottom: calc(0.5rem + 1px);\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.col-form-label-sm {\n padding-top: calc(0.25rem + 1px);\n padding-bottom: calc(0.25rem + 1px);\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.form-control-plaintext {\n display: block;\n width: 100%;\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n margin-bottom: 0;\n line-height: 1.5;\n color: #212529;\n background-color: transparent;\n border: solid transparent;\n border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n padding-right: 0;\n padding-left: 0;\n}\n\n.form-control-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.form-control-lg {\n height: calc(1.5em + 1rem + 2px);\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\nselect.form-control[size], select.form-control[multiple] {\n height: auto;\n}\n\ntextarea.form-control {\n height: auto;\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\n.form-text {\n display: block;\n margin-top: 0.25rem;\n}\n\n.form-row {\n display: flex;\n flex-wrap: wrap;\n margin-right: -5px;\n margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n padding-right: 5px;\n padding-left: 5px;\n}\n\n.form-check {\n position: relative;\n display: block;\n padding-left: 1.25rem;\n}\n\n.form-check-input {\n position: absolute;\n margin-top: 0.3rem;\n margin-left: -1.25rem;\n}\n\n.form-check-input:disabled ~ .form-check-label {\n color: #6c757d;\n}\n\n.form-check-label {\n margin-bottom: 0;\n}\n\n.form-check-inline {\n display: inline-flex;\n align-items: center;\n padding-left: 0;\n margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-input {\n position: static;\n margin-top: 0;\n margin-right: 0.3125rem;\n margin-left: 0;\n}\n\n.valid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #28a745;\n}\n\n.valid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(40, 167, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n border-color: #28a745;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n border-color: #28a745;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-select:valid ~ .valid-feedback,\n.was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n color: #28a745;\n}\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n border-color: #34ce57;\n background-color: #34ce57;\n}\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n border-color: #28a745;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n display: none;\n width: 100%;\n margin-top: 0.25rem;\n font-size: 80%;\n color: #dc3545;\n}\n\n.invalid-tooltip {\n position: absolute;\n top: 100%;\n z-index: 5;\n display: none;\n max-width: 100%;\n padding: 0.25rem 0.5rem;\n margin-top: .1rem;\n font-size: 0.875rem;\n line-height: 1.5;\n color: #fff;\n background-color: rgba(220, 53, 69, 0.9);\n border-radius: 0.25rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n border-color: #dc3545;\n padding-right: calc(1.5em + 0.75rem);\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n background-repeat: no-repeat;\n background-position: center right calc(0.375em + 0.1875rem);\n background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n padding-right: calc(1.5em + 0.75rem);\n background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n border-color: #dc3545;\n padding-right: calc((1em + 0.75rem) * 3 / 4 + 1.75rem);\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n\n.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-select:invalid ~ .invalid-feedback,\n.was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n color: #dc3545;\n}\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n border-color: #e4606d;\n background-color: #e4606d;\n}\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n display: block;\n}\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n border-color: #dc3545;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n display: flex;\n flex-flow: row wrap;\n align-items: center;\n}\n\n.form-inline .form-check {\n width: 100%;\n}\n\n@media (min-width: 576px) {\n .form-inline label {\n display: flex;\n align-items: center;\n justify-content: center;\n margin-bottom: 0;\n }\n .form-inline .form-group {\n display: flex;\n flex: 0 0 auto;\n flex-flow: row wrap;\n align-items: center;\n margin-bottom: 0;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-plaintext {\n display: inline-block;\n }\n .form-inline .input-group,\n .form-inline .custom-select {\n width: auto;\n }\n .form-inline .form-check {\n display: flex;\n align-items: center;\n justify-content: center;\n width: auto;\n padding-left: 0;\n }\n .form-inline .form-check-input {\n position: relative;\n flex-shrink: 0;\n margin-top: 0;\n margin-right: 0.25rem;\n margin-left: 0;\n }\n .form-inline .custom-control {\n align-items: center;\n justify-content: center;\n }\n .form-inline .custom-control-label {\n margin-bottom: 0;\n }\n}\n\n.btn {\n display: inline-block;\n font-weight: 400;\n color: #212529;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n background-color: transparent;\n border: 1px solid transparent;\n padding: 0.375rem 0.75rem;\n font-size: 1rem;\n line-height: 1.5;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .btn {\n transition: none;\n }\n}\n\n.btn:hover {\n color: #212529;\n text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n opacity: 0.65;\n}\n\na.btn.disabled,\nfieldset:disabled a.btn {\n pointer-events: none;\n}\n\n.btn-primary {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:hover {\n color: #fff;\n background-color: #0069d9;\n border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n color: #fff;\n background-color: #0062cc;\n border-color: #005cbf;\n}\n\n.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(38, 143, 255, 0.5);\n}\n\n.btn-secondary {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:hover {\n color: #fff;\n background-color: #5a6268;\n border-color: #545b62;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n color: #fff;\n background-color: #545b62;\n border-color: #4e555b;\n}\n\n.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(130, 138, 145, 0.5);\n}\n\n.btn-success {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:hover {\n color: #fff;\n background-color: #218838;\n border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n color: #fff;\n background-color: #1e7e34;\n border-color: #1c7430;\n}\n\n.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5);\n}\n\n.btn-info {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:hover {\n color: #fff;\n background-color: #138496;\n border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n color: #fff;\n background-color: #117a8b;\n border-color: #10707f;\n}\n\n.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5);\n}\n\n.btn-warning {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:hover {\n color: #212529;\n background-color: #e0a800;\n border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n color: #212529;\n background-color: #d39e00;\n border-color: #c69500;\n}\n\n.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5);\n}\n\n.btn-danger {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:hover {\n color: #fff;\n background-color: #c82333;\n border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n color: #fff;\n background-color: #bd2130;\n border-color: #b21f2d;\n}\n\n.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5);\n}\n\n.btn-light {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n color: #212529;\n background-color: #e2e6ea;\n border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n color: #212529;\n background-color: #dae0e5;\n border-color: #d3d9df;\n}\n\n.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5);\n}\n\n.btn-dark {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:hover {\n color: #fff;\n background-color: #23272b;\n border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n color: #fff;\n background-color: #1d2124;\n border-color: #171a1d;\n}\n\n.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5);\n}\n\n.btn-outline-primary {\n color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n color: #007bff;\n background-color: transparent;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-primary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:hover {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n color: #6c757d;\n background-color: transparent;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n color: #fff;\n background-color: #6c757d;\n border-color: #6c757d;\n}\n\n.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-secondary.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.btn-outline-success {\n color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n color: #28a745;\n background-color: transparent;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n color: #fff;\n background-color: #28a745;\n border-color: #28a745;\n}\n\n.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-success.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n color: #17a2b8;\n background-color: transparent;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n color: #fff;\n background-color: #17a2b8;\n border-color: #17a2b8;\n}\n\n.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-info.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n color: #ffc107;\n background-color: transparent;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n color: #212529;\n background-color: #ffc107;\n border-color: #ffc107;\n}\n\n.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-warning.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n color: #dc3545;\n background-color: transparent;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n color: #fff;\n background-color: #dc3545;\n border-color: #dc3545;\n}\n\n.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-danger.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n color: #f8f9fa;\n background-color: transparent;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n color: #212529;\n background-color: #f8f9fa;\n border-color: #f8f9fa;\n}\n\n.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-light.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n color: #343a40;\n background-color: transparent;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n color: #fff;\n background-color: #343a40;\n border-color: #343a40;\n}\n\n.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n.show > .btn-outline-dark.dropdown-toggle:focus {\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n font-weight: 400;\n color: #007bff;\n text-decoration: none;\n}\n\n.btn-link:hover {\n color: #0056b3;\n text-decoration: underline;\n}\n\n.btn-link:focus, .btn-link.focus {\n text-decoration: underline;\n box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n color: #6c757d;\n pointer-events: none;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n.btn-block + .btn-block {\n margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n\n.fade {\n transition: opacity 0.15s linear;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .fade {\n transition: none;\n }\n}\n\n.fade:not(.show) {\n opacity: 0;\n}\n\n.collapse:not(.show) {\n display: none;\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n transition: height 0.35s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .collapsing {\n transition: none;\n }\n}\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n position: relative;\n}\n\n.dropdown-toggle {\n white-space: nowrap;\n}\n\n.dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid;\n border-right: 0.3em solid transparent;\n border-bottom: 0;\n border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 10rem;\n padding: 0.5rem 0;\n margin: 0.125rem 0 0;\n font-size: 1rem;\n color: #212529;\n text-align: left;\n list-style: none;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 0.25rem;\n}\n\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n\n@media (min-width: 576px) {\n .dropdown-menu-sm-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-sm-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 768px) {\n .dropdown-menu-md-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-md-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 992px) {\n .dropdown-menu-lg-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-lg-right {\n right: 0;\n left: auto;\n }\n}\n\n@media (min-width: 1200px) {\n .dropdown-menu-xl-left {\n right: auto;\n left: 0;\n }\n .dropdown-menu-xl-right {\n right: 0;\n left: auto;\n }\n}\n\n.dropup .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0;\n border-right: 0.3em solid transparent;\n border-bottom: 0.3em solid;\n border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-menu {\n top: 0;\n right: auto;\n left: 100%;\n margin-top: 0;\n margin-left: 0.125rem;\n}\n\n.dropright .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0;\n border-bottom: 0.3em solid transparent;\n border-left: 0.3em solid;\n}\n\n.dropright .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropright .dropdown-toggle::after {\n vertical-align: 0;\n}\n\n.dropleft .dropdown-menu {\n top: 0;\n right: 100%;\n left: auto;\n margin-top: 0;\n margin-right: 0.125rem;\n}\n\n.dropleft .dropdown-toggle::after {\n display: inline-block;\n margin-left: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n}\n\n.dropleft .dropdown-toggle::after {\n display: none;\n}\n\n.dropleft .dropdown-toggle::before {\n display: inline-block;\n margin-right: 0.255em;\n vertical-align: 0.255em;\n content: \"\";\n border-top: 0.3em solid transparent;\n border-right: 0.3em solid;\n border-bottom: 0.3em solid transparent;\n}\n\n.dropleft .dropdown-toggle:empty::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle::before {\n vertical-align: 0;\n}\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n right: auto;\n bottom: auto;\n}\n\n.dropdown-divider {\n height: 0;\n margin: 0.5rem 0;\n overflow: hidden;\n border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n display: block;\n width: 100%;\n padding: 0.25rem 1.5rem;\n clear: both;\n font-weight: 400;\n color: #212529;\n text-align: inherit;\n white-space: nowrap;\n background-color: transparent;\n border: 0;\n}\n\n.dropdown-item:hover, .dropdown-item:focus {\n color: #16181b;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n color: #fff;\n text-decoration: none;\n background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: transparent;\n}\n\n.dropdown-menu.show {\n display: block;\n}\n\n.dropdown-header {\n display: block;\n padding: 0.5rem 1.5rem;\n margin-bottom: 0;\n font-size: 0.875rem;\n color: #6c757d;\n white-space: nowrap;\n}\n\n.dropdown-item-text {\n display: block;\n padding: 0.25rem 1.5rem;\n color: #212529;\n}\n\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-flex;\n vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n flex: 1 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n z-index: 1;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n z-index: 1;\n}\n\n.btn-toolbar {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n margin-left: -1px;\n}\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n padding-right: 0.5625rem;\n padding-left: 0.5625rem;\n}\n\n.dropdown-toggle-split::after,\n.dropup .dropdown-toggle-split::after,\n.dropright .dropdown-toggle-split::after {\n margin-left: 0;\n}\n\n.dropleft .dropdown-toggle-split::before {\n margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n padding-right: 0.375rem;\n padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n padding-right: 0.75rem;\n padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n}\n\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n width: 100%;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n margin-top: -1px;\n}\n\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n margin-bottom: 0;\n}\n\n.btn-group-toggle > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn input[type=\"checkbox\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n.btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n\n.input-group {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: stretch;\n width: 100%;\n}\n\n.input-group > .form-control,\n.input-group > .form-control-plaintext,\n.input-group > .custom-select,\n.input-group > .custom-file {\n position: relative;\n flex: 1 1 auto;\n width: 1%;\n margin-bottom: 0;\n}\n\n.input-group > .form-control + .form-control,\n.input-group > .form-control + .custom-select,\n.input-group > .form-control + .custom-file,\n.input-group > .form-control-plaintext + .form-control,\n.input-group > .form-control-plaintext + .custom-select,\n.input-group > .form-control-plaintext + .custom-file,\n.input-group > .custom-select + .form-control,\n.input-group > .custom-select + .custom-select,\n.input-group > .custom-select + .custom-file,\n.input-group > .custom-file + .form-control,\n.input-group > .custom-file + .custom-select,\n.input-group > .custom-file + .custom-file {\n margin-left: -1px;\n}\n\n.input-group > .form-control:focus,\n.input-group > .custom-select:focus,\n.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n z-index: 3;\n}\n\n.input-group > .custom-file .custom-file-input:focus {\n z-index: 4;\n}\n\n.input-group > .form-control:not(:last-child),\n.input-group > .custom-select:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .form-control:not(:first-child),\n.input-group > .custom-select:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group > .custom-file {\n display: flex;\n align-items: center;\n}\n\n.input-group > .custom-file:not(:last-child) .custom-file-label,\n.input-group > .custom-file:not(:last-child) .custom-file-label::after {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .custom-file:not(:first-child) .custom-file-label {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.input-group-prepend,\n.input-group-append {\n display: flex;\n}\n\n.input-group-prepend .btn,\n.input-group-append .btn {\n position: relative;\n z-index: 2;\n}\n\n.input-group-prepend .btn:focus,\n.input-group-append .btn:focus {\n z-index: 3;\n}\n\n.input-group-prepend .btn + .btn,\n.input-group-prepend .btn + .input-group-text,\n.input-group-prepend .input-group-text + .input-group-text,\n.input-group-prepend .input-group-text + .btn,\n.input-group-append .btn + .btn,\n.input-group-append .btn + .input-group-text,\n.input-group-append .input-group-text + .input-group-text,\n.input-group-append .input-group-text + .btn {\n margin-left: -1px;\n}\n\n.input-group-prepend {\n margin-right: -1px;\n}\n\n.input-group-append {\n margin-left: -1px;\n}\n\n.input-group-text {\n display: flex;\n align-items: center;\n padding: 0.375rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n text-align: center;\n white-space: nowrap;\n background-color: #e9ecef;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.input-group-text input[type=\"radio\"],\n.input-group-text input[type=\"checkbox\"] {\n margin-top: 0;\n}\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n height: calc(1.5em + 1rem + 2px);\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n padding: 0.5rem 1rem;\n font-size: 1.25rem;\n line-height: 1.5;\n border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n height: calc(1.5em + 0.5rem + 2px);\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n border-radius: 0.2rem;\n}\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n padding-right: 1.75rem;\n}\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.custom-control {\n position: relative;\n display: block;\n min-height: 1.5rem;\n padding-left: 1.5rem;\n}\n\n.custom-control-inline {\n display: inline-flex;\n margin-right: 1rem;\n}\n\n.custom-control-input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-label::before {\n color: #fff;\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-label::before {\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n border-color: #80bdff;\n}\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n color: #fff;\n background-color: #b3d7ff;\n border-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-label {\n color: #6c757d;\n}\n\n.custom-control-input:disabled ~ .custom-control-label::before {\n background-color: #e9ecef;\n}\n\n.custom-control-label {\n position: relative;\n margin-bottom: 0;\n vertical-align: top;\n}\n\n.custom-control-label::before {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n pointer-events: none;\n content: \"\";\n background-color: #fff;\n border: #adb5bd solid 1px;\n}\n\n.custom-control-label::after {\n position: absolute;\n top: 0.25rem;\n left: -1.5rem;\n display: block;\n width: 1rem;\n height: 1rem;\n content: \"\";\n background: no-repeat 50% / 50% 50%;\n}\n\n.custom-checkbox .custom-control-label::before {\n border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n border-color: #007bff;\n background-color: #007bff;\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\");\n}\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-radio .custom-control-label::before {\n border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-switch {\n padding-left: 2.25rem;\n}\n\n.custom-switch .custom-control-label::before {\n left: -2.25rem;\n width: 1.75rem;\n pointer-events: all;\n border-radius: 0.5rem;\n}\n\n.custom-switch .custom-control-label::after {\n top: calc(0.25rem + 2px);\n left: calc(-2.25rem + 2px);\n width: calc(1rem - 4px);\n height: calc(1rem - 4px);\n background-color: #adb5bd;\n border-radius: 0.5rem;\n transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-switch .custom-control-label::after {\n transition: none;\n }\n}\n\n.custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n background-color: #fff;\n transform: translateX(0.75rem);\n}\n\n.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n background-color: rgba(0, 123, 255, 0.5);\n}\n\n.custom-select {\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n vertical-align: middle;\n background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.75rem center/8px 10px;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n appearance: none;\n}\n\n.custom-select:focus {\n border-color: #80bdff;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-select:focus::-ms-value {\n color: #495057;\n background-color: #fff;\n}\n\n.custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n height: auto;\n padding-right: 0.75rem;\n background-image: none;\n}\n\n.custom-select:disabled {\n color: #6c757d;\n background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n display: none;\n}\n\n.custom-select-sm {\n height: calc(1.5em + 0.5rem + 2px);\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n padding-left: 0.5rem;\n font-size: 0.875rem;\n}\n\n.custom-select-lg {\n height: calc(1.5em + 1rem + 2px);\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 1rem;\n font-size: 1.25rem;\n}\n\n.custom-file {\n position: relative;\n display: inline-block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin-bottom: 0;\n}\n\n.custom-file-input {\n position: relative;\n z-index: 2;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n margin: 0;\n opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-label {\n border-color: #80bdff;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-file-input:disabled ~ .custom-file-label {\n background-color: #e9ecef;\n}\n\n.custom-file-input:lang(en) ~ .custom-file-label::after {\n content: \"Browse\";\n}\n\n.custom-file-input ~ .custom-file-label[data-browse]::after {\n content: attr(data-browse);\n}\n\n.custom-file-label {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1;\n height: calc(1.5em + 0.75rem + 2px);\n padding: 0.375rem 0.75rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-color: #fff;\n border: 1px solid #ced4da;\n border-radius: 0.25rem;\n}\n\n.custom-file-label::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n z-index: 3;\n display: block;\n height: calc(1.5em + 0.75rem);\n padding: 0.375rem 0.75rem;\n line-height: 1.5;\n color: #495057;\n content: \"Browse\";\n background-color: #e9ecef;\n border-left: inherit;\n border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-range {\n width: 100%;\n height: calc(1rem + 0.4rem);\n padding: 0;\n background-color: transparent;\n appearance: none;\n}\n\n.custom-range:focus {\n outline: none;\n}\n\n.custom-range:focus::-webkit-slider-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-moz-range-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range:focus::-ms-thumb {\n box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-range::-moz-focus-outer {\n border: 0;\n}\n\n.custom-range::-webkit-slider-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: -0.25rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-webkit-slider-thumb {\n transition: none;\n }\n}\n\n.custom-range::-webkit-slider-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-webkit-slider-runnable-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-moz-range-thumb {\n width: 1rem;\n height: 1rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-moz-range-thumb {\n transition: none;\n }\n}\n\n.custom-range::-moz-range-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-moz-range-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: #dee2e6;\n border-color: transparent;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-thumb {\n width: 1rem;\n height: 1rem;\n margin-top: 0;\n margin-right: 0.2rem;\n margin-left: 0.2rem;\n background-color: #007bff;\n border: 0;\n border-radius: 1rem;\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n appearance: none;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-range::-ms-thumb {\n transition: none;\n }\n}\n\n.custom-range::-ms-thumb:active {\n background-color: #b3d7ff;\n}\n\n.custom-range::-ms-track {\n width: 100%;\n height: 0.5rem;\n color: transparent;\n cursor: pointer;\n background-color: transparent;\n border-color: transparent;\n border-width: 0.5rem;\n}\n\n.custom-range::-ms-fill-lower {\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range::-ms-fill-upper {\n margin-right: 15px;\n background-color: #dee2e6;\n border-radius: 1rem;\n}\n\n.custom-range:disabled::-webkit-slider-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-webkit-slider-runnable-track {\n cursor: default;\n}\n\n.custom-range:disabled::-moz-range-thumb {\n background-color: #adb5bd;\n}\n\n.custom-range:disabled::-moz-range-track {\n cursor: default;\n}\n\n.custom-range:disabled::-ms-thumb {\n background-color: #adb5bd;\n}\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .custom-control-label::before,\n .custom-file-label,\n .custom-select {\n transition: none;\n }\n}\n\n.nav {\n display: flex;\n flex-wrap: wrap;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.nav-link {\n display: block;\n padding: 0.5rem 1rem;\n}\n\n.nav-link:hover, .nav-link:focus {\n text-decoration: none;\n}\n\n.nav-link.disabled {\n color: #6c757d;\n pointer-events: none;\n cursor: default;\n}\n\n.nav-tabs {\n border-bottom: 1px solid #dee2e6;\n}\n\n.nav-tabs .nav-item {\n margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n border: 1px solid transparent;\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n border-color: #e9ecef #e9ecef #dee2e6;\n}\n\n.nav-tabs .nav-link.disabled {\n color: #6c757d;\n background-color: transparent;\n border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n color: #495057;\n background-color: #fff;\n border-color: #dee2e6 #dee2e6 #fff;\n}\n\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n color: #fff;\n background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n flex: 1 1 auto;\n text-align: center;\n}\n\n.nav-justified .nav-item {\n flex-basis: 0;\n flex-grow: 1;\n text-align: center;\n}\n\n.tab-content > .tab-pane {\n display: none;\n}\n\n.tab-content > .active {\n display: block;\n}\n\n.navbar {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n}\n\n.navbar-brand {\n display: inline-block;\n padding-top: 0.3125rem;\n padding-bottom: 0.3125rem;\n margin-right: 1rem;\n font-size: 1.25rem;\n line-height: inherit;\n white-space: nowrap;\n}\n\n.navbar-brand:hover, .navbar-brand:focus {\n text-decoration: none;\n}\n\n.navbar-nav {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n\n.navbar-nav .nav-link {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n position: static;\n float: none;\n}\n\n.navbar-text {\n display: inline-block;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n flex-basis: 100%;\n flex-grow: 1;\n align-items: center;\n}\n\n.navbar-toggler {\n padding: 0.25rem 0.75rem;\n font-size: 1.25rem;\n line-height: 1;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.navbar-toggler:hover, .navbar-toggler:focus {\n text-decoration: none;\n}\n\n.navbar-toggler-icon {\n display: inline-block;\n width: 1.5em;\n height: 1.5em;\n vertical-align: middle;\n content: \"\";\n background: no-repeat center center;\n background-size: 100% 100%;\n}\n\n@media (max-width: 575.98px) {\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 576px) {\n .navbar-expand-sm {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-sm .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-sm .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-sm .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-sm > .container,\n .navbar-expand-sm > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-sm .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-sm .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 767.98px) {\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 768px) {\n .navbar-expand-md {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-md .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-md .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-md .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-md > .container,\n .navbar-expand-md > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-md .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-md .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 991.98px) {\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 992px) {\n .navbar-expand-lg {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-lg .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-lg .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-lg .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-lg > .container,\n .navbar-expand-lg > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-lg .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-lg .navbar-toggler {\n display: none;\n }\n}\n\n@media (max-width: 1199.98px) {\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .navbar-expand-xl {\n flex-flow: row nowrap;\n justify-content: flex-start;\n }\n .navbar-expand-xl .navbar-nav {\n flex-direction: row;\n }\n .navbar-expand-xl .navbar-nav .dropdown-menu {\n position: absolute;\n }\n .navbar-expand-xl .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n }\n .navbar-expand-xl > .container,\n .navbar-expand-xl > .container-fluid {\n flex-wrap: nowrap;\n }\n .navbar-expand-xl .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n }\n .navbar-expand-xl .navbar-toggler {\n display: none;\n }\n}\n\n.navbar-expand {\n flex-flow: row nowrap;\n justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n padding-right: 0;\n padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n position: absolute;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n padding-right: 0.5rem;\n padding-left: 0.5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n display: flex !important;\n flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n display: none;\n}\n\n.navbar-light .navbar-brand {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n color: rgba(0, 0, 0, 0.5);\n border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-light .navbar-text {\n color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n color: #fff;\n}\n\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n color: rgba(255, 255, 255, 0.5);\n border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n\n.navbar-dark .navbar-text {\n color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n color: #fff;\n}\n\n.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n color: #fff;\n}\n\n.card {\n position: relative;\n display: flex;\n flex-direction: column;\n min-width: 0;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: border-box;\n border: 1px solid rgba(0, 0, 0, 0.125);\n border-radius: 0.25rem;\n}\n\n.card > hr {\n margin-right: 0;\n margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n flex: 1 1 auto;\n padding: 1.25rem;\n}\n\n.card-title {\n margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n margin-top: -0.375rem;\n margin-bottom: 0;\n}\n\n.card-text:last-child {\n margin-bottom: 0;\n}\n\n.card-link:hover {\n text-decoration: none;\n}\n\n.card-link + .card-link {\n margin-left: 1.25rem;\n}\n\n.card-header {\n padding: 0.75rem 1.25rem;\n margin-bottom: 0;\n background-color: rgba(0, 0, 0, 0.03);\n border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n border-top: 0;\n}\n\n.card-footer {\n padding: 0.75rem 1.25rem;\n background-color: rgba(0, 0, 0, 0.03);\n border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n margin-right: -0.625rem;\n margin-bottom: -0.75rem;\n margin-left: -0.625rem;\n border-bottom: 0;\n}\n\n.card-header-pills {\n margin-right: -0.625rem;\n margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n padding: 1.25rem;\n}\n\n.card-img {\n width: 100%;\n border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n width: 100%;\n border-top-left-radius: calc(0.25rem - 1px);\n border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n width: 100%;\n border-bottom-right-radius: calc(0.25rem - 1px);\n border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n display: flex;\n flex-direction: column;\n}\n\n.card-deck .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-deck {\n flex-flow: row wrap;\n margin-right: -15px;\n margin-left: -15px;\n }\n .card-deck .card {\n display: flex;\n flex: 1 0 0%;\n flex-direction: column;\n margin-right: 15px;\n margin-bottom: 0;\n margin-left: 15px;\n }\n}\n\n.card-group {\n display: flex;\n flex-direction: column;\n}\n\n.card-group > .card {\n margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n .card-group {\n flex-flow: row wrap;\n }\n .card-group > .card {\n flex: 1 0 0%;\n margin-bottom: 0;\n }\n .card-group > .card + .card {\n margin-left: 0;\n border-left: 0;\n }\n .card-group > .card:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-top,\n .card-group > .card:not(:last-child) .card-header {\n border-top-right-radius: 0;\n }\n .card-group > .card:not(:last-child) .card-img-bottom,\n .card-group > .card:not(:last-child) .card-footer {\n border-bottom-right-radius: 0;\n }\n .card-group > .card:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-top,\n .card-group > .card:not(:first-child) .card-header {\n border-top-left-radius: 0;\n }\n .card-group > .card:not(:first-child) .card-img-bottom,\n .card-group > .card:not(:first-child) .card-footer {\n border-bottom-left-radius: 0;\n }\n}\n\n.card-columns .card {\n margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n .card-columns {\n column-count: 3;\n column-gap: 1.25rem;\n orphans: 1;\n widows: 1;\n }\n .card-columns .card {\n display: inline-block;\n width: 100%;\n }\n}\n\n.accordion > .card {\n overflow: hidden;\n}\n\n.accordion > .card:not(:first-of-type) .card-header:first-child {\n border-radius: 0;\n}\n\n.accordion > .card:not(:first-of-type):not(:last-of-type) {\n border-bottom: 0;\n border-radius: 0;\n}\n\n.accordion > .card:first-of-type {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n\n.accordion > .card:last-of-type {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n\n.accordion > .card .card-header {\n margin-bottom: -1px;\n}\n\n.breadcrumb {\n display: flex;\n flex-wrap: wrap;\n padding: 0.75rem 1rem;\n margin-bottom: 1rem;\n list-style: none;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n padding-left: 0.5rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n display: inline-block;\n padding-right: 0.5rem;\n color: #6c757d;\n content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n text-decoration: none;\n}\n\n.breadcrumb-item.active {\n color: #6c757d;\n}\n\n.pagination {\n display: flex;\n padding-left: 0;\n list-style: none;\n border-radius: 0.25rem;\n}\n\n.page-link {\n position: relative;\n display: block;\n padding: 0.5rem 0.75rem;\n margin-left: -1px;\n line-height: 1.25;\n color: #007bff;\n background-color: #fff;\n border: 1px solid #dee2e6;\n}\n\n.page-link:hover {\n z-index: 2;\n color: #0056b3;\n text-decoration: none;\n background-color: #e9ecef;\n border-color: #dee2e6;\n}\n\n.page-link:focus {\n z-index: 2;\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.page-item:first-child .page-link {\n margin-left: 0;\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n z-index: 1;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n color: #6c757d;\n pointer-events: none;\n cursor: auto;\n background-color: #fff;\n border-color: #dee2e6;\n}\n\n.pagination-lg .page-link {\n padding: 0.75rem 1.5rem;\n font-size: 1.25rem;\n line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n border-top-left-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n border-top-right-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n border-top-left-radius: 0.2rem;\n border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n border-top-right-radius: 0.2rem;\n border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n display: inline-block;\n padding: 0.25em 0.4em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: 0.25rem;\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .badge {\n transition: none;\n }\n}\n\na.badge:hover, a.badge:focus {\n text-decoration: none;\n}\n\n.badge:empty {\n display: none;\n}\n\n.btn .badge {\n position: relative;\n top: -1px;\n}\n\n.badge-pill {\n padding-right: 0.6em;\n padding-left: 0.6em;\n border-radius: 10rem;\n}\n\n.badge-primary {\n color: #fff;\n background-color: #007bff;\n}\n\na.badge-primary:hover, a.badge-primary:focus {\n color: #fff;\n background-color: #0062cc;\n}\n\na.badge-primary:focus, a.badge-primary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.badge-secondary {\n color: #fff;\n background-color: #6c757d;\n}\n\na.badge-secondary:hover, a.badge-secondary:focus {\n color: #fff;\n background-color: #545b62;\n}\n\na.badge-secondary:focus, a.badge-secondary.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);\n}\n\n.badge-success {\n color: #fff;\n background-color: #28a745;\n}\n\na.badge-success:hover, a.badge-success:focus {\n color: #fff;\n background-color: #1e7e34;\n}\n\na.badge-success:focus, a.badge-success.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.badge-info {\n color: #fff;\n background-color: #17a2b8;\n}\n\na.badge-info:hover, a.badge-info:focus {\n color: #fff;\n background-color: #117a8b;\n}\n\na.badge-info:focus, a.badge-info.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.badge-warning {\n color: #212529;\n background-color: #ffc107;\n}\n\na.badge-warning:hover, a.badge-warning:focus {\n color: #212529;\n background-color: #d39e00;\n}\n\na.badge-warning:focus, a.badge-warning.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.badge-danger {\n color: #fff;\n background-color: #dc3545;\n}\n\na.badge-danger:hover, a.badge-danger:focus {\n color: #fff;\n background-color: #bd2130;\n}\n\na.badge-danger:focus, a.badge-danger.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.badge-light {\n color: #212529;\n background-color: #f8f9fa;\n}\n\na.badge-light:hover, a.badge-light:focus {\n color: #212529;\n background-color: #dae0e5;\n}\n\na.badge-light:focus, a.badge-light.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.badge-dark {\n color: #fff;\n background-color: #343a40;\n}\n\na.badge-dark:hover, a.badge-dark:focus {\n color: #fff;\n background-color: #1d2124;\n}\n\na.badge-dark:focus, a.badge-dark.focus {\n outline: 0;\n box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.jumbotron {\n padding: 2rem 1rem;\n margin-bottom: 2rem;\n background-color: #e9ecef;\n border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n .jumbotron {\n padding: 4rem 2rem;\n }\n}\n\n.jumbotron-fluid {\n padding-right: 0;\n padding-left: 0;\n border-radius: 0;\n}\n\n.alert {\n position: relative;\n padding: 0.75rem 1.25rem;\n margin-bottom: 1rem;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n}\n\n.alert-heading {\n color: inherit;\n}\n\n.alert-link {\n font-weight: 700;\n}\n\n.alert-dismissible {\n padding-right: 4rem;\n}\n\n.alert-dismissible .close {\n position: absolute;\n top: 0;\n right: 0;\n padding: 0.75rem 1.25rem;\n color: inherit;\n}\n\n.alert-primary {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n}\n\n.alert-primary hr {\n border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n color: #002752;\n}\n\n.alert-secondary {\n color: #383d41;\n background-color: #e2e3e5;\n border-color: #d6d8db;\n}\n\n.alert-secondary hr {\n border-top-color: #c8cbcf;\n}\n\n.alert-secondary .alert-link {\n color: #202326;\n}\n\n.alert-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n}\n\n.alert-success hr {\n border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n color: #0b2e13;\n}\n\n.alert-info {\n color: #0c5460;\n background-color: #d1ecf1;\n border-color: #bee5eb;\n}\n\n.alert-info hr {\n border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n color: #062c33;\n}\n\n.alert-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n}\n\n.alert-warning hr {\n border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n color: #533f03;\n}\n\n.alert-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n color: #491217;\n}\n\n.alert-light {\n color: #818182;\n background-color: #fefefe;\n border-color: #fdfdfe;\n}\n\n.alert-light hr {\n border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n color: #686868;\n}\n\n.alert-dark {\n color: #1b1e21;\n background-color: #d6d8d9;\n border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n color: #040505;\n}\n\n@keyframes progress-bar-stripes {\n from {\n background-position: 1rem 0;\n }\n to {\n background-position: 0 0;\n }\n}\n\n.progress {\n display: flex;\n height: 1rem;\n overflow: hidden;\n font-size: 0.75rem;\n background-color: #e9ecef;\n border-radius: 0.25rem;\n}\n\n.progress-bar {\n display: flex;\n flex-direction: column;\n justify-content: center;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n background-color: #007bff;\n transition: width 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar {\n transition: none;\n }\n}\n\n.progress-bar-striped {\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n animation: progress-bar-stripes 1s linear infinite;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .progress-bar-animated {\n animation: none;\n }\n}\n\n.media {\n display: flex;\n align-items: flex-start;\n}\n\n.media-body {\n flex: 1;\n}\n\n.list-group {\n display: flex;\n flex-direction: column;\n padding-left: 0;\n margin-bottom: 0;\n}\n\n.list-group-item-action {\n width: 100%;\n color: #495057;\n text-align: inherit;\n}\n\n.list-group-item-action:hover, .list-group-item-action:focus {\n z-index: 1;\n color: #495057;\n text-decoration: none;\n background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n color: #212529;\n background-color: #e9ecef;\n}\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 0.75rem 1.25rem;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n color: #6c757d;\n pointer-events: none;\n background-color: #fff;\n}\n\n.list-group-item.active {\n z-index: 2;\n color: #fff;\n background-color: #007bff;\n border-color: #007bff;\n}\n\n.list-group-horizontal {\n flex-direction: row;\n}\n\n.list-group-horizontal .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n}\n\n.list-group-horizontal .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n}\n\n.list-group-horizontal .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n}\n\n@media (min-width: 576px) {\n .list-group-horizontal-sm {\n flex-direction: row;\n }\n .list-group-horizontal-sm .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-sm .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-sm .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 768px) {\n .list-group-horizontal-md {\n flex-direction: row;\n }\n .list-group-horizontal-md .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-md .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-md .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 992px) {\n .list-group-horizontal-lg {\n flex-direction: row;\n }\n .list-group-horizontal-lg .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-lg .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-lg .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n@media (min-width: 1200px) {\n .list-group-horizontal-xl {\n flex-direction: row;\n }\n .list-group-horizontal-xl .list-group-item {\n margin-right: -1px;\n margin-bottom: 0;\n }\n .list-group-horizontal-xl .list-group-item:first-child {\n border-top-left-radius: 0.25rem;\n border-bottom-left-radius: 0.25rem;\n border-top-right-radius: 0;\n }\n .list-group-horizontal-xl .list-group-item:last-child {\n margin-right: 0;\n border-top-right-radius: 0.25rem;\n border-bottom-right-radius: 0.25rem;\n border-bottom-left-radius: 0;\n }\n}\n\n.list-group-flush .list-group-item {\n border-right: 0;\n border-left: 0;\n border-radius: 0;\n}\n\n.list-group-flush .list-group-item:last-child {\n margin-bottom: -1px;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n margin-bottom: 0;\n border-bottom: 0;\n}\n\n.list-group-item-primary {\n color: #004085;\n background-color: #b8daff;\n}\n\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n color: #004085;\n background-color: #9fcdff;\n}\n\n.list-group-item-primary.list-group-item-action.active {\n color: #fff;\n background-color: #004085;\n border-color: #004085;\n}\n\n.list-group-item-secondary {\n color: #383d41;\n background-color: #d6d8db;\n}\n\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n color: #383d41;\n background-color: #c8cbcf;\n}\n\n.list-group-item-secondary.list-group-item-action.active {\n color: #fff;\n background-color: #383d41;\n border-color: #383d41;\n}\n\n.list-group-item-success {\n color: #155724;\n background-color: #c3e6cb;\n}\n\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n color: #155724;\n background-color: #b1dfbb;\n}\n\n.list-group-item-success.list-group-item-action.active {\n color: #fff;\n background-color: #155724;\n border-color: #155724;\n}\n\n.list-group-item-info {\n color: #0c5460;\n background-color: #bee5eb;\n}\n\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n color: #0c5460;\n background-color: #abdde5;\n}\n\n.list-group-item-info.list-group-item-action.active {\n color: #fff;\n background-color: #0c5460;\n border-color: #0c5460;\n}\n\n.list-group-item-warning {\n color: #856404;\n background-color: #ffeeba;\n}\n\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n color: #856404;\n background-color: #ffe8a1;\n}\n\n.list-group-item-warning.list-group-item-action.active {\n color: #fff;\n background-color: #856404;\n border-color: #856404;\n}\n\n.list-group-item-danger {\n color: #721c24;\n background-color: #f5c6cb;\n}\n\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n color: #721c24;\n background-color: #f1b0b7;\n}\n\n.list-group-item-danger.list-group-item-action.active {\n color: #fff;\n background-color: #721c24;\n border-color: #721c24;\n}\n\n.list-group-item-light {\n color: #818182;\n background-color: #fdfdfe;\n}\n\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n color: #818182;\n background-color: #ececf6;\n}\n\n.list-group-item-light.list-group-item-action.active {\n color: #fff;\n background-color: #818182;\n border-color: #818182;\n}\n\n.list-group-item-dark {\n color: #1b1e21;\n background-color: #c6c8ca;\n}\n\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n color: #1b1e21;\n background-color: #b9bbbe;\n}\n\n.list-group-item-dark.list-group-item-action.active {\n color: #fff;\n background-color: #1b1e21;\n border-color: #1b1e21;\n}\n\n.close {\n float: right;\n font-size: 1.5rem;\n font-weight: 700;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: .5;\n}\n\n.close:hover {\n color: #000;\n text-decoration: none;\n}\n\n.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n opacity: .75;\n}\n\nbutton.close {\n padding: 0;\n background-color: transparent;\n border: 0;\n appearance: none;\n}\n\na.close.disabled {\n pointer-events: none;\n}\n\n.toast {\n max-width: 350px;\n overflow: hidden;\n font-size: 0.875rem;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);\n backdrop-filter: blur(10px);\n opacity: 0;\n border-radius: 0.25rem;\n}\n\n.toast:not(:last-child) {\n margin-bottom: 0.75rem;\n}\n\n.toast.showing {\n opacity: 1;\n}\n\n.toast.show {\n display: block;\n opacity: 1;\n}\n\n.toast.hide {\n display: none;\n}\n\n.toast-header {\n display: flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n color: #6c757d;\n background-color: rgba(255, 255, 255, 0.85);\n background-clip: padding-box;\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\n.toast-body {\n padding: 0.75rem;\n}\n\n.modal-open {\n overflow: hidden;\n}\n\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n.modal {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1050;\n display: none;\n width: 100%;\n height: 100%;\n overflow: hidden;\n outline: 0;\n}\n\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 0.5rem;\n pointer-events: none;\n}\n\n.modal.fade .modal-dialog {\n transition: transform 0.3s ease-out;\n transform: translate(0, -50px);\n}\n\n@media (prefers-reduced-motion: reduce) {\n .modal.fade .modal-dialog {\n transition: none;\n }\n}\n\n.modal.show .modal-dialog {\n transform: none;\n}\n\n.modal-dialog-scrollable {\n display: flex;\n max-height: calc(100% - 1rem);\n}\n\n.modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 1rem);\n overflow: hidden;\n}\n\n.modal-dialog-scrollable .modal-header,\n.modal-dialog-scrollable .modal-footer {\n flex-shrink: 0;\n}\n\n.modal-dialog-scrollable .modal-body {\n overflow-y: auto;\n}\n\n.modal-dialog-centered {\n display: flex;\n align-items: center;\n min-height: calc(100% - 1rem);\n}\n\n.modal-dialog-centered::before {\n display: block;\n height: calc(100vh - 1rem);\n content: \"\";\n}\n\n.modal-dialog-centered.modal-dialog-scrollable {\n flex-direction: column;\n justify-content: center;\n height: 100%;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable .modal-content {\n max-height: none;\n}\n\n.modal-dialog-centered.modal-dialog-scrollable::before {\n content: none;\n}\n\n.modal-content {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n pointer-events: auto;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n outline: 0;\n}\n\n.modal-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1040;\n width: 100vw;\n height: 100vh;\n background-color: #000;\n}\n\n.modal-backdrop.fade {\n opacity: 0;\n}\n\n.modal-backdrop.show {\n opacity: 0.5;\n}\n\n.modal-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n padding: 1rem 1rem;\n border-bottom: 1px solid #dee2e6;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n padding: 1rem 1rem;\n margin: -1rem -1rem -1rem auto;\n}\n\n.modal-title {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\n.modal-body {\n position: relative;\n flex: 1 1 auto;\n padding: 1rem;\n}\n\n.modal-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n padding: 1rem;\n border-top: 1px solid #dee2e6;\n border-bottom-right-radius: 0.3rem;\n border-bottom-left-radius: 0.3rem;\n}\n\n.modal-footer > :not(:first-child) {\n margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n@media (min-width: 576px) {\n .modal-dialog {\n max-width: 500px;\n margin: 1.75rem auto;\n }\n .modal-dialog-scrollable {\n max-height: calc(100% - 3.5rem);\n }\n .modal-dialog-scrollable .modal-content {\n max-height: calc(100vh - 3.5rem);\n }\n .modal-dialog-centered {\n min-height: calc(100% - 3.5rem);\n }\n .modal-dialog-centered::before {\n height: calc(100vh - 3.5rem);\n }\n .modal-sm {\n max-width: 300px;\n }\n}\n\n@media (min-width: 992px) {\n .modal-lg,\n .modal-xl {\n max-width: 800px;\n }\n}\n\n@media (min-width: 1200px) {\n .modal-xl {\n max-width: 1140px;\n }\n}\n\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n opacity: 0;\n}\n\n.tooltip.show {\n opacity: 0.9;\n}\n\n.tooltip .arrow {\n position: absolute;\n display: block;\n width: 0.8rem;\n height: 0.4rem;\n}\n\n.tooltip .arrow::before {\n position: absolute;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n bottom: 0;\n}\n\n.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n top: 0;\n border-width: 0.4rem 0.4rem 0;\n border-top-color: #000;\n}\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n left: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n right: 0;\n border-width: 0.4rem 0.4rem 0.4rem 0;\n border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n padding: 0.4rem 0;\n}\n\n.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n top: 0;\n}\n\n.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n bottom: 0;\n border-width: 0 0.4rem 0.4rem;\n border-bottom-color: #000;\n}\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n padding: 0 0.4rem;\n}\n\n.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n right: 0;\n width: 0.4rem;\n height: 0.8rem;\n}\n\n.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n left: 0;\n border-width: 0.4rem 0 0.4rem 0.4rem;\n border-left-color: #000;\n}\n\n.tooltip-inner {\n max-width: 200px;\n padding: 0.25rem 0.5rem;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 0.25rem;\n}\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: block;\n max-width: 276px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n font-style: normal;\n font-weight: 400;\n line-height: 1.5;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n white-space: normal;\n line-break: auto;\n font-size: 0.875rem;\n word-wrap: break-word;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 0.3rem;\n}\n\n.popover .arrow {\n position: absolute;\n display: block;\n width: 1rem;\n height: 0.5rem;\n margin: 0 0.3rem;\n}\n\n.popover .arrow::before, .popover .arrow::after {\n position: absolute;\n display: block;\n content: \"\";\n border-color: transparent;\n border-style: solid;\n}\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n margin-bottom: 0.5rem;\n}\n\n.bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n bottom: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n bottom: 0;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n bottom: 1px;\n border-width: 0.5rem 0.5rem 0;\n border-top-color: #fff;\n}\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n margin-left: 0.5rem;\n}\n\n.bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n left: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n left: 0;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n left: 1px;\n border-width: 0.5rem 0.5rem 0.5rem 0;\n border-right-color: #fff;\n}\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n margin-top: 0.5rem;\n}\n\n.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n top: calc((0.5rem + 1px) * -1);\n}\n\n.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n top: 0;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n top: 1px;\n border-width: 0 0.5rem 0.5rem 0.5rem;\n border-bottom-color: #fff;\n}\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n position: absolute;\n top: 0;\n left: 50%;\n display: block;\n width: 1rem;\n margin-left: -0.5rem;\n content: \"\";\n border-bottom: 1px solid #f7f7f7;\n}\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n margin-right: 0.5rem;\n}\n\n.bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n right: calc((0.5rem + 1px) * -1);\n width: 0.5rem;\n height: 1rem;\n margin: 0.3rem 0;\n}\n\n.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n right: 0;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n right: 1px;\n border-width: 0.5rem 0 0.5rem 0.5rem;\n border-left-color: #fff;\n}\n\n.popover-header {\n padding: 0.5rem 0.75rem;\n margin-bottom: 0;\n font-size: 1rem;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-top-left-radius: calc(0.3rem - 1px);\n border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n display: none;\n}\n\n.popover-body {\n padding: 0.5rem 0.75rem;\n color: #212529;\n}\n\n.carousel {\n position: relative;\n}\n\n.carousel.pointer-event {\n touch-action: pan-y;\n}\n\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n\n.carousel-inner::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.carousel-item {\n position: relative;\n display: none;\n float: left;\n width: 100%;\n margin-right: -100%;\n backface-visibility: hidden;\n transition: transform 0.6s ease-in-out;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-item {\n transition: none;\n }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n display: block;\n}\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n transform: translateX(-100%);\n}\n\n.carousel-fade .carousel-item {\n opacity: 0;\n transition-property: opacity;\n transform: none;\n}\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n z-index: 1;\n opacity: 1;\n}\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n z-index: 0;\n opacity: 0;\n transition: 0s 0.6s opacity;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-fade .active.carousel-item-left,\n .carousel-fade .active.carousel-item-right {\n transition: none;\n }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 15%;\n color: #fff;\n text-align: center;\n opacity: 0.5;\n transition: opacity 0.15s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-control-prev,\n .carousel-control-next {\n transition: none;\n }\n}\n\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n opacity: 0.9;\n}\n\n.carousel-control-prev {\n left: 0;\n}\n\n.carousel-control-next {\n right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n display: inline-block;\n width: 20px;\n height: 20px;\n background: no-repeat 50% / 100% 100%;\n}\n\n.carousel-control-prev-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex;\n justify-content: center;\n padding-left: 0;\n margin-right: 15%;\n margin-left: 15%;\n list-style: none;\n}\n\n.carousel-indicators li {\n box-sizing: content-box;\n flex: 0 1 auto;\n width: 30px;\n height: 3px;\n margin-right: 3px;\n margin-left: 3px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #fff;\n background-clip: padding-box;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n opacity: .5;\n transition: opacity 0.6s ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .carousel-indicators li {\n transition: none;\n }\n}\n\n.carousel-indicators .active {\n opacity: 1;\n}\n\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n}\n\n@keyframes spinner-border {\n to {\n transform: rotate(360deg);\n }\n}\n\n.spinner-border {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n border: 0.25em solid currentColor;\n border-right-color: transparent;\n border-radius: 50%;\n animation: spinner-border .75s linear infinite;\n}\n\n.spinner-border-sm {\n width: 1rem;\n height: 1rem;\n border-width: 0.2em;\n}\n\n@keyframes spinner-grow {\n 0% {\n transform: scale(0);\n }\n 50% {\n opacity: 1;\n }\n}\n\n.spinner-grow {\n display: inline-block;\n width: 2rem;\n height: 2rem;\n vertical-align: text-bottom;\n background-color: currentColor;\n border-radius: 50%;\n opacity: 0;\n animation: spinner-grow .75s linear infinite;\n}\n\n.spinner-grow-sm {\n width: 1rem;\n height: 1rem;\n}\n\n.align-baseline {\n vertical-align: baseline !important;\n}\n\n.align-top {\n vertical-align: top !important;\n}\n\n.align-middle {\n vertical-align: middle !important;\n}\n\n.align-bottom {\n vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n vertical-align: text-top !important;\n}\n\n.bg-primary {\n background-color: #007bff !important;\n}\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n background-color: #0062cc !important;\n}\n\n.bg-secondary {\n background-color: #6c757d !important;\n}\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n background-color: #545b62 !important;\n}\n\n.bg-success {\n background-color: #28a745 !important;\n}\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n background-color: #1e7e34 !important;\n}\n\n.bg-info {\n background-color: #17a2b8 !important;\n}\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n background-color: #117a8b !important;\n}\n\n.bg-warning {\n background-color: #ffc107 !important;\n}\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n background-color: #d39e00 !important;\n}\n\n.bg-danger {\n background-color: #dc3545 !important;\n}\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n background-color: #bd2130 !important;\n}\n\n.bg-light {\n background-color: #f8f9fa !important;\n}\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n background-color: #343a40 !important;\n}\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n background-color: #1d2124 !important;\n}\n\n.bg-white {\n background-color: #fff !important;\n}\n\n.bg-transparent {\n background-color: transparent !important;\n}\n\n.border {\n border: 1px solid #dee2e6 !important;\n}\n\n.border-top {\n border-top: 1px solid #dee2e6 !important;\n}\n\n.border-right {\n border-right: 1px solid #dee2e6 !important;\n}\n\n.border-bottom {\n border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-left {\n border-left: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n border: 0 !important;\n}\n\n.border-top-0 {\n border-top: 0 !important;\n}\n\n.border-right-0 {\n border-right: 0 !important;\n}\n\n.border-bottom-0 {\n border-bottom: 0 !important;\n}\n\n.border-left-0 {\n border-left: 0 !important;\n}\n\n.border-primary {\n border-color: #007bff !important;\n}\n\n.border-secondary {\n border-color: #6c757d !important;\n}\n\n.border-success {\n border-color: #28a745 !important;\n}\n\n.border-info {\n border-color: #17a2b8 !important;\n}\n\n.border-warning {\n border-color: #ffc107 !important;\n}\n\n.border-danger {\n border-color: #dc3545 !important;\n}\n\n.border-light {\n border-color: #f8f9fa !important;\n}\n\n.border-dark {\n border-color: #343a40 !important;\n}\n\n.border-white {\n border-color: #fff !important;\n}\n\n.rounded-sm {\n border-radius: 0.2rem !important;\n}\n\n.rounded {\n border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n border-top-left-radius: 0.25rem !important;\n border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n border-top-right-radius: 0.25rem !important;\n border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n border-bottom-right-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n border-top-left-radius: 0.25rem !important;\n border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-lg {\n border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n border-radius: 50% !important;\n}\n\n.rounded-pill {\n border-radius: 50rem !important;\n}\n\n.rounded-0 {\n border-radius: 0 !important;\n}\n\n.clearfix::after {\n display: block;\n clear: both;\n content: \"\";\n}\n\n.d-none {\n display: none !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-none {\n display: none !important;\n }\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 768px) {\n .d-md-none {\n display: none !important;\n }\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 992px) {\n .d-lg-none {\n display: none !important;\n }\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media (min-width: 1200px) {\n .d-xl-none {\n display: none !important;\n }\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n}\n\n@media print {\n .d-print-none {\n display: none !important;\n }\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n}\n\n.embed-responsive {\n position: relative;\n display: block;\n width: 100%;\n padding: 0;\n overflow: hidden;\n}\n\n.embed-responsive::before {\n display: block;\n content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n\n.embed-responsive-21by9::before {\n padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n padding-top: 100%;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 768px) {\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 992px) {\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n}\n\n@media (min-width: 1200px) {\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n}\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.float-none {\n float: none !important;\n}\n\n@media (min-width: 576px) {\n .float-sm-left {\n float: left !important;\n }\n .float-sm-right {\n float: right !important;\n }\n .float-sm-none {\n float: none !important;\n }\n}\n\n@media (min-width: 768px) {\n .float-md-left {\n float: left !important;\n }\n .float-md-right {\n float: right !important;\n }\n .float-md-none {\n float: none !important;\n }\n}\n\n@media (min-width: 992px) {\n .float-lg-left {\n float: left !important;\n }\n .float-lg-right {\n float: right !important;\n }\n .float-lg-none {\n float: none !important;\n }\n}\n\n@media (min-width: 1200px) {\n .float-xl-left {\n float: left !important;\n }\n .float-xl-right {\n float: right !important;\n }\n .float-xl-none {\n float: none !important;\n }\n}\n\n.overflow-auto {\n overflow: auto !important;\n}\n\n.overflow-hidden {\n overflow: hidden !important;\n}\n\n.position-static {\n position: static !important;\n}\n\n.position-relative {\n position: relative !important;\n}\n\n.position-absolute {\n position: absolute !important;\n}\n\n.position-fixed {\n position: fixed !important;\n}\n\n.position-sticky {\n position: sticky !important;\n}\n\n.fixed-top {\n position: fixed;\n top: 0;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n\n.fixed-bottom {\n position: fixed;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1030;\n}\n\n@supports (position: sticky) {\n .sticky-top {\n position: sticky;\n top: 0;\n z-index: 1020;\n }\n}\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n overflow: visible;\n clip: auto;\n white-space: normal;\n}\n\n.shadow-sm {\n box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow {\n box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-lg {\n box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n box-shadow: none !important;\n}\n\n.w-25 {\n width: 25% !important;\n}\n\n.w-50 {\n width: 50% !important;\n}\n\n.w-75 {\n width: 75% !important;\n}\n\n.w-100 {\n width: 100% !important;\n}\n\n.w-auto {\n width: auto !important;\n}\n\n.h-25 {\n height: 25% !important;\n}\n\n.h-50 {\n height: 50% !important;\n}\n\n.h-75 {\n height: 75% !important;\n}\n\n.h-100 {\n height: 100% !important;\n}\n\n.h-auto {\n height: auto !important;\n}\n\n.mw-100 {\n max-width: 100% !important;\n}\n\n.mh-100 {\n max-height: 100% !important;\n}\n\n.min-vw-100 {\n min-width: 100vw !important;\n}\n\n.min-vh-100 {\n min-height: 100vh !important;\n}\n\n.vw-100 {\n width: 100vw !important;\n}\n\n.vh-100 {\n height: 100vh !important;\n}\n\n.stretched-link::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n pointer-events: auto;\n content: \"\";\n background-color: rgba(0, 0, 0, 0);\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n margin-left: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n margin-left: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n margin-left: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n margin-left: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n margin-left: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n margin-left: 3rem !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n padding-left: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n padding-left: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n padding-left: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n padding-left: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n padding-left: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n padding-left: 3rem !important;\n}\n\n.m-n1 {\n margin: -0.25rem !important;\n}\n\n.mt-n1,\n.my-n1 {\n margin-top: -0.25rem !important;\n}\n\n.mr-n1,\n.mx-n1 {\n margin-right: -0.25rem !important;\n}\n\n.mb-n1,\n.my-n1 {\n margin-bottom: -0.25rem !important;\n}\n\n.ml-n1,\n.mx-n1 {\n margin-left: -0.25rem !important;\n}\n\n.m-n2 {\n margin: -0.5rem !important;\n}\n\n.mt-n2,\n.my-n2 {\n margin-top: -0.5rem !important;\n}\n\n.mr-n2,\n.mx-n2 {\n margin-right: -0.5rem !important;\n}\n\n.mb-n2,\n.my-n2 {\n margin-bottom: -0.5rem !important;\n}\n\n.ml-n2,\n.mx-n2 {\n margin-left: -0.5rem !important;\n}\n\n.m-n3 {\n margin: -1rem !important;\n}\n\n.mt-n3,\n.my-n3 {\n margin-top: -1rem !important;\n}\n\n.mr-n3,\n.mx-n3 {\n margin-right: -1rem !important;\n}\n\n.mb-n3,\n.my-n3 {\n margin-bottom: -1rem !important;\n}\n\n.ml-n3,\n.mx-n3 {\n margin-left: -1rem !important;\n}\n\n.m-n4 {\n margin: -1.5rem !important;\n}\n\n.mt-n4,\n.my-n4 {\n margin-top: -1.5rem !important;\n}\n\n.mr-n4,\n.mx-n4 {\n margin-right: -1.5rem !important;\n}\n\n.mb-n4,\n.my-n4 {\n margin-bottom: -1.5rem !important;\n}\n\n.ml-n4,\n.mx-n4 {\n margin-left: -1.5rem !important;\n}\n\n.m-n5 {\n margin: -3rem !important;\n}\n\n.mt-n5,\n.my-n5 {\n margin-top: -3rem !important;\n}\n\n.mr-n5,\n.mx-n5 {\n margin-right: -3rem !important;\n}\n\n.mb-n5,\n.my-n5 {\n margin-bottom: -3rem !important;\n}\n\n.ml-n5,\n.mx-n5 {\n margin-left: -3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n .m-sm-0 {\n margin: 0 !important;\n }\n .mt-sm-0,\n .my-sm-0 {\n margin-top: 0 !important;\n }\n .mr-sm-0,\n .mx-sm-0 {\n margin-right: 0 !important;\n }\n .mb-sm-0,\n .my-sm-0 {\n margin-bottom: 0 !important;\n }\n .ml-sm-0,\n .mx-sm-0 {\n margin-left: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .mt-sm-1,\n .my-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mr-sm-1,\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n }\n .mb-sm-1,\n .my-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-sm-1,\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .mt-sm-2,\n .my-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mr-sm-2,\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n }\n .mb-sm-2,\n .my-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-sm-2,\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .mt-sm-3,\n .my-sm-3 {\n margin-top: 1rem !important;\n }\n .mr-sm-3,\n .mx-sm-3 {\n margin-right: 1rem !important;\n }\n .mb-sm-3,\n .my-sm-3 {\n margin-bottom: 1rem !important;\n }\n .ml-sm-3,\n .mx-sm-3 {\n margin-left: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .mt-sm-4,\n .my-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mr-sm-4,\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n }\n .mb-sm-4,\n .my-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-sm-4,\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .mt-sm-5,\n .my-sm-5 {\n margin-top: 3rem !important;\n }\n .mr-sm-5,\n .mx-sm-5 {\n margin-right: 3rem !important;\n }\n .mb-sm-5,\n .my-sm-5 {\n margin-bottom: 3rem !important;\n }\n .ml-sm-5,\n .mx-sm-5 {\n margin-left: 3rem !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .pt-sm-0,\n .py-sm-0 {\n padding-top: 0 !important;\n }\n .pr-sm-0,\n .px-sm-0 {\n padding-right: 0 !important;\n }\n .pb-sm-0,\n .py-sm-0 {\n padding-bottom: 0 !important;\n }\n .pl-sm-0,\n .px-sm-0 {\n padding-left: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .pt-sm-1,\n .py-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pr-sm-1,\n .px-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pb-sm-1,\n .py-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-sm-1,\n .px-sm-1 {\n padding-left: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .pt-sm-2,\n .py-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pr-sm-2,\n .px-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pb-sm-2,\n .py-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-sm-2,\n .px-sm-2 {\n padding-left: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .pt-sm-3,\n .py-sm-3 {\n padding-top: 1rem !important;\n }\n .pr-sm-3,\n .px-sm-3 {\n padding-right: 1rem !important;\n }\n .pb-sm-3,\n .py-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pl-sm-3,\n .px-sm-3 {\n padding-left: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .pt-sm-4,\n .py-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pr-sm-4,\n .px-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pb-sm-4,\n .py-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-sm-4,\n .px-sm-4 {\n padding-left: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .pt-sm-5,\n .py-sm-5 {\n padding-top: 3rem !important;\n }\n .pr-sm-5,\n .px-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-5,\n .py-sm-5 {\n padding-bottom: 3rem !important;\n }\n .pl-sm-5,\n .px-sm-5 {\n padding-left: 3rem !important;\n }\n .m-sm-n1 {\n margin: -0.25rem !important;\n }\n .mt-sm-n1,\n .my-sm-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-sm-n1,\n .mx-sm-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-sm-n1,\n .my-sm-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-sm-n1,\n .mx-sm-n1 {\n margin-left: -0.25rem !important;\n }\n .m-sm-n2 {\n margin: -0.5rem !important;\n }\n .mt-sm-n2,\n .my-sm-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-sm-n2,\n .mx-sm-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-sm-n2,\n .my-sm-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-sm-n2,\n .mx-sm-n2 {\n margin-left: -0.5rem !important;\n }\n .m-sm-n3 {\n margin: -1rem !important;\n }\n .mt-sm-n3,\n .my-sm-n3 {\n margin-top: -1rem !important;\n }\n .mr-sm-n3,\n .mx-sm-n3 {\n margin-right: -1rem !important;\n }\n .mb-sm-n3,\n .my-sm-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-sm-n3,\n .mx-sm-n3 {\n margin-left: -1rem !important;\n }\n .m-sm-n4 {\n margin: -1.5rem !important;\n }\n .mt-sm-n4,\n .my-sm-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-sm-n4,\n .mx-sm-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-sm-n4,\n .my-sm-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-sm-n4,\n .mx-sm-n4 {\n margin-left: -1.5rem !important;\n }\n .m-sm-n5 {\n margin: -3rem !important;\n }\n .mt-sm-n5,\n .my-sm-n5 {\n margin-top: -3rem !important;\n }\n .mr-sm-n5,\n .mx-sm-n5 {\n margin-right: -3rem !important;\n }\n .mb-sm-n5,\n .my-sm-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-sm-n5,\n .mx-sm-n5 {\n margin-left: -3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mt-sm-auto,\n .my-sm-auto {\n margin-top: auto !important;\n }\n .mr-sm-auto,\n .mx-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-auto,\n .my-sm-auto {\n margin-bottom: auto !important;\n }\n .ml-sm-auto,\n .mx-sm-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 768px) {\n .m-md-0 {\n margin: 0 !important;\n }\n .mt-md-0,\n .my-md-0 {\n margin-top: 0 !important;\n }\n .mr-md-0,\n .mx-md-0 {\n margin-right: 0 !important;\n }\n .mb-md-0,\n .my-md-0 {\n margin-bottom: 0 !important;\n }\n .ml-md-0,\n .mx-md-0 {\n margin-left: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .mt-md-1,\n .my-md-1 {\n margin-top: 0.25rem !important;\n }\n .mr-md-1,\n .mx-md-1 {\n margin-right: 0.25rem !important;\n }\n .mb-md-1,\n .my-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-md-1,\n .mx-md-1 {\n margin-left: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .mt-md-2,\n .my-md-2 {\n margin-top: 0.5rem !important;\n }\n .mr-md-2,\n .mx-md-2 {\n margin-right: 0.5rem !important;\n }\n .mb-md-2,\n .my-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-md-2,\n .mx-md-2 {\n margin-left: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .mt-md-3,\n .my-md-3 {\n margin-top: 1rem !important;\n }\n .mr-md-3,\n .mx-md-3 {\n margin-right: 1rem !important;\n }\n .mb-md-3,\n .my-md-3 {\n margin-bottom: 1rem !important;\n }\n .ml-md-3,\n .mx-md-3 {\n margin-left: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .mt-md-4,\n .my-md-4 {\n margin-top: 1.5rem !important;\n }\n .mr-md-4,\n .mx-md-4 {\n margin-right: 1.5rem !important;\n }\n .mb-md-4,\n .my-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-md-4,\n .mx-md-4 {\n margin-left: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .mt-md-5,\n .my-md-5 {\n margin-top: 3rem !important;\n }\n .mr-md-5,\n .mx-md-5 {\n margin-right: 3rem !important;\n }\n .mb-md-5,\n .my-md-5 {\n margin-bottom: 3rem !important;\n }\n .ml-md-5,\n .mx-md-5 {\n margin-left: 3rem !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .pt-md-0,\n .py-md-0 {\n padding-top: 0 !important;\n }\n .pr-md-0,\n .px-md-0 {\n padding-right: 0 !important;\n }\n .pb-md-0,\n .py-md-0 {\n padding-bottom: 0 !important;\n }\n .pl-md-0,\n .px-md-0 {\n padding-left: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .pt-md-1,\n .py-md-1 {\n padding-top: 0.25rem !important;\n }\n .pr-md-1,\n .px-md-1 {\n padding-right: 0.25rem !important;\n }\n .pb-md-1,\n .py-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-md-1,\n .px-md-1 {\n padding-left: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .pt-md-2,\n .py-md-2 {\n padding-top: 0.5rem !important;\n }\n .pr-md-2,\n .px-md-2 {\n padding-right: 0.5rem !important;\n }\n .pb-md-2,\n .py-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-md-2,\n .px-md-2 {\n padding-left: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .pt-md-3,\n .py-md-3 {\n padding-top: 1rem !important;\n }\n .pr-md-3,\n .px-md-3 {\n padding-right: 1rem !important;\n }\n .pb-md-3,\n .py-md-3 {\n padding-bottom: 1rem !important;\n }\n .pl-md-3,\n .px-md-3 {\n padding-left: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .pt-md-4,\n .py-md-4 {\n padding-top: 1.5rem !important;\n }\n .pr-md-4,\n .px-md-4 {\n padding-right: 1.5rem !important;\n }\n .pb-md-4,\n .py-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-md-4,\n .px-md-4 {\n padding-left: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .pt-md-5,\n .py-md-5 {\n padding-top: 3rem !important;\n }\n .pr-md-5,\n .px-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-5,\n .py-md-5 {\n padding-bottom: 3rem !important;\n }\n .pl-md-5,\n .px-md-5 {\n padding-left: 3rem !important;\n }\n .m-md-n1 {\n margin: -0.25rem !important;\n }\n .mt-md-n1,\n .my-md-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-md-n1,\n .mx-md-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-md-n1,\n .my-md-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-md-n1,\n .mx-md-n1 {\n margin-left: -0.25rem !important;\n }\n .m-md-n2 {\n margin: -0.5rem !important;\n }\n .mt-md-n2,\n .my-md-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-md-n2,\n .mx-md-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-md-n2,\n .my-md-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-md-n2,\n .mx-md-n2 {\n margin-left: -0.5rem !important;\n }\n .m-md-n3 {\n margin: -1rem !important;\n }\n .mt-md-n3,\n .my-md-n3 {\n margin-top: -1rem !important;\n }\n .mr-md-n3,\n .mx-md-n3 {\n margin-right: -1rem !important;\n }\n .mb-md-n3,\n .my-md-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-md-n3,\n .mx-md-n3 {\n margin-left: -1rem !important;\n }\n .m-md-n4 {\n margin: -1.5rem !important;\n }\n .mt-md-n4,\n .my-md-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-md-n4,\n .mx-md-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-md-n4,\n .my-md-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-md-n4,\n .mx-md-n4 {\n margin-left: -1.5rem !important;\n }\n .m-md-n5 {\n margin: -3rem !important;\n }\n .mt-md-n5,\n .my-md-n5 {\n margin-top: -3rem !important;\n }\n .mr-md-n5,\n .mx-md-n5 {\n margin-right: -3rem !important;\n }\n .mb-md-n5,\n .my-md-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-md-n5,\n .mx-md-n5 {\n margin-left: -3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mt-md-auto,\n .my-md-auto {\n margin-top: auto !important;\n }\n .mr-md-auto,\n .mx-md-auto {\n margin-right: auto !important;\n }\n .mb-md-auto,\n .my-md-auto {\n margin-bottom: auto !important;\n }\n .ml-md-auto,\n .mx-md-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 992px) {\n .m-lg-0 {\n margin: 0 !important;\n }\n .mt-lg-0,\n .my-lg-0 {\n margin-top: 0 !important;\n }\n .mr-lg-0,\n .mx-lg-0 {\n margin-right: 0 !important;\n }\n .mb-lg-0,\n .my-lg-0 {\n margin-bottom: 0 !important;\n }\n .ml-lg-0,\n .mx-lg-0 {\n margin-left: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .mt-lg-1,\n .my-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mr-lg-1,\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n }\n .mb-lg-1,\n .my-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-lg-1,\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .mt-lg-2,\n .my-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mr-lg-2,\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n }\n .mb-lg-2,\n .my-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-lg-2,\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .mt-lg-3,\n .my-lg-3 {\n margin-top: 1rem !important;\n }\n .mr-lg-3,\n .mx-lg-3 {\n margin-right: 1rem !important;\n }\n .mb-lg-3,\n .my-lg-3 {\n margin-bottom: 1rem !important;\n }\n .ml-lg-3,\n .mx-lg-3 {\n margin-left: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .mt-lg-4,\n .my-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mr-lg-4,\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n }\n .mb-lg-4,\n .my-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-lg-4,\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .mt-lg-5,\n .my-lg-5 {\n margin-top: 3rem !important;\n }\n .mr-lg-5,\n .mx-lg-5 {\n margin-right: 3rem !important;\n }\n .mb-lg-5,\n .my-lg-5 {\n margin-bottom: 3rem !important;\n }\n .ml-lg-5,\n .mx-lg-5 {\n margin-left: 3rem !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .pt-lg-0,\n .py-lg-0 {\n padding-top: 0 !important;\n }\n .pr-lg-0,\n .px-lg-0 {\n padding-right: 0 !important;\n }\n .pb-lg-0,\n .py-lg-0 {\n padding-bottom: 0 !important;\n }\n .pl-lg-0,\n .px-lg-0 {\n padding-left: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .pt-lg-1,\n .py-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pr-lg-1,\n .px-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pb-lg-1,\n .py-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-lg-1,\n .px-lg-1 {\n padding-left: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .pt-lg-2,\n .py-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pr-lg-2,\n .px-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pb-lg-2,\n .py-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-lg-2,\n .px-lg-2 {\n padding-left: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .pt-lg-3,\n .py-lg-3 {\n padding-top: 1rem !important;\n }\n .pr-lg-3,\n .px-lg-3 {\n padding-right: 1rem !important;\n }\n .pb-lg-3,\n .py-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pl-lg-3,\n .px-lg-3 {\n padding-left: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .pt-lg-4,\n .py-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pr-lg-4,\n .px-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pb-lg-4,\n .py-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-lg-4,\n .px-lg-4 {\n padding-left: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .pt-lg-5,\n .py-lg-5 {\n padding-top: 3rem !important;\n }\n .pr-lg-5,\n .px-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-5,\n .py-lg-5 {\n padding-bottom: 3rem !important;\n }\n .pl-lg-5,\n .px-lg-5 {\n padding-left: 3rem !important;\n }\n .m-lg-n1 {\n margin: -0.25rem !important;\n }\n .mt-lg-n1,\n .my-lg-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-lg-n1,\n .mx-lg-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-lg-n1,\n .my-lg-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-lg-n1,\n .mx-lg-n1 {\n margin-left: -0.25rem !important;\n }\n .m-lg-n2 {\n margin: -0.5rem !important;\n }\n .mt-lg-n2,\n .my-lg-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-lg-n2,\n .mx-lg-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-lg-n2,\n .my-lg-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-lg-n2,\n .mx-lg-n2 {\n margin-left: -0.5rem !important;\n }\n .m-lg-n3 {\n margin: -1rem !important;\n }\n .mt-lg-n3,\n .my-lg-n3 {\n margin-top: -1rem !important;\n }\n .mr-lg-n3,\n .mx-lg-n3 {\n margin-right: -1rem !important;\n }\n .mb-lg-n3,\n .my-lg-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-lg-n3,\n .mx-lg-n3 {\n margin-left: -1rem !important;\n }\n .m-lg-n4 {\n margin: -1.5rem !important;\n }\n .mt-lg-n4,\n .my-lg-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-lg-n4,\n .mx-lg-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-lg-n4,\n .my-lg-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-lg-n4,\n .mx-lg-n4 {\n margin-left: -1.5rem !important;\n }\n .m-lg-n5 {\n margin: -3rem !important;\n }\n .mt-lg-n5,\n .my-lg-n5 {\n margin-top: -3rem !important;\n }\n .mr-lg-n5,\n .mx-lg-n5 {\n margin-right: -3rem !important;\n }\n .mb-lg-n5,\n .my-lg-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-lg-n5,\n .mx-lg-n5 {\n margin-left: -3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mt-lg-auto,\n .my-lg-auto {\n margin-top: auto !important;\n }\n .mr-lg-auto,\n .mx-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-auto,\n .my-lg-auto {\n margin-bottom: auto !important;\n }\n .ml-lg-auto,\n .mx-lg-auto {\n margin-left: auto !important;\n }\n}\n\n@media (min-width: 1200px) {\n .m-xl-0 {\n margin: 0 !important;\n }\n .mt-xl-0,\n .my-xl-0 {\n margin-top: 0 !important;\n }\n .mr-xl-0,\n .mx-xl-0 {\n margin-right: 0 !important;\n }\n .mb-xl-0,\n .my-xl-0 {\n margin-bottom: 0 !important;\n }\n .ml-xl-0,\n .mx-xl-0 {\n margin-left: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .mt-xl-1,\n .my-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mr-xl-1,\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n }\n .mb-xl-1,\n .my-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .ml-xl-1,\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .mt-xl-2,\n .my-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mr-xl-2,\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n }\n .mb-xl-2,\n .my-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .ml-xl-2,\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .mt-xl-3,\n .my-xl-3 {\n margin-top: 1rem !important;\n }\n .mr-xl-3,\n .mx-xl-3 {\n margin-right: 1rem !important;\n }\n .mb-xl-3,\n .my-xl-3 {\n margin-bottom: 1rem !important;\n }\n .ml-xl-3,\n .mx-xl-3 {\n margin-left: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .mt-xl-4,\n .my-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mr-xl-4,\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n }\n .mb-xl-4,\n .my-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .ml-xl-4,\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .mt-xl-5,\n .my-xl-5 {\n margin-top: 3rem !important;\n }\n .mr-xl-5,\n .mx-xl-5 {\n margin-right: 3rem !important;\n }\n .mb-xl-5,\n .my-xl-5 {\n margin-bottom: 3rem !important;\n }\n .ml-xl-5,\n .mx-xl-5 {\n margin-left: 3rem !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .pt-xl-0,\n .py-xl-0 {\n padding-top: 0 !important;\n }\n .pr-xl-0,\n .px-xl-0 {\n padding-right: 0 !important;\n }\n .pb-xl-0,\n .py-xl-0 {\n padding-bottom: 0 !important;\n }\n .pl-xl-0,\n .px-xl-0 {\n padding-left: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .pt-xl-1,\n .py-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pr-xl-1,\n .px-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pb-xl-1,\n .py-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pl-xl-1,\n .px-xl-1 {\n padding-left: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .pt-xl-2,\n .py-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pr-xl-2,\n .px-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pb-xl-2,\n .py-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pl-xl-2,\n .px-xl-2 {\n padding-left: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .pt-xl-3,\n .py-xl-3 {\n padding-top: 1rem !important;\n }\n .pr-xl-3,\n .px-xl-3 {\n padding-right: 1rem !important;\n }\n .pb-xl-3,\n .py-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pl-xl-3,\n .px-xl-3 {\n padding-left: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .pt-xl-4,\n .py-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pr-xl-4,\n .px-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pb-xl-4,\n .py-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pl-xl-4,\n .px-xl-4 {\n padding-left: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .pt-xl-5,\n .py-xl-5 {\n padding-top: 3rem !important;\n }\n .pr-xl-5,\n .px-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-5,\n .py-xl-5 {\n padding-bottom: 3rem !important;\n }\n .pl-xl-5,\n .px-xl-5 {\n padding-left: 3rem !important;\n }\n .m-xl-n1 {\n margin: -0.25rem !important;\n }\n .mt-xl-n1,\n .my-xl-n1 {\n margin-top: -0.25rem !important;\n }\n .mr-xl-n1,\n .mx-xl-n1 {\n margin-right: -0.25rem !important;\n }\n .mb-xl-n1,\n .my-xl-n1 {\n margin-bottom: -0.25rem !important;\n }\n .ml-xl-n1,\n .mx-xl-n1 {\n margin-left: -0.25rem !important;\n }\n .m-xl-n2 {\n margin: -0.5rem !important;\n }\n .mt-xl-n2,\n .my-xl-n2 {\n margin-top: -0.5rem !important;\n }\n .mr-xl-n2,\n .mx-xl-n2 {\n margin-right: -0.5rem !important;\n }\n .mb-xl-n2,\n .my-xl-n2 {\n margin-bottom: -0.5rem !important;\n }\n .ml-xl-n2,\n .mx-xl-n2 {\n margin-left: -0.5rem !important;\n }\n .m-xl-n3 {\n margin: -1rem !important;\n }\n .mt-xl-n3,\n .my-xl-n3 {\n margin-top: -1rem !important;\n }\n .mr-xl-n3,\n .mx-xl-n3 {\n margin-right: -1rem !important;\n }\n .mb-xl-n3,\n .my-xl-n3 {\n margin-bottom: -1rem !important;\n }\n .ml-xl-n3,\n .mx-xl-n3 {\n margin-left: -1rem !important;\n }\n .m-xl-n4 {\n margin: -1.5rem !important;\n }\n .mt-xl-n4,\n .my-xl-n4 {\n margin-top: -1.5rem !important;\n }\n .mr-xl-n4,\n .mx-xl-n4 {\n margin-right: -1.5rem !important;\n }\n .mb-xl-n4,\n .my-xl-n4 {\n margin-bottom: -1.5rem !important;\n }\n .ml-xl-n4,\n .mx-xl-n4 {\n margin-left: -1.5rem !important;\n }\n .m-xl-n5 {\n margin: -3rem !important;\n }\n .mt-xl-n5,\n .my-xl-n5 {\n margin-top: -3rem !important;\n }\n .mr-xl-n5,\n .mx-xl-n5 {\n margin-right: -3rem !important;\n }\n .mb-xl-n5,\n .my-xl-n5 {\n margin-bottom: -3rem !important;\n }\n .ml-xl-n5,\n .mx-xl-n5 {\n margin-left: -3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mt-xl-auto,\n .my-xl-auto {\n margin-top: auto !important;\n }\n .mr-xl-auto,\n .mx-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-auto,\n .my-xl-auto {\n margin-bottom: auto !important;\n }\n .ml-xl-auto,\n .mx-xl-auto {\n margin-left: auto !important;\n }\n}\n\n.text-monospace {\n font-family: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !important;\n}\n\n.text-justify {\n text-align: justify !important;\n}\n\n.text-wrap {\n white-space: normal !important;\n}\n\n.text-nowrap {\n white-space: nowrap !important;\n}\n\n.text-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n@media (min-width: 576px) {\n .text-sm-left {\n text-align: left !important;\n }\n .text-sm-right {\n text-align: right !important;\n }\n .text-sm-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 768px) {\n .text-md-left {\n text-align: left !important;\n }\n .text-md-right {\n text-align: right !important;\n }\n .text-md-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 992px) {\n .text-lg-left {\n text-align: left !important;\n }\n .text-lg-right {\n text-align: right !important;\n }\n .text-lg-center {\n text-align: center !important;\n }\n}\n\n@media (min-width: 1200px) {\n .text-xl-left {\n text-align: left !important;\n }\n .text-xl-right {\n text-align: right !important;\n }\n .text-xl-center {\n text-align: center !important;\n }\n}\n\n.text-lowercase {\n text-transform: lowercase !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n\n.text-capitalize {\n text-transform: capitalize !important;\n}\n\n.font-weight-light {\n font-weight: 300 !important;\n}\n\n.font-weight-lighter {\n font-weight: lighter !important;\n}\n\n.font-weight-normal {\n font-weight: 400 !important;\n}\n\n.font-weight-bold {\n font-weight: 700 !important;\n}\n\n.font-weight-bolder {\n font-weight: bolder !important;\n}\n\n.font-italic {\n font-style: italic !important;\n}\n\n.text-white {\n color: #fff !important;\n}\n\n.text-primary {\n color: #007bff !important;\n}\n\na.text-primary:hover, a.text-primary:focus {\n color: #0056b3 !important;\n}\n\n.text-secondary {\n color: #6c757d !important;\n}\n\na.text-secondary:hover, a.text-secondary:focus {\n color: #494f54 !important;\n}\n\n.text-success {\n color: #28a745 !important;\n}\n\na.text-success:hover, a.text-success:focus {\n color: #19692c !important;\n}\n\n.text-info {\n color: #17a2b8 !important;\n}\n\na.text-info:hover, a.text-info:focus {\n color: #0f6674 !important;\n}\n\n.text-warning {\n color: #ffc107 !important;\n}\n\na.text-warning:hover, a.text-warning:focus {\n color: #ba8b00 !important;\n}\n\n.text-danger {\n color: #dc3545 !important;\n}\n\na.text-danger:hover, a.text-danger:focus {\n color: #a71d2a !important;\n}\n\n.text-light {\n color: #f8f9fa !important;\n}\n\na.text-light:hover, a.text-light:focus {\n color: #cbd3da !important;\n}\n\n.text-dark {\n color: #343a40 !important;\n}\n\na.text-dark:hover, a.text-dark:focus {\n color: #121416 !important;\n}\n\n.text-body {\n color: #212529 !important;\n}\n\n.text-muted {\n color: #6c757d !important;\n}\n\n.text-black-50 {\n color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n.text-decoration-none {\n text-decoration: none !important;\n}\n\n.text-break {\n word-break: break-word !important;\n overflow-wrap: break-word !important;\n}\n\n.text-reset {\n color: inherit !important;\n}\n\n.visible {\n visibility: visible !important;\n}\n\n.invisible {\n visibility: hidden !important;\n}\n\n@media print {\n *,\n *::before,\n *::after {\n text-shadow: none !important;\n box-shadow: none !important;\n }\n a:not(.btn) {\n text-decoration: underline;\n }\n abbr[title]::after {\n content: \" (\" attr(title) \")\";\n }\n pre {\n white-space: pre-wrap !important;\n }\n pre,\n blockquote {\n border: 1px solid #adb5bd;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n @page {\n size: a3;\n }\n body {\n min-width: 992px !important;\n }\n .container {\n min-width: 992px !important;\n }\n .navbar {\n display: none;\n }\n .badge {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #dee2e6 !important;\n }\n .table-dark {\n color: inherit;\n }\n .table-dark th,\n .table-dark td,\n .table-dark thead th,\n .table-dark tbody + tbody {\n border-color: #dee2e6;\n }\n .table .thead-dark th {\n color: inherit;\n border-color: #dee2e6;\n }\n}\n\n/*# sourceMappingURL=bootstrap.css.map */",":root {\n // Custom variable values only support SassScript inside `#{}`.\n @each $color, $value in $colors {\n --#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$color}: #{$value};\n }\n\n @each $bp, $value in $grid-breakpoints {\n --breakpoint-#{$bp}: #{$value};\n }\n\n // Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --font-family-sans-serif: #{inspect($font-family-sans-serif)};\n --font-family-monospace: #{inspect($font-family-monospace)};\n}\n","// stylelint-disable at-rule-no-vendor-prefix, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\nhtml {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -webkit-tap-highlight-color: rgba($black, 0); // 5\n}\n\n// Shim for \"new\" HTML5 structural elements to display correctly (IE10, older browsers)\n// TODO: remove in v5\n// stylelint-disable-next-line selector-list-comma-newline-after\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n display: block;\n}\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Set an explicit initial text-align value so that we can later use\n// the `inherit` value on things like `` elements.\n\nbody {\n margin: 0; // 1\n font-family: $font-family-base;\n @include font-size($font-size-base);\n font-weight: $font-weight-base;\n line-height: $line-height-base;\n color: $body-color;\n text-align: left; // 3\n background-color: $body-bg; // 2\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex=\"-1\"]:focus {\n outline: 0 !important;\n}\n\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n\n//\n// Typography\n//\n\n// Remove top margins from headings\n//\n// By default, `

    `-`

    ` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n// stylelint-disable-next-line selector-list-comma-newline-after\nh1, h2, h3, h4, h5, h6 {\n margin-top: 0;\n margin-bottom: $headings-margin-bottom;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

    `s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Remove the bottom border in Firefox 39-.\n// 5. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n border-bottom: 0; // 4\n text-decoration-skip-ink: none; // 5\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n @include font-size(80%); // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n @include font-size(75%);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n//\n// Links\n//\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n background-color: transparent; // Remove the gray background on active links in IE 10.\n\n @include hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href)\n// which have not been made explicitly keyboard-focusable (without tabindex).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([tabindex]) {\n color: inherit;\n text-decoration: none;\n\n @include hover-focus {\n color: inherit;\n text-decoration: none;\n }\n\n &:focus {\n outline: 0;\n }\n}\n\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-monospace;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\npre {\n // Remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `rem`s\n margin-bottom: 1rem;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n\n//\n// Figures\n//\n\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1rem;\n}\n\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // Remove the border on images inside links in IE 10-.\n}\n\nsvg {\n // Workaround for the SVG overflow bug in IE10/11 is still required.\n // See https://github.com/twbs/bootstrap/issues/26878\n overflow: hidden;\n vertical-align: middle;\n}\n\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: $table-cell-padding;\n padding-bottom: $table-cell-padding;\n color: $table-caption-color;\n text-align: left;\n caption-side: bottom;\n}\n\nth {\n // Matches default `` alignment by inheriting from the ``, or the\n // closest parent with a set `text-align`.\n text-align: inherit;\n}\n\n\n//\n// Forms\n//\n\nlabel {\n // Allow labels to use `margin` for spacing.\n display: inline-block;\n margin-bottom: $label-margin-bottom;\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24093\nbutton {\n // stylelint-disable-next-line property-blacklist\n border-radius: 0;\n}\n\n// Work around a Firefox/IE bug where the transparent `button` background\n// results in a loss of the default `button` focus styles.\n//\n// Credit: https://github.com/suitcss/base/\nbutton:focus {\n outline: 1px dotted;\n outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // Remove the margin in Firefox and Safari\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // Remove the inheritance of text transform in Firefox\n}\n\n// Remove the inheritance of word-wrap in Safari.\n//\n// Details at https://github.com/twbs/bootstrap/issues/24990\nselect {\n word-wrap: normal;\n}\n\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n[type=\"button\"], // 1\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// Opinionated: add \"hand\" cursor to non-disabled button elements.\n@if $enable-pointer-cursor-for-buttons {\n button,\n [type=\"button\"],\n [type=\"reset\"],\n [type=\"submit\"] {\n &:not(:disabled) {\n cursor: pointer;\n }\n }\n}\n\n// Remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. Remove the padding in IE 10-\n}\n\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n // Remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // Remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `

    `s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n margin: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n padding: 0;\n margin-bottom: .5rem;\n @include font-size(1.5rem);\n line-height: inherit;\n color: inherit; // 2\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of increment and decrement buttons in Chrome.\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// Remove the inner padding in Chrome and Safari on macOS.\n//\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n cursor: pointer;\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer / 2 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: 80% !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n$table-dark-color: $white !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2}) !default;\n$input-height-inner-half: calc(#{$input-line-height * .5em} + #{$input-padding-y}) !default;\n$input-height-inner-quarter: calc(#{$input-line-height * .25em} + #{$input-padding-y / 2}) !default;\n\n$input-height: calc(#{$input-line-height * 1em} + #{$input-padding-y * 2} + #{$input-height-border}) !default;\n$input-height-sm: calc(#{$input-line-height-sm * 1em} + #{$input-btn-padding-y-sm * 2} + #{$input-height-border}) !default;\n$input-height-lg: calc(#{$input-line-height-lg * 1em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: none !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: none !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: none !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size / 2 !default;\n$custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$custom-select-background: $custom-select-indicator no-repeat right $custom-select-padding-x center / $custom-select-bg-size !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: calc((1em + #{2 * $custom-select-padding-y}) * 3 / 4 + #{$custom-select-padding-x + $custom-select-indicator-padding}) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$form-feedback-icon-invalid-color}' viewBox='-2 -2 7 7'%3e%3cpath stroke='#{$form-feedback-icon-invalid-color}' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\"), \"#\", \"%23\") !default;\n\n$form-validation-states: () !default;\n// stylelint-disable-next-line scss/dollar-variable-default\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer / 2 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer / 2 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-100 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-600 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: calc(#{$card-border-radius} - #{$card-border-width}) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width / 2 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n$carousel-control-next-icon-bg: str-replace(url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\"), \"#\", \"%23\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated font-resizing\n//\n// See https://github.com/twbs/rfs\n\n// Configuration\n\n// Base font size\n$rfs-base-font-size: 1.25rem !default;\n$rfs-font-size-unit: rem !default;\n\n// Breakpoint at where font-size starts decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n// Resize font-size based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != \"number\" or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-responsive-font-sizes to false\n$enable-responsive-font-sizes: true !default;\n\n// Cache $rfs-base-font-size unit\n$rfs-base-font-size-unit: unit($rfs-base-font-size);\n\n// Remove px-unit from $rfs-base-font-size for calculations\n@if $rfs-base-font-size-unit == \"px\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1);\n}\n@else if $rfs-base-font-size-unit == \"rem\" {\n $rfs-base-font-size: $rfs-base-font-size / ($rfs-base-font-size * 0 + 1 / $rfs-rem-value);\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == \"px\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == \"rem\" or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: $rfs-breakpoint / ($rfs-breakpoint * 0 + 1 / $rfs-rem-value);\n}\n\n// Responsive font-size mixin\n@mixin rfs($fs, $important: false) {\n // Cache $fs unit\n $fs-unit: if(type-of($fs) == \"number\", unit($fs), false);\n\n // Add !important suffix if needed\n $rfs-suffix: if($important, \" !important\", \"\");\n\n // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $fs-unit or $fs-unit != \"\" and $fs-unit != \"px\" and $fs-unit != \"rem\" or $fs == 0 {\n font-size: #{$fs}#{$rfs-suffix};\n }\n @else {\n // Variables for storing static and fluid rescaling\n $rfs-static: null;\n $rfs-fluid: null;\n\n // Remove px-unit from $fs for calculations\n @if $fs-unit == \"px\" {\n $fs: $fs / ($fs * 0 + 1);\n }\n @else if $fs-unit == \"rem\" {\n $fs: $fs / ($fs * 0 + 1 / $rfs-rem-value);\n }\n\n // Set default font-size\n @if $rfs-font-size-unit == rem {\n $rfs-static: #{$fs / $rfs-rem-value}rem#{$rfs-suffix};\n }\n @else if $rfs-font-size-unit == px {\n $rfs-static: #{$fs}px#{$rfs-suffix};\n }\n @else {\n @error \"`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`.\";\n }\n\n // Only add media query if font-size is bigger as the minimum font-size\n // If $rfs-factor == 1, no rescaling will take place\n @if $fs > $rfs-base-font-size and $enable-responsive-font-sizes {\n $min-width: null;\n $variable-unit: null;\n\n // Calculate minimum font-size for given font-size\n $fs-min: $rfs-base-font-size + ($fs - $rfs-base-font-size) / $rfs-factor;\n\n // Calculate difference between given font-size and minimum font-size for given font-size\n $fs-diff: $fs - $fs-min;\n\n // Base font-size formatting\n // No need to check if the unit is valid, because we did that before\n $min-width: if($rfs-font-size-unit == rem, #{$fs-min / $rfs-rem-value}rem, #{$fs-min}px);\n\n // If two-dimensional, use smallest of screen width and height\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{$fs-diff * 100 / $rfs-breakpoint}#{$variable-unit};\n\n // Set the calculated font-size.\n $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix};\n }\n\n // Rendering\n @if $rfs-fluid == null {\n // Only render static font-size if no fluid font-size is available\n font-size: $rfs-static;\n }\n @else {\n $mq-value: null;\n\n // RFS breakpoint formatting\n @if $rfs-breakpoint-unit == em or $rfs-breakpoint-unit == rem {\n $mq-value: #{$rfs-breakpoint / $rfs-rem-value}#{$rfs-breakpoint-unit};\n }\n @else if $rfs-breakpoint-unit == px {\n $mq-value: #{$rfs-breakpoint}px;\n }\n @else {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n }\n\n @if $rfs-class == \"disable\" {\n // Adding an extra class increases specificity,\n // which prevents the media query to override the font size\n &,\n .disable-responsive-font-size &,\n &.disable-responsive-font-size {\n font-size: $rfs-static;\n }\n }\n @else {\n font-size: $rfs-static;\n }\n\n @if $rfs-two-dimensional {\n @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n @else {\n @media (max-width: #{$mq-value}) {\n @if $rfs-class == \"enable\" {\n .enable-responsive-font-size &,\n &.enable-responsive-font-size {\n font-size: $rfs-fluid;\n }\n }\n @else {\n font-size: $rfs-fluid;\n }\n\n @if $rfs-safari-iframe-resize-bug-fix {\n // stylelint-disable-next-line length-zero-no-unit\n min-width: 0vw;\n }\n }\n }\n }\n }\n}\n\n// The font-size & responsive-font-size mixin uses RFS to rescale font sizes\n@mixin font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n\n@mixin responsive-font-size($fs, $important: false) {\n @include rfs($fs, $important);\n}\n","// Hover mixin and `$enable-hover-media-query` are deprecated.\n//\n// Originally added during our alphas and maintained during betas, this mixin was\n// designed to prevent `:hover` stickiness on iOS-an issue where hover styles\n// would persist after initial touch.\n//\n// For backward compatibility, we've kept these mixins and updated them to\n// always return their regular pseudo-classes instead of a shimmed media query.\n//\n// Issue: https://github.com/twbs/bootstrap/issues/25195\n\n@mixin hover {\n &:hover { @content; }\n}\n\n@mixin hover-focus {\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin plain-hover-focus {\n &,\n &:hover,\n &:focus {\n @content;\n }\n}\n\n@mixin hover-focus-active {\n &:hover,\n &:focus,\n &:active {\n @content;\n }\n}\n","// stylelint-disable declaration-no-important, selector-list-comma-newline-after\n\n//\n// Headings\n//\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1, .h1 { @include font-size($h1-font-size); }\nh2, .h2 { @include font-size($h2-font-size); }\nh3, .h3 { @include font-size($h3-font-size); }\nh4, .h4 { @include font-size($h4-font-size); }\nh5, .h5 { @include font-size($h5-font-size); }\nh6, .h6 { @include font-size($h6-font-size); }\n\n.lead {\n @include font-size($lead-font-size);\n font-weight: $lead-font-weight;\n}\n\n// Type display classes\n.display-1 {\n @include font-size($display1-size);\n font-weight: $display1-weight;\n line-height: $display-line-height;\n}\n.display-2 {\n @include font-size($display2-size);\n font-weight: $display2-weight;\n line-height: $display-line-height;\n}\n.display-3 {\n @include font-size($display3-size);\n font-weight: $display3-weight;\n line-height: $display-line-height;\n}\n.display-4 {\n @include font-size($display4-size);\n font-weight: $display4-weight;\n line-height: $display-line-height;\n}\n\n\n//\n// Horizontal rules\n//\n\nhr {\n margin-top: $hr-margin-y;\n margin-bottom: $hr-margin-y;\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n}\n\n\n//\n// Emphasis\n//\n\nsmall,\n.small {\n @include font-size($small-font-size);\n font-weight: $font-weight-normal;\n}\n\nmark,\n.mark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n//\n// Lists\n//\n\n.list-unstyled {\n @include list-unstyled;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n @include list-unstyled;\n}\n.list-inline-item {\n display: inline-block;\n\n &:not(:last-child) {\n margin-right: $list-inline-padding;\n }\n}\n\n\n//\n// Misc\n//\n\n// Builds on `abbr`\n.initialism {\n @include font-size(90%);\n text-transform: uppercase;\n}\n\n// Blockquotes\n.blockquote {\n margin-bottom: $spacer;\n @include font-size($blockquote-font-size);\n}\n\n.blockquote-footer {\n display: block;\n @include font-size($blockquote-small-font-size);\n color: $blockquote-small-color;\n\n &::before {\n content: \"\\2014\\00A0\"; // em dash, nbsp\n }\n}\n","// Lists\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n@mixin list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n","// Responsive images (ensure images don't scale beyond their parents)\n//\n// This is purposefully opt-in via an explicit class rather than being the default for all ``s.\n// We previously tried the \"images are responsive by default\" approach in Bootstrap v2,\n// and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps)\n// which weren't expecting the images within themselves to be involuntarily resized.\n// See also https://github.com/twbs/bootstrap/issues/18178\n.img-fluid {\n @include img-fluid;\n}\n\n\n// Image thumbnails\n.img-thumbnail {\n padding: $thumbnail-padding;\n background-color: $thumbnail-bg;\n border: $thumbnail-border-width solid $thumbnail-border-color;\n @include border-radius($thumbnail-border-radius);\n @include box-shadow($thumbnail-box-shadow);\n\n // Keep them at most 100% wide\n @include img-fluid;\n}\n\n//\n// Figures\n//\n\n.figure {\n // Ensures the caption's text aligns with the image.\n display: inline-block;\n}\n\n.figure-img {\n margin-bottom: $spacer / 2;\n line-height: 1;\n}\n\n.figure-caption {\n @include font-size($figure-caption-font-size);\n color: $figure-caption-color;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n\n@mixin img-fluid {\n // Part 1: Set a maximum relative to the parent\n max-width: 100%;\n // Part 2: Override the height to auto, otherwise images will be stretched\n // when setting a width and height attribute on the img element.\n height: auto;\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size.\n\n@mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) {\n background-image: url($file-1x);\n\n // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio,\n // but doesn't convert dppx=>dpi.\n // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard.\n // Compatibility info: https://caniuse.com/#feat=css-media-resolution\n @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx\n only screen and (min-resolution: 2dppx) { // Standardized\n background-image: url($file-2x);\n background-size: $width-1x $height-1x;\n }\n @include deprecate(\"`img-retina()`\", \"v4.3.0\", \"v5\");\n}\n","// stylelint-disable property-blacklist\n// Single side border-radius\n\n@mixin border-radius($radius: $border-radius, $fallback-border-radius: false) {\n @if $enable-rounded {\n border-radius: $radius;\n }\n @else if $fallback-border-radius != false {\n border-radius: $fallback-border-radius;\n }\n}\n\n@mixin border-top-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n border-bottom-left-radius: $radius;\n }\n}\n\n@mixin border-top-left-radius($radius) {\n @if $enable-rounded {\n border-top-left-radius: $radius;\n }\n}\n\n@mixin border-top-right-radius($radius) {\n @if $enable-rounded {\n border-top-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-right-radius($radius) {\n @if $enable-rounded {\n border-bottom-right-radius: $radius;\n }\n}\n\n@mixin border-bottom-left-radius($radius) {\n @if $enable-rounded {\n border-bottom-left-radius: $radius;\n }\n}\n","// Inline code\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-break: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n @include box-shadow($kbd-box-shadow);\n\n kbd {\n padding: 0;\n @include font-size(100%);\n font-weight: $nested-kbd-font-weight;\n @include box-shadow(none);\n }\n}\n\n// Blocks of code\npre {\n display: block;\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: $pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-grid-classes {\n .container {\n @include make-container();\n @include make-container-max-widths();\n }\n}\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but with 100% width for\n// fluid, full width layouts.\n\n@if $enable-grid-classes {\n .container-fluid {\n @include make-container();\n }\n}\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n }\n\n // Remove the negative margin from default .row, then the horizontal padding\n // from all immediate children columns (to prevent runaway style inheritance).\n .no-gutters {\n margin-right: 0;\n margin-left: 0;\n\n > .col,\n > [class*=\"col-\"] {\n padding-right: 0;\n padding-left: 0;\n }\n }\n}\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","/// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-container($gutter: $grid-gutter-width) {\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n margin-right: auto;\n margin-left: auto;\n}\n\n\n// For each breakpoint, define the maximum width of the container in a media query\n@mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) {\n @each $breakpoint, $container-max-width in $max-widths {\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n max-width: $container-max-width;\n }\n }\n}\n\n@mixin make-row($gutter: $grid-gutter-width) {\n display: flex;\n flex-wrap: wrap;\n margin-right: -$gutter / 2;\n margin-left: -$gutter / 2;\n}\n\n@mixin make-col-ready($gutter: $grid-gutter-width) {\n position: relative;\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we use `flex` values\n // later on to override this initial width.\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n}\n\n@mixin make-col($size, $columns: $grid-columns) {\n flex: 0 0 percentage($size / $columns);\n // Add a `max-width` to ensure content within each column does not blow out\n // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari\n // do not appear to require this.\n max-width: percentage($size / $columns);\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: $size / $columns;\n margin-left: if($num == 0, 0, percentage($num));\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width. Null for the largest (last) breakpoint.\n// The maximum value is calculated as the minimum of the next one less 0.02px\n// to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $next: breakpoint-next($name, $breakpoints);\n @return if($next, breakpoint-min($next, $breakpoints) - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $max: breakpoint-max($name, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($name, $breakpoints) {\n @content;\n }\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n // Common properties for all breakpoints\n %grid-column {\n position: relative;\n width: 100%;\n padding-right: $gutter / 2;\n padding-left: $gutter / 2;\n }\n\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n // Allow columns to stretch full width below their breakpoints\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @extend %grid-column;\n }\n }\n .col#{$infix},\n .col#{$infix}-auto {\n @extend %grid-column;\n }\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n }\n .col#{$infix}-auto {\n flex: 0 0 auto;\n width: auto;\n max-width: 100%; // Reset earlier grid tiers\n }\n\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n .order#{$infix}-first { order: -1; }\n\n .order#{$infix}-last { order: $columns + 1; }\n\n @for $i from 0 through $columns {\n .order#{$infix}-#{$i} { order: $i; }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n }\n}\n","//\n// Basic Bootstrap table\n//\n\n.table {\n width: 100%;\n margin-bottom: $spacer;\n color: $table-color;\n background-color: $table-bg; // Reset for nesting within parents with `background-color`.\n\n th,\n td {\n padding: $table-cell-padding;\n vertical-align: top;\n border-top: $table-border-width solid $table-border-color;\n }\n\n thead th {\n vertical-align: bottom;\n border-bottom: (2 * $table-border-width) solid $table-border-color;\n }\n\n tbody + tbody {\n border-top: (2 * $table-border-width) solid $table-border-color;\n }\n}\n\n\n//\n// Condensed table w/ half padding\n//\n\n.table-sm {\n th,\n td {\n padding: $table-cell-padding-sm;\n }\n}\n\n\n// Border versions\n//\n// Add or remove borders all around the table and between all the columns.\n\n.table-bordered {\n border: $table-border-width solid $table-border-color;\n\n th,\n td {\n border: $table-border-width solid $table-border-color;\n }\n\n thead {\n th,\n td {\n border-bottom-width: 2 * $table-border-width;\n }\n }\n}\n\n.table-borderless {\n th,\n td,\n thead th,\n tbody + tbody {\n border: 0;\n }\n}\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n tbody tr:nth-of-type(#{$table-striped-order}) {\n background-color: $table-accent-bg;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n tbody tr {\n @include hover {\n color: $table-hover-color;\n background-color: $table-hover-bg;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n@each $color, $value in $theme-colors {\n @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level));\n}\n\n@include table-row-variant(active, $table-active-bg);\n\n\n// Dark styles\n//\n// Same table markup, but inverted color scheme: dark background and light text.\n\n// stylelint-disable-next-line no-duplicate-selectors\n.table {\n .thead-dark {\n th {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n border-color: $table-dark-border-color;\n }\n }\n\n .thead-light {\n th {\n color: $table-head-color;\n background-color: $table-head-bg;\n border-color: $table-border-color;\n }\n }\n}\n\n.table-dark {\n color: $table-dark-color;\n background-color: $table-dark-bg;\n\n th,\n td,\n thead th {\n border-color: $table-dark-border-color;\n }\n\n &.table-bordered {\n border: 0;\n }\n\n &.table-striped {\n tbody tr:nth-of-type(odd) {\n background-color: $table-dark-accent-bg;\n }\n }\n\n &.table-hover {\n tbody tr {\n @include hover {\n color: $table-dark-hover-color;\n background-color: $table-dark-hover-bg;\n }\n }\n }\n}\n\n\n// Responsive tables\n//\n// Generate series of `.table-responsive-*` classes for configuring the screen\n// size of where your table will overflow.\n\n.table-responsive {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $next: breakpoint-next($breakpoint, $grid-breakpoints);\n $infix: breakpoint-infix($next, $grid-breakpoints);\n\n &#{$infix} {\n @include media-breakpoint-down($breakpoint) {\n display: block;\n width: 100%;\n overflow-x: auto;\n -webkit-overflow-scrolling: touch;\n\n // Prevent double border on horizontal scroll due to use of `display: block;`\n > .table-bordered {\n border: 0;\n }\n }\n }\n }\n}\n","// Tables\n\n@mixin table-row-variant($state, $background, $border: null) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table-#{$state} {\n &,\n > th,\n > td {\n background-color: $background;\n }\n\n @if $border != null {\n th,\n td,\n thead th,\n tbody + tbody {\n border-color: $border;\n }\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover {\n $hover-background: darken($background, 5%);\n\n .table-#{$state} {\n @include hover {\n background-color: $hover-background;\n\n > td,\n > th {\n background-color: $hover-background;\n }\n }\n }\n }\n}\n","// stylelint-disable selector-no-qualifying-type\n\n//\n// Textual form controls\n//\n\n.form-control {\n display: block;\n width: 100%;\n height: $input-height;\n padding: $input-padding-y $input-padding-x;\n font-family: $input-font-family;\n @include font-size($input-font-size);\n font-weight: $input-font-weight;\n line-height: $input-line-height;\n color: $input-color;\n background-color: $input-bg;\n background-clip: padding-box;\n border: $input-border-width solid $input-border-color;\n\n // Note: This has no effect on `s in CSS.\n @include border-radius($input-border-radius, 0);\n\n @include box-shadow($input-box-shadow);\n @include transition($input-transition);\n\n // Unstyle the caret on ` receives focus\n // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to\n // match the appearance of the native widget.\n // See https://github.com/twbs/bootstrap/issues/19398.\n color: $input-color;\n background-color: $input-bg;\n }\n}\n\n// Make file inputs better match text inputs by forcing them to new lines.\n.form-control-file,\n.form-control-range {\n display: block;\n width: 100%;\n}\n\n\n//\n// Labels\n//\n\n// For use with horizontal and inline forms, when you need the label (or legend)\n// text to align with the form controls.\n.col-form-label {\n padding-top: calc(#{$input-padding-y} + #{$input-border-width});\n padding-bottom: calc(#{$input-padding-y} + #{$input-border-width});\n margin-bottom: 0; // Override the `