%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/webdir/bin/menu/06_site/
Upload File :
Create Path :
Current File : //opt/webdir/bin/menu/06_site/functions.sh

BASE_DIR=/opt/webdir
BIN_DIR=$BASE_DIR/bin

. $BIN_DIR/bitrix_utils.sh || exit 1
ansible_web_group=/etc/ansible/group_vars/bitrix-web.yml

bx_sites_script=$BIN_DIR/bx-sites
sites_menu=$BIN_DIR/menu/06_site

mysql_menu_dir=$BIN_DIR/menu/03_mysql
mysql_menu_fnc=$mysql_menu_dir/functions.sh
. $mysql_menu_fnc || exit 1

push_menu_dir=$BIN_DIR/menu/10_push
push_menu_fnc=$push_menu_dir/functions.sh
. $push_menu_fnc || exit 1

# get_text variables
[[ -f $sites_menu/functions.txt   ]] && \
    . $sites_menu/functions.txt

# check mysql password and client config before start site creation
check_site_options(){
    # test csync or lsyncd
    WEB_CLUSTER_TYPE=$(cat $ansible_web_group | grep -v "^$\|^#" | \
        egrep '^fstype: ' | awk -F':' '{print $2}' | sed -e "s/\s\+//g")
    if [[ -z $WEB_CLUSTER_TYPE ]]; then
        WEB_CLUSTER_STATUS=$(cat $ansible_web_group | grep -v "^$\|^#" | \
            egrep '^cluster_web_configure: ' | \
            awk -F':' '{print $2}' | sed -e "s/\s\+//g")
        if [[ $WEB_CLUSTER_STATUS == "enable" ]]; then
            WEB_CLUSTER_TYPE=csync
        else
            WEB_CLUSTER_TYPE=lsync
        fi
    fi

    # test push server status
    cache_push_servers_status

    # test mysql passwords
    cache_mysql_servers_status
    
    [[ $DEBUG -gt 0 ]] && echo "MYSQL=$MYSQL_SERVERS"
    MASTER_NAME=$(echo "$MYSQL_SERVERS" | grep ":master:" | \
        awk -F':' '{print $1}')
    MASTER_ROOT_PASSWD=$(echo "$MYSQL_SERVERS" | grep ":master:" | \
        awk -F':' '{print $8}')
    MASTER_CLIENT_CNF=$(echo "$MYSQL_SERVERS" | grep ":master:" | \
        awk -F':' '{print $9}')
    if [[ $MASTER_ROOT_PASSWD != "Y" ]]; then
        print_color_text "Found MySQL service with empty root password: $MASTER_NAME"
        print_color_text "You can fix this by using second item in the MySQL menu." blue
        return 10
    fi

    if [[ $MASTER_CLIENT_CNF != "Y" ]]; then
        print_color_text "Not found MySQL client config: $MASTER_NAME"
        print_color_text "You can fix this by using second item in the MySQL menu." blue
        return 11
    fi

}

# list all sites
# fill out
# POOL_SITES_KERNEL_LIST        - kernel sites with web access
# POOL_SITES_KERNEL_COUNT       - number of kernel sites with web access
# POOL_SITES_LINK_LIST          - link sites
# POOL_SITES_LINK_COUNT         - links count
# POOL_SITES_ERRORS_LIST        - sites with errors
# POOL_SITES_ERRORS_COUNT       - count sites with errors
get_pool_sites(){

    _process_inf=$($bx_sites_script -a list)
    _process_err=$(echo "$_process_inf" | grep '^error:' | sed -e "s/^error://")
    _process_msg=$(echo "$_process_msg" | grep '^message:' | sed -e "s/^message://")

    if [[ -n "$_process_err" ]]; then
        POOL_SITES_KERNEL_COUNT=0
        POOL_SITES_LINK_COUNT=0
        POOL_SITES_ERRORS_COUNT=0
    else
        POOL_SITES_KERNEL_LIST=$(echo "$_process_inf" | \
            grep '^bxSite:general' | sed -e "s/^bxSite:general://" | grep ':\(kernel\|ext_kernel\):' )
        POOL_SITES_LINK_LIST=$(echo "$_process_inf" | \
            grep '^bxSite:general' | sed -e "s/^bxSite:general://" | grep ':link:' )
        POOL_SITES_ERRORS_LIST=$(echo "$_process_inf" | \
            grep '^bxSite:status' | sed -e "s/^bxSite:status://" | grep ':error:')

        POOL_SITES_KERNEL_COUNT=$(echo "$POOL_SITES_KERNEL_LIST" | grep -vc '^$')
        POOL_SITES_LINK_COUNT=$(echo "$POOL_SITES_LINK_LIST" | grep -vc '^$')
        POOL_SITES_ERRORS_COUNT=$(echo "$POOL_SITES_ERRORS_LIST" | grep -vc '^$')
    fi
}

