{name} $dir/ $http \\
+ $addrs
+ public-inbox-index $dir
+EOF
+ } else { # v1
+ $urls .= "\n";
+ }
+
+ my $cfg_link = ($ctx->{-upfx} // '').'_/text/config/raw';
+ $urls .= qq(\nExample config snippet for mirrors\n);
+ my @nntp = map { qq($_) } @{$ibx->nntp_url};
+ if (@nntp) {
+ $urls .= "\n";
+ $urls .= @nntp == 1 ? 'Newsgroup' : 'Newsgroups are';
+ $urls .= ' available over NNTP:';
+ $urls .= "\n\t" . join("\n\t", @nntp) . "\n";
+ }
+ if ($urls =~ m!\b[^:]+://\w+\.onion/!) {
+ $urls .= "\n note: .onion URLs require Tor: ";
+ $urls .= qq[$TOR_URL];
}
- my $url = PublicInbox::Hval::prurl($ctx->{env}, PI_URL);
- '
'.join("\n",
- '- ' . $desc,
+ '
'.join("\n\n",
+ $desc,
$urls,
- 'Served with public-inbox: '.
- qq(git clone $url public-inbox),
+ code_footer($ctx->{env})
).'
';
}
+# callback for HTTP.pm (and any other PSGI servers)
sub getline {
my ($self) = @_;
my $nr = $self->{nr}++;
return _html_top($self) if $nr == 0;
- if (my $mid = $self->{cb}) { # middle
- $mid = $mid->($nr, $self->{ctx}) and return $mid;
+ if (my $middle = $self->{cb}) {
+ $middle = $middle->($nr, $self->{ctx}) and return $middle;
}
delete $self->{cb} ? _html_end($self) : undef;
}
+sub html_oneshot ($$;$) {
+ my ($ctx, $code, $sref) = @_;
+ my $self = bless {
+ ctx => $ctx,
+ base_url => base_url($ctx),
+ }, __PACKAGE__;
+ my @x;
+ my @h = ('Content-Type' => 'text/html; charset=UTF-8');
+ if (my $gz = gzip_maybe($ctx->{env})) {
+ my $err = $gz->deflate(_html_top($self), $x[0]);
+ die "gzip->deflate: $err" if $err != Z_OK;
+ if ($sref) {
+ $err = $gz->deflate($sref, $x[0]);
+ die "gzip->deflate: $err" if $err != Z_OK;
+ }
+ $err = $gz->deflate(_html_end($self), $x[0]);
+ die "gzip->deflate: $err" if $err != Z_OK;
+ $err = $gz->flush($x[0], Z_FINISH);
+ die "gzip->flush: $err" if $err != Z_OK;
+ push @h, qw(Vary Accept-Encoding Content-Encoding gzip);
+ } else {
+ @x = (_html_top($self), $sref ? $$sref : (), _html_end($self));
+ }
+
+ my $len = 0;
+ $len += bytes::length($_) for @x;
+ push @h, 'Content-Length', $len;
+ [ $code, \@h, \@x ]
+}
+
1;