#! /bin/bash

# Baixar toolkit.sh do Arca Files
# wget -qO /tmp/toolkit.sh http://arcafiles.arcasolutions.com/infra/toolkit.sh > /dev/null && . /tmp/toolkit.sh
# wget -qO toolkit.sh http://arcafiles.arcasolutions.com/infra/toolkit.sh > /dev/null && . toolkit.sh

################################################################################
#	Identificar Sistema Operacional
################################################################################
identificar_sistema_operacional(){
#  _os_release=''
#  _redhat_release=''
#  _lsb_release=''

  [ -f "/etc/os-release" ] && _os_release=1
  [ -f "/etc/lsb-release" ] && _lsb_release=1
  [ -f "/etc/redhat-release" ] && _redhat_release=1

  if [ "${_os_release}"  == '1' ];then
      export _SO="$(grep -i "PRETTY_NAME" /etc/os-release | awk -F'"' '{print $2}')"
      [ "$(grep -i "CentOS" "/etc/os-release" 2> /dev/null)" ] && CENTOS=1
      [ "$(grep -i "Ubuntu" "/etc/os-release" 2> /dev/null)" ] && UBUNTU=1

  elif [ "${_lsb_release}" == '1' ]; then
    _SO="$(grep -i "PRETTY_NAME" /etc/lsb-release | awk -F'"' '{print $2}')"

  elif [ "${_redhat_release}"  == '1' ]; then
      [ "$(grep -i "CentOS" "/etc/redhat-release" 2> /dev/null)" ] && CENTOS=1
      _SO=$(cat /etc/redhat-release)
      export _SO=$_SO && echo "$_SO"
   fi
    ### Versoes testadas ###
    # CentOS release 5.11 (Final)
    # CentOS release 6.6 (Final)
    # CentOS release 6.7 (Final)
    # CentOS release 6.8 (Final)
    # CentOS Linux release 7.2.1511 (Core)
    # Ubuntu 14.04.5 LTS
    # Arch Linux
        unset _os_release _lsb_release _redhat_release
}

verificar_versao_elasticsearch(){
	VERSAO_ES="$(curl -s localhost:9200 | grep number | awk -F'"' '{print $4}')"
	}

verificar_versao_apache(){
	[ "${CENTOS}" == 1 ] && VERSAO_APACHE="$(httpd -v | grep version | awk -F': ' '{print $2}')"
  [ "${UBUNTU}" == 1 ] && VERSAO_APACHE="$(apache2 -v | grep version | awk -F': ' '{print $2}')"
	}

verificar_versao_php(){
  VERSAO_PHP="$(php -v | grep PHP\ [0-9] | awk -F' ' '{print $1, $2}')"
  }

verificar_versao_mysql(){
  VERSAO_MYSQL="$(mysql --version | awk -F' ' '{print $5}' | tr -d ,)"
  }

################################################################################
#	Verifica se tem Plesk instalado
################################################################################
verificar_plesk_ubuntu(){
	dpkg --get-selections | grep plesk > /dev/null
	[ "$?" == 0 ] && plesk -v && _PLESK=1 && export _PLESK=1
}

verificar_plesk_ubuntu_path(){
	[ ${_PLESK} == 1 ] && \
	[ -d "/etc/apache2/plesk.conf.d/vhosts/" ] && \
	_PATH_VHOSTS="/etc/apache2/plesk.conf.d/vhosts/"
	}

################################################################################
#	Atualizar Sistema
################################################################################
atualizar_centos(){
 yum -y update ; yum -y upgrade
}

atualizar_ubuntu(){
	apt-get update ; apt-get -y upgrade ; apt-get -y dist-upgrade
	}

atualizar_archlinux(){
	pacman -Syu --noconfirm
	}

instalar_ferramentas_dev(){
 yum -y groupinstall "Development Tools" ;
}

instalar_ferramentas_essenciais(){
 yum -y install vim make gcc wget curl pcre-devel openssh-server;
}

configurar_ssh_centos7(){
	sed -i 's/^.*Port 22.*/Port 2297/' /etc/ssh/sshd_config
	sed -i 's/^.*ClientAliveCountMax.*/ClientAliveCountMax 30/' /etc/ssh/sshd_config
	sed -i 's/^.*ClientAliveInterval.*/ClientAliveInterval 10/' /etc/ssh/sshd_config
	sed -i 's/^.*TCPKeepAlive.*/TCPKeepAlive yes/' /etc/ssh/sshd_config
	systemctl restart sshd
	[ "$?" != 0 ] && /etc/init.d/sshd restart
}

instalar_csf(){
	read -p "Instalar e configurar o CSF? (y/n) " CSF
		if [ "$CSF" = "y" ] || [ "$CSF" = "s" ]; then
			wget https://download.configserver.com/csf.tgz 2> /dev/null

			# Verifica se baixou o pacote corretamente
			[ "$?" != 0 ] && echo -e "Problema no download." && return 1

			#       Extrair o pacote
			tar -xzf csf.tgz

			#       Executar o script de instalacao oficial
			cd csf ; sh install.sh

			#       Testar modulos do iptables
			perl /etc/csf/csftest.pl

			#       Desabilitar modo teste
			sed -i 's/^TESTING .*/TESTING = "0"/' /etc/csf/csf.conf

			#       Definir portas de entrada que serao aceitas (TCP)
			sed -i 's/^TCP_IN .*/TCP_IN = "25,80,443,465,587,993,995,2297,9200,9300,10050,10051"/' /etc/csf/csf.conf

			#       Definir portas de saida que serao aceitas (TCP)
			sed -i 's/^TCP_OUT .*/TCP_OUT = "21,22,25,80,443,465,587,993,995,2297,9200,9300,10050,10051"/' /etc/csf/csf.conf

			#       Definir portas de entrada que serao aceitas (UDP)
			sed -i 's/^UDP_IN .*/UDP_IN = "53"/' /etc/csf/csf.conf

			#       Definir portas de saida que serao aceitas (UDP)
			sed -i 's/^UDP_OUT .*/UDP_OUT = "53"/' /etc/csf/csf.conf

			#       Proteger contra ataques SYN Flood
			sed -i 's/^SYNFLOOD .*/SYNFLOOD = "1"/' /etc/csf/csf.conf

			#       Habilitar monitoramento quando houver mais de 100 conexoes por segundo
			sed -i 's/^SYNFLOOD_RATE .*/SYNFLOOD_RATE = "100\/s"/' /etc/csf/csf.conf

			#       Bloquear IP quando chegar mais de 150 conexoes por segundo
			sed -i 's/^SYNFLOOD_BURST .*/SYNFLOOD_BURST = "150"/' /etc/csf/csf.conf

			#       Limpar IPs aceitos, caso exista
			sed -n -i '/^#/p' /etc/csf/csf.allow

			#       Inserir IPs de servidores que poderam se conectar
			echo -e "
			179.127.59.189  # Ultrawave
			159.203.86.190  # Zabbix Inforeason
			104.154.88.225  # Zabbix
			104.131.126.30  # Bridge VPN
			54.194.207.47   # IR
			54.77.56.141    # IR2
			54.207.26.206   # SP
			54.84.128.177   # VA1
			54.84.183.198   # VA 2
			52.27.229.190   # ECOR
			52.202.84.170   # VA01
			172.31.31.86    # CA-ES01
			52.9.39.107     # CA01
			54.153.41.6     # Netuno
			" >> /etc/csf/csf.allow

			#       Habilitar para atualizar com csf -u
			sed -i 's/^URLGET .*/URLGET = "1"/' /etc/csf/csf.conf

			#       Recarregar para que tenha efeito as alteracoes
			csf -r

			#       Mostrar versao atual
			csf -v

			#       Mensagem final
			echo -e "Instalacao concluida."
		fi
}

instalar_zabbix_agent_centos6(){
	rpm -Uvh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm
	yum install -y zabbix zabbix-agent
	# Ajustar /etc/zabbix/zabbix_agentd.conf
	/etc/init.d/zabbix-agent restarts
	}

################################################################################
#	Instalar requisitos para o eDirectory 11.1
################################################################################
add_repo_epel_centos6(){
 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
 rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm
}

add_repo_epel_centos7(){
 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
 rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
}

add_repo_mariadb10_centos6(){
  echo -e "[MariaDB]
  name = MariaDB
  baseurl = http://yum.mariadb.org/10.0/centos6-amd64
  gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
  gpgcheck=1" > /etc/yum.repos.d/MariaDB.repo
  sed -i 's/^[\ 	]\ //g'  /etc/yum.repos.d/MariaDB.repo
}

add_repo_mariadb10_centos7(){
  echo -e "[mariadb]
  name = MariaDB
  baseurl = http://yum.mariadb.org/10.0/centos7-amd64
  gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
  gpgcheck=1" > /etc/yum.repos.d/mariadb.repo
  sed -i 's/^[\ 	]\ //g'  /etc/yum.repos.d/mariadb.repo
}

instalar_jdk180(){
  cd /opt/
  wget --no-cookies --no-check-certificate --header \
  "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" \
  "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz"
  tar xzf jdk-8u131-linux-x64.tar.gz
  cd jdk1.8.0_131/
  alternatives --install /usr/bin/java java /opt/jdk1.8.0_131/bin/java 2
  alternatives --auto java
  alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_131/bin/jar 2
  alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_131/bin/javac 2
  alternatives --set jar /opt/jdk1.8.0_131/bin/jar
  alternatives --set javac /opt/jdk1.8.0_131/bin/javac
  cd /opt/
  rm -f jdk-8u131-linux-x64.tar.gz
}

instalar_jdk180_test(){
  cd /opt/
  wget --no-cookies --no-check-certificate --header \
  "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" \
  "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz"
  tar xzf jdk-8u131-linux-x64.tar.gz
  cd jdk1.8.0_131/
  alternatives --install /usr/bin/java java /opt/jdk1.8.0_131/bin/java 2
  alternatives --config java
  alternatives --install /usr/bin/jar jar /opt/jdk1.8.0_131/bin/jar 2
  alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_131/bin/javac 2
  alternatives --set jar /opt/jdk1.8.0_131/bin/jar
  alternatives --set javac /opt/jdk1.8.0_131/bin/javac
  cd /opt/
  rm -f jdk-8u131-linux-x64.tar.gz
}


add_repo_elasticsearch234_centos(){
  rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
  echo -e "[elasticsearch-2.x]
  name=Elasticsearch repository for 2.x packages
  baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
  gpgcheck=1
  gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
  enabled=1" > /etc/yum.repos.d/elasticsearch.repo
  sed -i 's/^[\ 	]\ //g'  /etc/yum.repos.d/elasticsearch.repo
}

instalar_apache24_centos(){
 yum install -y httpd httpd-devel
 systemctl start httpd
 [ "$?" != 0 ] && /etc/init.d/httpd start
}

instalar_php_com_modulos_centos(){
 yum install -y php56w php56w-bcmath php56w-cli php56w-common php56w-devel \
 php56w-gd php56w-intl php56w-mbstring php56w-mcrypt php56w-mysqlnd \
 php56w-odbc php56w-pdo php56w-pecl-apcu php56w-pecl-memcache \
 php56w-process php56w-xml php56w-xmlrpc
}

