# -- # Kernel/Output/HTML/PreferencesSMIME.pm # Copyright (C) 2001-2007 OTRS GmbH, http://otrs.org/ # -- # $Id: PreferencesSMIME.pm,v 1.5 2007/08/20 16:09:46 tr 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::PreferencesSMIME; use strict; use Kernel::System::Crypt; use vars qw($VERSION); $VERSION = '$Revision: 1.5 $'; $VERSION =~ s/^\$.*:\W(.*)\W.+?$/$1/; sub new { my $Type = shift; my %Param = @_; # allocate new hash for object my $Self = {}; bless ($Self, $Type); # get env foreach (keys %Param) { $Self->{$_} = $Param{$_}; } # get needed objects foreach (qw(ConfigObject LogObject DBObject LayoutObject UserID ParamObject ConfigItem MainObject)) { die "Got no $_!" if (!$Self->{$_}); } return $Self; } sub Param { my $Self = shift; my %Param = @_; my @Params = (); if (!$Self->{ConfigObject}->Get('SMIME')) { return (); } push (@Params, { %Param, Name => $Self->{ConfigItem}->{PrefKey}, Block => 'Upload', Filename => $Param{UserData}->{"SMIMEFilename"}, }, ); return @Params; } sub Run { my $Self = shift; my %Param = @_; my %UploadStuff = $Self->{ParamObject}->GetUploadAll( Param => "UserSMIMEKey", Source => 'String', ); if (!$UploadStuff{Content}) { return 1; } my $CryptObject = Kernel::System::Crypt->new( LogObject => $Self->{LogObject}, DBObject => $Self->{DBObject}, ConfigObject => $Self->{ConfigObject}, CryptType => 'SMIME', MainObject => $Self->{MainObject}, ); if (!$CryptObject) { return 1; } my $Message = $CryptObject->CertificateAdd(Certificate => $UploadStuff{Content}); if (!$Message) { $Self->{Error} = $Self->{LogObject}->GetLogEntry( Type => 'Error', What => 'Message', ); return; } else { my %Attributes = $CryptObject->CertificateAttributes( Certificate => $UploadStuff{Content}, ); if ($Attributes{Hash}) { $UploadStuff{Filename} = "$Attributes{Hash}.pem"; } $Self->{UserObject}->SetPreferences( UserID => $Param{UserData}->{UserID}, Key => "SMIMEHash", Value => $Attributes{Hash}, ); $Self->{UserObject}->SetPreferences( UserID => $Param{UserData}->{UserID}, Key => "SMIMEFilename", Value => $UploadStuff{Filename}, ); # $Self->{UserObject}->SetPreferences( # UserID => $Param{UserData}->{UserID}, # Key => 'SMIMECert', # Value => $UploadStuff{Content}, # ); # $Self->{UserObject}->SetPreferences( # UserID => $Param{UserData}->{UserID}, # Key => "SMIMEContentType", # Value => $UploadStuff{ContentType}, # ); $Self->{Message} = $Message; return 1; } } sub Download { my $Self = shift; my %Param = @_; my $CryptObject = Kernel::System::Crypt->new( LogObject => $Self->{LogObject}, DBObject => $Self->{DBObject}, ConfigObject => $Self->{ConfigObject}, CryptType => 'SMIME', MainObject => $Self->{MainObject}, ); if (!$CryptObject) { return 1; } # get preferences with key parameters my %Preferences = $Self->{UserObject}->GetPreferences( UserID => $Param{UserData}->{UserID}, ); # check if SMIMEHash is there if (!$Preferences{'SMIMEHash'}) { $Self->{LogObject}->Log( Priority => 'Error', Message => 'Need SMIMEHash to get certificat key of '.$Param{UserData}->{UserID}, ); return (); } else { $Preferences{'SMIMECert'} = $CryptObject->CertificateGet( Hash => $Preferences{'SMIMEHash'}, ); } # check if cert exists if (!$Preferences{'SMIMECert'}) { $Self->{LogObject}->Log( Priority => 'Error', Message => 'Couldn\'t get cert of hash '.$Preferences{'SMIMEHash'}, ); return (); } else { return ( ContentType => 'text/plain', Content => $Preferences{'SMIMECert'}, Filename => $Preferences{'SMIMEFilename'}, ); } } sub Error { my $Self = shift; my %Param = @_; return $Self->{Error} || ''; } sub Message { my $Self = shift; my %Param = @_; return $Self->{Message} || ''; } 1;