cache_pool_sites(){
    POOL_SITES_CACHE_LT=${1:-3600}
    POOL_SITES_KERNEL_LIST=
    POOL_SITES_LINK_LIST=
    POOL_SITES_ERRORS_LIST=

    POOL_SITES_KERNEL_CACHE=$CACHE_DIR/sites_kernel.cache
    POOL_SITES_LINK_CACHE=$CACHE_DIR/sites_links.cache
    POOL_SITES_ERRORS_CACHE=$CACHE_DIR/sites_errors.cache


    test_cache_file $POOL_SITES_KERNEL_CACHE $POOL_SITES_CACHE_LT
    pool_kernel_cache=$?

    test_cache_file $POOL_SITES_LINK_CACHE $POOL_SITES_CACHE_LT
    pool_link_cache=$?

    test_cache_file $POOL_SITES_ERRORS_CACHE $POOL_SITES_CACHE_LT
    pool_error_cache=$?

    if [[ ( $pool_kernel_cache -gt 0 ) || ( $pool_link_cache -gt 0 ) || ( $pool_error_cache -gt 0 ) ]]; then
        get_pool_sites
        echo "$POOL_SITES_KERNEL_LIST" > $POOL_SITES_KERNEL_CACHE
        echo "$POOL_SITES_LINK_LIST" > $POOL_SITES_LINK_CACHE
        echo "$POOL_SITES_ERRORS_LIST" > $POOL_SITES_ERRORS_CACHE
    else
        POOL_SITES_KERNEL_LIST=$(cat $POOL_SITES_KERNEL_CACHE)
        POOL_SITES_LINK_LIST=$(cat $POOL_SITES_LINK_CACHE)
        POOL_SITES_ERRORS_LIST=$(cat $POOL_SITES_ERRORS_CACHE)

        POOL_SITES_KERNEL_COUNT=$(echo "$POOL_SITES_KERNEL_LIST" | grep -vc '^$')
        POOL_SITES_LINK_COUNT=$(echo "$POOL_SITES_LINK_LIST" | grep -vc '^$')
        POOL_SITES_ERRORS_COUNT=$(echo "$POOL_SITES_ERRORS_LIST" | grep -vc '^$')
    fi
}

# print error site info
print_pool_sites_error(){
    [[ -z "$POOL_SITES_ERRORS_COUNT" ]] && cache_pool_sites

    if [[ $POOL_SITES_ERRORS_COUNT -gt 0 ]]; then
        print_color_text "Found $POOL_SITES_ERRORS_COUNT sites with errors:" red
        echo $MENU_SPACER
        printf "%-15s | %-15s | %s\n" \
            "SiteName" "ErrorN" "ErrorMessage"
        echo $MENU_SPACER
        IFS_BAK=$IFS
        IFS=$'\n'
        for line in $POOL_SITES_ERRORS_LIST; do
            err_site_name=$(echo "$line" | awk -F':' '{print $1}')
            err_site_code=$(echo "$line" | awk -F"'" '{print $2}' | awk -F'|' '{print $1}')
            err_site_mess=$(echo "$line" | awk -F"'" '{print $2}' | awk -F'|' '{print $2}')
            printf "%-15s | %-15s | %s\n" \
                "$err_site_name" "$err_site_code" "$err_site_mess"

        done
        IFS=$IFS_BAK
        IFS_BAK=
        echo $MENU_SPACER
        print_message "Press ENTER for exit:" "" "" any_key
    else
        echo "Not found sites with errors"
        print_message "Press ENTER for exit:" "" "" any_key
    fi
}

get_all_sites_list(){
    cache="${1}"
    exclude="${2:-ext_kernel}"


    cache_pool_sites $cache
    if [[ $exclude == "ext_kernel" ]]; then
        POOL_SITES_KERNEL_LIST=$(echo "$POOL_SITES_KERNEL_LIST" | grep -v ':ext_kernel:')
    fi

    if [[ $exclude == "link" ]]; then
        POOL_SITES_LIST="$POOL_SITES_KERNEL_LIST"
    else
        POOL_SITES_LIST="$POOL_SITES_KERNEL_LIST
$POOL_SITES_LINK_LIST"
    fi

    POOL_SITES_KERNEL_COUNT=$(echo "$POOL_SITES_KERNEL_LIST" | grep -vc '^$')
    POOL_SITES_COUNT=$(echo "$POOL_SITES_LIST" | grep -vc '^$')
}


