#!/bin/bash

# Copyright: 2023 Virtuozzo International GmbH

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

# http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.



inherit default os envinfo;
[ -n "$ssl_module_inherit" ] && inherit "$ssl_module_inherit";
include output cartridge-common;

DESCRIPTION="Enables SSL for application stack";
VERSION="1";
DEFAULT_ACTION="Usage";
SSL_CONFIG_DIR="/var/lib/jelastic/SSL";
DEFAULT_DOMAIN="jelastic";

function doUsage() {
    showUsageMessage;
}

[ "x${COMPUTE_TYPE}" == "xcartridge" ] && {
	[ -f "${CARTRIDGE_HOME}/jelastic/jelastic.conf" ] && source "${CARTRIDGE_HOME}/jelastic/jelastic.conf";
};

function doInstall(){
        if [ "x${COMPUTE_TYPE}" ==  "xcartridge" ]
        then
               if [ -f "${CARTRIDGE_HOME}/jelastic/scripts/ssl_manager.sh" ] 
                  then 
                      source "${CARTRIDGE_HOME}/jelastic/scripts/ssl_manager.sh" && $( _enableSSL ) && { writeJSONResponseOut "result=>0" "message=>SSL installed successfully"; return 0; } || { writeJSONResponseErr "result=>4022" "message=>SSL installed with Error!"; return 1; };
                  else 
                      { writeJSONResponseErr "result=>4116" "message=>SSL installation is not implemented"; return 0; }
               fi                                          
        fi
        $(enableSSL) ; sslresult=$?;

   case $sslresult in
	0 )
		writeJSONResponseOut "result=>0" "message=>SSL installed successfully"
	;;
	209 ) 
		writeJSONResponseErr "result=>4009" "message=>Could not detect valid domain for uploaded certificate"
	;;
	210 ) 
		writeJSONResponseErr "result=>4010" "message=>No certificates installed"
	;;
	211 ) 
		writeJSONResponseErr "result=>4011" "message=>Uploaded file isn't a certificate!"
	;;
	212 ) 
		writeJSONResponseErr "result=>4012" "message=>Could not receive certificate!"
	;;
	213 )
		writeJSONResponseErr "result=>4013" "message=>Could not receive CA certificate"
	;;
	214 )
		writeJSONResponseErr "result=>4014" "message=>Certificate does not match key!"
	;;
	215 )
		writeJSONResponseErr "result=>4015" "message=>Uploaded file isn't a private key!"
	;;
	216 ) 
		writeJSONResponseErr "result=>4016" "message=>Could not receive private key!"
	;; 
	217 )
		writeJSONResponseErr "result=>4180" "message=>Uploaded key is encrypted!"
	;;
	147 )
		writeJSONResponseErr "result=>4147" "message=>Certificates not uploaded";
	;; 
	182 )
		writeJSONResponseErr "result=>4182" "Service restart failed";
	;;
	183 )
		writeJSONResponseErr "result=>4183" "Service start failed";
	;;
	184 )
		writeJSONResponseErr "result=>4184" "Service stop failed";
	;;
	185 )
		writeJSONResponseErr "result=>4147" "message=>Service reload failed";
	;;
	220 )
		writeJSONResponseErr "result=>4020" "message=>Cannot enable SSL module!"
	;;
	4 )
		writeJSONResponseErr "result=>4004" "message=>Cannot save user files!"
	;;
	143 )
		writeJSONResponseErr "result=>4143" "message=>Cannot save configuration files!"
	;;
	39 )
		writeJSONResponseErr "result=>4039" "message=>SSL config not found!"
	;;
	* )
		writeJSONResponseErr "result=>4022" "message=>SSL installed with Error!"
	;; 
    esac
return $sslresult 
}



function doRemove(){

        if [ "x${COMPUTE_TYPE}" ==  "xcartridge" ]
        then
               if [ -f "${CARTRIDGE_HOME}/jelastic/scripts/ssl_manager.sh" ] 
                  then 
                      source "${CARTRIDGE_HOME}/jelastic/scripts/ssl_manager.sh" && $( _disableSSL ) && { writeJSONResponseOut "result=>0" "message=>SSL removed successfully"; return 0; } || { writeJSONResponseErr "result=>4023" "message=>SSL removed with Error!"; return 1; };
                  else 
                      { writeJSONResponseErr "result=>4116" "message=>SSL remove is not implemented!"; return 1; }
               fi                                          
        fi

	$(disableSSL)  ; sslresult=$?;
	case $sslresult in
	0)
		writeJSONResponseOut "result=>0" "message=>SSL removed successfully"
	;;
	182 )
		writeJSONResponseErr "result=>4182" "Service restart failed"
	;;
	183 )
		writeJSONResponseErr "result=>4183" "Service start failed"
	;;
	184 )
		writeJSONResponseErr "result=>4184" "Service stop failed"
	;;
	185 )
		writeJSONResponseErr "result=>4147" "message=>Service reload failed"
	;;
	221 )
		writeJSONResponseErr "result=>4021" "message=>Cannot disable SSL module!"
	;;
	4 )
		writeJSONResponseErr "result=>4004" "message=>Cannot save user files!"
	;;
	143 )
		writeJSONResponseErr "result=>4143" "message=>Cannot save configuration files!"
	;;
	39 )
		writeJSONResponseErr "result=>4039" "message=>SSL config not found!"
	;;
	*)
		writeJSONResponseErr "result=>4023" "message=>SSL removed with Error!"
	;;
	esac
	return $sslresult;
}


function doCheckDomain(){
  doAction keystore checkDomain;
}

function describeCheckDomain() {
  echo "Check domain name for uploaded certificate";
}

function describeInstall() {
    echo "Install ssl keys";
}

function describeRemove() {
    echo "Remove ssl keys";
}
