## OpenCA - RA Server Command
## (c) 1998-2001 by Massimiliano Pala and OpenCA Group
##
##   File Name: searchCert
##       Brief: 
## Description: 
##  Parameters: 

sub cmdSearchCert {

        ##Reseved Variables
        my $doc, $date, $sheet, $myType;

        ## Get the Serial Number
        my $key      = $query->param( 'key' );
        my $dataType = $query->param( 'dataType' );

        my $date  = $tools->getDate();

        my @certDataTypes = ( VALID_CERTIFICATE, EXPIRED_CERTIFICATE,
                              REVOKED_CERTIFICATE );

        if( (not $key) or ( not $dataType ) ) {
                configError( gettext ("Error, missing key and/or dataType params!") );
        }

        if( $cmd =~ /^searchCert/ ) {
                foreach $myType ( @certDataTypes ) {
                        next if( $myType !~ /$dataType/ );

                        if( $db->getItem( DATATYPE=>$myType,KEY=>$key )) {
                                $dataType = $myType;
                        }
                }
        }

             if ( $dataType =~ /^VALID_CERTIFICATE/ ) {
                $status = gettext("Valid");
        } elsif ( $dataType =~ /^EXPIRED_CERTIFICATE/ ) {
                $status = gettext("Expired");
        } elsif ( $dataType =~ /^REVOKED_CERTIFICATE/ ) {
                $status = gettext("Revoked");
        } elsif ( $dataType =~ /^VALID_CA_CERTIFICATE/ ) {
                $status = gettext("Valid");
        } elsif ( $dataType =~ /^EXPIRED_CA_CERTIFICATE/ ) {
                $status = gettext("Expired");
        } else {
                configError( i18nGettext ("DataType not supported (__DATATYPE__)!", "__DATATYPE__", $dataType));
        }

        ## Get Required Param
        if( $dataType =~ /VALID_CERTIFICATE/ ) {
                $sheet    = getRequired( 'ValidCertSheet' );
        } else {
                $sheet    = getRequired( 'ViewCertSheet' );
        }
        my $page  = $query->getFile ( "$sheet" );
        my $cert  = $db->getItem( DATATYPE=>$dataType, KEY=>$key );

        if( not $cert ) {
                configError(gettext ("Error, unable to get cert from dB!"));
        }

        if( $page eq "" ) {
                configError(i18nGettext ("Error, unable load __SHEET__!", "__SHEET__", $sheet));
        }

        my @cols;

        push( @cols, "Variable" );
        push( @cols, "Value" );

        $certTable .= $query->startTable( COLS=>[ @cols ],
                                     WIDTH=>"100%",
                                     BGCOLOR=>"#EEEEF1",
                                     TITLE_BGCOLOR=>"#DDCCFF" );

        my $parsedCert = $cert->getParsed();

        my $tmpIssuer = $parsedCert->{ISSUER};
        my $tmpDN     = $parsedCert->{DN};
        my $tmpStatus = $status;

        $tmpIssuer =~ s/\//<BR>\n/g;
        $tmpDN =~ s/\//<BR>\n/g;

        $date = $tools->getDate();
        if ( $tmpStatus =~ /^Valid/i ) {
                if ( not $tools->isInsidePeriod ( DATE=>"$date",
                                START=>$parsedCert->{NOTBEFORE},
                                END=>$parsedCert->{NOTAFTER} )) {
                        $tmpStatus = "<FONT COLOR=\"RED\">" .
                                     gettext ("Expired (dB needs updating)") .
                                     "</FONT>";
                }
        } elsif ( $tmpStatus =~ /revoked/gi ) {
                $tmpStatus = i18nGettext ("Revoked on __DATE__", "__DATE__", $parsedCert->{REVOKED_DATE});
        } elsif ( $tmpStatus =~ /^Expired/i ) {
                if ( $tools->isInsidePeriod ( DATE=>"$date",
                                START=>$parsedCert->{NOTBEFORE},
                                END=>$parsedCert->{NOTAFTER} )) {
                        $tmpStatus = "<FONT COLOR=\"RED\">" .
                                     gettext ("Not Expired (dB needs updating)") .
                                     "</FONT>";
                }
        };

        $certTable .=$query->addTableLine(DATA=>["<B>".gettext("Certificate Version:")."</B>",
                                ($parsedCert->{VERSION} or gettext("n/a")) ]);
        $certTable .=$query->addTableLine(DATA=>[ "<B>".gettext("Serial Number:")."</B>",
                                ($cert->getSerial() or gettext("n/a")) ]);
        $certTable .=$query->addTableLine(DATA=>[ "<B>".gettext("Common Name:")."</B>",
                                ($parsedCert->{DN_HASH}->{CN}[0] or gettext("n/a")) ]);
        $certTable .=$query->addTableLine(DATA=>[ "<B>".gettext("E-Mail:")."</B>",
                                ($parsedCert->{EMAILADDRESS} or gettext("n/a")) ]);
        $certTable .=$query->addTableLine(DATA=>[ "<B>".gettext("Distinguished Name:")."</B>",
                                ($tmpDN or gettext("n/a")) ]);
        $certTable .=$query->addTableLine(DATA=>[ "<B>".gettext("Issued by:")."</B>",
                                ($tmpIssuer or gettext("n/a")) ]);
        $certTable .=$query->addTableLine(DATA=>[ "<B>".gettext("Valid From:")."</B>",
                                ($parsedCert->{NOTBEFORE} or gettext("n/a")) ]);
        $certTable .=$query->addTableLine(DATA=>[ "<B>".gettext("Expiration on:")."</B>",
                                ($parsedCert->{NOTAFTER} or gettext("n/a")) ]);
        $certTable .=$query->addTableLine(DATA=>[ "<B>".gettext("Current Status:")."</B>",
                                ($tmpStatus or gettext("n/a")) ]);

        $certTable .= $query->endTable();
        $certTable .= getCopyRight();

        $page = $query->subVar( $page, '$serial',   $cert->getSerial() );
        $page = $query->subVar( $page, '$certable', $certTable );
        $page = $query->subVar( $page, '$key',      $key );
        $page = $query->subVar( $page, '$dataType', $dataType );

        print "$page";

        return 1;
}

1;
