File Coverage

lib/HTTP/Promise/Headers/Forwarded.pm
Criterion Covered Total %
statement 42 43 97.6
branch 5 8 62.5
condition 2 3 66.6
subroutine 14 15 93.3
pod 8 8 100.0
total 71 77 92.2


line stmt bran cond sub pod time code
1             ##----------------------------------------------------------------------------
2             ## Asynchronous HTTP Request and Promise - ~/lib/HTTP/Promise/Headers/Forwarded.pm
3             ## Version v0.1.0
4             ## Copyright(c) 2022 DEGUEST Pte. Ltd.
5             ## Author: Jacques Deguest <jack@deguest.jp>
6             ## Created 2022/05/08
7             ## Modified 2022/05/08
8             ## All rights reserved.
9             ##
10             ##
11             ## This program is free software; you can redistribute it and/or modify it
12             ## under the same terms as Perl itself.
13             ##----------------------------------------------------------------------------
14             package HTTP::Promise::Headers::Forwarded;
15             BEGIN
16             {
17 3     3   3314 use strict;
  3         7  
  3         92  
18 3     3   17 use warnings;
  3         6  
  3         77  
19 3     3   15 use warnings::register;
  3         6  
  3         387  
20 3     3   24 use parent qw( HTTP::Promise::Headers::Generic );
  3         4  
  3         15  
21 3     3   323 our $VERSION = 'v0.1.0';
22             };
23              
24 3     3   18 use strict;
  3         6  
  3         57  
25 3     3   15 use warnings;
  3         11  
  3         1252  
26              
27             sub init
28             {
29 3     3 1 3797 my $self = shift( @_ );
30 3         132 $self->{params} = [];
31 3         23 $self->{properties} = {};
32             # Works like HTTP::Promise::Headers::CacheControl
33 3 50 66     52 @_ = () if( @_ == 1 && $self->_is_a( $_[0] => 'Module::Generic::Null' ) );
34 3 100       72 if( @_ )
35             {
36 2         10 my $this = shift( @_ );
37 2 50       14 my $ref = $self->_is_array( $this ) ? $this : [split( /(?<!\\)\;[[:blank:]\h]*/, "$this" )];
38 2         79 my $params = $self->params;
39 2         1580 my $props = $self->properties;
40 2         2493 foreach my $pair ( @$ref )
41             {
42 6         43 my( $prop, $val ) = split( /=/, $pair, 2 );
43 6         366 $props->{ $prop } = $val;
44 6         184 $params->push( $prop );
45             }
46             }
47 3         29 $self->{_init_strict_use_sub} = 1;
48 3 50       34 $self->SUPER::init( @_ ) || return( $self->pass_error );
49 3         37 $self->_field_name( 'Forwarded' );
50 3         2447 return( $self );
51             }
52              
53 3     3 1 590 sub as_string { return( shift->_set_get_properties_as_string( sep => ';' ) ); }
54              
55 3     3 1 543 sub by { return( shift->_set_get_property_value( 'by', @_ ) ); }
56              
57 3     3 1 508 sub for { return( shift->_set_get_property_value( 'for', @_ ) ); }
58              
59 0     0 1 0 sub host { return( shift->_set_get_property_value( 'host', @_ ) ); }
60              
61 14     14 1 70 sub params { return( shift->_set_get_array_as_object( 'params', @_ ) ); }
62              
63 14     14 1 67 sub properties { return( shift->_set_get_hash_as_mix_object( 'properties', @_ ) ); }
64              
65 3     3 1 945 sub proto { return( shift->_set_get_property_value( 'proto', @_ ) ); }
66              
67             1;
68             # NOTE: POD
69             __END__
70              
71             =encoding utf-8
72              
73             =head1 NAME
74              
75             HTTP::Promise::Headers::Forwarded - Forwarded Header Field
76              
77             =head1 SYNOPSIS
78              
79             use HTTP::Promise::Headers::Forwarded;
80             my $fwd = HTTP::Promise::Headers::Forwarded->new ||
81             die( HTTP::Promise::Headers::Forwarded->error, "\n" );
82             $h->by( 'secret' );
83             $h->for( '192.0.2.43' );
84             $h->host( 'example.com' );
85             $h->proto( 'https' );
86              
87             =head1 VERSION
88              
89             v0.1.0
90              
91             =head1 DESCRIPTION
92              
93             The following is an extract from Mozilla documentation.
94              
95             The C<Forwarded> request header contains information that may be added by reverse proxy servers (load balancers, CDNs, and so on) that would otherwise be altered or lost when proxy servers are involved in the path of the request.
96              
97             For example:
98              
99             Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
100             # Values from multiple proxy servers can be appended using a comma
101             Forwarded: for=192.0.2.43, for=198.51.100.17
102              
103             =head1 METHODS
104              
105             =head2 as_string
106              
107             Returns a string representation of the C<Forwarded> object.
108              
109             =head2 by
110              
111             This is optional.
112              
113             The interface where the request came in to the proxy server. The identifier can be:
114              
115             =head2 for
116              
117             This is optional.
118              
119             The client that initiated the request and subsequent proxies in a chain of proxies. The identifier has the same possible values as the by directive.
120              
121             =head2 host
122              
123             This is optional.
124              
125             The Host request header field as received by the proxy.
126              
127             =head2 params
128              
129             Sets or gets the L<array object|Module::Generic::Array> containing all the parameters in their proper order.
130              
131             =head2 properties
132              
133             Sets or gets an hash or hash reference ot property-value pairs.
134              
135             =head2 proto
136              
137             This is optional.
138              
139             Indicates which protocol was used to make the request (typically "http" or "https").
140              
141             =head1 AUTHOR
142              
143             Jacques Deguest E<lt>F<jack@deguest.jp>E<gt>
144              
145             =head1 SEE ALSO
146              
147             See also L<rfc7239, section 4|https://tools.ietf.org/html/rfc7239#section-4> and L<Mozilla documentation|https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Forwarded>
148              
149             L<HTTP::Promise>, L<HTTP::Promise::Request>, L<HTTP::Promise::Response>, L<HTTP::Promise::Message>, L<HTTP::Promise::Entity>, L<HTTP::Promise::Headers>, L<HTTP::Promise::Body>, L<HTTP::Promise::Body::Form>, L<HTTP::Promise::Body::Form::Data>, L<HTTP::Promise::Body::Form::Field>, L<HTTP::Promise::Status>, L<HTTP::Promise::MIME>, L<HTTP::Promise::Parser>, L<HTTP::Promise::IO>, L<HTTP::Promise::Stream>, L<HTTP::Promise::Exception>
150              
151             =head1 COPYRIGHT & LICENSE
152              
153             Copyright(c) 2022 DEGUEST Pte. Ltd.
154              
155             All rights reserved.
156              
157             This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
158              
159             =cut