# print info for installed sites
# fill out variable
# SITES_LIST_WITH_NUMBER
print_pool_sites(){
  _filter_by_db=$1
  _only_kernel=$2

  cache_pool_sites
  [[ -z $_only_kernel ]] && _only_kernel="N"

  _echo_db_kernel=$_filter_by_db
  [[ -z "$_echo_db_kernel" ]] && _echo_db_kernel="not filtered"

  # additional variables for filter by DBname
  _pool_filtered_kernel=$POOL_SITES_KERNEL_LIST
  _pool_filtered_link=$POOL_SITES_LINK_LIST

  if [[ -n "$_filter_by_db" ]]; then
    _pool_filtered_kernel=$(echo "$_pool_filtered_kernel" | grep ":$_filter_by_db:")
    _pool_filtered_link=$(echo "$_pool_filtered_link" | grep ":$_filter_by_db:")
  fi
  _pool_filtered_kernel_count=$(echo "$_pool_filtered_kernel" | grep -vc '^$')
  _pool_filtered_link_count=$(echo "$_pool_filtered_link" | grep -vc '^$')
  SITES_LIST_WITH_NUMBER=""

  if [[ $_pool_filtered_kernel_count -gt 0 ]]; then
    _db_list=""

    print_color_text "Found $_pool_filtered_kernel_count kernel sites:" blue
    echo $MENU_SPACER
    printf "%3s| %-15s | %-15s | %15s | %10s | %1s | %1s | %s\n" \
      "ID" "SiteName" "dbName" "Status" "Type" "S" "C" "DocumentRoot"
    echo $MENU_SPACER

    IFS_BAK=$IFS
    IFS=$'\n'
    COUNT=1
    for line in $_pool_filtered_kernel
    do
      # default:sitemanager0:kernel:finished:srv01.ksh.bx:/home/bitrix/www:utf-8:Y:N
        _site_id=$(echo "$line" | awk -F':' '{print $1}')  # short name for site
        _site_db=$(echo "$line" | awk -F':' '{print $2}')  # dbname
        _site_tp=$(echo "$line" | awk -F':' '{print $3}')  # site type
        _site_st=$(echo "$line" | awk -F':' '{print $4}')  # status site installation
        _site_sr=$(echo "$line" | awk -F':' '{print $5}')  # full servername
        _site_rt=$(echo "$line" | awk -F':' '{print $6}')  # document root
        _site_ch=$(echo "$line" | awk -F':' '{print $7}')  # charset
        _site_sc=$(echo "$line" | awk -F':' '{print $8}')  # scale
        _site_cl=$(echo "$line" | awk -F':' '{print $9}')  # cluster
        printf "%3d| %-15s | %-15s | %15s | %10s | %1s | %1s | %s\n" \
         "$COUNT" "$_site_id" "$_site_db" "$_site_st" "$_site_tp" "$_site_sc" "$_site_cl" "$_site_rt"
        _db_list=$_db_list"$_site_db
"
        SITES_LIST_WITH_NUMBER=$SITES_LIST_WITH_NUMBER"$COUNT:$_site_id:$_site_db:$_site_st:$_site_tp:$_site_rt:$_site_sr
"
        COUNT=$(($COUNT+1))
    done

    IFS=$IFS_BAK
    IFS_BAK=
    echo $MENU_SPACER

    _db_list=$(echo "$_db_list" | sed -e 's/\s\+$//' | sort | uniq)

    if [[ ( $_pool_filtered_link_count -gt 0 ) && ( "$_only_kernel" == "N" ) ]]; then
      for _db_found in $_db_list; do
        _db_count=$(echo "$_pool_filtered_link" | grep -c ":$_db_found:")

        if [[ $_db_count -gt 0 ]]; then
          print_color_text "$_db_found: $_db_count link sites" green

          _pool_db_links=$(echo "$_pool_filtered_link" | grep ":$_db_found:")
          echo $MENU_SPACER
          printf "%3s| %-15s | %-15s | %15s | %10s | %s\n" \
            "ID" "SiteName" "dbName" "Status" "Type" "DocumentRoot"
          echo $MENU_SPACER

          IFS_BAK=$IFS
          IFS=$'\n'

          for line in $_pool_db_links
          do
            _site_id=$(echo "$line" | awk -F':' '{print $1}')  # short name for site
            _site_db=$(echo "$line" | awk -F':' '{print $2}')  # dbname
            _site_tp=$(echo "$line" | awk -F':' '{print $3}')  # site type
            _site_st=$(echo "$line" | awk -F':' '{print $4}')  # status site installation
            _site_sr=$(echo "$line" | awk -F':' '{print $5}')  # full servername
            _site_rt=$(echo "$line" | awk -F':' '{print $6}')  # document root

            printf "%3d| %-15s | %-15s | %15s | %10s | %s\n" \
              "$COUNT" "$_site_id" "$_site_db" "$_site_st" "$_site_tp" "$_site_rt"
            SITES_LIST_WITH_NUMBER=$SITES_LIST_WITH_NUMBER"$COUNT:$_site_id:$_site_db:$_site_st:$_site_tp:$_site_rt:$_site_sr
"
            COUNT=$(($COUNT+1))
          done
          IFS_BAK=$IFS
          IFS=$'\n'
          echo $MENU_SPACER
        fi
      done
    fi
    print_color_text "Note:" blue
    echo "S - scale module   (Y = installed, N = not installed)"
    echo "C - cluster module (Y = installed, N = not installed)"
    echo
  else
    echo "Not found installed sites in the pool"
  fi
}
# get site information
get_site_info() {
  site_name=$1
  site_root=$2
  type_info=$3

  [[ -z $_type_info ]] && _type_info=general
  site_info_inf=$($bx_sites_script -a status -s $site_name -r $site_root)
  site_info_err=$(echo "$site_info_inf" | grep "^error:" | sed -e 's/error://')
  site_info_msg=$(echo "$site_info_inf" | grep "^message:" | sed -e 's/message://')
  site_info_dat=$(echo "$site_info_inf" | grep "^bxSite:$type_info:" | \
   sed -e "s/bxSite://")

   if [[ -n "$site_info_err" ]]; then
     print_message "Press ENTER for exit" "$site_info_msg" \
      "" any_key
     exit
   fi
}