instalar_mariadb10_centos(){
 yum install mariadb mariadb-server -y
 systemctl start mysql
 [ "$?" != 0 ] && /etc/init.d/mysql start
 #[ "$?" != 0 ] && /etc/init.d/mysqld start
 #/usr/bin/mysql_secure_installation
}

instalar_elasticsearch234_centos(){
  [ "${FRESH_INSTALL_CENTOS7}" == 1 ] && java_ok='n'
  # Verificar se JAVA JDK 1.8.0 está instalado
  [ -z "$java_ok" ] && read -p "Java JDK ok? (s/n)" java_ok
  if [ "${java_ok}" == "n" ]; then
	echo "Execute: instalar_jdk180_test "
	instalar_jdk180_test
	yum install -y elasticsearch-2.3.4
	systemctl start elasticsearch
	[ "$?" != 0 ] && /etc/init.d/elasticsearch start
  elif [ "${java_ok}" == "s" ]; then
	yum install -y elasticsearch-2.3.4
	systemctl start elasticsearch
	[ "$?" != 0 ] && /etc/init.d/elasticsearch start
  fi
}

inicializar_com_sistema_httpd_centos6(){
  chkconfig httpd on
}

inicializar_com_sistema_mysql_centos6(){
  chkconfig mysql on
}

inicializar_com_sistema_elasticsearch_centos6(){
  chkconfig elasticsearch on
}

################################################################################
#	Configurar Dependencias
################################################################################
php_habilitar_short_open_tag(){
  #TODO - Verificar se php.ini esta correto
  sed -i 's/^.*short_open_tag = Off.*/short_open_tag = On/' /etc/php.ini
}

php_ajustar_timezone(){
  #TODO - Verificar se php.ini esta correto
  sed -i 's/^.*date.timezone.*/date.timezone = UTC/' /etc/php.ini
}

esconder_erros_php(){
	sed -i 's/error_reporting\ \=\ E_ALL\ \&\ \~E_DEPRECATED\ \&\ \~E_STRICT.*/error_reporting\ \=\ E_ALL\ \&\ \~E_DEPRECATED\ \&\ \~E_STRICT\ \&\ \~E_USER_DEPRECATED/' /etc/php.ini
}

apache_adicionar_vhost(){
	# Esta função será melhorada em breve...
	echo -e "
	[+] Informe a versão do apache selecionando a opção abaixo:

	[ 1 ] - Apache 2.2
	[ 2 ] - Apache 2.4

	: "
	read VERSAO_APACHE

	if [ "${VERSAO_APACHE}" == 1 ]; then
		apache_adicionar_vhost_apache22
	elif [ "${VERSAO_APACHE}" == 2 ]; then
		apache_adicionar_vhost_apache24
	fi
	}

apache_adicionar_vhost_apache22(){
  [ "$_PLESK" != 1 ] && \
  [ -z "$PROJNAME" ] && read -p "Usuario do sistema: " PROJNAME
  [ -z "$PROJDOMAIN1" ] && read -p "Informe o Dominio: " PROJDOMAIN1
  [ -z "$_PATH_VHOSTS" ] && read -p "Caminho dos vhosts: " _PATH_VHOSTS

  echo -e "
  [!] Isso pode causar problemas caso seja um servidor compartilhado.
  [!] Deseja continuar mesmo assim? (s/n)
  "
  read escolha_continuar_vhost

  [ "${escolha_continuar_vhost}" != "s" ] && echo -e "\nVocê escolheu não continuar." && return 1

  [ -f "${_PATH_VHOSTS}/${PROJDOMAIN1}.conf" ] && echo "Arquivo Ja Existe." && \
  return 1
  ErrorLog="/home/$PROJNAME/logs/$PROJNAME-error_log"
  CustomLog="/home/$PROJNAME/logs/$PROJNAME-access_log common"

  echo -e "<Directory /home/$PROJNAME/public_html>
    AllowOverride AuthConfig FileInfo Indexes Limit Options=All,MultiViews
    Options Indexes FollowSymLinks MultiViews
    Order allow,deny
    allow from all
  </Directory>

  <VirtualHost *:80>
      DocumentRoot /home/$PROJNAME/public_html
      ServerName $PROJDOMAIN1
      ServerAlias www.$PROJDOMAIN1
      ErrorLog logs/$PROJNAME-error_log
      CustomLog logs/$PROJNAME-access_log common
  </VirtualHost>" > ${_PATH_VHOSTS}/${PROJDOMAIN1}.conf
  service httpd restart
}

apache_adicionar_vhost_apache24(){
  [ "$_PLESK" != 1 ] && \
  [ -z "$PROJNAME" ] && read -p "Usuario do sistema: " PROJNAME
  [ -z "$PROJDOMAIN1" ] && read -p "Dominio: " PROJDOMAIN1
  [ -z "$_PATH_VHOSTS" ] && read -p "Caminho para os vhosts: " _PATH_VHOSTS

  echo -e "
  [!] Isso pode causar problemas caso seja um servidor compartilhado.
  [!] Deseja continuar mesmo assim? (s/n)
  "
  read escolha_continuar_vhost

  [ "${escolha_continuar_vhost}" != "s" ] && echo -e "\nVocê escolheu não continuar." && return 1
  [ -f "${_PATH_VHOSTS}/${PROJDOMAIN1}.conf" ] && echo "Arquivo Ja Existe." && \
  return 1
  ErrorLog="/home/$PROJNAME/logs/$PROJNAME-error_log"
  CustomLog="/home/$PROJNAME/logs/$PROJNAME-access_log common"

  echo -e "<Directory /home/$PROJNAME/public_html>
    AllowOverride AuthConfig FileInfo Indexes Limit Options=All,MultiViews
    Options Indexes FollowSymLinks MultiViews
    Require all granted
  </Directory>

  <VirtualHost *:80>
      DocumentRoot /home/$PROJNAME/public_html
      ServerName $PROJDOMAIN1
      ServerAlias www.$PROJDOMAIN1
      ErrorLog logs/$PROJNAME-error_log
      CustomLog logs/$PROJNAME-access_log common
  </VirtualHost>" > ${_PATH_VHOSTS}/${PROJDOMAIN1}.conf
}

################################################################################
#	Dados sobre o projeto
################################################################################

forneca_dados_main(){
  [ -z "${DB_USER}" ] &&      read -p "Informe o novo usuario para o MySQL: " DB_USER
  [ -z "${DB_PASS}" ] &&      read -p "Informe a nova senha para o MySQL: " DB_PASS
  [ -z "${PROJNAME}" ] &&     read -p "Informe o usuario do sistema: " PROJNAME && _USER=${PROJNAME}
  [ -z "${PROJDOMAIN1}" ] &&  read -p "Informe o dominio: " PROJDOMAIN1 && novo_dominio=${PROJDOMAIN1}
  [ -z "${LOCALE}" ] &&       read -p "Informe idioma [en_us|pt_br]: " LOCALE
  [ -z "${BRANDED}" ] &&      read -p "Informe o Branded [on|off]: " BRANDED
  [ -z "${IP_DB_HOST}" ] &&   read -p "Informe o ip do MySQL [localhost]: " IP_DB_HOST

  if [[ "${LOCALE}" = "pt_br" ]]; then
          LOCALE_PARAMETERS="pt"
  elif [[ "${LOCALE}" = "en_us" ]]; then
          LOCALE_PARAMETERS="en"
  fi

  [ -z "${DB_MAIN_NAME}" ] && DB_MAIN_NAME=""$PROJNAME"_main"
  [ -z "${DB_DOMAIN1}" ] && DB_DOMAIN1=""$PROJNAME"_domain1"

  export DB_USER=$DB_USER
  export DB_PASS=$DB_PASS
  export PROJNAME=$PROJNAME
  export PROJDOMAIN1=$PROJDOMAIN1
  export LOCALE=$LOCALE
  export BRANDED=$BRANDED
  export LOCALE_PARAMETERS=$LOCALE_PARAMETERS
  export IP_DB_HOST=$IP_DB_HOST
  export DB_MAIN_NAME=$DB_MAIN_NAME
  export DB_DOMAIN1=$DB_DOMAIN1
}

