RT 4.2.11, ticket#13852
[freeside.git] / rt / t / mail / smime / reject_on_unencrypted.t
1 use strict;
2 use warnings;
3
4 use RT::Test::SMIME tests => undef, actual_server => 1, config => 'Set( %Crypt, RejectOnUnencrypted => 1 );';
5 my $test = 'RT::Test::SMIME';
6
7 use IPC::Run3 'run3';
8 use String::ShellQuote 'shell_quote';
9 use RT::Tickets;
10
11 my ($url, $m) = RT::Test->started_ok;
12 ok $m->login, "logged in";
13
14 # configure key for General queue
15 RT::Test::SMIME->import_key('sender@example.com');
16 my $queue = RT::Test->load_or_create_queue(
17     Name              => 'General',
18     CorrespondAddress => 'sender@example.com',
19     CommentAddress    => 'sender@example.com',
20 );
21 ok $queue && $queue->id, 'loaded or created queue';
22
23 my $user = RT::Test->load_or_create_user(
24     Name => 'root@example.com',
25     EmailAddress => 'root@example.com',
26 );
27 RT::Test::SMIME->import_key('root@example.com.crt', $user);
28 RT::Test->add_rights( Principal => $user, Right => 'SuperUser', Object => RT->System );
29
30 my $mail = RT::Test->open_mailgate_ok($url);
31 print $mail <<EOF;
32 From: root\@localhost
33 To: rt\@$RT::rtname
34 Subject: This is a test of new ticket creation as root
35
36 Blah!
37 Foob!
38 EOF
39 RT::Test->close_mailgate_ok($mail);
40
41 {
42     ok(!RT::Test->last_ticket, 'A ticket was not created');
43     my ($mail) = RT::Test->fetch_caught_mails;
44     like(
45         $mail,
46         qr/^Subject: RT requires that all incoming mail be encrypted/m,
47         'rejected mail that is not encrypted'
48     );
49     my ($warning) = $m->get_warnings;
50     like($warning, qr/rejected because the message is unencrypted/);
51 }
52
53 {
54     # test for encrypted mail
55     my $buf = '';
56     run3(
57         shell_quote(
58             qw(openssl smime -encrypt  -des3),
59             -from    => 'root@example.com',
60             -to      => 'sender@example.com',
61             -subject => "Encrypted message for queue",
62             $test->key_path('sender@example.com.crt' ),
63         ),
64         \"Subject: test\n\norzzzzzz",
65         \$buf,
66         \*STDERR
67     );
68
69     my ($status, $tid) = RT::Test->send_via_mailgate( $buf );
70     is ($status >> 8, 0, "The mail gateway exited normally");
71
72     my $tick = RT::Ticket->new( $RT::SystemUser );
73     $tick->Load( $tid );
74     is( $tick->Subject, 'Encrypted message for queue',
75         "Created the ticket"
76     );
77
78     my $txn = $tick->Transactions->First;
79     my ($msg, $attach, $orig) = @{$txn->Attachments->ItemsArrayRef};
80     is( $msg->GetHeader('X-RT-Incoming-Encryption'),
81         'Success',
82         'recorded incoming mail that is encrypted'
83     );
84     is( $msg->GetHeader('X-RT-Privacy'),
85         'SMIME',
86         'recorded incoming mail that is encrypted'
87     );
88     like( $attach->Content, qr'orz');
89
90     is( $orig->GetHeader('Content-Type'), 'application/x-rt-original-message');
91 }
92
93 {
94     my $buf = '';
95
96     run3(
97         join(
98             ' ',
99             shell_quote(
100                 RT->Config->Get('SMIME')->{'OpenSSL'},
101                 qw( smime -sign -nodetach -passin pass:123456),
102                 -signer => $test->key_path('root@example.com.crt' ),
103                 -inkey  => $test->key_path('root@example.com.key' ),
104             ),
105             '|',
106             shell_quote(
107                 qw(openssl smime -encrypt -des3),
108                 -from    => 'root@example.com',
109                 -to      => 'sender@example.com',
110                 -subject => "Encrypted and signed message for queue",
111                 $test->key_path('sender@example.com.crt' ),
112             )),
113             \"Subject: test\n\norzzzzzz",
114             \$buf,
115             \*STDERR
116     );
117
118     my ($status, $tid) = RT::Test->send_via_mailgate( $buf );
119
120     my $tick = RT::Ticket->new( $RT::SystemUser );
121     $tick->Load( $tid );
122     ok( $tick->Id, "found ticket " . $tick->Id );
123     is( $tick->Subject, 'Encrypted and signed message for queue',
124         "Created the ticket"
125     );
126
127     my $txn = $tick->Transactions->First;
128     my ($msg, $attach, $orig) = @{$txn->Attachments->ItemsArrayRef};
129     is( $msg->GetHeader('X-RT-Incoming-Encryption'),
130         'Success',
131         'recorded incoming mail that is encrypted'
132     );
133     like( $attach->Content, qr'orzzzz');
134 }
135
136 undef $m;
137 done_testing;