# print info about services enabled on site in cron
print_site_list_point_cron(){
  cache_pool_sites
  if [[ $POOL_SITES_KERNEL_COUNT -gt 0 ]]; then
    print_color_text "Found $POOL_SITES_KERNEL_COUNT kernel sites:" blue
    echo $MENU_SPACER
    printf "%-15s | %-15s | %15s | %5s | %s\n" \
     "SiteName" "dbName" "Status" "Cron" "DocumentRoot"
    echo $MENU_SPACER

    IFS_BAK=$IFS
    IFS=$'\n'
    POOL_SITES_CRON_SERVICES_LIST=""
    for line in $POOL_SITES_KERNEL_LIST; do
      # default:sitemanager0:kernel:finished:shop.ksh.bx:/home/bitrix/www:utf-8
      _site_id=$(echo "$line" | awk -F':' '{print $1}')  # short name for site
      _site_db=$(echo "$line" | awk -F':' '{print $2}')  # dbname
      _site_st=$(echo "$line" | awk -F':' '{print $4}')  # status site installation
      _site_root=$(echo "$line" | awk -F':' '{print $6}')  # document root

      _site_info=$($bx_sites_script -a status --site $_site_id -r $_site_root | \
       grep ':cron:' | sed -e 's/^bxSite:cron://')
      # ext_share:dbcp:enable:/etc/cron.d/bx_dbcp
      _site_cron=$(echo "$_site_info" | awk -F':' '{print $3}' | \
       sed -e 's/enable/Y/;s/disable/N/;')

      printf "%-15s | %-15s | %15s | %5s | %s\n" \
       "$_site_id" "$_site_db" "$_site_st" "$_site_cron" "$_site_root"
    done
    IFS_BAK=$IFS
    IFS=$'\n'
    echo $MENU_SPACER

  else
    print_color_text "Not found kernel sites on the server" blue
  fi
}

# fill out COMPOSITE_ERROR
get_composite_errors(){
    local process_inf=$($bx_sites_script -a list)
    
    # bxSite:composite_error:default:Fatal error: Call to undefined function json_encode() in /vagrant/env/opt/webdir/bin/composite.php on line 14
    COMPOSITE_ERRORS=$(echo "$process_inf" | grep -w composite_error)
    COMPOSITE_ERRORS_MESSAGE=
    COMPOSITE_ERRORS_CNT=0
    if [[ -n "$COMPOSITE_ERRORS" ]]; then
        IFS_BAK=$IFS
        IFS=$'\n'
        for error in $COMPOSITE_ERRORS; do
            site_name=$(echo "$error" | awk -F':' '{print $3}')
            error_message=$(echo "$error" | sed -e "s/bxSite:composite_error:$site_name://")
            COMPOSITE_ERRORS_MESSAGE="
-> Site $site_name: $error_message"

            COMPOSITE_ERRORS_CNT=$(( $COMPOSITE_ERRORS_CNT+1 ))
        done

        IFS=$IFS_BAK
        IFS_BAK=

        return 1
    fi
    return 0
}

# print info about composite settings in nginx configs
print_site_list_point_composite(){
    get_all_sites_list 1

  if [[ $POOL_SITES_COUNT -gt 0 ]]; then
    print_color_text "Found $POOL_SITES_COUNT sites:" blue
    echo $MENU_SPACER
    printf "%-15s | %-15s | %10s | %9s | %5s | %s\n" \
     "SiteName" "dbName" "Type" "Composite" "Nginx" "Storage"  
    echo $MENU_SPACER

    IFS_BAK=$IFS
    IFS=$'\n'
    for line in $POOL_SITES_LIST; do
      # default:sitemanager0:kernel:finished:shop.ksh.bx:/home/bitrix/www:utf-8:Y:Y:Y:N:files
      _site_id=$(echo "$line" | awk -F':' '{print $1}')   # short name for site
      _site_db=$(echo "$line" | awk -F':' '{print $2}')   # dbname
      _site_type=$(echo "$line" | awk -F':' '{print $3}') # type: kernel, ext_kernel 
      
      composite_status=$(echo "$line" | awk -F':' '{print $10}')
      nginx_composite=$(echo "$line" | awk -F':' '{print $11}')

      composite_storage=$(echo "$line" | awk -F':' '{print $12}')
      
      printf "%-15s | %-15s | %10s | %9s | %5s | %s\n" \
       "$_site_id" "$_site_db" "$_site_type" "$composite_status" "$nginx_composite" "$composite_storage"  
    done
    IFS_BAK=$IFS
    IFS=$'\n'
    echo $MENU_SPACER

    get_composite_errors
    get_composite_errors_rtn=$?
    if [[ $get_composite_errors_rtn -gt 0 ]]; then
        print_color_text "$COMPOSITE_ERRORS_CNT errors while parsing composite config:" red
        echo "$COMPOSITE_ERRORS_MESSAGE"
    fi

  else
    print_color_text "Not sites on the server" blue
  fi

}


