@echo off

REM  Hitachi SVP                                
REM  Apache Install tool for Hitachi SVP 
REM       All Rights Reserved, Copyright (C) 2013-2020,Hitachi, Ltd.
REM
REM History  :Version    :DATE        : Coder        : Patch No
REM Hitachi SVP  
REM          :01-00      :2013.04.09  :
REM          :01-01      :2014.08.01  : S.Moriya     : Y8592222338 (Apache2.4.10 is supported) 
REM          :01-02      :2015.05.27  : S.Moriya     : Y8012223001 (Apache2.4.12 is supported) 
REM          :01-03      :2016.10.04  : S.Moriya     : #14769 
REM          :01-04      :2017.05.30  : S.Moriya	 : #28205 (check SVP Version)
REM          :01-05      :2018.02.16  : Y.Kumagai    : #44854 (Remote Micro Exchange Support)
REM          :01-06      :2018.10.03  : S.Moriya    : #59383 (Apache2.4.34 is supported)
REM          :01-07      :2018.12.20  : y.Imamura    : B#65352 (check xcopy result)
REM          :01-08      :2019.05.29  : S.Moriya     : #76764
REM          :01-09      :2019.08.20  : J.Okuno      : #82714 (Apache2.4.39 is supported)
REM          :01-10      :2020.03.12  : S.Moriya     : #98565 (Apache2.4.41 is supported) 
REM
REM Document
REM Apache2.4.41 Stand Alone Installer
REM
REM 

set LOGFILE="C:\Error.txt"

echo ----- >> %LOGFILE% 2>>&1
echo # Start Program >> %LOGFILE% 2>>&1
echo %date%-%time% >> %LOGFILE% 2>>&1
echo ----- >> %LOGFILE% 2>>&1

set flag="C:\DKC200\TMP\Apache_TMP\certificate_bak\NG_flg"
set certificate_bak=C:\DKC200\TMP\Apache_TMP\certificate_bak
set CNT=1

REM Version confirmation starts

SETLOCAL enabledelayedexpansion

set LOGFILE="C:\error.txt"
set PCINF=C:\DKC200\mp\pc\pc.inf
REM Get OSS version
set VERSIONFILE=%~dp0Version.txt
REM set INSTALLEDCHECK=BkSurve.exe

REM check BkSurve.exe
REM tasklist  | find /I "%INSTALLEDCHECK%">NUL
REM if %ERRORLEVEL%==1 (
REM 	echo Info: SVP program has not been installed.
REM 	echo Info: SVP program has not been installed. >> %LOGFILE% 2>>&1
REM  	goto NotInstalled
REM  )

REM Get SVP Version
if EXIST %PCINF% (
	for /f "delims=" %%a in (%PCINF%) do (
    	set SVPVersion=%%a
	)
) else (
	goto SVPError
)
REM delete the blank
set SVPVersion=%SVPVersion: =%

REM Get SVP Version of OSS
if EXIST %VERSIONFILE% (
	for /f "delims=" %%a in (%VERSIONFILE%) do (
    	set OSSVersion=%%a
	)
) else (
	goto OSSMediaError
)
REM delete the blank
set OSSVersion=%OSSVersion: =%

REM divide it into Major version and Minor version
set MODELDLIM=2
set VERSIONDLIM=2
set SVPVersion_Model=!SVPVersion:~0,%MODELDLIM%!
set OSSVersion_Model=!OSSVersion:~0,%MODELDLIM%!

set SVPVersion_Tmp=!SVPVersion:~%MODELDLIM%!
set OSSVersion_Tmp=!OSSVersion:~%MODELDLIM%!
set SVPVersion_Major=!SVPVersion_Tmp:~0,%VERSIONDLIM%!
set SVPVersion_Minor=!SVPVersion_Tmp:~%VERSIONDLIM%!
set OSSVersion_Major=!OSSVersion_Tmp:~0,%VERSIONDLIM%!
set OSSVersion_Minor=!OSSVersion_Tmp:~%VERSIONDLIM%!

REM Model check
if %SVPVersion_Model%==75 (
	set SVPVersion_Model=73
)

if not %SVPVersion_Model%==%OSSVersion_Model% (
	goto ModelError
)

if %SVPVersion_Major% gtr %OSSVersion_Major% (
	goto NormalEnd
) else if %SVPVersion_Major% lss %OSSVersion_Major% (
	goto VersionError
) else (
	if %SVPVersion_Minor% geq %OSSVersion_Minor% (
		goto NormalEnd
	) else (
		goto VersionError
	)
)

