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 {
}
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)
$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 = (
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);
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}) {
-inbox => Plack::Util::inline_object(
name => 'test',
search => sub { undef },
+ base_url => sub { 'http://example.com/' },
cloneurl => sub {[]},
description => sub { '' }),
};