# print info about enable or disable https 
print_site_list_point_https(){
    get_all_sites_list

    if [[ $POOL_SITES_COUNT -gt 0 ]]; then
        print_color_text "There are $POOL_SITES_COUNT sites:" blue
        echo $MENU_SPACER
            printf "%-15s | %-15s | %10s | %1s | %-20s | %s\n" \
                "SiteName" "dbName" "Type" "S" "Certificate" "Key" 
        echo $MENU_SPACER

        IFS_BAK=$IFS
        IFS=$'\n'
        for line in $POOL_SITES_LIST; do
            # default:sitemanager0:kernel:finished:shop.ksh.bx:/home/bitrix/www:utf-8
            _site_id=$(echo "$line" | awk -F':' '{print $1}')   # short name for site
            _site_db=$(echo "$line" | awk -F':' '{print $2}')   # dbname
            _site_type=$(echo "$line" | awk -F':' '{print $3}') # type: kernel, ext_kernel 
            _site_st=$(echo "$line" | awk -F':' '{print $4}')   # status site installation
            _site_root=$(echo "$line" | awk -F':' '{print $6}')  # document root

            _site_info=$($bx_sites_script -a status --site $_site_id -r $_site_root | \
                grep ':https:' | sed -e 's/^bxSite:https://')
            # default:sitemanager0:disable:/etc/nginx/ssl/cert.pem:/etc/nginx/ssl/cert.pem:/etc/nginx/bx/conf/ssl.conf
            https_cert=$(echo "$_site_info" | awk -F':' '{print $4}' | \
                sed -e "s:/etc/nginx/::")
            https_key=$(echo "$_site_info" | awk -F':' '{print $5}' | \
                sed -e "s:/etc/nginx/::")
 
            _https_enable=$(echo "$_site_info" | \
                awk -F':' '{print $3}' | sed -e 's/enable/Y/;s/disable/N/;' )
      
            printf "%-15s | %-15s | %10s | %1s | %-20s | %s\n" \
                "$_site_id" "$_site_db" "$_site_type" "$_https_enable" \
                "$https_cert" "$https_key" 
 
        done
        IFS=$IFS_BAK
        IFS_BAK=
        echo $MENU_SPACER
        print_color_text "Note:" blue
        echo "S - Only HTTPS access to the server (N = turned off, Y = turned on)"
        echo

    else
        print_color_text "Not sites on the server" blue
    fi

    # push server need certificate
    cache_push_servers_status
    if [[ $PUSH_SERVERS_CNT -eq 0 ]]; then
        PUSH_STREAM_SERVER=$(echo "$PUSH_SERVERS" | \
            awk -F':' '/Nginx-PushStreamModule/{print $2}')
        PUSH_SSL_CONFIG=/etc/nginx/bx/conf/ssl-push.conf

        if [[ -n $PUSH_STREAM_SERVER ]]; then
            PUSH_SSL=Unknown
            PUSH_KEY=Unknown
            PUSH_TYPE=Unknown
            PUSH_SSL_FILE=$PUSH_SSL_CONFIG
 
            if [[ ( -f $PUSH_SSL_CONFIG ) &&  \
                ( $(file $PUSH_SSL_CONFIG | grep -c "symbolic link to") -gt 0 ) ]]; then
                PUSH_SSL_FILE=$(file $PUSH_SSL_CONFIG | grep  "symbolic link to" | \
                   awk '{print $NF}' | sed -e "s/[\`']//g")
                DIR_PUSH_SSL_FILE=$(dirname $PUSH_SSL_FILE)
                BN_PUSH_SSL_FILE=$(basename $PUSH_SSL_FILE)

                [[ $DIR_PUSH_SSL_FILE == "." ]] && DIR_PUSH_SSL_FILE=/etc/nginx/bx/conf
                PUSH_SSL_FILE="${DIR_PUSH_SSL_FILE}/${BN_PUSH_SSL_FILE}"
            fi


            if [[ ${PUSH_SSL_FILE} == '/etc/nginx/bx/conf/ssl.conf' ]]; then
                PUSH_SSL=/etc/nginx/ssl/cert.pem
                PUSH_KEY=/etc/nginx/ssl/cert.pem
                PUSH_TYPE=Default
            else
                PUSH_SSL=$(grep -v '^$\|^#' $PUSH_SSL_FILE | \
                    grep 'ssl_certificate\s\+' | \
                    awk '{print $2}' | sed -e 's/;$//')
                PUSH_KEY=$(grep -v '^$\|^#' $PUSH_SSL_FILE | \
                    grep 'ssl_certificate_key\s\+' | \
                    awk '{print $2}' | sed -e 's/;$//')
                PUSH_TYPE=Custom
            fi

            print_color_text "Found push-configuration:" blue
            echo $MENU_SPACER
                printf "%-15s | %-30s | %s\n" \
                    "SiteName" "Certificate" "Key" 

            echo $MENU_SPACER
                printf "%-15s | %-30s | %s\n" \
                    "push-server" "$PUSH_SSL" "$PUSH_KEY" 
 
            echo $MENU_SPACER
        fi
    fi
 

}