gerar_yml_novo_domain(){
	novo_dominio="$1"
	
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	[ -z "$novo_dominio" ] && read -p "Informe o dominio: " novo_dominio
	[ ! -z "$EDIR11_ROOT" ] && cd  ${EDIR11_ROOT}/app/config/domains/
	echo -e "[+] Gerando arquivos .route.yml, .payments.yml e .configs.yml ..."
	echo -e "[+] para o dominio: $novo_dominio"
	for i in $(ls | grep sample); do
		cp $i $(echo $i | sed s/domain/${novo_dominio}/g | sed s/.sample//)
	done
	cd - > /dev/null
	unset novo_dominio
}

################################################################################
#	Ferramentas do eDirectory 11.1
################################################################################

bloquear_sitemgr_v11(){
  [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
  # - Baixa arquivo indexUpgrade.html no diretorio edirectory/web/conf
	LINK_HTML='http://arcafiles.arcasolutions.com/v11tools/files-v11tools-block_sitemgr_v11/indexUpgrade.html'
	echo -e "\nBaixando arquivo html..."
	wget -O $EDIR11_ROOT/web/conf/indexUpgrade.html "$LINK_HTML" 2> /dev/null
	echo -e "Arquivo salvo em $EDIR11_ROOT/web/conf ."

	echo -e "Criando redirecionamento nos arquivos index.php e login.php..."
	for i in $(ls $EDIR11_ROOT/web | egrep "(sitemgr|sponsors|profile)")
	do
		sed -i.bkp "s/<?php/<?php\n\n####### Trecho para bloqueio ########\n\
		include\(\"..\/conf\/indexUpgrade.html\"\)\;\nexit\(\)\;\n\
		#####################################/" \
		$EDIR11_ROOT/web/$i/index.php $EDIR11_ROOT/web/$i/login.php
	done
	[ "$?" != 0 ] && echo -e "Problema." && return 1
	echo -e "\nSitemgr, Profile e Sponsors bloqueados com sucesso."
}

desbloquear_sitemgr_v11(){
  [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
  ### Desbloquear sitemgr
	# Checar se existe os arquivos index.php.bkp
	for i in $(ls $EDIR11_ROOT/web | egrep "(sitemgr|sponsors|profile)")
	do
		ls $EDIR11_ROOT/web/$i/*.bkp
	done
	[ $? != 0 ] && echo -e "\nProblema, arquivos index.bkp nao encontrados." &&return 1

	echo -e "\nRemovendo redirecionamento nos arquivos login.php e index.php ..."
	for i in $(ls $EDIR11_ROOT/web | egrep "(sitemgr|sponsors|profile)")
	do
		mv $EDIR11_ROOT/web/$i/login.php.bkp $EDIR11_ROOT/web/$i/login.php
		mv $EDIR11_ROOT/web/$i/index.php.bkp $EDIR11_ROOT/web/$i/index.php
	done
	echo -e "Desbloqueio concluido."
	### Fim desbloqueio
}

recriar_indice(){
	echo -e "[+] Recriando indice ..."
	[ -z "${EDIR11_ROOT}" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	[ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME
	[ -z "${PROJDOMAIN1}" ] && read -p "Informe o Dominio: " PROJDOMAIN1
	[ -z "${_HOME}" ] && _HOME="${EDIR11_ROOT%/edirectory}"

	checar_usuario_root
	if [ "${USER_IS_ROOT}" == 1 ];then
		php ${EDIR11_ROOT}/app/console edirectory:sync -r --env=prod --domain=${PROJDOMAIN1}

	elif [ "${USER_IS_ROOT}" == 0 ];then
		which runuser > /dev/null
		[ "$?" != 0 ] && echo -e "Programa runuser não encontrado." && return 1
		php ${_HOME}/edirectory/app/console edirectory:sync -r --env=prod --domain=${PROJDOMAIN1}
	fi
}

gerar_senha(){
	if [[ -z "$1" ]] ; then i=8 ; else i=$1 ; fi
	a=$(cat /dev/urandom | tr -dc [a-zA-Z0-9_] | head -c $i)
	echo -e "$a"
}

verificar_versao_edirectory(){
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	CONFIG_INC="$EDIR11_ROOT/web/conf/config.inc.php"
	DOMAIN_INC="$EDIR11_ROOT/web/custom/domain/domain.inc.php"
	CONSTANTS_INC="$EDIR11_ROOT/web/conf/constants.inc.php"
	KERNEL_V="$EDIR11_ROOT/src/ArcaSolutions/CoreBundle/Kernel/Kernel.php"
	EDIR_VERSION="$(grep "const VERSION = " $KERNEL_V | awk -F\' '{print $2}')"
	echo -e "$EDIR_VERSION"
}

procurar_php56(){
	E=$(whereis -b php) ; c=0; unset BIN_PHP56 && unset PATH_PHP56 ;
	for i in ${E}; do
		[ -f "$i" ] && [ -x "$i" ] && $i -v | [ "$(grep "5.6")" ] && \
		c=$((c+1)) && BIN_PHP56[$c]="$i" && PATH_PHP56[$c]="${BIN_PHP56[$c]%php}" \
		&& echo -e "\n===== $c =====\nPATH\t: ${PATH_PHP56[$c]}\nBin\t: ${BIN_PHP56[$c]}\n$(${BIN_PHP56[$c]} -v)\n" ;
	done
}

carregar_info_proj(){
	[ "$(hostname)" == "ecca01.edirectory.com" ]&& export ECCA01_LOAD=1

	USER=$(whoami)
	if [ $USER = "root" ] ;then
		[ "$#" = 0 ] && echo -e "Especifique um usuario." && return 1
		[ "$1" ] && _USER="$1"
	else
		_USER="$USER"
	fi

	EDIR11_ROOT="/home/${_USER}/edirectory"
  [ ! -d "${EDIR11_ROOT}" ] && read -p "Informe o caminho do edirectory: " EDIR11_ROOT
  _HOME="${EDIR11_ROOT%/edirectory}"
  export EDIR11_ROOT="${EDIR11_ROOT}"
	export CONFIG_INC="${EDIR11_ROOT}/web/conf/config.inc.php"
	export DOMAIN_INC="${EDIR11_ROOT}/web/custom/domain/domain.inc.php"
	export DOMAIN_YML="${EDIR11_ROOT}/app/config/domain.yml"
	export DIR_DOMAINS="${EDIR11_ROOT}/app/config/domains"
	export PARAMETERS_YML="${EDIR11_ROOT}/app/config/parameters.yml"
	export CONSTANTS_INC="${EDIR11_ROOT}/web/conf/constants.inc.php"
	export KERNEL_V="${EDIR11_ROOT}/src/ArcaSolutions/CoreBundle/Kernel/Kernel.php"
	export EDIR_VERSION="$(grep "const VERSION = " ${KERNEL_V} | awk -F\' '{print $2}')"
	export TMP_DIR="${_HOME}/tmp_upgrade"
	export LOG="${TMP_DIR}/fix_sitemgr.log"
	export DB_USER=$(grep -E "define\(\"_DIRECTORYDB_USER\"\," ${CONFIG_INC} | cut -f4 -d '"')
	export DB_PASS=$(grep -E "define\(\"_DIRECTORYDB_PASS\"\," ${CONFIG_INC} | cut -f4 -d '"')
	export DB_HOST=$(grep -E "define\(\"_DIRECTORYDB_HOST\"\," ${CONFIG_INC} | cut -f4 -d '"')
	export DB_MAIN=$(grep -E "define\(\"_DIRECTORYDB_NAME\"\," ${CONFIG_INC} | cut -f4 -d '"')
	export BD_TXT="${TMP_DIR}/bd.txt"
  export PASS_ARCAFILES="AV252fo5PJ"

	echo -e "\
	_HOME\t\t= ${_HOME}
	CONFIG_INC\t= ${CONFIG_INC}
	DOMAIN_INC\t= ${DOMAIN_INC}
	DOMAIN_YML\t= ${DOMAIN_YML}
	PARAMETERS_YML\t= ${PARAMETERS_YML}
	DIR_DOMAINS\t= ${DIR_DOMAINS}
	CONSTANTS_INC\t= ${CONSTANTS_INC}
	EDIR11_ROOT\t= ${EDIR11_ROOT}
	EDIR_VERSION\t= ${EDIR_VERSION}
	DB_USER\t\t= ${DB_USER}
	DB_PASS\t\t= ${DB_PASS}
	DB_HOST\t\t= ${DB_HOST}
	DB_MAIN\t\t= ${DB_MAIN}
	"
	}

inserir_novo_dominio_domain_yml(){
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	[ -z "$novo_dominio" ] && read -p "Informe o dominio: " novo_dominio
	[ -z "$novo_id" ] && read -p "Informe o ID: " novo_id
	[ -z "$_USER" ] && read -p "Informe o usuario: " _USER
	echo -e "[+] Inserindo registro no arquivo domain.yml ..."
	echo -e "\
        ${novo_dominio}:
            id: ${novo_id}
            path: custom/domain_${novo_id}/
            template: default
            locale: en_us
            database: ${_USER}_domain${novo_id}
            elastic: ${_USER}_domain${novo_id}
            title: eDirectory
            branded: off\n" >> ${EDIR11_ROOT}/app/config/domain.yml
	}

inserir_novo_domain_bd_main(){
    [ -z "$_USER" ] && read -p "Informe o usuario do Sistema: " _USER
    [ -z "$DB_USER" ] && read -p "Informe o usuario do MySQL: " DB_USER
    [ -z "$DB_PASS" ] && read -p "Informe a senha do MySQL: " DB_PASS
    [ -z "$novo_dominio" ] && read -p "Informe o dominio: " novo_dominio
    [ -z "$novo_id" ] && read -p "Informe o id do dominio adicionado: " novo_id
    DB_DOMAINX="${_USER}_domain${novo_id}"

    echo -e "[+] Inserindo entrada na tabela Domain ..."
    mysql -u${DB_USER} -p${DB_PASS} ${_USER}_main -e \
    "INSERT INTO Domain (id, smaccount_id, name, database_host, database_port, database_username, database_password, database_name, url, status, activation_status, created, deleted_date, article_feature, banner_feature, classified_feature, event_feature, subfolder) VALUES ('$novo_id', '1', '$novo_dominio', 'localhost',
'3306', '$DB_USER', '$DB_PASS', '$DB_DOMAINX', '$novo_dominio', 'A', 'A', '0000-00-00', '0000-00-00', 'on', 'on', 'on', 'on', NULL);" 2> /dev/null
    mysql -u${DB_USER} -p${DB_PASS} ${_USER}_main -e "select id, url, database_name from Domain;"  2> /dev/null
    }

inserir_novo_dominio_domain_inc(){
	
	novo_dominio="$1"
	novo_id="$2"
	
	echo -e "[+] Inserindo entrada no arquivo domains.inc.php ..."
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	[ -z "$novo_id" ] && read -p "Informe o id: " novo_id
	[ -z "$novo_dominio" ] && read -p "Informe o dominio: " novo_dominio
	[ -z "$DOMAIN_INC" ] && read -p "Informe DOMAIN_INC ou utilize carregar_info_proj: " DOMAIN_INC

	# Localiza e remove fechamento de tag php
	sed -i 's/?>//' $DOMAIN_INC && sed -i '/^$/d' $DOMAIN_INC

	echo -e "\$domainInfo[\"${novo_dominio}\"] = ${novo_id};"  >> ${DOMAIN_INC}
	unset novo_dominio novo_id
	
	}

criar_nova_database(){
	echo -e "[+] Criando nova database..."

	if [ "${USER_IS_ROOT}" == 1 ];then
		[ "$#" = 0 ] && \
		[ -z "$_USER" ] && read -p "Informe o usuario do sistema: " _USER
		[ -z "$DB_PASS" ] && read -p "Informe a senha do usuario (bd): " DB_PASS
		[ -z "$novo_id" ] && read -p "Informe o id da nova database: " novo_id
		[ -z "$ECCA01_LOAD" ] && read -p "ECCA01? (1|0) : " ECCA01_LOAD
		DB_DOMAINX="${_USER}_domain${novo_id}"

		echo -e "\n[+] Informe a senha do usuario root do MySQL abaixo"
		mysql -uroot -e "create database if not exists ${DB_DOMAINX}; grant all privileges on ${DB_DOMAINX}.* to '${DB_USER}'@'localhost' identified by '${DB_PASS}'; flush privileges;" 2> /dev/null
		[ "$?" != 0 ] && \
    mysql -uroot -p -e "create database if not exists ${DB_DOMAINX}; grant all privileges on ${DB_DOMAINX}.* to '${DB_USER}'@'localhost' identified by '${DB_PASS}'; flush privileges;" 2> /dev/null
		[ "$ECCA01_LOAD" == 1 ] && /usr/local/cpanel/bin/dbmaptool ${_USER} --type mysql --dbs ${_USER}_domain${novo_id} --dbusers ${DB_USER}

	else
		echo -e "[!] Precisa ser root para criar um novo banco de dados."
	fi

	}

menu_criar_addon(){
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
  [ -z "$_USER" ] && read -p "Informe o usuario do Sistema: " _USER
  [ -z "$DB_USER" ] && read -p "Informe o usuario do MySQL: " DB_USER
  [ -z "$DB_PASS" ] && read -p "Informe a senha do MySQL: " DB_PASS
	[ -z "$novo_id" ] && read -p "Informe o ID do novo dominio: " novo_id
	[ -z "$novo_dominio" ] && read -p "Informe o dominio: " novo_dominio
	DB_DOMAINX="${_USER}_domain${novo_id}"
	echo -e "\n[+] Iniciando criação de add-on..."
}

baixar_pacote_addon(){
	[ -z "${EDIR_VERSION}" ] && verificar_versao_edirectory
	DATA_DOMAINX="domain_X.tar.gz"
  [ -z "${PASS_ARCAFILES}" ] && read -p "Informe a senha para baixar o arquivo: " PASS_ARCAFILES

	cd "${EDIR11_ROOT}/web/custom"

	echo -e "\n[+] Baixando diretorio domain_X ..."

    if [ "$EDIR_VERSION" == "11.0.05" ]; then
    	[ ! -f "domain_X.tar.gz" ] && wget --user=edirectory --password="${PASS_ARCAFILES}" http://arcafiles.arcasolutions.com/edirectory/11.0.05/edirectory/web/custom/${DATA_DOMAINX} 2> /dev/null
    	[ "$?" != 0 ] && echo "Problema ao baixar pacote." && return 1

    elif [ "$EDIR_VERSION" == "11.1.03" ]; then
    	[ ! -f "domain_X.tar.gz" ] && wget --user=edirectory --password="${PASS_ARCAFILES}" http://arcafiles.arcasolutions.com/edirectory/live/web/custom/${DATA_DOMAINX} 2> /dev/null
    	[ "$?" != 0 ] && echo "Problema ao baixar pacote." && return 1
    fi

	tar zxf ${DATA_DOMAINX}
	[ "$?" != 0 ] && echo "Problema ao extrair pacote." && return 1
	mv domain_X domain_${novo_id}
	chown -R ${_USER}:${_USER} domain_${novo_id}
	[ -n "$DATA_DOMAINX" ] && rm -rf ${DATA_DOMAINX}
	cd ${EDIR11_ROOT}
}

criar_addon_limpar_variaveis(){
	echo -e "[+] Limpando variáveis utilizadas para novo domínio."
	unset novo_id novo_dominio DB_DOMAINX PROJDOMAIN1
  unset COD TYPE NAME LOCALE
  }

limpar_variaveis(){
  unset novo_id novo_dominio DB_DOMAINX
  unset PROJDOMAIN1 _USER PROJNAME EDIR11_ROOT
  unset DB_USER DB_PASS DB_NAME DB_NAME_PREFIX DB_MAIN DB_DOMAINS DB_DOMAIN1
  }

criar_addon_importar_empty_domain(){
    [ -z "$_USER" ] && read -p "Informe o usuario do Sistema: " _USER && PROJNAME="${_USER}"
    [ -z "${DB_USER}" ] && read -p "Informe o usuario do MySQL: " DB_USER
    [ -z "${DB_PASS}" ] && read -p "Informe a senha: " DB_PASS
    [ -z "$novo_id" ] && read -p "Informe o id do dominio adicionado: " novo_id
    DB_DOMAINX="${_USER}_domain${novo_id}"
    [ -z "${DB_DOMAINX}" ] && read -p "DB_DOMAINX Nao definido."
    [ -z "${EDIR_VERSION}" ] && verificar_versao_edirectory
    [ -z "${PASS_ARCAFILES}" ] && read -p "Informe a senha para baixar o arquivo: " PASS_ARCAFILES

    verificar_locale_da_domain1

    [ -z "${LOCALE}" ] && read -p "Informe locale [en|pt]: "
    LOCALE="${LOCALE/_*/}"

    echo -e "[+] Baixando arquivo empty_domain.dump.sql ..."

    #COD    = [d|s|ds] data structure data+structure
    #TYPE   = [empty|load]
    #NAME   = [main|domain]
    #LOCALE   = [en|pt]

    if [ "${chk_importar_bd_estrutura_domain1}" != 1 ]; then
        COD="d" && TYPE="empty" && NAME="domain"
    else
        read -p "COD: " COD
        read -p "TYPE: " TYPE
        read -p "NAME: " NAME
    fi

    _NOME_ARQ_SQL="${COD}_${TYPE}_${NAME}_${LOCALE}.sql"

    if [ "$EDIR_VERSION" == "10.4.00" ] || [ "$EDIR_VERSION" == "10.3.00" ]; then
        echo -e "[+] Baixando arquivo ${_NOME_ARQ_SQL} ..."
        wget -q --user=edirectory --password="${PASS_ARCAFILES}" "http://arcafiles.arcasolutions.com/edirectory/${EDIR_VERSION}/databases/${_NOME_ARQ_SQL}"
        [ "$?" != 0 ] && echo "[!] Problema ao baixar arquivo ${_NOME_ARQ_SQL} ." && return 1
    elif [ "$EDIR_VERSION" == "11.0.02" ] || [ "$EDIR_VERSION" == "11.0.05" ] || [ "$EDIR_VERSION" == "11.1.03" ]; then
        echo -e "[+] Baixando arquivo ${_NOME_ARQ_SQL} ..."
        wget -q --user=edirectory --password="${PASS_ARCAFILES}" "http://arcafiles.arcasolutions.com/edirectory/${EDIR_VERSION}/edirectory/databases/${_NOME_ARQ_SQL}"
        [ "$?" != 0 ] && echo "[!] Problema ao baixar arquivo ${_NOME_ARQ_SQL} ." && return 1
    else
        echo -e "[!] - Atualmente o script não funciona com a versão ${EDIR_VERSION}."
    fi

    echo -e "[+] Importando dados no novo banco de dados..."

    mysql -u ${DB_USER} -p${DB_PASS} -e "create database if not exists $DB_DOMAINX;" 2> /dev/null
    mysql -u ${DB_USER} -p${DB_PASS} ${DB_DOMAINX} < ${_NOME_ARQ_SQL} 2> /dev/null

    [ "$?" != 0 ] && echo "Problema ao importar database." && return 1
    echo -e "[+] Concluído."
    }


criar_addon_criar_vhost(){
	echo -e "[+] Instalação do Add-on finalizada."
	echo -ne "\nDeseja criar o arquivo vhost para o dominio? \nLembrando que será necessário reiniciar o Apache.\n(s/n)"
	read escolha_criar_vhost
	if [ "$escolha_criar_vhost" == "s" ]; then
		#TODO - Verificar versão do apache
		PROJDOMAIN1="${novo_dominio}"
		apache_adicionar_vhost_apache22
	else
		:
	fi
}

remover_cache_edirectory(){
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
    [ -z "$_USER" ] && read -p "Informe o usuario do Sistema: " _USER
    echo -e "[+] Removendo cache do eDirectory ..."
	rm -rf "${EDIR11_ROOT}/app/cache"
	}

criar_addon(){
  checar_usuario_root

  # Se usuário for root identifica o usuário do sistema e passa como
  # parâmetro para a função carregar_info_proj
  if [ "${USER_IS_ROOT}" == 1 ]; then
    if [ -z "${_USER}" ]; then
      read -p "[-] Informe o usuario do sistema: " _USER
      carregar_info_proj "${_USER}"
    elif [ -n "${_USER}" ]; then
      carregar_info_proj "${_USER}"
    fi

  elif [ "${USER_IS_ROOT}" == 0 ]; then
    carregar_info_proj
  fi

  verificar_versao_edirectory
  menu_criar_addon
  criar_nova_database
  exportar_domain1_customizado
  importar_bd_estrutura_domain1
  criar_addon_importar_empty_domain
  inserir_novo_dominio_domain_inc
  inserir_novo_domain_bd_main
  inserir_novo_dominio_domain_yml
  gerar_yml_novo_domain
  baixar_pacote_addon
  PROJDOMAIN1="${novo_dominio}"
  criar_addon_criar_vhost
  remover_cache_edirectory
  recriar_indice
  perm_user_edirectory
  _set_branded_off
  control_cron_novo_dominio
  criar_addon_limpar_variaveis
  }

mudar_senha_sitemgr(){
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	[ -z "$_USER" ] &&   read -p "Informe o usuario do sistema: " _USER
	[ -z "$DB_USER" ] && read -p "Informe o usuario do mysql: " DB_USER
	[ -z "$DB_PASS" ] && read -p "Informe a senha do mysql: " DB_PASS
	[ -z "$DB_MAIN" ] && read -p "Informe nome do banco main: " DB_MAIN
	[ -z "$TMP_DIR" ] && echo -e "TMP_DIR não definido. Tente carregar_info_proj" return 1

	LOG=${TMP_DIR}/edirectory.log
	[ ! -d "$TMP_DIR" ] && mkdir ${TMP_DIR}
	[ ! -f "$LOG" ] && touch ${LOG}

	NEW_PASS_SITEMGR=$(cat /dev/urandom | tr -dc [a-zA-Z0-9_+-] | head -c 10)


	NEW_HASH="$DB_USER""$NEW_PASS_SITEMGR"
	CHANGE_LOGIN="use $DB_MAIN; update SMAccount set username='arcalogin@arcasolutions.com' where username='arcalogin';" 2> /dev/null
	CHANGE_PASS="use $DB_MAIN; update SMAccount set password=MD5('$NEW_PASS_SITEMGR'), complementary_info=MD5('$NEW_HASH') where username='arcalogin@arcasolutions.com';" 2> /dev/null

	echo -e "[+] Gerando nova senha..."

	mysql -u"${DB_USER}" -p"${DB_PASS}" -e "${CHANGE_LOGIN}"
	mysql -u"${DB_USER}" -p"${DB_PASS}" -e "${CHANGE_PASS}"

	echo -e "Concluido.\n
	Sitemgr:
	Login\t: arcalogin@arcasolutions.com
	Senha\t: ${NEW_PASS_SITEMGR}
	\nAtualize no Rattic.\n" > $LOG

	cat $LOG
	}

toolkit_mostrar_funcoes(){
       	echo -e "\nFuncoes disponiveis:\n"
        echo -e "\n$(cat /tmp/toolkit.sh | grep "(){" | grep -v "^#" | grep -v "grep" | sed 's/(){//g'  | sort -n)\n"
        }

criar_novo_usuario_mysql(){
    [ -z "${DB_USER}" ] && read -p "Informe o novo usuario para o MySQL: " DB_USER
    [ -z "${DB_PASS}" ] && read -p "Informe a nova senha para o MySQL: " DB_PASS
    read -p "O root do MySQL possui senha? (s/n)" root_pass
    if [ "${root_pass}" == "n" ]; then
            mysql -u root -e "CREATE USER '$DB_USER'@'%' IDENTIFIED BY '$DB_PASS';"
            mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO '$DB_USER'@'%';"
            mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
            mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO '$DB_USER'@'localhost';"
            mysql -u root -e "FLUSH PRIVILEGES;"
    elif [ "${root_pass}" == "s" ] ;then
            mysql -u root -p -e "CREATE USER '$DB_USER'@'%' IDENTIFIED BY '$DB_PASS';"
            mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO '$DB_USER'@'%';"
            mysql -u root -p -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
            mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO '$DB_USER'@'localhost';"
            mysql -u root -p -e "FLUSH PRIVILEGES;"
    fi
    echo -e "[+] Usuario ${DB_USER} criado com sucesso."
	}

criar_novas_databases_fresh_install(){
    [ -z "${DB_USER}" ] && read -p "Informe o usuario do MySQL: " DB_USER
    [ -z "${DB_PASS}" ] && read -p "Informe a senha: " DB_PASS
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME

    [ -z "${DB_MAIN_NAME}" ] && DB_MAIN_NAME=""$PROJNAME"_main"
    [ -z "${DB_DOMAIN1}" ] && DB_DOMAIN1=""$PROJNAME"_domain1"

    mysql -u $DB_USER -p$DB_PASS -e "create database if not exists $DB_MAIN_NAME;"
    mysql -u $DB_USER -p$DB_PASS -e "create database if not exists $DB_DOMAIN1;"
	}

importar_empty_main(){
    [ -z "${DB_USER}" ] && read -p "Informe o usuario do MySQL: " DB_USER
    [ -z "${DB_PASS}" ] && read -p "Informe a senha: " DB_PASS
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME
    [ -z "${PROJDOMAIN1}" ] && read -p "Informe o dominio: " PROJDOMAIN1
    [ -z "${PASS_ARCAFILES}" ] && read -p "Informe a senha para baixar o arquivo: " PASS_ARCAFILES

    [ -z "${DB_MAIN_NAME}" ] && DB_MAIN_NAME=""$PROJNAME"_main"
    [ -z "${DB_DOMAIN1}" ] && DB_DOMAIN1=""$PROJNAME"_domain1"

    wget --user=edirectory --password="${PASS_ARCAFILES}" http://arcafiles.arcasolutions.com/edirectory/live/databases/empty_main.dump.sql

    mysql -u $DB_USER -p$DB_PASS $DB_MAIN_NAME < empty_main.dump.sql
    mysql -u $DB_USER -p$DB_PASS $DB_MAIN_NAME -e "INSERT INTO Domain (id, smaccount_id, name, database_host, database_port, database_username, database_password, database_name, url, status, activation_status, created, deleted_date, article_feature, banner_feature, classified_feature, event_feature, subfolder) VALUES ('1',
'1', '$PROJDOMAIN1', 'localhost', '3306', '$DB_USER', '$DB_PASS', '$DB_DOMAIN1', '$PROJDOMAIN1', 'A', 'A', '0000-00-00', '0000-00-00', 'on', 'on', 'on', 'on', NULL);"
    mysql -u $DB_USER -p$DB_PASS $DB_MAIN_NAME -e "INSERT INTO SMAccount (id, updated, entered, username, password, permission, iprestriction, faillogin_count, faillogin_datetime, name, phone, email, complementary_info, active) VALUES (1, '2015-08-19 22:41:42', '0000-00-00 00:00:00', 'arcalogin@arcasolutions.com',
'cc9141500563b2e141307f57581e21ae', '8380383', '*', 0, '0000-00-00 00:00:00', '', '', '', '23b7c615d4edd4cf7d858ab5fd667928', 'y');"

	}

importar_empty_domain(){
    [ -z "${DB_USER}" ] && read -p "Informe o usuario do MySQL: " DB_USER
    [ -z "${DB_PASS}" ] && read -p "Informe a senha: " DB_PASS
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME
    [ -z "${EDIR_VERSION}" ] && EDIR_VERSION=${EDIR_VERSION_CURRENT}
    [ -z "${DB_DOMAIN1}" ] && DB_DOMAIN1=""$PROJNAME"_domain1"
    [ -z "${PASS_ARCAFILES}" ] && read -p "Informe a senha para baixar o arquivo: " PASS_ARCAFILES
    [ -z "${EDIR_VERSION}" ] && verificar_versao_edirectory
    echo -e "[+] Baixando arquivo empty_domain.dump.sql ..."

    if [ "$EDIR_VERSION" == "11.0.05" ]; then
    	_NOME_ARQ_SQL="empty_domain_1.sql"
    	wget --user=edirectory --password="${PASS_ARCAFILES}" http://arcafiles.arcasolutions.com/edirectory/11.0.05/edirectory/databases/${_NOME_ARQ_SQL} 2> /dev/null
    	[ "$?" != 0 ] && echo "Problema ao baixar pacote." && return 1

    elif [ "$EDIR_VERSION" == "11.1.03" ]; then
    	_NOME_ARQ_SQL="empty_domain.dump.sql"
    	wget --user=edirectory --password="${PASS_ARCAFILES}" http://arcafiles.arcasolutions.com/edirectory/live/databases/${_NOME_ARQ_SQL} 2> /dev/null
    	[ "$?" != 0 ] && echo "Problema ao baixar pacote." && return 1
    fi

    mysql -u $DB_USER -p$DB_PASS -e "create database if not exists ${DB_DOMAIN1};"
    mysql -u $DB_USER -p$DB_PASS $DB_DOMAIN1 < "${_NOME_ARQ_SQL}"

	}

mudar_usuario_apache(){
    [ -z "$PROJNAME" ] && read -p "Usuario para alterar no httpd.conf: " PROJNAME
    sed -i 's/^Group\ .*/Group\ '"$PROJNAME"'/' /etc/httpd/conf/httpd.conf
    sed -i 's/^User\ .*/User\ '"$PROJNAME"'/' /etc/httpd/conf/httpd.conf
    systemctl start httpd
	}

alterar_domain_yml_primeira_vez(){
    [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
    _PATH="${EDIR11_ROOT%/edirectory}"
    CONFIG_YML="${EDIR11_ROOT}/app/config/domain.yml"
    PARAMETERS_YML="${EDIR11_ROOT}/app/config/parameters.yml"
    [ -z "${DB_USER}" ] && read -p "Informe o usuario do MySQL: " DB_USER
    [ -z "${DB_PASS}" ] && read -p "Informe a senha: " DB_PASS
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME
    [ -z "${PROJDOMAIN1}" ] && read -p "Informe o dominio: " PROJDOMAIN1

    [ -z "${DB_MAIN_NAME}" ] && DB_MAIN_NAME=""$PROJNAME"_main"
    [ -z "${DB_DOMAIN1}" ] && DB_DOMAIN1=""$PROJNAME"_domain1"

    sed -i 's/automation.arcasolutions.com/'"$PROJDOMAIN1"'/g' $CONFIG_YML
    sed -i 's/LOCALE/'"$LOCALE"'/g' $CONFIG_YML
    sed -i 's/DB_DOMAIN_NAME/'"$DB_DOMAIN1"'/g' $CONFIG_YML
    sed -i 's/ELASTIC_INDEX/'"$DB_DOMAIN1"'/g' $CONFIG_YML
    sed -i 's/TITLE/'"$TITLE"'/g' $CONFIG_YML
    sed -i 's/.*branded.*/            branded: '"$BRANDED"'/' $CONFIG_YML

	}

baixar_pacote(){
	[ -z "$PROJNAME" ] && read -p "Usuario do sistema: " PROJNAME
  [ -z "${PASS_ARCAFILES}" ] && read -p "Informe a senha para baixar o arquivo: " PASS_ARCAFILES
	[ ! $(grep ${PROJNAME} /etc/passwd) ] && useradd -m ${PROJNAME}
	cd /home/${PROJNAME}
	wget --user=edirectory --password="${PASS_ARCAFILES}" http://arcafiles.arcasolutions.com/edirectory/live.tar.gz
  [ "$?" != 0 ] && echo "[!] Problema ao baixar pacote." && return 1
	tar zxf live.tar.gz
  [ "$?" != 0 ] && echo "[!] Problema ao extrair pacote." && return 1
	mv /home/${PROJNAME}/live /home/${PROJNAME}/edirectory
	cd /home/${PROJNAME}/edirectory
	export EDIR11_ROOT=$(pwd)
	}

baixar_pacote2(){
  [ -z "$PROJNAME" ] && read -p "Usuario do sistema: " PROJNAME
  [ -z "${PASS_ARCAFILES}" ] && read -p "Informe a senha para baixar o arquivo: " PASS_ARCAFILES
  [ ! $(grep ${PROJNAME} /etc/passwd) ] && useradd -m ${PROJNAME}
  cd ${_PATH}

  echo -e "[+] Baixando o pacote..."
  [ ! -f "live.tar.gz" ] && wget -q --user=edirectory --password="${PASS_ARCAFILES}" http://arcafiles.arcasolutions.com/edirectory/live.tar.gz
  [ "$?" != 0 ] && echo "[!] Problema ao baixar pacote." && return 1
  tar zxf live.tar.gz 2> /dev/null
  [ "$?" != 0 ] && echo "[!] Problema ao extrair pacote." && return 1
  mv ${_PATH}/live ${_PATH}/edirectory
  cd ${_PATH}/edirectory >/dev/null
  export EDIR11_ROOT=$(pwd)
  }

alterar_parameters_yml_primeira_vez(){
    [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
    export CONFIG_YML="${EDIR11_ROOT}/app/config/domain.yml"
    export PARAMETERS_YML="${EDIR11_ROOT}/app/config/parameters.yml"
    [ -z "${DB_USER}" ] && read -p "Informe o usuario do MySQL: " DB_USER
    [ -z "${DB_PASS}" ] && read -p "Informe a senha: " DB_PASS
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME
    [ -z "${PROJDOMAIN1}" ] && read -p "Informe o dominio: " PROJDOMAIN1

    [ -z "${DB_MAIN_NAME}" ] && export DB_MAIN_NAME=""$PROJNAME"_main"
    [ -z "${DB_DOMAIN1}" ] && export DB_DOMAIN1=""$PROJNAME"_domain1"
    [ -z "${ES_HOST}" ] && export ES_HOST='localhost'

    sed -i 's/database_host:.*/database_host:\ '"localhost"'/' $PARAMETERS_YML
    sed -i 's/database_name:.*/database_name:\ '"$DB_MAIN_NAME"'/' $PARAMETERS_YML
    sed -i 's/database_user:.*/database_user:\ '"$DB_USER"'/' $PARAMETERS_YML
    sed -i 's/database_password:.*/database_password:\ \"'"$DB_PASS"'\"/' $PARAMETERS_YML
    sed -i 's/ES_HOST/'"$ES_HOST"'/' $PARAMETERS_YML
    sed -i 's/ES_PORT/9200/' $PARAMETERS_YML
    sed -i 's/locale.*/locale:\ '"$LOCALE_PARAMETERS"'/g' $PARAMETERS_YML
    sed -i 's/TOKEN/eZz8K862WwiZOq71lt8Kr481u1F70v34/' $PARAMETERS_YML

	}

alterar_web_conf_primeira_vez(){
    [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
    export CONFIG_INC="${EDIR11_ROOT}/web/conf/config.inc.php"
    [ -z "${DB_USER}" ] && read -p "Informe o usuario do MySQL: " DB_USER
    [ -z "${DB_PASS}" ] && read -p "Informe a senha: " DB_PASS
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME
    [ -z "${PROJDOMAIN1}" ] && read -p "Informe o dominio: " PROJDOMAIN1

    sed -i 's/\"_DIRECTORYDB_HOST\"\,\ \ \".*/\"_DIRECTORYDB_HOST\"\,\ \ \"'"$IP_DB_HOST"'\"\)\;/' $CONFIG_INC
    sed -i 's/\"_DIRECTORYDB_USER\"\,\ \ \".*/\"_DIRECTORYDB_USER\"\,\ \ \"'"$DB_USER"'\"\)\;/' $CONFIG_INC
    sed -i 's/\"_DIRECTORYDB_PASS\"\,\ \ \".*/\"_DIRECTORYDB_PASS\"\,\ \ \"'"$DB_PASS"'\"\)\;/' $CONFIG_INC
    sed -i 's/\"_DIRECTORYDB_NAME\"\,\ \ \".*/\"_DIRECTORYDB_NAME\"\,\ \ \"'"$DB_MAIN_NAME"'\"\)\;/' $CONFIG_INC
    sed -i 's/\"DB_NAME_PREFIX\"\,\ \".*/\"DB_NAME_PREFIX\"\,\ \"'"$PROJNAME"'\"\)\;/' $CONFIG_INC

	}

alterar_domain_inc_primeira_vez(){
    [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
    export DOMAIN_INC="${EDIR11_ROOT}/web/custom/domain/domain.inc.php"
    [ -z "${PROJDOMAIN1}" ] && read -p "Informe o dominio: " PROJDOMAIN1

    sed -i "s/\$domainInfo\[\".*/\$domainInfo\[\"$PROJDOMAIN1\"\]\ \=\ 1\;/g" $DOMAIN_INC
	}

perm_777_session_php(){
	_SESSION="/var/lib/php/session/"
    [ -d "$_SESSION" ] && chmod -R 777 ${_SESSION}
    _SESSION="/var/lib/php/sessions/"
    [ -d "$_SESSION" ] && chmod -R 777 ${_SESSION}
}

perm_user_edirectory(){
    [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
    _PATH="${EDIR11_ROOT%/edirectory}"
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME

    echo -e "[+] Alterando dono do diretório ${EDIR11_ROOT}"

    if [ "${_PLESK}" == 1 ]; then
      chown -R ${PROJNAME}:psaserv "${EDIR11_ROOT}" 2> /dev/null
      chown -R ${PROJNAME}:psaserv "${_PATH}/public_html" 2> /dev/null

    else
      chown -R ${PROJNAME}:${PROJNAME} "/home/${PROJNAME}/public_html" 2> /dev/null

    fi

    echo -e "[+] Alterando dono do link ${EDIR11_ROOT}"
    chown -R ${PROJNAME}:${PROJNAME} "${EDIR11_ROOT}"

    echo -e "[+] Alterando permissão de diretórios para 755 em ${EDIR11_ROOT}"
    find ${EDIR11_ROOT} -type d -exec chmod 755 {} \;

    echo -e "[+] Alterando permissão de arquivos para 644 em ${EDIR11_ROOT}"
    find ${EDIR11_ROOT} -type f -exec chmod 644 {} \;

    chmod +x "${EDIR11_ROOT}/web/bin/linux32bits/reg.bin"
}
perm_user_edirectory2(){
    [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
    _PATH="${EDIR11_ROOT%/edirectory}"
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME
    _GROUP="apache"

    echo -e "[+] Alterando dono e grupo do diretório ${_PATH}"
    chown -R ${PROJNAME}:${_GROUP} "${_PATH}" 2> /dev/null

    echo -e "[+] Alterando permissão para 775 em ${_PATH}"
    chmod -R 775 ${_PATH}
}

linkar_web_public_html(){
    [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME

    runuser -l $PROJNAME  -c "cd /home/$PROJNAME/ ; ln -s $EDIR11_ROOT/web /home/$PROJNAME/public_html"
}

gerar_symlink(){
    [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
    [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME

    runuser -l $PROJNAME  -c "cd /home/$PROJNAME/edirectory/ ; php /home/$PROJNAME/edirectory/app/console assets:install --symlink web --env=prod"
    [ "$?" != 0 ] && ${EDIR11_ROOT}/app/console assets:install --symlink web --env=prod
}

adicionar_crons(){
        [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
        [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME

        echo -e "0,20,40 * * * * php -f ${EDIR11_ROOT}/web/cron/email_traffic.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
0,20,40 * * * * php -f ${EDIR11_ROOT}/web/cron/renewal_reminder.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
10,30,50 * * * * php -f ${EDIR11_ROOT}/web/cron/randomizer.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
10,30,50 * * * * php -f ${EDIR11_ROOT}/web/cron/count_locations.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
0 */3 * * * php -f ${EDIR11_ROOT}/web/cron/daily_maintenance.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
5 0 * * * php -f ${EDIR11_ROOT}/web/cron/report_rollup.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
5 0 * * * php -f ${EDIR11_ROOT}/web/cron/statisticreport.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
0 20 * * * php -f ${EDIR11_ROOT}/web/cron/sitemap.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
*/5 * * * * php -f ${EDIR11_ROOT}/web/cron/export_listings.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
*/5 * * * * php -f ${EDIR11_ROOT}/web/cron/export_events.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
*/5 * * * * php -f ${EDIR11_ROOT}/web/cron/export_mailapp.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
*/5 * * * * php -f ${EDIR11_ROOT}/web/cron/import.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
*/5 * * * * php -f ${EDIR11_ROOT}/web/cron/import_events.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
*/10 * * * * php -f ${EDIR11_ROOT}/web/cron/prepare_import.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
*/10 * * * * php -f ${EDIR11_ROOT}/web/cron/prepare_import_events.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
*/10 * * * * php -f ${EDIR11_ROOT}/web/cron/rollback_import.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log
*/10 * * * * php -f ${EDIR11_ROOT}/web/cron/rollback_import_events.php 1>&2 >> ${EDIR11_ROOT}/web/cron/cron.log" >> /var/spool/cron/root
}

menu_fresh_install_centos7(){
	echo -ne "Informe o usuário do sistema     : " && read _USER && PROJNAME="${_USER}"
	echo -ne "Informe o usuário para o MySQL   : " && read DB_USER
	echo -ne "Informe a senha para o MySQL     : " && read DB_PASS
	echo -ne "Informe o dominio principal      : " && read PROJDOMAIN1 && novo_dominio="${PROJDOMAIN1}"

	_PATH_VHOSTS="/etc/httpd/conf.d"
	LOCALE="en_us"
	BRANDED="off"
	IP_DB_HOST="localhost"
  EDIR_VERSION_CURRENT="11.1.03"
  EDIR_VERSION="${EDIR_VERSION_CURRENT}"
}

reinicializar_servicos(){
	# Reinicializar serviços
	service httpd restart
	service mysql restart
	service elasticsearch restart
	}

desabilitar_multi_views(){
	sed -i 's/Options -MultiViews/#Options -MultiViews/g' ${EDIR11_ROOT}/web/.htaccess
}

fresh_install_centos7_digitalocean(){
  FRESH_INSTALL_CENTOS7='1'
  export PASS_ARCAFILES="AV252fo5PJ"
  CSF='y'
  root_pass='n'

	# Menu para obter informações
	menu_fresh_install_centos7

	# Atualizar o servidor
	atualizar_centos

	# Instalar ferramentas de desenvolvimento
	instalar_ferramentas_dev

	# Instalar ferramentas essenciais
	instalar_ferramentas_essenciais

	# Adicionar repositorios extras
	add_repo_epel_centos7
	add_repo_mariadb10_centos7
	add_repo_elasticsearch234_centos

	# Instalar Apache MySQL PHP e ElasticSearch
	instalar_apache24_centos
	instalar_php_com_modulos_centos
	instalar_mariadb10_centos
	instalar_elasticsearch234_centos

	# Configurar PHP
	php_habilitar_short_open_tag
	php_ajustar_timezone
	esconder_erros_php

	# Configurar Apache
	mudar_usuario_apache

	# Configurar Server
	configurar_ssh_centos7
	instalar_csf

	# Criar database para dominio principal
	criar_novo_usuario_mysql
	criar_novas_databases_fresh_install
	importar_empty_main
	importar_empty_domain

	# Criar vhost
	apache_adicionar_vhost_apache24

	# Realizar instalacao do edirectory
	instalar_edirectory2

	perm_user_edirectory
  remover_cache_edirectory
}

instalar_edirectory(){
  export PASS_ARCAFILES="AV252fo5PJ"
	#Fazer verificacoes aqui...
	criar_novo_usuario_mysql
	criar_novas_databases_fresh_install
	importar_empty_main
	importar_empty_domain
	baixar_pacote
	forneca_dados_main
	gerar_yml_novo_domain
	alterar_domain_yml_primeira_vez
	alterar_parameters_yml_primeira_vez
	alterar_web_conf_primeira_vez
	alterar_domain_inc_primeira_vez
	#perm_777_session_php
	perm_user_edirectory
	linkar_web_public_html
	reinicializar_servicos
	gerar_symlink
	recriar_indice
	adicionar_crons
	# Restartar httpd
	# Comentar Options -MultiViews no .htaccess
	# Em alguns casos, adicionar localhost para 127.0.0.1
}

instalar_edirectory2(){
  export PASS_ARCAFILES="AV252fo5PJ"
	#Fazer verificacoes aqui...
	baixar_pacote
	forneca_dados_main
	gerar_yml_novo_domain
	alterar_domain_yml_primeira_vez
	alterar_parameters_yml_primeira_vez
	alterar_web_conf_primeira_vez
	alterar_domain_inc_primeira_vez
	perm_777_session_php
	perm_user_edirectory
	linkar_web_public_html
	reinicializar_servicos
	gerar_symlink
	service elasticsearch restart 2> /dev/null
	adicionar_crons
	desabilitar_multi_views
  perm_user_edirectory
  recriar_indice
	# Restartar httpd
	# Comentar Options -MultiViews no .htaccess
	# Em alguns casos, adicionar localhost para 127.0.0.1
}

instalar_edirectory_plesk(){
  export PASS_ARCAFILES="AV252fo5PJ"
  export _PLESK=1
  formulario_instalacao_edirectory
  baixar_pacote2
  gerar_yml_novo_domain
  alterar_domain_yml_primeira_vez
  alterar_parameters_yml_primeira_vez
  alterar_web_conf_primeira_vez
  alterar_domain_inc_primeira_vez
  perm_user_edirectory
  linkar_web_public_html
  gerar_symlink
  adicionar_crons
  desabilitar_multi_views
  recriar_indice
  perm_user_edirectory
  }

  instalar_digitalocean_img(){
  export PASS_ARCAFILES="AV252fo5PJ"
  #Fazer verificacoes aqui...
  menu_fresh_install_centos7
  criar_novo_usuario_mysql
  criar_novas_databases_fresh_install
  importar_empty_main
  importar_empty_domain
  baixar_pacote
  forneca_dados_main
  gerar_yml_novo_domain
  alterar_domain_yml_primeira_vez
  alterar_parameters_yml_primeira_vez
  alterar_web_conf_primeira_vez
  alterar_domain_inc_primeira_vez
  apache_adicionar_vhost_apache24
  perm_user_edirectory2
  linkar_web_public_html
  reinicializar_servicos
  gerar_symlink
  remover_cache_edirectory
  recriar_indice
  adicionar_crons
  desabilitar_multi_views
  perm_user_edirectory2
  # Restartar httpd
  # Comentar Options -MultiViews no .htaccess
  # Em alguns casos, adicionar localhost para 127.0.0.1
}

install_ssl_centos7(){
	### NÃO ESTÁ FUNCIONANDO!
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	[ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME
	[ -z "${PROJDOMAIN1}" ] && read -p "Informe o dominio: " PROJDOMAIN1

	cd $EDIR11_ROOT
	wget https://github.com/certbot/certbot/archive/master.zip
	unzip master.zip
	cd certbot-master
	./letsencrypt-auto --text --agree-tos --email infra@arcasolutions.com certonly --renew-by-default --webroot --webroot-path /home/${PROJNAME}/edirectory  -d ${PROJDOMAIN1} -d www.${PROJDOMAIN1}

}

exportar_dados_edir11(){
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	[ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME

	carregar_info_proj

	unset EDIR11_ROOT
	unset PROJNAME
	}

_set_branded_off(){
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	[ -z "$novo_id" ] && read -p "Informe o ID: " novo_id

	sed -i 's/define("BRANDED_PRINT", "on");/define("BRANDED_PRINT", "off");/' ${EDIR11_ROOT}/web/custom/domain_${novo_id}/conf/constants.inc.php
}

checar_usuario_root(){
	USER=$(whoami)
	if [ $USER = "root" ] ;then
	    export USER_IS_ROOT=1
	else
	    export USER_IS_ROOT=0
	fi
}

criar_bd(){
    [ -z "${TMP_DIR}" ] && read -p "Variável TMP_DIR não definida."
    [ -z "${DOMAIN_INC}" ] && read -p "Variável DOMAIN_INC não definida."
    [ -z "${DB_USER}" ] && read -p "Variável DB_USER não definida."
    [ -z "${DB_PASS}" ] && read -p "Variável DB_PASS não definida."
    [ -z "${DB_MAIN}" ] && read -p "Variável DB_MAIN não definida."

    # Remove pasta temporária, caso exista e cria novamente
	    [ -n "${TMP_DIR}" ] && rm -rf $TMP_DIR
		[ "$?" != 0 ] && echo "Problema ao deletar diretório ${TMP_DIR}." && return 1
		[ ! -d "$TMP_DIR" ] && mkdir $TMP_DIR

    # Cria arquivo domains.txt limpo
        DOMAINS="$TMP_DIR/domains.txt"
        [[ ! -f $DOMAINS ]] && touch $DOMAINS

    # Cria arquivo db_domains.txt limpo
        DB_DOMAINS="$TMP_DIR/db_domains.txt"
        [[ ! -f $DB_DOMAINS ]] && touch $DB_DOMAINS

    # Alimenta arquivo domains.txt
        echo -e "Verificando dominios..."
        sed -i s/\'/\"/g $DOMAIN_INC
        grep -E "domainInfo\[" $DOMAIN_INC | cut -f2 -d '"' > $DOMAINS
        echo -e "Dominios encontrados:\n"
        cat -n $DOMAINS

    # Alimenta arquivo db_domains.txt
        echo -e "\nVerificando databases dos dominios..."
        mysql -u"$DB_USER" -p"$DB_PASS" -e "use $DB_MAIN ; \
        select database_name from Domain;" | grep "domain" > $DB_DOMAINS
        echo -e "Databases encontradas:\n"
        cat -n $DB_DOMAINS
        echo ""

    # Alimenta o arquivo domains_staging.txt
        DOMAIN1=$(head -1 $DOMAINS)
        DB_DOMAIN1=$(head -1 $DB_DOMAINS)

        DOMAINS_STAGING="$TMP_DIR/domains_staging.txt"

        cp -f $DOMAINS $DOMAINS_STAGING
        for i in $(cat $DOMAINS)
           do
           sed -i "s/$i/$i-v11.arcastaging.com/g" $DOMAINS_STAGING
        done

        [[ ! -f $DOMAINS_STAGING ]] && echo -e "Problema, arquivo $DOMAINS_STAGING nao encontrado."

    # Cria o arquivo bd.txt vazio
        BD_TXT="$TMP_DIR/bd.txt"
        [[ -f $BD_TXT ]] && cat /dev/null > $BD_TXT
        [[ ! -f $BD_TXT ]] && touch $BD_TXT

    # Alimenta o arquivo bd.txt
        num_domain=$(cat $DOMAINS | wc -l)
        c=0

        for i in $(seq 1 $num_domain);
        do
            c=$((c+1))
        echo -e "$c:$(cat -n $DOMAINS | sed 's/[\ ]//g' | grep "^$i" | awk '{print $2}'):\
    $(cat -n $DOMAINS_STAGING | sed 's/[\ ]//g' | grep "^$i" | awk '{print $2}'):\
    $(cat -n $DB_DOMAINS | sed "s/^\ .* $i/$i/g" | grep "^$i" | awk '{print $2}')" >> $BD_TXT
        done
    	echo -e "Base de dados criada com sucesso."
    	cat $BD_TXT
    }

alterar_dominio(){
	checar_usuario_root
	carregar_info_proj
	[ ! -f "${BD_TXT}" ] && criar_bd

	DIR_DOMAINS="${EDIR11_ROOT}/app/config/domains"
	cd ${DIR_DOMAINS}

	unset dominio

	for dominio in $(cat ${BD_TXT} | cut -d: -f2); do
		echo -e "Informe o novo dominio para \"${dominio}\" : "
		read novodominio

		sed -i "s/${dominio}/${novodominio}/g" ${DOMAIN_INC} && echo -e "domain.inc.php - ok"
		sed -i "s/${dominio}/${novodominio}/g" ${DOMAIN_YML} && echo -e "domain.yml - ok"

		query="update Domain set name='${novodominio}', url='${novodominio}' where url='${dominio}';"
		mysql -u${DB_USER} -p${DB_PASS} ${DB_MAIN} -e "${query}"
	    [ "$?" == 0 ] && echo -e "table Domain - ok"

		mv ${DIR_DOMAINS}/${dominio}.configs.yml ${DIR_DOMAINS}/${novodominio}.configs.yml
		[ "$?" == 0 ]&& echo -e "${novodominio}.configs.yml - ok"
		mv ${DIR_DOMAINS}/${dominio}.payment.yml ${DIR_DOMAINS}/${novodominio}.payment.yml
		[ "$?" == 0 ]&& echo -e "${novodominio}.payment.yml - ok"
		mv ${DIR_DOMAINS}/${dominio}.route.yml ${DIR_DOMAINS}/${novodominio}.route.yml
		[ "$?" == 0 ]&& echo -e "${novodominio}.route.yml - ok"

	done

	remover_cache_edirectory
	recriar_indice

	echo -e "Ok, tudo pronto.\nNovo dominio: ${novodominio}\n\n"

	}

mostrar_log_edirectory(){
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	data_hoje=$(date +%Y-%m-%d)
	echo -e "[+] Mostrando log do dia ${data_hoje}\n"
  ARQUIVO_PROD_LOG="${EDIR11_ROOT}/app/logs/prod-${data_hoje}.log"
  [ ! -f "${ARQUIVO_PROD_LOG}" ] && echo -e "[*] Sem logs a serem mostrados.  ;-)\n" && return 1
	tail -f ${EDIR11_ROOT}/app/logs/prod-${data_hoje}.log
}

verificar_locale_da_domain1(){
    [ -z "${DB_USER}" ] && read -p "Informe o usuario do MySQL: " DB_USER
    [ -z "${DB_PASS}" ] && read -p "Informe a senha: " DB_PASS
    [ -z "${DB_DOMAIN1}" ] && read -p "Informe o nome do banco domain1: " DB_DOMAIN1

    query_obter_locale="select id from Lang where lang_enabled='y';"
    LOCALE_TMP="$(mysql -u"${DB_USER}" -p"${DB_PASS}" "${DB_DOMAIN1}" -e "${query_obter_locale}")"
    LOCALE="$(echo $LOCALE_TMP | cut -f2 -d " ")"   # Vem no formato pt_br, en_us, etc
    }

exportar_domain1_customizado(){
  # Valida variáveis que serão utilizadas na função.
  [ -z "${DB_USER}" ]   && read -p "Informe o usuario do MySQL: " DB_USER
  [ -z "${DB_PASS}" ]   && read -p "Informe a senha: " DB_PASS
  [ -z "${DB_DOMAIN1}" ]  && read -p "Informe o nome do banco domain1: " DB_DOMAIN1
  [ -z "${TMP_DIR}" ]   && echo -e "Execute carregar_info_proj para continuar" && return 1

  # Verifica se existe o diretório definido em $TMP_DIR
  [ ! -d "${TMP_DIR}" ] && echo -e "${TMP_DIR} não encontrado.\nUtilize carregar_info_proj e criar_bd para continuar." && return 1

  # Exporta somente a estrutura do banco de dados do domínio principal.
  echo -e "[+] Exportando banco de dados do domínio principal..."
  mysqldump -C --no-data -u${DB_USER} -p${DB_PASS} ${DB_DOMAIN1} > ${TMP_DIR}/${DB_DOMAIN1}.sql

  # Define FLAG para verificações futuras.
  [ "$?" != 0 ] && echo -e "[!] Problema na exportação."
  export chk_exportar_domain1_customizado=1 && echo -e "[+] Exportação concluída."
  }

importar_bd_estrutura_domain1(){
  # Valida variáveis que serão utilizadas na função.
  [ -z "${DB_USER}" ]   && read -p "Informe o usuario do MySQL: " DB_USER
  [ -z "${DB_PASS}" ]   && read -p "Informe a senha: " DB_PASS
  [ -z "${DB_DOMAIN1}" ]  && read -p "Informe o nome do banco domain1: " DB_DOMAIN1
  [ -z "${TMP_DIR}" ]   && echo -e "Execute carregar_info_proj para continuar" && return 1
  [ -z "$novo_id" ] && read -p "Informe o id do dominio a ser adicionado: " novo_id
  DB_DOMAINX="${_USER}_domain${novo_id}"
  [ -z "${EDIR_VERSION}" ] && verificar_versao_edirectory

  # Verifica se existe o diretório definido em $TMP_DIR
  [ ! -d "${TMP_DIR}" ] && echo -e "${TMP_DIR} não encontrado." && return 1

  # Verifica se existe o arquivo sql exportado.
  [ ! -f "${TMP_DIR}/${DB_DOMAIN1}.sql" ] && echo -e "Arquivo sql não encontrado." && return 1

  # Verifica se exportação do banco de dados do domínio principal ocorreu com sucesso.
  [ "${chk_exportar_domain1_customizado}" != 1 ] && echo -e "Ocorreu um problema durante a exportação do banco de dados do domínio principal."

  # Inicia a importação da estrutura do domínio principal.
  echo -e "[+] Criando estrutura para o banco ${DB_DOMAINX} ..."
  mysql -u${DB_USER} -p${DB_PASS} ${DB_DOMAINX} < ${TMP_DIR}/${DB_DOMAIN1}.sql 2> /dev/null

  # Verifica se a importação ocorreu com sucesso.
  [ "$?" != 0 ] && echo -e "[!] Problema na importação do arquivo ${TMP_DIR}/${DB_DOMAIN1}.sql."

  # Define FLAG para verificações futuras.
  [ "$?" == 0 ] &&  export chk_importar_bd_estrutura_domain1=1
  echo -e "[+] Estrutura pronta baseada no domínio principal (incluindo customizações)."
  }

update_temporario(){
    wget -qO /tmp/toolkit.sh http://arcafiles.arcasolutions.com/infra/toolkit.sh > /dev/null && . /tmp/toolkit.sh
  }

gerar_senha2(){
    #Generate Password
  Matrix="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
  Size="8"
  while [ "${n:=1}" -le "$Size" ]; do
          PASSMY="$PASSMY${Matrix:$(($RANDOM%${#Matrix})):1}"
          let n+=1
  done
  n=1
  while [ "${n:=1}" -le "$Size" ]; do
          PASSSYS="$PASSSYS${Matrix:$(($RANDOM%${#Matrix})):1}"
          let n+=1
  done
  echo -e "${PASSMY}"
  unset ${PASSMY}
  }

  backup_edirectory(){
    [ -z "$_USER" ] && read -p "Informe o usuario: " _USER
    carregar_info_proj "${_USER}"
    [ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT

    _PATH="${EDIR11_ROOT%/*}"
    _EXPORT_DATABASES="${_PATH}/export_databases"
    data_hoje=$(date +%Y-%m-%d)

    cd ${_PATH}
    [ ! -d "${EDIR11_ROOT}" ] && echo -e "[!] Diretório edirectory não encontrado." && return 1
    [ ! -d "${_EXPORT_DATABASES}" ] && mkdir ${_EXPORT_DATABASES}

    dump_databases
    ARQ_BACKUP="backup-edirectory-${data_hoje}.tar.gz"
    [ -f "${ARQ_BACKUP}" ] && rm -rf "${ARQ_BACKUP}"

    echo -e "[+] Compactando diretório edirectory + databases..."
    if [ -d "edirectory" ]; then
      tar zcf "${ARQ_BACKUP}" edirectory/ export_databases/
    else
      edirectory=$(echo ${EDIR11_ROOT} | sed 's/\//\ /g' | awk '{print $NF}')
      tar zcf "${ARQ_BACKUP}" $edirectory export_databases/
    fi

    [ "$?" == 0 ] && echo -e "[+] Removendo diretório temporário."
    rm -rf "${_EXPORT_DATABASES}"

    echo -e "[+] Arquivo criado: ${ARQ_BACKUP}"
    echo -e "[+] Backup concluído.\n"
    limpar_variaveis
    }

dump_databases(){
  [ -z "$_USER" ] && read -p "Informe o usuario: " _USER && carregar_info_proj "${_USER}"
  [ -z "${DB_USER}" ]   && read -p "Informe o usuario do MySQL: " DB_USER
  [ -z "${DB_PASS}" ]   && read -p "Informe a senha: " DB_PASS

  [ ! -d "${_PATH}/export_databases" ] && echo -e "[!] Diretório export_databases não encontrado." && return 1

  criar_bd

  [ -z "${DB_DOMAIN1}" ]  && read -p "Informe o nome do banco domain1: " DB_DOMAIN1

  echo -e "\n[+] Exportando ${DB_MAIN}..."
  mysqldump -C -u${DB_USER} -p${DB_PASS} ${DB_MAIN} > ${_EXPORT_DATABASES}/${DB_MAIN}.sql

  for domain in $(cat ${DB_DOMAINS}); do
    echo -e "[+] Exportando ${domain}..."
    mysqldump -C -u${DB_USER} -p${DB_PASS} ${domain} > ${_EXPORT_DATABASES}/${domain}.sql
    [ "$?" != 0 ] && echo -e "[!] Problema na exportação." && return 1
  done
  }

exec_mysql(){
  read -p "mysql> " query
  mysql -u$DB_USER -p$DB_PASS $DB_MAIN -e "${query}"
  }

  #TODO - Criar Restore

control_cron_novo_dominio(){
  [ -z "${DB_USER}" ]   && read -p "Informe o usuario do MySQL: " DB_USER
  [ -z "${DB_PASS}" ]   && read -p "Informe a senha: " DB_PASS
  [ -z "$DB_MAIN" ] && read -p "Informe nome do banco main: " DB_MAIN
  [ -z "$novo_id" ] && read -p "Informe o id do dominio a ser adicionado: " novo_id

  query="\
  INSERT INTO Control_Cron (domain_id, running, last_run_date, type) VALUES
  (${novo_id}, 'N', '2013-03-07 16:53:18', 'count_article_category'),
  (${novo_id}, 'N', '2013-03-07 16:53:24', 'count_classified_category'),
  (${novo_id}, 'N', '2013-03-07 16:53:28', 'count_event_category'),
  (${novo_id}, 'N', '2013-03-07 16:51:53', 'count_listing_category'),
  (${novo_id}, 'N', '2013-03-07 16:53:13', 'count_post_tag'),
  (${novo_id}, 'N', '2017-01-02 13:36:29', 'daily_maintenance'),
  (${novo_id}, 'N', '2017-01-02 13:37:07', 'randomizer'),
  (${novo_id}, 'N', '2016-12-08 01:57:00', 'renewal_reminder'),
  (${novo_id}, 'N', '2016-10-25 09:23:57', 'report_rollup'),
  (${novo_id}, 'N', '2016-12-07 23:45:32', 'sitemap'),
  (${novo_id}, 'N', '2016-12-07 23:56:55', 'statisticreport'),
  (${novo_id}, 'N', '2013-06-12 09:33:23', 'location_update'),
  (${novo_id}, 'N', '2016-12-07 23:38:51', 'prepare_import_events'),
  (${novo_id}, 'N', '2016-12-07 23:47:44', 'email_traffic'),
  (${novo_id}, 'N', '2016-12-07 23:33:32', 'rollback_import'),
  (${novo_id}, 'N', '2017-01-12 13:40:02', 'prepare_import'),
  (${novo_id}, 'N', '2016-12-07 23:34:30', 'rollback_import_events'),
  (${novo_id}, 'N', '2016-12-07 23:33:48', 'count_locations');"

  echo -e "[+] Criando registro de crons para novo domínio."
  mysql -u"$DB_USER" -p"$DB_PASS" "$DB_MAIN" -e "${query}" > /dev/null
}

verificar_requisitos(){
  echo -e "[+] Verificando Sistema Operacional..."
  identificar_sistema_operacional
  echo -e "

  ${_SO}"

  verificar_versao_apache
  verificar_versao_php
  verificar_versao_mysql
  verificar_versao_elasticsearch

  if [ "${CENTOS}" == 1 ]; then
    echo -e "
    Versão do Apache\t\t: ${VERSAO_APACHE}
    Versão do PHP\t\t: ${VERSAO_PHP}
    Versão do MySQL\t\t: ${VERSAO_MYSQL}
    Versão do Elasticsearch\t: ${VERSAO_ES}

    Módulos PHP:
    $([ "$(php -m | grep apc)" ] && echo "APC" || echo "APC [não encontrado]")
    "
  fi
}

formulario_instalacao_edirectory(){
  read -p "Usuario do sistema: " _USER && PROJNAME=${_USER}
  read -p "Caminho para instalação: " _PATH
  [ -z "${DB_USER}" ] && read -p "Informe o novo usuario para o MySQL: " DB_USER
  [ -z "${DB_PASS}" ] && read -p "Informe a nova senha para o MySQL: " DB_PASS
  [ -z "${PROJNAME}" ] && read -p "Informe o usuario do sistema: " PROJNAME && _USER=${PROJNAME}
  [ -z "${PROJDOMAIN1}" ] && read -p "Informe o dominio: " PROJDOMAIN1 && novo_dominio=${PROJDOMAIN1}
  [ -z "${LOCALE}" ] && read -p "Informe idioma [en_us|pt_br]: " LOCALE
  [ -z "${BRANDED}" ] && read -p "Informe o Branded [on|off]: " BRANDED
  [ -z "${IP_DB_HOST}" ] && read -p "Informe o ip do MySQL [localhost]: " IP_DB_HOST
  [ "${IP_DB_HOST}" == "" ] && IP_DB_HOST="localhost"
  [ -z "${DB_MAIN_NAME}" ] && read -p "Informe o nome do banco main: " DB_MAIN_NAME
  [ -z "${DB_DOMAIN1}" ] && read -p "Informe o nome do banco domain: " DB_DOMAIN1

  if [[ "${LOCALE}" = "pt_br" ]]; then
          LOCALE_PARAMETERS="pt"
  elif [[ "${LOCALE}" = "en_us" ]]; then
          LOCALE_PARAMETERS="en"
  fi

  #DB_MAIN_NAME=""$PROJNAME"_main"
  #DB_DOMAIN1=""$PROJNAME"_domain1"

  export DB_USER=$DB_USER
  export DB_PASS=$DB_PASS
  export PROJNAME=$PROJNAME
  export PROJDOMAIN1=$PROJDOMAIN1
  export LOCALE=$LOCALE
  export BRANDED=$BRANDED
  export LOCALE_PARAMETERS=$LOCALE_PARAMETERS
  export IP_DB_HOST=$IP_DB_HOST
  export DB_MAIN_NAME=$DB_MAIN_NAME
  export DB_DOMAIN1=$DB_DOMAIN1
}

_set_ssl_off(){
	[ -z "$EDIR11_ROOT" ] && read -p "Caminho do edirectory: " EDIR11_ROOT
	[ -z "$novo_id" ] && read -p "Informe o id do dominio a ser adicionado: " novo_id

	_SSL="${EDIR11_ROOT}/web/custom/domain_${novo_id}/conf/ssl.inc.php"

    	sed -i 's/define("SSL_ENABLED",       "on");/define("SSL_ENABLED",       "off");/' $_SSL
    	sed -i 's/define("FORCE_PROFILE_SSL", "on");/define("FORCE_PROFILE_SSL", "off");/' $_SSL
    	sed -i 's/define("FORCE_MEMBERS_SSL", "on");/define("FORCE_MEMBERS_SSL", "off");/' $_SSL
    	sed -i 's/define("FORCE_ORDER_SSL",   "on");/define("FORCE_ORDER_SSL",   "off");/' $_SSL
    	sed -i 's/define("FORCE_CLAIM_SSL",   "on");/define("FORCE_CLAIM_SSL",   "off");/' $_SSL
    	sed -i 's/define("FORCE_SITEMGR_SSL", "on");/define("FORCE_SITEMGR_SSL", "off");/' $_SSL
	}

new_database_for_cpanel(){

    _USER="$1"
    DB_USER="$2"
    DB_PASS="$3"
    NEW_DB="$4"

    if [[ -z "$_USER" || -z "$DB_USER" || -z "$DB_PASS" || -z "$NEW_DB" ]]; then
            echo -e "Error!"
            echo -e "Syntax: new_database_for_cpanel user db_user db_pass db_name_new"
            return 1
    fi

    mysql -uroot -e "create database ${NEW_DB};" 2> /dev/null
    mysql -uroot -e "grant all privileges on ${NEW_DB}.* to '${DB_USER}'@'localhost' identified by '${DB_PASS}';"
    /usr/local/cpanel/bin/dbmaptool ${_USER} --type mysql --dbs "${NEW_DB}" --dbusers "${DB_USER}"
}

new_domain_to_domain_yml(){

	NEW_DOMAIN="$1"
	NEW_DOMAIN_ID="$2"
	NEW_DOMAIN_DB_NAME="$3"
	LOCALE="$4"
	TITLE="$5"
	BRANDED="$6"
	
	[ -z "${EDIR11_ROOT}" ] && load_project
	[ -z "${LOCALE}" ]	&& LOCALE="en_us"
	[ -z "${TITLE}" ] 	&& TITLE="eDirectory"
	[ -z "${BRANDED}" ]	&& BRANDED="off"
	
    if [[ -z "$NEW_DOMAIN" || -z "$NEW_DOMAIN_ID" || -z "$NEW_DOMAIN_DB_NAME" ]]; then
            echo -e "Error!"
            echo -e "Syntax: new_domain_to_domain_yml new_domain new_domain_id new_domain_db_name"
            return 1
    fi
    
	echo -e "
        ${NEW_DOMAIN}:
            id: ${NEW_DOMAIN_ID}
            path: custom/domain_${NEW_DOMAIN_ID}/
            template: default
            locale: ${LOCALE}
            database: ${NEW_DOMAIN_DB_NAME}
            elastic: ${NEW_DOMAIN_DB_NAME}
            title: ${TITLE}
            branded: ${BRANDED}" >> $EDIR11_ROOT/app/config/domain.yml 
}
	
#FIM
