# -- # Kernel/Output/HTML/ArticleComposeSign.pm # Copyright (C) 2001-2007 OTRS GmbH, http://otrs.org/ # -- # $Id: ArticleComposeSign.pm,v 1.9 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::ArticleComposeSign; use strict; use Mail::Address; use Kernel::System::Crypt; use Kernel::System::Queue; use vars qw($VERSION); $VERSION = '$Revision: 1.9 $'; $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 $_!"; } $Self->{QueueObject} = Kernel::System::Queue->new(%Param); return $Self; } sub Option { my $Self = shift; my %Param = @_; return ('SignKeyID'); } sub Run { my $Self = shift; my %Param = @_; if (!$Param{From}) { return; } my %KeyList = (); my @SearchAddress = Mail::Address->parse($Param{From}); my $CryptObjectPGP = Kernel::System::Crypt->new(%{$Self}, CryptType => 'PGP'); if ($CryptObjectPGP) { my @PrivateKeys = $CryptObjectPGP->PrivateKeySearch( Search => $SearchAddress[0]->address(), ); foreach my $DataRef (@PrivateKeys) { $KeyList{"PGP::Inline::$DataRef->{Key}"} = "PGP-Inline: $DataRef->{Key} $DataRef->{Identifier}"; $KeyList{"PGP::Detached::$DataRef->{Key}"} = "PGP-Detached: $DataRef->{Key} $DataRef->{Identifier}"; } } my $CryptObjectSMIME = Kernel::System::Crypt->new(%{$Self}, CryptType => 'SMIME'); if ($CryptObjectSMIME) { my @PrivateKeys = $CryptObjectSMIME->PrivateSearch( Search => $SearchAddress[0]->address(), ); foreach my $DataRef (@PrivateKeys) { $KeyList{"SMIME::Detached::$DataRef->{Hash}"} = "SMIME-Detached: $DataRef->{Hash} $DataRef->{Email}"; } } if (%KeyList) { $KeyList{''} = '-none-'; if ((!defined($Param{SignKeyID}) || ($Param{ExpandCustomerName} && $Param{ExpandCustomerName} == 3)) && $Param{QueueID}) { my %Queue = $Self->{QueueObject}->QueueGet(ID => $Param{QueueID}); $Param{SignKeyID} = $Queue{DefaultSignKey} || ''; } my $List = $Self->{LayoutObject}->OptionStrgHashRef( Data => \%KeyList, Name => 'SignKeyID', SelectedID => $Param{SignKeyID} ); $Self->{LayoutObject}->Block( Name => 'Option', Data => { Key => 'Sign', Value => $List, }, ); } return; } sub ArticleOption { my $Self = shift; my %Param = @_; if ($Param{SignKeyID}) { my ($Type, $SubType, $Key) = split (/::/, $Param{SignKeyID}); return ( Sign => { Type => $Type, SubType => $SubType, Key => $Key, }, ); } return; } sub Error { my $Self = shift; my %Param = @_; if ($Self->{Error}) { return %{$Self->{Error}}; } else { return; } } 1;