# print info about services email information
print_site_list_point_email(){
    get_all_sites_list

  if [[ $POOL_SITES_COUNT -gt 0 ]]; then
    print_color_text "Found $POOL_SITES_COUNT sites:" blue
    echo $MENU_SPACER
    printf "%-15s | %-15s | %5s | %15s | %5s | %s\n" \
     "SiteName" "dbName" "Email" "Server" "TLS" "From" 
    echo $MENU_SPACER

    IFS_BAK=$IFS
    IFS=$'\n'
    for line in $POOL_SITES_LIST; do
      # default:sitemanager0:kernel:finished:shop.ksh.bx:/home/bitrix/www:utf-8
      _site_id=$(echo "$line" | awk -F':' '{print $1}')  # short name for site
      _site_db=$(echo "$line" | awk -F':' '{print $2}')  # dbname
      _site_st=$(echo "$line" | awk -F':' '{print $4}')  # status site installation
      _site_root=$(echo "$line" | awk -F':' '{print $6}')  # document root

      _site_info=$($bx_sites_script -a status --site $_site_id -r $_site_root | \
       grep ':email:' | sed -e 's/^bxSite:email://')
      # cp.ksh.bx:dbcp:cp.ksh.bx:bob@example.org:192.168.0.25:26:bob@example.org:*************:on
      _site_email=$(echo "$_site_info" | awk -F':' '{print $4}')
      _email_serv=$(echo "$_site_info" | awk -F':' '{print $5}')
      _email_port=$(echo "$_site_info" | awk -F':' '{print $6}')
      _email_tls=$(echo "$_site_info" | awk -F':' '{print $9}')
      _email_status=N
      [[ -n "$_site_email" ]] && _email_status=Y
      [[ -n "$_email_port" ]] && _email_serv="$_email_serv:$_email_port"

      printf "%-15s | %-15s | %5s | %15s | %5s | %s\n" \
       "$_site_id" "$_site_db" "$_email_status" "$_email_serv" "$_email_tls" "$_site_email"
    done
    IFS_BAK=$IFS
    IFS=$'\n'
    echo $MENU_SPACER

  else
    print_color_text "Not sites on the server" blue
  fi
}

# print info about services backup
print_site_list_point_backup(){
  cache_pool_sites
  if [[ $POOL_SITES_KERNEL_COUNT -gt 0 ]]; then
    print_color_text "Found $POOL_SITES_KERNEL_COUNT kernel sites:" blue
    echo $MENU_SPACER
    printf "%-15s | %-15s | %4s | %15s | %18s | %s\n" \
     "SiteName" "dbName" "Back" "CronTime" "LastBackup" "BackupDir"
    echo $MENU_SPACER

    IFS_BAK=$IFS
    IFS=$'\n'
    POOL_SITES_CRON_SERVICES_LIST=""
    for line in $POOL_SITES_KERNEL_LIST; do
      # default:sitemanager0:kernel:finished:shop.ksh.bx:/home/bitrix/www:utf-8
      _site_id=$(echo "$line" | awk -F':' '{print $1}')  # short name for site
      _site_db=$(echo "$line" | awk -F':' '{print $2}')  # dbname
      _site_root=$(echo "$line" | awk -F':' '{print $6}')  # document root

      _site_info=$($bx_sites_script -a status --site $_site_id -r $_site_root | \
       grep ':backup:' | sed -e 's/^bxSite:backup://')
      # default:sitemanager0:enable:v5:/home/bitrix/backup/archive:10:23:*:*:*
      _site_backup=$(echo "$_site_info" | awk -F':' '{print $3}' | \
       sed -e 's/enable/Y/;s/disable/N/;')
      if [[ "$_site_backup" == "Y" ]]; then 
        _backup_dir=$(echo "$_site_info" | awk -F':' '{print $5}')
        _backup_cron=$(echo "$_site_info" | awk -F':' '{printf "%s:%s:%s:%s:%s",$6,$7,$8,$9,$10}')
        list_archive=$(find $_backup_dir -name "www_backup_${_site_db}*.tar.gz")
        _backup_last=
        if [[ -n "$list_archive" ]]; then
          last_archive_time=0
          for file in $list_archive; do
            mtime=$(stat -c %Y $file)
            [[ $mtime -gt $last_archive_time ]] && last_archive_time=$mtime
          done
          _backup_last=$(date -d @$last_archive_time +"%d/%m/%Y %H:%M")
        fi
      else
        _backup_dir=
        _backup_cron=
        _backup_last=
      fi
      printf "%-15s | %-15s | %4s | %15s | %18s | %s\n" \
       "$_site_id" "$_site_db" "$_site_backup" "$_backup_cron" "$_backup_last" "$_backup_dir"
 
    done
    IFS_BAK=$IFS
    IFS=$'\n'
    echo $MENU_SPACER
 else
    print_color_text "Not found kernel sites on the server" blue
  fi
}

