File Coverage

blib/lib/Mail/DKIM/Common.pm
Criterion Covered Total %
statement 54 95 56.8
branch 8 46 17.3
condition n/a
subroutine 13 18 72.2
pod 0 13 0.0
total 75 172 43.6


line stmt bran cond sub pod time code
1             package Mail::DKIM::Common;
2 13     13   129 use strict;
  13         36  
  13         544  
3 13     13   73 use warnings;
  13         32  
  13         1177  
4             our $VERSION = '1.20240923'; # VERSION
5             # ABSTRACT: Common class for Mail::DKIM
6              
7             # Copyright 2005-2007 Messiah College. All rights reserved.
8             # Jason Long
9              
10             # Copyright (c) 2004 Anthony D. Urso. All rights reserved.
11             # This program is free software; you can redistribute it and/or
12             # modify it under the same terms as Perl itself.
13              
14 13     13   5435 use Mail::Address;
  13         37241  
  13         603  
15              
16 13     13   108 use base 'Mail::DKIM::MessageParser';
  13         30  
  13         1881  
17 13     13   93 use Carp;
  13         43  
  13         21017  
18              
19             sub new {
20 298     298 0 3294517 my $class = shift;
21 298         1708 return $class->new_object(@_);
22             }
23              
24             sub add_header {
25 3397     3397 0 5451 my $self = shift;
26 3397         6846 my ($line) = @_;
27              
28 3397         5184 foreach my $algorithm ( @{ $self->{algorithms} } ) {
  3397         8192  
29 4444         12611 $algorithm->add_header($line);
30             }
31              
32 3397 100       21694 if ( $line =~ /^([^:]+?)\s*:(.*)/s ) {
33 3395         9756 my $field_name = lc $1;
34 3395         7498 my $contents = $2;
35 3395         13364 $self->handle_header( $field_name, $contents, $line );
36             }
37 3397         5080 push @{ $self->{headers} }, $line;
  3397         9791  
38             }
39              
40             sub add_body {
41 290     290 0 597 my $self = shift;
42 290 50       2374 if ( $self->{algorithm} ) {
43 0         0 $self->{algorithm}->add_body(@_);
44             }
45 290         609 foreach my $algorithm ( @{ $self->{algorithms} } ) {
  290         911  
46 460         1619 $algorithm->add_body(@_);
47             }
48             }
49              
50             sub handle_header {
51 3395     3395 0 5894 my $self = shift;
52 3395         7728 my ( $field_name, $contents, $line ) = @_;
53              
54 3395         5061 push @{ $self->{header_field_names} }, $field_name;
  3395         9407  
55              
56             # TODO - detect multiple occurrences of From: or Sender:
57             # header and reject them
58              
59 3395         12737 $self->{headers_by_name}->{$field_name} = $contents;
60             }
61              
62             sub init {
63 299     299 0 644 my $self = shift;
64 299         1496 $self->SUPER::init(@_);
65              
66             #initialize variables
67 299         979 $self->{headers} = [];
68 299         935 $self->{headers_by_name} = {};
69 299         1108 $self->{header_field_names} = [];
70             }
71              
72             sub load {
73 0     0 0 0 my $self = shift;
74 0         0 my ($fh) = @_;
75              
76 0         0 while (<$fh>) {
77 0         0 $self->PRINT($_);
78             }
79 0         0 $self->CLOSE;
80             }
81              
82             sub message_attributes {
83 0     0 0 0 my $self = shift;
84 0         0 my @attributes;
85              
86 0 0       0 if ( my $message_id = $self->message_id ) {
87 0         0 push @attributes, "message-id=<$message_id>";
88             }
89              
90 0 0       0 if ( my $sig = $self->signature ) {
91 0         0 push @attributes, 'signer=<' . $sig->identity . '>';
92             }
93              
94 0 0       0 if ( $self->{headers_by_name}->{sender} ) {
    0          
95 0         0 my @list = Mail::Address->parse( $self->{headers_by_name}->{sender} );
96 0 0       0 if ( $list[0] ) {
97 0         0 push @attributes, 'sender=<' . $list[0]->address . '>';
98             }
99             }
100             elsif ( $self->{headers_by_name}->{from} ) {
101 0         0 my @list = Mail::Address->parse( $self->{headers_by_name}->{from} );
102 0 0       0 if ( $list[0] ) {
103 0         0 push @attributes, 'from=<' . $list[0]->address . '>';
104             }
105             }
106              
107 0         0 return @attributes;
108             }
109              
110             sub message_id {
111 0     0 0 0 my $self = shift;
112 0 0       0 croak 'wrong number of arguments' unless ( @_ == 0 );
113              
114 0 0       0 if ( my $message_id = $self->{headers_by_name}->{'message-id'} ) {
115 0 0       0 if ( $message_id =~ /^\s*<(.*)>\s*$/ ) {
116 0         0 return $1;
117             }
118             }
119 0         0 return undef;
120             }
121              
122             sub message_originator {
123 0     0 0 0 my $self = shift;
124 0 0       0 croak 'wrong number of arguments' unless ( @_ == 0 );
125              
126 0 0       0 if ( $self->{headers_by_name}->{from} ) {
127 0         0 my @list = Mail::Address->parse( $self->{headers_by_name}->{from} );
128 0 0       0 return $list[0] if @list;
129             }
130 0         0 return Mail::Address->new;
131             }
132              
133             sub message_sender {
134 0     0 0 0 my $self = shift;
135 0 0       0 croak 'wrong number of arguments' unless ( @_ == 0 );
136              
137 0 0       0 if ( $self->{headers_by_name}->{sender} ) {
138 0         0 my @list = Mail::Address->parse( $self->{headers_by_name}->{sender} );
139 0 0       0 return $list[0] if @list;
140             }
141 0 0       0 if ( $self->{headers_by_name}->{from} ) {
142 0         0 my @list = Mail::Address->parse( $self->{headers_by_name}->{from} );
143 0 0       0 return $list[0] if @list;
144             }
145 0         0 return Mail::Address->new;
146             }
147              
148             sub result {
149 255     255 0 1948 my $self = shift;
150 255 50       974 croak 'wrong number of arguments' unless ( @_ == 0 );
151 255         949 return $self->{result};
152             }
153              
154             sub result_detail {
155 100     100 0 471 my $self = shift;
156 100 50       371 croak 'wrong number of arguments' unless ( @_ == 0 );
157              
158 100 100       323 if ( $self->{details} ) {
159 63         1710 return $self->{result} . ' (' . $self->{details} . ')';
160             }
161 37         1404 return $self->{result};
162             }
163              
164             sub signature {
165 28     28 0 2101 my $self = shift;
166 28 50       85 croak 'wrong number of arguments' unless ( @_ == 0 );
167 28         200 return $self->{signature};
168             }
169              
170             1;
171              
172             __END__