#!/bin/bash
. /etc/sysconfig/cranix
export APP_PATH=/opt/app/svws
export CONF_PATH=/etc/app/svws/conf
export SVWS_VERSION="1.1.1"

zypper -n up cranix-java
zypper -n install unzip tar wget net-tools nmap java-21-openjdk
sed -i 's#^exec java#exec /usr/lib64/jvm/jre-11-openjdk/bin/java#' /opt/cranix-java/bin/start-cranix-api

wget https://github.com/SVWS-NRW/SVWS-Server/releases/download/v${SVWS_VERSION}/linux-installer-${SVWS_VERSION}.tar.gz

tar xf linux-installer-${SVWS_VERSION}.tar.gz

if [[ "$1" == "--update" ]]; then

    if [ -f .env ]; then
         export $(grep -v '^#' .env | xargs)
    fi

    script_dir="$PWD"

    # SVWS laden und auspacken
    echo "Lade SVWS ..."

    # SVWS Dienst stoppen
    echo "stoppe SVWS ..."
    systemctl stop svws

    # SVWS Dateien löschen
    echo "lösche SVWS ..."
    rm -r $APP_PATH/app
    rm -r $APP_PATH/client
    rm -r $APP_PATH/adminclient

    # Entpacke die SVWS-Installationsdatei
    tar xzf ./linux-installer-${SVWS_VERSION}.tar.gz

    # Erstelle Verzeichnisse
    mkdir -p $APP_PATH
    mkdir $APP_PATH/client

    # Kopiere App
    cp -r ./svws/app $APP_PATH

    # Entpacke den Client in das Client-Verzeichnis
    unzip -d $APP_PATH/client $APP_PATH/app/SVWS-Client*.zip

    # Lösche die entpackte Client-Datei
    rm -rf $APP_PATH/app/SVWS-Client*.zip

    # Entpacke den Admin-Client in das Admin-Client-Verzeichnis
    unzip -d $APP_PATH/adminclient $APP_PATH/app/SVWS-Admin-Client*.zip

    # Lösche die entpackte Admin-Client-Datei
    rm -rf $APP_PATH/app/SVWS-Admin-Client*.zip

    # Erstelle einen symbolischen Link zur Konfigurationsdatei
    ln -sf $CONF_PATH/svwsconfig.json $APP_PATH/svwsconfig.json

    cd $script_dir

    # Lösche das Verzeichnis 'svws' im Home-Verzeichnis
    echo "Lösche das Verzeichnis 'svws' im Home-Verzeichnis..."
    rm -r ./svws

    # Lösche das Verzeichnis 'init-scripts' im Home-Verzeichnis
    echo "Lösche das Verzeichnis 'init-scripts' im Home-Verzeichnis..."
    rm -r ./init-scripts

    # Aktualisieren der Systemd-Konfigurationen und Starten des Services
    # Der Service wird automatisch gestartet, sobald das System hochfährt (systemctl enable)
    systemctl start svws.service

    # Überprüfen des Status des Services
    systemctl status svws.service

    exit 1
fi

export APP_PORT=8443
export CITY="Remscheid"


echo -e "\n######################\n"
read -p "Stadt/Ortschaft/Locality (L) default ${CITY}: " INPUT_LOCALITY
if [ "${INPUT_LOCALITY}" ]; then
	export CITY="${INPUT_LOCALITY}"
fi

# Erstelle Verzeichnisse
mkdir -p $APP_PATH
mkdir $APP_PATH/client
mkdir $APP_PATH/adminclient
mkdir $APP_PATH/conf
mkdir -p ${CONF_PATH%/*}

# Kopiere App, Konfigurationen und Zertifikate
cp -r ./svws/app $APP_PATH
cp -r ./svws/conf $CONF_PATH

# Entpacke den Client in das Client-Verzeichnis
unzip -d $APP_PATH/client $APP_PATH/app/SVWS-Client*.zip

# Lösche die entpackte Client-Datei
rm -rf $APP_PATH/app/SVWS-Client*.zip

# Entpacke den Admin-Client in das Admin-Client-Verzeichnis
unzip -d $APP_PATH/adminclient $APP_PATH/app/SVWS-Admin-Client*.zip

# Lösche die entpackte Admin-Client-Datei
rm -rf $APP_PATH/app/SVWS-Admin-Client*.zip

rm -rf /etc/app/svws/conf/keystore
keytool -genkey -noprompt -alias alias1 -validity 1825 -dname "CN=SVWS, OU=Verwaltung, O='${CRANIX_NAME:test}', L='${CITY}', S=NRW, C=DE" -keystore /etc/app/svws/conf/keystore -storepass test123 -keypass test123  -keyalg RSA

LENGTH=12
CHARS="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"

# Passwort generieren
password=$(head /dev/urandom | tr -dc $CHARS | fold -w $LENGTH | head -n 1)

echo "CREATE DATABASE svwsdb COLLATE = 'utf8mb4_bin' " | mysql
echo "GRANT ALL ON svwsdb.* to 'svwsadmin'@'localhost'  identified by '$password'" | mysql
echo "GRANT ALL ON mysql.* to 'svwsadmin'@'localhost'  identified by '$password'" | mysql
echo '{
  "EnableClientProtection" : null,
  "DisableDBRootAccess" : false,
  "DisableAutoUpdates" : false,
  "DisableTLS" : null,
  "PortHTTP" : null,
  "UseHTTPDefaultv11" : false,
  "PortHTTPS" : '$APP_PORT',
  "PortHTTPPrivilegedAccess" : null,
  "UseCORSHeader" : false,
  "TempPath" : "tmp",
  "TLSKeyAlias" : "alias1",
  "TLSKeystorePath" : "/etc/app/svws/conf",
  "TLSKeystorePassword" : "test123",
  "ClientPath" : "./client",
  "AdminClientPath" : "./adminclient",
  "LoggingEnabled" : true,
  "LoggingPath" : "logs",
  "ServerMode" : "stable",
  "PrivilegedDatabaseUser" : null,
  "DBKonfiguration" : {
    "dbms" : "MARIA_DB",
    "location" : "localhost",
    "SchemaKonfiguration" : []
  }
}
' > $CONF_PATH/svwsconfig.json

ln -sf $CONF_PATH/svwsconfig.json $APP_PATH/svwsconfig.json

envsubst < ./svws/svws-template.service >  /etc/systemd/system/svws.service

cat <<EOF > /etc/my.cnf.d/swvs.conf 
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
[client]
default-character-set=utf8mb4
EOF
systemctl restart mariadb.service

/usr/sbin/groupadd -r svws
/usr/sbin/useradd -r -s /bin/false -g svws svws

chown -R svws:svws ${APP_PATH}
chown -R svws:svws ${CONF_PATH}

systemctl daemon-reload
systemctl start svws.service
systemctl enable svws.service
systemctl status svws.service

echo "

!!!!! Der SVWS-Server wurde auf Ihrem CRANIX-Server erfolgreich installiert. !!!!!

Sie können sich nun unter https://$(hostname -f):8443/admin an den SVWS Server anmelden.
Zugangsdaten:   svwsadmin  $password


"