# print info about services xmppd and smtpd
print_site_list_point_cronservices(){
  cache_pool_sites
  if [[ $POOL_SITES_KERNEL_COUNT -gt 0 ]]; then
    print_color_text "Found $POOL_SITES_KERNEL_COUNT kernel sites:" blue
    echo $MENU_SPACER
    printf "%-15s | %-15s | %10s | %10s | %s\n" \
     "SiteName" "dbName" "XMMPD" "SMTPD" "DocumentRoot"
    echo $MENU_SPACER

    IFS_BAK=$IFS
    IFS=$'\n'
    POOL_SITES_CRON_SERVICES_LIST=""
    for line in $POOL_SITES_KERNEL_LIST; do
      # default:sitemanager0:kernel:finished:shop.ksh.bx:/home/bitrix/www:utf-8
      _site_id=$(echo "$line" | awk -F':' '{print $1}')  # short name for site
      _site_db=$(echo "$line" | awk -F':' '{print $2}')  # dbname
      _site_root=$(echo "$line" | awk -F':' '{print $6}')  # document root

      _site_info=$($bx_sites_script -a status --site $_site_id -r $_site_root | \
       grep ':cron_services:' | sed -e 's/^bxSite:cron_services://')
      # ext_www:sitemanager0:enabled:smtpd
      _site_cron=$(echo "$_site_info" | awk -F':' '{print $3}' | \
       sed -e 's/enabled/Y/;s/disabled/N/;')
      _site_xmmpd=N
      _site_smtpd=N
      if [[ "$_site_cron" == "Y" ]]; then 
        [[ $(echo "$_site_info" | awk -F':' '{print $4}' | grep -wc 'xmppd') -gt 0 ]] && \
         _site_xmmpd=Y
        [[ $(echo "$_site_info" | awk -F':' '{print $4}' | grep -wc 'smtpd') -gt 0 ]] && \
         _site_smtpd=Y
      fi
      printf "%-15s | %-15s | %10s | %10s | %s\n" \
       "$_site_id" "$_site_db" "$_site_xmmpd" "$_site_smtpd" "$_site_root"
    done
    IFS_BAK=$IFS
    IFS=$'\n'
    echo $MENU_SPACER
 else
    print_color_text "Not found kernel sites on the server" blue
  fi
}


# get information about server in domain or not
# fill out NTLM_STATUS
server_ntlm_status() {
  skip_print=$1
  NTLM_STATUS=

  # NTLMStatus:not_configured::::::
  _ntlm_info=$($bx_sites_script -a ntlm_status)
  _ntlm_status=$(echo "$_ntlm_info" | grep -w 'NTLMStatus' | awk -F':' '{print $2}')

  if [[ -z "$skip_print" ]]; then
    if [[ "$_ntlm_status" == "configured" ]]; then
      _ntlm_domain=$(echo "$_ntlm_info" | grep -w 'NTLMStatus' | awk -F':' '{print $3}')
      _ntlm_ldap=$(echo "$_ntlm_info" | grep -w 'NTLMStatus' | awk -F':' '{printf "%s:%s",$4,$5}')
      _ntlm_realm=$(echo "$_ntlm_info" | grep -w 'NTLMStatus' | awk -F':' '{print $6}')
      _ntlm_kdc=$(echo "$_ntlm_info" | grep -w 'NTLMStatus' | awk -F':' '{print $7}')
      _ntlm_offset=$(echo "$_ntlm_info" | grep -w 'NTLMStatus' | awk -F':' '{print $8}')
      print_color_text "NTLM auth already configured:" green
      echo $MENU_SPACER
      printf "%-15s: %s\n" "Domain" "$_ntlm_domain"
      printf "%-15s: %s\n" "LDAP Server" "$_ntlm_ldap"
      printf "%-15s: %s\n" "Realm" "$_ntlm_realm"
      printf "%-15s: %s\n" "KDC" "$_ntlm_kdc"
      printf "%-15s: %s\n" "TimeOffset" "$_ntlm_offset"
      echo $MENU_SPACER

    else
      print_color_text "NTLM auth does't configured on the server $(hostname)" blue
    fi
  fi

  NTLM_STATUS=$_ntlm_status
}

