#!c:\perl\bin\perl
###################################################
#  RAID utility CGI Program                       # 
#       SAN Project                               # 
#                 Copy right. 2006  Hitachi.Lmt.  # 
###################################################
#
# History  :Version          :DATE        : Coder       :Patch No.
#          :50-09-00/00-05   :2006.09.14  :T.Harada     :USSO2227412
#          :50-09-00/00-05   :2006.10.26  :T.Harada     :USSO2227467
#          :50-09-00/00-09   :2006.11.22  :T.Harada     :USSO2227487
#
#
#
# subroutine name  :MakeOneTimeKey()
# filename         :GetKey
# 
# Augument ()
#
# Document
# 
#
#

#requirepɃJgfBNgړ #
chdir("..");

require 'logoutput.cgi';
require 'MakeMessage.cgi';
require 'sceDefine.cgi';
require 'sceDefine.cgi';


&MakeOneTimeKey();

exit(0);

##============================================================================#
## Name    : MakeOneTimeKey()                                                 #
## Func    : OneTimeKey̔ssAZbVIuWFNgւ̗vsB   #
## Param   : Ȃ                                                             #
##                                                                            #
## Return  : Ȃ                                                             #
## Remarks : L̏HTTPX|XƂĕԂB                           #
##              OK : <Header> Content-Type: text/plain   <Body> OneTimeKey  #
##              NG : <Header> Status: 404 Not Found                         #
##----------------------------------------------------------------------------#
## Date    : rev.00 : 2006.09.14 : T.Harada   : USSO2227412 : VK쐬        #
## Date    : rev.01 : 2006.10.26 : T.Harada   : USSO2227467 : čO        #
## Date    : rev.02 : 2006.11.21 : T.Harada   : USSO2227487 : HTTPsΉ    #
##============================================================================#
sub MakeOneTimeKey(){
	

	#ϐ̐ݒ #
	my $SysTime = "";
	my $Time = "";
	my $TempMsec = "";
	my $Msec = "";
	my $LocalTime = "";
	my $RandomTime = "";
	my $OneTimeKey = "";
	my $HashOneTimeKey = "";
	my $MessageRtn = "";
	my $JavaRtn = "";
	my $MsecTimeLength = "";
	my $RandCnt;
	my $HostName = "";
	
	#萔󂯎 #
	my $MaxRandomLength = &MAX_RANDOMLENGTH;
	my $MaxMsecTimeLength =&MAX_MSECTIMELENGTH;
    my $JarFileName=&JARFILENAME;

	#G[O #
	my $FileName = "log/SSOCGIError.log";
	my $OutputStrHeader = "***SSOCGIErrorLOG***";
	my $FunctionName = "MakeOneTimeKey";
	my $OutputStr = "";
	my $LapLine = "";
	my $HaxLength = "";
	my $error_id1 = "";
	my $error_id2 = "";
	
	#W[ݒ #
	use Time::HiRes;
	

	#CPŨ[J^C擾 #
	$SysTime = Time::HiRes::time;

	#[J^C擾 #
	if($SysTime eq ""){
		#~b擾s #
		$MessageRtn = MakeMessage(30);
		$OutputStr = "FunctionName=$FunctionName,Error=$MessageRtn,SysTime=$SysTime";
		logoutput($FileName,$OutputStrHeader,$OutputStr,$LapLine,$HaxLength);
		#HTTPX|Xo #
#		print "Content-type: text/html\n"; # USSO2227487 for HTTP illegal protocol #
		print "Status: 404 Not Found\n"; 
		print "Content-type: text/html"; # USSO2227487 for HTTP illegal protocol #
		print "\n\n";
		return;
	}

	#~b̐؂o #
	($Time,$TempMsec) = split(/\./, $SysTime);

	#~b̐` #
	if($TempMsec ne ""){
		$Msec = substr($TempMsec,0,3);
	}

	#~b̒mF #
	$MsecTimeLength = length($Msec);

	#~b̒`FbN #
	if($MaxMsecTimeLength > $MsecTimeLength){
		#~b̒KZ #
		#~b̒Klɂ #
		for(($MsecTimeLength+1) .. $MaxMsecTimeLength){
			$Msec = $Msec."0";
		}
	}

	#[J^C̐` #
	$LocalTime = $Time.$Msec;

	#쐬4sƂ40̗쐬 #
	for($RandCnt = 0 ; $RandCnt < 4 ; $RandCnt++){
		#̐` #
		$RandomTime = $RandomTime.int(rand($LocalTime));
	}
	#̒mF #
	if($MaxRandomLength < length($RandomTime)){
		#̒K蒷 #
		#̒Klɂ #
		$RandomTime = substr($RandomTime,0,$MaxRandomLength);
	}
	#OneTimeKey̍쐬 #
	$OneTimeKey = $LocalTime."_".$RandomTime;

	#OneTimeKeynbV #
	$HashOneTimeKey = `java MD "SSODIGEST" $OneTimeKey`;

	#zXg擾  USSO2227467#
    $HostName = $ENV{'REMOTE_ADDR'};

	#OneTimeKey̓o^  USSO2227467#
	$JavaRtn = `java -classpath $JarFileName;. sanproject.serverex.data.CallSetSSOKey $OneTimeKey $HashOneTimeKey $HostName`;

	#OneTimeKey̓o^ #
	if($JavaRtn =~ /^NG/){
		#OneTimeKey̓o^s #
		$MessageRtn = MakeMessage(31);
		$OutputStr = "FunctionName=$FunctionName,Error=$MessageRtn,OneTimeKey=$OneTimeKey";
		logoutput($FileName,$OutputStrHeader,$OutputStr,$LapLine,$HaxLength);
		#HTTPX|Xo #
#		print "Content-type: text/html\n"; # USSO2227487 for HTTP illegal protocol #
		print "Status: 404 Not Found\n";
		print "Content-type: text/html"; # USSO2227487 for HTTP illegal protocol #
		print "\n\n";
		return;
	}

	#HTTPX|XOneTimeKeyԋp #
		#HTTPX|Xo #
#		print "Content-type: text/html\n"; # USSO2227487 for HTTP illegal protocol #
		print "Content-type: text/plain"; # USSO2227487 for HTTP illegal protocol #
		print "\n\n";
		print "$OneTimeKey";

		return;
}