X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FTest%2FSMIME.pm;fp=rt%2Flib%2FRT%2FTest%2FSMIME.pm;h=d39c4b44d5527c8ae93b37390051eb7e99751250;hb=1c538bfabc2cd31f27067505f0c3d1a46cba6ef0;hp=0000000000000000000000000000000000000000;hpb=4f5619288413a185e9933088d9dd8c5afbc55dfa;p=freeside.git diff --git a/rt/lib/RT/Test/SMIME.pm b/rt/lib/RT/Test/SMIME.pm new file mode 100644 index 000000000..d39c4b44d --- /dev/null +++ b/rt/lib/RT/Test/SMIME.pm @@ -0,0 +1,164 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC +# +# +# (Except where explicitly superseded by other copyright notices) +# +# +# LICENSE: +# +# This work is made available to you under the terms of Version 2 of +# the GNU General Public License. A copy of that license should have +# been provided with this software, but in any event can be snarfed +# from www.gnu.org. +# +# This work is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 or visit their web page on the internet at +# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +use strict; +use warnings; +use 5.010; + +package RT::Test::SMIME; + +use Test::More; +use base qw(RT::Test); +use File::Temp qw(tempdir); + +sub import { + my $class = shift; + my %args = @_; + my $t = $class->builder; + + $t->plan( skip_all => 'openssl executable is required.' ) + unless RT::Test->find_executable('openssl'); + + require RT::Crypt; + $class->SUPER::import(%args); + + $class->set_rights( + Principal => 'Everyone', + Right => ['CreateTicket', 'ShowTicket', 'SeeQueue', 'ReplyToTicket', 'ModifyTicket'], + ); + + $class->export_to_level(1); +} + +sub bootstrap_more_config { + my $self = shift; + my $handle = shift; + my $args = shift; + + $self->SUPER::bootstrap_more_config($handle, $args, @_); + + my $openssl = $self->find_executable('openssl'); + + my $keyring = $self->keyring_path; + mkdir($keyring); + + my $ca = $self->key_path("demoCA", "cacert.pem"); + + print $handle qq{ + Set(\%GnuPG, Enable => 0); + Set(\%SMIME => + Enable => 1, + Passphrase => { + 'root\@example.com' => '123456', + 'sender\@example.com' => '123456', + }, + OpenSSL => q{$openssl}, + Keyring => q{$keyring}, + CAPath => q{$ca}, + ); + Set(\@MailPlugins => qw(Auth::MailFrom Auth::Crypt)); + }; + +} + +sub keyring_path { + return File::Spec->catfile( RT::Test->temp_directory, "smime" ); +} + +sub key_path { + my $self = shift; + my $keys = RT::Test::get_abs_relocatable_dir( + (File::Spec->updir()) x 2, + qw(data smime keys), + ); + return File::Spec->catfile( $keys => @_ ), +} + +sub mail_set_path { + my $self = shift; + return RT::Test::get_abs_relocatable_dir( + (File::Spec->updir()) x 2, + qw(data smime mails), + ); +} + +sub import_key { + my $self = shift; + my $key = shift; + my $user = shift; + + my $path = RT::Test::find_relocatable_path( 'data', 'smime', 'keys' ); + die "can't find the dir where smime keys are stored" + unless $path; + + my $keyring = RT->Config->Get('SMIME')->{'Keyring'}; + die "SMIME keyring '$keyring' doesn't exist" + unless $keyring && -e $keyring; + + $key .= ".pem" unless $key =~ /\.(pem|crt|key)$/; + + my $content = RT::Test->file_content( [ $path, $key ] ); + + if ( $user ) { + my ($status, $msg) = $user->SetSMIMECertificate( $content ); + die "Couldn't set CF: $msg" unless $status; + } else { + my $keyring = RT->Config->Get('SMIME')->{'Keyring'}; + die "SMIME keyring '$keyring' doesn't exist" + unless $keyring && -e $keyring; + + open my $fh, '>:raw', File::Spec->catfile($keyring, $key) + or die "can't open file: $!"; + print $fh $content; + close $fh; + } + + return; +} + +1;