## OpenCA - Command
## (c) 1998-2001 by Massimiliano Pala and OpenCA Group
## (c) Copyright 2002-2004 The OpenCA Project
##
##   File Name: certsList
##//       Brief: build Certificates' listing
##// Description: Build Certificates' listing given the dataType
##  Parameters: dataType, viewFrom, rows

use strict;


sub cmdListCerts {

## Reserved variables
my ( $page, $certData, $sheet );

## We need some parameters to generate the list because of
## we do not want to generate a list of ALL issued certificates
## so get the numer of results we should give away, then the
## starting serial number.
my $from     = $query->param( 'viewFrom' );
my $matched  = $query->param( 'rows' );
my $dataType = $query->param( 'dataType' );
my $status   = $dataType;
$status      =~ s/_.*//;

## Get required parameters ( return only the value string )
my $maxItems = getRequired( 'MaxReturnedItems' );
my $uptime   = $tools->getDate();

my ($item_list, $cmd_panel) = (undef, undef);

my $exp = gettext ("Following you can find the issued certificates list. Use links to view more detailed information about single certificate, if you are looking for one certificate, please use the search facility.");
my $name = i18nGettext ("__STATUS__ Certificate List",
                        "__STATUS__", gettext ($status));

$item_list->{HEAD}->[0] = gettext ("Serial");
$item_list->{HEAD}->[1] = gettext ("Common Name");
$item_list->{HEAD}->[2] = gettext ("Email");
$item_list->{HEAD}->[3] = gettext ("Role");
$item_list->{BODY} = [];

if ( not $matched ) {
	$matched  = $db->elements( DATATYPE=>$dataType );
};

my @certsList = $db->listItems( DATATYPE=>$dataType,
			FROM=>$from, ITEMS=>$maxItems );
if (not @certsList) {
	$cmd_panel->[0] = $query->buildRefs(
			ELEMENTS  => $matched,
			MAXITEMS  => $maxItems,
			FACTOR    => 5,
			MODE      => "EXP",
			NOW_FIRST => 0,
			NOW_LAST  => 0,
			FIRST     => 0,
			LAST      => 0);
} else {
	$cmd_panel->[0] = $query->buildRefs(
			ELEMENTS  => $matched,
			MAXITEMS  => $maxItems,
			FACTOR    => 5,
			MODE      => "EXP",
			NOW_FIRST => $certsList[0]->getSerial($dataType),
			NOW_LAST  => $certsList[scalar (@certsList) -1]->getSerial($dataType),
			FIRST     => libDBGetFirstItem ($dataType)->getSerial($dataType),
			LAST      => libDBGetLastItem ($dataType)->getSerial($dataType));
}

## Process all Files
my $pos = 0;
foreach my $cert ( @certsList ) {

	my ( $format, $key, $type, $ser_col, $check );
	my @vals;
	my $hex;

	$key  = $cert->getSerial($dataType);
	$hex  = " (0x".sprintf("%X",$key).")";
	$type = $dataType;

	$ser_col = "<a class=\"list\" href=\"$self?cmd=viewCert&dataType=$type" .
			"&key=$key\">". $key.$hex .
			"</a>";

        $item_list->{BODY}->[$pos]->[0] = $ser_col;
        $item_list->{BODY}->[$pos]->[1] = ( $cert->getParsed()->{DN_HASH}->{CN}[0] || "<CENTER>---</CENTER>");
        $item_list->{BODY}->[$pos]->[2] = ( $cert->getParsed()->{EMAILADDRESS} || "<CENTER>---</CENTER>");
        $item_list->{BODY}->[$pos]->[3] = ( $cert->getParsed()->{HEADER}->{ROLE} || "<CENTER>".gettext ("n/a")."</CENTER>");
	$pos++;
}

return libSendReply (
                     "NAME"        => $name,
                     "EXPLANATION" => $exp,
                     "ITEM_LIST"   => $item_list,
                     "TIMESTAMP"   => 1,
                     "CMD_PANEL"   => $cmd_panel
                    );
}

1;

