# --
# Kernel/Output/HTML/ArticleComposeCrypt.pm
# Copyright (C) 2001-2007 OTRS GmbH, http://otrs.org/
# --
# $Id: ArticleComposeCrypt.pm,v 1.8 2007/01/08 17:00:42 martin Exp $
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (GPL). If you
# did not receive this file, see http://www.gnu.org/licenses/gpl.txt.
# --
package Kernel::Output::HTML::ArticleComposeCrypt;
use strict;
use Mail::Address;
use Kernel::System::Crypt;
use vars qw($VERSION);
$VERSION = '$Revision: 1.8 $';
$VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/;
sub new {
my $Type = shift;
my %Param = @_;
# allocate new hash for object
my $Self = {};
bless ($Self, $Type);
# get needed objects
foreach (qw(ConfigObject LogObject DBObject LayoutObject UserID TicketObject ParamObject MainObject)) {
$Self->{$_} = $Param{$_} || die "Got no $_!";
}
return $Self;
}
sub Option {
my $Self = shift;
my %Param = @_;
return ('CryptKeyID');
}
sub Run {
my $Self = shift;
my %Param = @_;
my $Recipient = '';
foreach (qw(To Cc Bcc)) {
if ($Param{$_}) {
$Recipient .= ", $Param{$_}";
}
}
my @SearchAddress = Mail::Address->parse($Recipient);
if (@SearchAddress) {
my %KeyList = ();
my $CryptObjectPGP = Kernel::System::Crypt->new(%{$Self}, CryptType => 'PGP');
if ($CryptObjectPGP) {
my @PublicKeys = $CryptObjectPGP->PublicKeySearch(
Search => $SearchAddress[0]->address(),
);
foreach my $DataRef (@PublicKeys) {
$KeyList{"PGP::Detached::$DataRef->{Key}"} = "PGP-Detached: $DataRef->{Key} - $DataRef->{Identifier}";
$KeyList{"PGP::Inline::$DataRef->{Key}"} = "PGP-Inline: $DataRef->{Key} - $DataRef->{Identifier}";
}
}
my $CryptObjectSMIME = Kernel::System::Crypt->new(%{$Self}, CryptType => 'SMIME');
if ($CryptObjectSMIME) {
my @PublicKeys = $CryptObjectSMIME->CertificateSearch(
Search => $SearchAddress[0]->address(),
);
foreach my $DataRef (@PublicKeys) {
$KeyList{"SMIME::Detached::$DataRef->{Hash}"} = "SMIME-Detached: $DataRef->{Hash} - $DataRef->{Email}";
}
}
if (%KeyList) {
if ($#SearchAddress > 0 && $Param{CryptKeyID}) {
$Self->{Error}->{Recipient} = 1;
$Self->{LayoutObject}->Block(
Name => 'Option',
Data => {
Key => 'Crypt',
Invalid => '* Just one recipient for crypt possible!',
},
);
return;
}
$KeyList{''} = '-none-';
my $List = $Self->{LayoutObject}->OptionStrgHashRef(
Data => \%KeyList,
Name => 'CryptKeyID',
SelectedID => $Param{CryptKeyID}
);
$Self->{LayoutObject}->Block(
Name => 'Option',
Data => {
Key => 'Crypt',
Value => $List,
},
);
}
return;
}
}
sub ArticleOption {
my $Self = shift;
my %Param = @_;
if ($Param{CryptKeyID}) {
my ($Type, $SubType, $Key) = split (/::/, $Param{CryptKeyID});
return (
Crypt => {
Type => $Type,
SubType => $SubType,
Key => $Key,
},
);
}
return;
}
sub Error {
my $Self = shift;
my %Param = @_;
if ($Self->{Error}) {
return %{$Self->{Error}};
}
else {
return;
}
}
1;