:NormalEnd
echo Correct Version
echo Correct Version >> %LOGFILE% 2>>&1

REM :NotInstalled

REM Version confirmation is completed

REM Install the VC++Runtime.
set RUNTIME_INST_BAT="%~dp0..\vc_runtime\install_vc_runtime.bat"

call %RUNTIME_INST_BAT%
if not %errorlevel%==0 (
	goto :error
)

ECHO Stop Apache Service
REM pushd "C:\Program Files\Apache Group\Apache2\bin"
IF not EXIST "C:\Program Files\Apache Group\Apache2\bin\httpd.exe" goto SKIP_STOP
cd "C:\Program Files\Apache Group\Apache2\bin"
httpd.exe -k stop 2>"c:\Error.txt"
taskkill /F /IM "httpd.exe" 2>>"C:\Error.txt"
taskkill /F /IM "rotatelogs.exe" 2>>"C:\Error.txt"
httpd.exe -k uninstall 
:SKIP_STOP


IF EXIST "C:\Program Files\Apache Group\Apache2\conf\httpd.conf" del "c:\Program Files\Apache Group\Apache2\conf\httpd.conf"

ECHO Install (Overwrite Files)
IF not EXIST "C:\Program Files\Apache Group\Apache2\" mkdir "C:\Program Files\Apache Group\Apache2\"
pushd %~dp0
xcopy /E /R /Q /Y /H "Apache24" "C:\Program Files\Apache Group\Apache2" 2>>"C:\Error.txt"
if not %errorlevel%==0 (
	set XcopyError_errorlevel=%errorlevel%
	goto :XcopyError
)

REM ECHO .

REM xcopy /E /Y %~dp0\conf "c:\Program Files\Apache Group\Apache2\conf"

ECHO Start Apache Service
pushd "C:\Program Files\Apache Group\Apache2\bin"
REM cd "C:\Program Files\Apache Group\Apache2\bin"
httpd.exe -k install 2>>"C:\Error.txt"
REM httpd.exe -k start 2>>"C:\Error.txt"

ECHO Add Registry key and value
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Apache\2.4.41" /v ServerRoot /t REG_SZ /d "C:\Program Files\Apache Group\Apache2" /f
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Apache\2.4.41" /v Shared /t REG_DWORD /d 1 /f

pushd %~dp0
REM perl "conf\src\check_ApacheConf.pl" "C:\Error.txt"

IF NOT EXIST "%certificate_bak%\fingerprint.txt" (
	echo  "%certificate_bak%\fingerprint.txt" does not exist >> %LOGFILE% 2>>&1
	goto :NOTFINGERPRINT
)

IF NOT EXIST "%certificate_bak%\server.crt" (
	echo "%certificate_bak%\server.crt" does not exist >> %LOGFILE% 2>>&1
	goto :NOTFINGERPRINT
)

IF NOT EXIST "%certificate_bak%\server.key" (
	echo "%certificate_bak%\server.key" does not exist >> %LOGFILE% 2>>&1
	goto :NOTFINGERPRINT
)

:FINGERPRINT_COUNT
  REM "fingerprint\fingerprint_%CNT%.txt"のファイルが存在するかチェックする。
  echo [fingerprint Count=%CNT%.] >> %LOGFILE% 2>>&1
  IF NOT EXIST "fingerprint\fingerprint_%CNT%.txt" ( 
    	echo fingerprint_%CNT%.txt does not exist >> %LOGFILE% 2>>&1
  	goto :COUNT_END
  ) 
		REM fingerprint_%CNT%.txtとfingerprint.txtが一致するかをチェックする。
  	    REM 一致した場合、証明書の差し替えを実施しない。
  	    REM ファイルをASCIIテキストとして比較する
  	    REM fc /C /U fingerprint\fingerprint_%CNT%.txt %certificate_bak%\fingerprint.txt >> %LOGFILE% 2>>&1
  	    fc /C fingerprint\fingerprint_%CNT%.txt %certificate_bak%\fingerprint.txt >> %LOGFILE% 2>>&1
		echo errorlevel:%errorlevel% >> %LOGFILE% 2>>&1
  	    if %errorlevel%==0 (
    	echo fingerprint_%CNT%=%certificate_bak%\fingerprint.txt >> %LOGFILE% 2>>&1
  	    goto :NOTFINGERPRINT
		) else ( 
  	    	echo fingerprint_%CNT%!=%certificate_bak%\fingerprint.txt >> %LOGFILE% 2>>&1
		  	SET /A CNT=CNT+1
    		goto :FINGERPRINT_COUNT
		) 

  	
