## OpenCA - RAServer Command
## (c) 1998-2001 by Massimiliano Pala and OpenCA Group
##
##   File Name: editCRR
##       Brief: edit CRR
## Description: edit a given pending CRR
##  Parameters: dataType, key

sub cmdEditCRR {

## Get the Configuration parameters ...
my ( $ou, $ouList, $def, $op, $opCert, $info, $opStatus, $dnLabel);
my ( $sigStatus, $signer, $signature, $myCN, $myEmail, @myDnInfo, $subjectAltName );
my ( @opCertList, $reqDataTable, @cols, $opCert, $serLink, $lnk, $sigInfo );
my ( %labels, @values, $role );
my ( $reqStatus, $cmdsPanel, $reqDesc );

my $key      = $query->param('key');

## Required Configuration Key
my $sheetsDir	= getRequired( 'SheetsDir' );
my $includeDir	= getRequired( 'IncludeDir' );
my $txtDir	= getRequired( 'TextDir' );
my $baseDoc;
$baseDoc = getRequired('ViewCRRSheet');

configError (gettext ("Error, needed dB key!")) if ( not $key );

$reqStatus = gettext ("Revocation Request Waiting for Approval");
$cmdsPanel = "$includeDir/editing_crr_cmds.inc";
$reqDesc   = "$txtDir/editing_crr_desc.txt";

if( not ( $page = $query->getFile( $baseDoc )) ) {
	configError (i18nGettext ("Error while loading __FILE__!", "__FILE__", $baseDoc));
};

## Substitute the cmdsPanel, reqStatus and reqDesc
$page = $query->subVar( $page, '@STATUS@', $reqStatus );
$page = $query->subVar( $page, '@REQDESC@', $tools->getFile( "$reqDesc") );
$page = $query->subVar( $page, '@CMDSPANEL@', $tools->getFile("$cmdsPanel") );

my $req = $db->getItem( DATATYPE=>"PENDING_CRR", KEY=>$key );

configError (gettext ("Request not present in DB or the status of the request was changed!")) if ( not $req );

## Get the parsed Request
my $parsed_req = $req->getParsed();
my $head   	= $req->getParsed()->{HEADER};
my $dbKey	= $req->getSerial();

@cols = ( gettext ("Variable"), gettext ("Value"));
$reqDataTable = $query->startTable( COLS=>[ @cols ],
                                        WIDTH=>"100%",
                                        ## BGCOLOR=>"#F1F0F8",
					PADDING=>"2",
					CELLPADDING=>"4",
					TABLE_BGCOLOR=>"#F1F0F8",
                                        TITLE_BGCOLOR=>"#DDCCFF" );

## If the Request is signed
if ( $parsed_req->{TYPE} =~ /with .*? Signature/i ) {

	$lnk = new CGI({cmd=>"viewSignature", dataType=>"PENDING_CRR", key=>$key});
	if( libCheckSignature( OBJECT=>$req ) ) {
		$tmp = $query->img({src=>getRequired ('ValidSigImage'),
					border=>"0", align=>"MIDDLE"});
	} else {
		$tmp = $query->img({-src=>getRequired ('SigErrorImage'),
					-border=>"0", -align=>"MIDDLE"});
	}

	$sigInfo = $lnk->a({-href=>$lnk->self_url()}, $tmp );
	
} else {
	$def = "<FONT COLOR=\"RED\">".gettext ("Not Signed")."</FONT>";
	$parsed_req->{OPERATOR} = $def;
}

my $reason;

$tmp = $parsed_req->{REVOKE_REASON};

$reason = $query->newInput( -regx=>'*',
			-intype=>'textarea',
			-name=>'reason',
			-rows=>6,
			-columns=>35,
			-default=>$tmp);

$tmp = $head->{OPERATOR_DN};
$tmp =~ s/(,|\/)/<br>/g;

@cols = ( gettext ("Variable"), gettext ("Value") );
$reqDataTable = $query->startTable(	COLS=>[ @cols ],
					WIDTH=>"100%",
					BGCOLOR=>"#F1F0F8",
					PADDING=>"2",
					CELLPADDING=>"4",
					TABLE_BGCOLOR=>"#F1F0F8",
					TITLE_BGCOLOR=>"#DDCCFF" );

my $submit;
if ($parsed_req->{SIGNATURE}) {
	## signature-based revocation
	if (my $sig = libGetSignatureObject ( OBJECT => $req )) {
		if (my $cert = libGetSignerCertificateDB( SIGNATURE=> $sig )) {
			$submit = $cert->getParsed()->{DN};
		} else {
			$submit = gettext ("Cannot determine certificate from signature!");
			print STDERR "Cannot determine certificate from signature (CRR: ".$req->getSerial().")\n";
		}
	} else {
		$submit = gettext ("Cannot build object from signature!");
		print STDERR "Cannot build object from signature (CRR: ".$req->getSerial().")\n";
	}
} elsif ($parsed_req->{REVOKE_CERTIFICATE_DN}) {
	## pin-based revocation
	$submit = $parsed_req->{REVOKE_CERTIFICATE_DN};
} else {
	## last chance by strong ssl-authentication
	$submit = $head->{SSL_CERT_DN};
	print STDERR "submitter of CRR not determinable (CRR: $key)\n";
}


$reqDataTable .=$query->addTableLine(DATA=>["<B>".gettext ("Request Version:")."</B>",
		($parsed_req->{VERSION} or gettext ("n/a")) ]);
$reqDataTable .=$query->addTableLine(DATA=>[ "<B>".gettext ("CRR Serial Number:")."</B>",
		($req->getSerial() or gettext ("n/a")).
		"<input type=hidden name=\"crr_serial\" value=\"".
		$req->getSerial().
		"\">" ]);
$reqDataTable .=$query->addTableLine(DATA=>["<B>".gettext ("Request Type:")."</B>",
		($parsed_req->{TYPE} or gettext ("n/a")) ]);
$reqDataTable .=$query->addTableLine(DATA=>["<B>".gettext ("Submission Date:")."</B>",
		($parsed_req->{SUBMIT_DATE} or gettext ("n/a")) ]);
$reqDataTable .=$query->addTableLine(DATA=>["<B>".gettext ("Submitter:")."</B>",
		($submit or gettext ("n/a")) ]);
$reqDataTable .=$query->addTableLine(DATA=>
		[ "<B>".gettext ("Subject:")."</B>", $parsed_req->{REVOKE_CERTIFICATE_DN} ]);
$reqDataTable .=$query->addTableLine(DATA=>
		[ "<B>".gettext ("Reason:")."</B>", $reason ]);
$reqDataTable.=$query->addTableLine(DATA=>
		["<B>".gettext ("Used CRIN:")."</B>",
		($head->{PIN} or gettext ("n/a")) ]);

$reqDataTable .= $query->endTable();

$page = $query->subVar( $page, '@KEY@',     $dbKey );
$page = $query->subVar( $page, '@DATATYPE@',"PENDING_CRR" );
$page = $query->subVar( $page, '@REQDATA@', $reqDataTable );

## View the Signature Logo
$page = $query->subVar( $page, '@SIGINFO@',    $sigInfo );

print "$page";

}

1;
