line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package HTTP::Engine::Role::RequestBuilder::ParseEnv; |
2
|
51
|
|
|
51
|
|
35535
|
use Any::Moose '::Role'; |
|
51
|
|
|
|
|
117
|
|
|
51
|
|
|
|
|
377
|
|
3
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
with 'HTTP::Engine::Role::RequestBuilder::Standard' => { |
5
|
|
|
|
|
|
|
-alias => { _build_hostname => "_resolve_hostname" }, # we might be able to get it from the env |
6
|
|
|
|
|
|
|
}; |
7
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
sub _build_connection_info { |
9
|
34
|
|
|
34
|
|
83
|
my($self, $req) = @_; |
10
|
|
|
|
|
|
|
|
11
|
34
|
|
|
|
|
635
|
my $env = $req->_connection->{env}; |
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
return { |
14
|
34
|
|
|
|
|
1303
|
address => $env->{REMOTE_ADDR}, |
15
|
|
|
|
|
|
|
protocol => $env->{SERVER_PROTOCOL}, |
16
|
|
|
|
|
|
|
method => $env->{REQUEST_METHOD}, |
17
|
|
|
|
|
|
|
port => $env->{SERVER_PORT}, |
18
|
|
|
|
|
|
|
user => $env->{REMOTE_USER}, |
19
|
|
|
|
|
|
|
_https_info => $env->{HTTPS}, |
20
|
|
|
|
|
|
|
request_uri => $env->{REQUEST_URI}, |
21
|
|
|
|
|
|
|
} |
22
|
|
|
|
|
|
|
} |
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
sub _build_headers { |
25
|
9
|
|
|
9
|
|
25
|
my ($self, $req) = @_; |
26
|
|
|
|
|
|
|
|
27
|
9
|
|
|
|
|
44
|
my $env = $req->_connection->{env}; |
28
|
|
|
|
|
|
|
|
29
|
9
|
|
|
|
|
32
|
HTTP::Headers::Fast->new( |
30
|
|
|
|
|
|
|
map { |
31
|
189
|
|
|
|
|
501
|
(my $field = $_) =~ s/^HTTPS?_//; |
32
|
9
|
|
|
|
|
70
|
( $field => $env->{$_} ); |
33
|
|
|
|
|
|
|
} |
34
|
9
|
|
|
|
|
82
|
grep { /^(?:HTTP|CONTENT|COOKIE)/i } keys %$env |
35
|
|
|
|
|
|
|
); |
36
|
|
|
|
|
|
|
} |
37
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
sub _build_hostname { |
39
|
2
|
|
|
2
|
|
4
|
my ( $self, $req ) = @_; |
40
|
2
|
100
|
|
|
|
25
|
$req->_connection->{env}{REMOTE_HOST} || $self->_resolve_hostname($req); |
41
|
|
|
|
|
|
|
} |
42
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
sub _build_uri { |
44
|
27
|
|
|
27
|
|
91
|
my($self, $req) = @_; |
45
|
|
|
|
|
|
|
|
46
|
27
|
|
|
|
|
117
|
my $env = $req->_connection->{env}; |
47
|
|
|
|
|
|
|
|
48
|
27
|
100
|
|
|
|
204
|
my $scheme = $req->secure ? 'https' : 'http'; |
49
|
27
|
|
100
|
|
|
132
|
my $host = $env->{HTTP_HOST} || $env->{SERVER_NAME}; |
50
|
|
|
|
|
|
|
# my $port = $env->{SERVER_PORT} || ( $req->secure ? 443 : 80 ); |
51
|
27
|
|
|
|
|
59
|
my $port = $env->{SERVER_PORT}; |
52
|
27
|
100
|
|
|
|
133
|
$port = ( $req->secure ? 443 : 80 ) unless $port; # dirty code for coverage_test |
|
|
100
|
|
|
|
|
|
53
|
|
|
|
|
|
|
|
54
|
27
|
|
|
|
|
52
|
my $base_path; |
55
|
27
|
100
|
|
|
|
96
|
if (exists $env->{REDIRECT_URL}) { |
56
|
2
|
|
|
|
|
6
|
$base_path = $env->{REDIRECT_URL}; |
57
|
2
|
100
|
|
|
|
32
|
$base_path =~ s/$env->{PATH_INFO}$// if exists $env->{PATH_INFO}; |
58
|
|
|
|
|
|
|
} else { |
59
|
25
|
|
100
|
|
|
141
|
$base_path = $env->{SCRIPT_NAME} || '/'; |
60
|
|
|
|
|
|
|
} |
61
|
|
|
|
|
|
|
|
62
|
27
|
|
100
|
|
|
407
|
my $path = $base_path . ($env->{PATH_INFO} || ''); |
63
|
27
|
|
|
|
|
190
|
$path =~ s{^/+}{}; |
64
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
# for proxy request |
66
|
27
|
100
|
|
|
|
230
|
$path = $base_path = '/' if $req->proxy_request; |
67
|
|
|
|
|
|
|
|
68
|
27
|
|
|
|
|
209
|
my $uri = URI->new; |
69
|
27
|
|
|
|
|
20201
|
$uri->scheme($scheme); |
70
|
27
|
|
|
|
|
19104
|
$uri->host($host); |
71
|
27
|
|
|
|
|
2368
|
$uri->port($port); |
72
|
27
|
|
100
|
|
|
1579
|
$uri->path($path || '/'); |
73
|
27
|
100
|
|
|
|
931
|
$uri->query($env->{QUERY_STRING}) if $env->{QUERY_STRING}; |
74
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
# sanitize the URI |
76
|
27
|
|
|
|
|
154
|
$uri = $uri->canonical; |
77
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
# set the base URI |
79
|
|
|
|
|
|
|
# base must end in a slash |
80
|
27
|
|
|
|
|
5108
|
$base_path =~ s{^/+}{}; |
81
|
27
|
100
|
|
|
|
110
|
$base_path .= '/' unless $base_path =~ /\/$/; |
82
|
27
|
|
|
|
|
101
|
my $base = $uri->clone; |
83
|
27
|
|
|
|
|
261
|
$base->path_query($base_path); |
84
|
|
|
|
|
|
|
|
85
|
27
|
|
|
|
|
945
|
return URI::WithBase->new($uri, $base); |
86
|
|
|
|
|
|
|
} |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
1; |
89
|
|
|
|
|
|
|
|