# print info about ntlm
# NONTLM_SITES - sites that not use NTLM
print_site_list_point_ntlm(){
  cache_pool_sites
  NONTLM_SITES=         # sites which doesn't use NTLM; enable rewrite for NTLM auth is enable
  NTLM_SITES=           # opposite one
  if [[ $POOL_SITES_KERNEL_COUNT -gt 0 ]]; then
    print_color_text "Found $POOL_SITES_KERNEL_COUNT kernel sites:" blue
    echo $MENU_SPACER
    printf "%-15s | %-15s | %7s | %7s | %8s | %s\n" \
     "SiteName" "dbName" "LDAPMod" "UseNTLM" "LDAPAuth" "DocumentRoot"
    echo $MENU_SPACER

    IFS_BAK=$IFS
    IFS=$'\n'
    POOL_SITES_CRON_SERVICES_LIST=""
    for line in $POOL_SITES_KERNEL_LIST; do
        # default:sitemanager0:kernel:finished:shop.ksh.bx:/home/bitrix/www:utf-8
        _site_id=$(echo "$line" | awk -F':' '{print $1}')  # short name for site
        _site_db=$(echo "$line" | awk -F':' '{print $2}')  # dbname
        _site_root=$(echo "$line" | awk -F':' '{print $6}')  # document root

        _site_info=$($bx_sites_script -a status --site $_site_id -r $_site_root | \
            grep ':ntlm:' | sed -e 's/^bxSite:ntlm://')
        # default:sitemanager0:N:N:Y
        # option: bitrixvm_auth_support
        site_ntlm_bv=$(echo "$_site_info" | awk -F':' '{print $3}')
        # option: use_ntlm
        site_ntlm_use=$(echo "$_site_info" | awk -F':' '{print $4}')
        site_ldap_module=$(echo "$_site_info" | awk -F':' '{print $5}')

        printf "%-15s | %-15s | %7s | %7s | %8s | %s\n" \
            "$_site_id" "$_site_db" "$site_ldap_module" "$site_ntlm_use" "$site_ntlm_bv" "$_site_root"
        if [[ $site_ntlm_bv == "N" ]]; then
            NONTLM_SITES=$NONTLM_SITES"$_site_id:$_site_db:$_site_root:$site_ntlm_bv:$site_ntlm_use:$site_ldap_module
"
        else
            NTLM_SITES=$NTLM_SITES"$_site_id:$_site_db:$_site_root:$site_ntlm_bv:$site_ntlm_use:$site_ldap_module
"
        fi

    done
    IFS_BAK=$IFS
    IFS=$'\n'
    echo $MENU_SPACER
 else
    print_color_text "Not found kernel sites on the server" blue
  fi
}

# print info about site options
print_site_list_point_options(){
    get_all_sites_list

  if [[ $POOL_SITES_COUNT -gt 0 ]]; then
    print_color_text "Found $POOL_SITES_COUNT sites:" blue
    echo $MENU_SPACER
    printf "%-15s | %-15s | %10s | %20s\n" \
     "SiteName" "dbName" "Type" "ignore_client_abort"
    echo $MENU_SPACER

    IFS_BAK=$IFS
    IFS=$'\n'
    for line in $POOL_SITES_LIST; do
      # default:sitemanager0:kernel:finished:shop.ksh.bx:/home/bitrix/www:utf-8
      _site_id=$(echo "$line" | awk -F':' '{print $1}')   # short name for site
      _site_db=$(echo "$line" | awk -F':' '{print $2}')   # dbname
      _site_type=$(echo "$line" | awk -F':' '{print $3}') # type: kernel, ext_kernel 
      _site_st=$(echo "$line" | awk -F':' '{print $4}')   # status site installation
      _site_root=$(echo "$line" | awk -F':' '{print $6}')  # document root

      _site_info=$($bx_sites_script -a status --site $_site_id -r $_site_root | \
       grep 'bxSite:configs:' | sed -e 's/^bxSite:configs://')
      #default:s1.conf:ssl.s1.conf:/etc/nginx/bx/site_avaliable:/etc/nginx/bx/site_enabled:/etc/httpd/bx/conf/default.conf:/home/bitrix/www:/tmp/php_sessions/www:/tmp/php_upload/www:off
      _proxy_ignore_client_abort=$(echo "$_site_info" | awk -F':' '{print $10}')
      
      printf "%-15s | %-15s | %10s | %20s\n" \
       "$_site_id" "$_site_db" "$_site_type" "$_proxy_ignore_client_abort"
 
    done
    IFS_BAK=$IFS
    IFS=$'\n'
    echo $MENU_SPACER

  else
    print_color_text "Not sites on the server" blue
  fi

}

test_directory(){
    dir="${1}"

    if [[ -z "$dir"  ]]; then
        print_message "$CS0101" "$SM0001" "" any_key
        return 1
    fi

    if [[ ! -d "$dir"  ]]; then
        print_message "$CS0101" \
            "$(get_text "$SM0002" "$dir")" "" any_key
        return 1
    fi

    return 0
}

test_sitename(){
    name="${1}"
    exclude="${2}"

    if [[ -z "$name"  ]]; then
        print_message "$CS0101" "$SM0033" "" any_key
        return 1
    fi

    if [[ -n $exclude ]]; then
        get_all_sites_list 3600 $exclude
    else
        get_all_sites_list
    fi
    [[ $DEBUG -gt 0  ]] && echo "POOL_SITES_LIST=$POOL_SITES_LIST"

    is_site=$(echo "$POOL_SITES_LIST" | grep -c "^$name:")
    if [[ $is_site -eq 0 ]]; then
        print_message "$CS0101" \
            "$(get_text "$SM0034" "$name")" \
            "" any_key
        return 1
    fi

    return 0
 
}

Zerion Mini Shell 1.0