]> Sergey Matveev's repositories - public-inbox.git/commitdiff
inbox: base_url method takes PSGI env hashref instead
authorEric Wong <e@80x24.org>
Sat, 2 Jul 2016 07:56:34 +0000 (07:56 +0000)
committerEric Wong <e@80x24.org>
Sat, 2 Jul 2016 07:57:27 +0000 (07:57 +0000)
This is lighter and we can work further towards eliminating
our Plack::Request dependency entirely.

lib/PublicInbox/Feed.pm
lib/PublicInbox/Inbox.pm
lib/PublicInbox/Mbox.pm
lib/PublicInbox/WWW.pm
lib/PublicInbox/WwwStream.pm
t/view.t

index 2f141c4413b9473e0f4ee3cdaaaa692633a95428..ffbf5c8062bb2121e2a0eeaca1dd517d7c8d01e6 100644 (file)
@@ -297,13 +297,11 @@ sub get_feedopts {
        my $pi_config = $ctx->{pi_config};
        my $inbox = $ctx->{inbox};
        my $obj = $ctx->{-inbox};
-       my $cgi = $ctx->{cgi};
        my %rv = ( description => $obj->description );
 
        $rv{address} = $obj->{address};
        $rv{id_addr} = $obj->{-primary_address};
-       my $url_base;
-       $url_base = $obj->base_url($cgi); # CGI may be undef
+       my $url_base = $obj->base_url($ctx->{env});
        if (my $mid = $ctx->{mid}) { # per-thread feed:
                $rv{atomurl} = "$url_base$mid/t.atom";
        } else {
index ada713c741657ef16522d4b118cffebcbd95c4be..96c92652a54a4e04a64f1fdee65c730ee5ea90de 100644 (file)
@@ -71,10 +71,14 @@ sub cloneurl {
 }
 
 sub base_url {
-       my ($self, $prq) = @_; # Plack::Request
-       if (defined $prq) {
-               my $url = $prq->base->as_string;
-               $url .= '/' if $url !~ m!/\z!; # for mount in Plack::Builder
+       my ($self, $env) = @_;
+       if ($env) { # PSGI env
+               my $scheme = $env->{'psgi.url_scheme'};
+               my $host_port = $env->{HTTP_HOST} ||
+                       "$env->{SERVER_NAME}:$env->{SERVER_PORT}";
+               my $url = "$scheme://$host_port". ($env->{SCRIPT_NAME} || '/');
+               # for mount in Plack::Builder
+               $url .= '/' if $url !~ m!/\z!;
                $url .= $self->{name} . '/';
        } else {
                # either called from a non-PSGI environment (e.g. NNTP/POP3)
index 1c97f959c84502f6529310af2b5f6704f4858c30..9dad0f6da25dc0c28c26484e1254b81dabafbaeb 100644 (file)
@@ -28,7 +28,7 @@ sub msg_str {
                $header_obj->header_set($d);
        }
        my $ibx = $ctx->{-inbox};
-       my $base = $ibx->base_url($ctx->{cgi});
+       my $base = $ibx->base_url($ctx->{env});
        my $mid = mid_clean($header_obj->header('Message-ID'));
        $mid = uri_escape_utf8($mid);
        my @append = (
index c4509bd95649ae2f8caa31c26600ef5b1bb0d2bf..1e23c439660e6d91f3a10986552dba4ff942fed1 100644 (file)
@@ -401,7 +401,7 @@ sub r301 {
                return $r404 if $r404;
                $obj = $ctx->{-inbox};
        }
-       my $url = $obj->base_url($cgi);
+       my $url = $obj->base_url($ctx->{env});
        my $qs = $ctx->{env}->{QUERY_STRING};
        $url .= (uri_escape_utf8($mid) . '/') if (defined $mid);
        $url .= $suffix if (defined $suffix);
index fdab4da3bab2dabf7e71005afe860963177e363e..be6ce2e6bc9f2b8efb60314662c97714710e0362 100644 (file)
@@ -62,13 +62,8 @@ sub _html_end {
        my $obj = $ctx->{-inbox};
        my $desc = ascii_html($obj->description);
 
-       # FIXME: cleanup
-       my $env = $ctx->{env};
-       my $scheme = $env->{'psgi.url_scheme'};
-       my $host_port = $env->{HTTP_HOST} ||
-                       "$env->{SERVER_NAME}:$env->{SERVER_PORT}";
-       my $http = "$scheme://$host_port".($env->{SCRIPT_NAME} || '/');
-       $http = URI->new($http . $obj->{name})->canonical->as_string;
+       my $http = $obj->base_url($ctx->{env});
+       chop $http;
        my %seen = ( $http => 1 );
        my @urls = ($http);
        foreach my $u (@{$obj->cloneurl}) {
index 4fdd15180cc45983630c6f2aa4f2b34f519f4704..4cee4395f7ce88926d797579d65ef5289525e41f 100644 (file)
--- a/t/view.t
+++ b/t/view.t
@@ -25,6 +25,7 @@ my $ctx = {
        -inbox => Plack::Util::inline_object(
                name => 'test',
                search => sub { undef },
+               base_url => sub { 'http://example.com/' },
                cloneurl => sub {[]},
                description => sub { '' }),
 };