:COUNT_END

REM %certificate_bak%\server.crtファイル削除
IF EXIST "C:\Program Files\Apache Group\Apache2\conf\ssl.crt\server.crt" del /S /Q "C:\Program Files\Apache Group\Apache2\conf\ssl.crt\server.crt" >> %LOGFILE% 2>>&1
IF EXIST "C:\Program Files\Apache Group\Apache2\conf\ssl.crt\server.crt" (
	echo Error:delete "C:\Program Files\Apache Group\Apache2\conf\ssl.crt\server.crt"  >> %LOGFILE% 2>>&1
   goto :error
)


REM %certificate_bak%\server.keyファイル削除
IF EXIST "C:\Program Files\Apache Group\Apache2\conf\ssl.key\server.key" del /S /Q "C:\Program Files\Apache Group\Apache2\conf\ssl.key\server.key" >> %LOGFILE% 2>>&1
IF EXIST "C:\Program Files\Apache Group\Apache2\conf\ssl.key\server.key" (
	echo Error:delete "C:\Program Files\Apache Group\Apache2\conf\ssl.key\server.key"  >> %LOGFILE% 2>>&1
   goto :error
)


REM %certificate_bak%\server.crtファイルコピー
xcopy /E /R /Q /Y /H "%certificate_bak%\server.crt" "C:\Program Files\Apache Group\Apache2\conf\ssl.crt" >> %LOGFILE% 2>>&1
IF NOT EXIST "C:\Program Files\Apache Group\Apache2\conf\ssl.crt\server.crt" (
	echo Error:copy "server.crt"  >> %LOGFILE% 2>>&1
   goto :error
)


REM %certificate_bak%\server.keyファイルコピー
xcopy /E /R /Q /Y /H "%certificate_bak%\server.key" "C:\Program Files\Apache Group\Apache2\conf\ssl.key" >> %LOGFILE% 2>>&1
IF NOT EXIST "C:\Program Files\Apache Group\Apache2\conf\ssl.key\server.key" (
	echo Error:copy "server.key"  >> %LOGFILE% 2>>&1
   goto :error
)


:NOTFINGERPRINT

REM フラグファイル削除
IF EXIST %flag% del /S /Q %flag% >> %LOGFILE% 2>>&1
IF EXIST %flag% (
	echo Error:delete %flag%  >> %LOGFILE% 2>>&1
   goto :error
)


pushd "C:\Program Files\Apache Group\Apache2\bin"
httpd.exe -k start 2>>"C:\Error.txt"

pushd %~dp0
perl "conf\src\check_ApacheConf.pl" "C:\Error.txt"

ECHO "Please close the command prompt."

exit

:VersionError
set VIEW=8
set SVPVersion_View=!SVPVersion:~0,%VIEW%!
echo Error: Incorrect Version.
echo Error: Incorrect Version. >> %LOGFILE% 2>>&1
echo Install Apache for SVP version %SVPVersion_View%.
echo Install Apache for SVP version %SVPVersion_View%. >> %LOGFILE% 2>>&1
echo SVP Version of OSS is %OSSVersion%. >> %LOGFILE% 2>>&1
pause
exit 2

:SVPError
echo Error: Failed to get SVP version. SVP is abnormal.
echo Error: Failed to get SVP version. SVP is abnormal. >> %LOGFILE% 2>>&1
pause
exit 2

:ModelError
echo Error: Incorrect media.(Model error)
echo Error: Incorrect media.(Model error) >> %LOGFILE% 2>>&1
pause
exit 2


:OSSMediaError
echo Error: Failed to get OSS version. Incorrect OSS Media.
echo Error: Failed to get OSS version. Incorrect OSS Media. >> %LOGFILE% 2>>&1
pause
exit 2

:XcopyError
echo Error: Failed to Install (Overwrite Files). %XcopyError_errorlevel%
echo Error: Failed to Install (Overwrite Files). %XcopyError_errorlevel% >> %LOGFILE% 2>>&1
pause
REM	0xf1 = 241
exit 241

:error
REM フラグファイル作成
echo Error: Failed to Install >> %LOGFILE% 2>>&1
type nul > %flag%
echo create flag >> %LOGFILE% 2>>&1
echo errorlevel:%errorlevel% >> %LOGFILE% 2>>&1
echo Error: Failed to Install
pause

exit 5
