X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FWwwStream.pm;h=d81428242544db08afb90cce5084211ec9b8e8da;hb=4363e6037fa7d597294186f60373e9de8e1b3d74;hp=adcb5fe24314305c436e07048983c6dbaf8d9401;hpb=5c8909925072804901e9c3b45bbf25446d379e7b;p=public-inbox.git diff --git a/lib/PublicInbox/WwwStream.pm b/lib/PublicInbox/WwwStream.pm index adcb5fe2..d8142824 100644 --- a/lib/PublicInbox/WwwStream.pm +++ b/lib/PublicInbox/WwwStream.pm @@ -12,8 +12,10 @@ use parent qw(Exporter PublicInbox::GzipFilter); our @EXPORT_OK = qw(html_oneshot); use PublicInbox::Hval qw(ascii_html prurl ts2str); our $TOR_URL = 'https://www.torproject.org/'; -our $CODE_URL = [ qw(http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/public-inbox.git - https://public-inbox.org/public-inbox.git) ]; + +our $CODE_URL = [ qw( +http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/public-inbox.git +https://public-inbox.org/public-inbox.git) ]; sub base_url ($) { my $ctx = shift; @@ -107,54 +109,61 @@ EOF sub code_footer ($) { my ($env) = @_; my $u = prurl($env, $CODE_URL); - qq(AGPL code for this site: git clone $u) + my $arg = $u; + if ($arg =~ s!\A(https?://)([^/\.]+)\.onion/!$1\$hostname\.onion/!i) { + "AGPL code for this site:\n\thostname=$2\n\t" . + qq(torsocks git clone $arg) + } else { + qq(AGPL code for this site: git clone $u) + } } sub _html_end { my ($ctx) = @_; - my $urls = <This inbox may be cloned and mirrored by anyone: -EOF - my $ibx = $ctx->{ibx}; my $desc = ascii_html($ibx->description); - - my @urls; + my $s = ""; my $http = $ctx->{base_url}; - my $max = $ibx->max_git_epoch; my $dir = (split(m!/!, $http))[-1]; my %seen = ($http => 1); - if (defined($max)) { # v2 - for my $i (0..$max) { - # old epochs my be deleted: - -d "$ibx->{inboxdir}/git/$i.git" or next; - my $url = "$http/$i"; - $seen{$url} = 1; - push @urls, "$url $dir/git/$i.git"; + if ($ibx->can('cloneurl')) { # PublicInbox::Inbox + $s .= "This inbox may be cloned and mirrored by anyone:\n"; + my @urls; + my $max = $ibx->max_git_epoch; + # TODO: some of these URLs may be too long and we may need to + # do something like code_footer() above, but these are local + # admin-defined + if (defined($max)) { # v2 + for my $i (0..$max) { + # old epochs my be deleted: + -d "$ibx->{inboxdir}/git/$i.git" or next; + my $url = "$http/$i"; + $seen{$url} = 1; + push @urls, "$url $dir/git/$i.git"; + } + my $nr = scalar(@urls); + if ($nr > 1) { + $s .= "\n\t"; + $s .= "# this inbox consists of $nr epochs:"; + $urls[0] .= "\t# oldest"; + $urls[-1] .= "\t# newest"; + } + } else { # v1 + push @urls, $http; } - my $nr = scalar(@urls); - if ($nr > 1) { - $urls .= "\n\t# this inbox consists of $nr epochs:"; - $urls[0] .= "\t# oldest"; - $urls[-1] .= "\t# newest"; + # FIXME: epoch splits can be different in other repositories, + # use the "cloneurl" file as-is for now: + for my $u (@{$ibx->cloneurl}) { + next if $seen{$u}++; + push @urls, ($u =~ /\Ahttps?:/ ? + qq($u) : $u); } - } else { # v1 - push @urls, $http; - } - - # FIXME: epoch splits can be different in other repositories, - # use the "cloneurl" file as-is for now: - foreach my $u (@{$ibx->cloneurl}) { - next if $seen{$u}++; - push @urls, $u =~ /\Ahttps?:/ ? qq($u) : $u; - } - - $urls .= "\n" . join('', map { "\tgit clone --mirror $_\n" } @urls); - if (my $addrs = $ibx->{address}) { - $addrs = join(' ', @$addrs) if ref($addrs) eq 'ARRAY'; - my $v = defined $max ? '-V2' : '-V1'; - $urls .= <{address}) { + $addrs = join(' ', @$addrs) if ref($addrs) eq 'ARRAY'; + my $v = defined $max ? '-V2' : '-V1'; + $s .= < +EOM + my $v = $ctx->{www}->{pi_cfg}->{lc('publicInbox.wwwListing')}; + if (($v // '') =~ /\A(?:all|match=domain)\z/) { + my $upfx = ($ctx->{-upfx} // ''). '../'; + $s .= <listing +EOM + } } + my $cfg_link = ($ctx->{-upfx} // '').'_/text/config/raw'; - $urls .= <config snippet for mirrors. EOF - my @nntp = map { qq($_) } @{$ibx->nntp_url}; - if (@nntp) { - $urls .= @nntp == 1 ? 'Newsgroup' : 'Newsgroups are'; - $urls .= ' available over NNTP:'; - $urls .= "\n\t" . join("\n\t", @nntp) . "\n"; + if ($ibx->can('nntp_url')) { + my @nntp = map { qq($_) } @{$ibx->nntp_url}; + if (@nntp) { + $s .= @nntp == 1 ? 'Newsgroup' : 'Newsgroups are'; + $s .= ' available over NNTP:'; + $s .= "\n\t" . join("\n\t", @nntp) . "\n"; + } } - if ($urls =~ m!\b[^:]+://\w+\.onion/!) { - $urls .= " note: .onion URLs require Tor: "; - $urls .= qq[$TOR_URL]; + if ($s =~ m!\b[^:]+://\w+\.onion/!) { + $s .= " note: .onion URLs require Tor: "; + $s .= qq[$TOR_URL]; } '
'.join("\n\n",
 		$desc,
-		$urls,
+		$s,
 		coderepos($ctx),
 		code_footer($ctx->{env})
 	).'
';