From b6e7a0d8f8ac22ef82754829a069096c858b8966 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 15 Sep 2021 21:19:41 -0500 Subject: net_reader: emit .onion help for potential Tor users We can't easily use torsocks, here, so try to be helpful when it comes to proxy support. --- lib/PublicInbox/NetReader.pm | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'lib/PublicInbox/NetReader.pm') diff --git a/lib/PublicInbox/NetReader.pm b/lib/PublicInbox/NetReader.pm index f0f56431..abcb5d2f 100644 --- a/lib/PublicInbox/NetReader.pm +++ b/lib/PublicInbox/NetReader.pm @@ -56,6 +56,28 @@ sub mic_new ($$$$) { sub auth_anon_cb { '' }; # for Mail::IMAPClient::Authcallback +sub onion_hint ($$) { + my ($lei, $uri) = @_; + $uri->host =~ /\.onion\z/i or return "\n"; + my $t = $uri->isa('PublicInbox::URIimap') ? 'imap' : 'nntp'; + my $url = uri_section($uri); + my $set_cfg = 'lei config'; + if (!$lei) { # public-inbox-watch + my $f = $ENV{PI_CONFIG} || '~/.public-inbox/config'; + $set_cfg = "git config -f $f"; + } + <{Ssl} = 1 if $uri->scheme eq 'imaps'; require PublicInbox::IMAPClient; my $mic = mic_new($self, $mic_arg, $sec, $uri) or - die "E: <$uri> new: $@\n"; + die "E: <$uri> new: $@".onion_hint($lei, $uri); + # default to using STARTTLS if it's available, but allow # it to be disabled since I usually connect to localhost if (!$mic_arg->{Ssl} && !defined($mic_arg->{Starttls}) && @@ -145,7 +168,7 @@ sub nn_new ($$$) { eval { $nn = PublicInbox::NetNNTPSocks->new_socks(%$nn_arg) }; die "E: <$uri> $@\n" if $@; } else { - $nn = Net::NNTP->new(%$nn_arg) or die "E: <$uri> new: $!\n"; + $nn = Net::NNTP->new(%$nn_arg) or return; } # default to using STARTTLS if it's available, but allow @@ -202,7 +225,8 @@ sub nn_for ($$$$) { # nn = Net::NNTP $nn_arg->{SSL} = 1 if $uri->secure; # snews == nntps my $sa = $self->{-proxy_cli}; %$nn_arg = (%$nn_arg, %$sa) if $sa; - my $nn = nn_new($nn_arg, $nntp_cfg, $uri); + my $nn = nn_new($nn_arg, $nntp_cfg, $uri) or + die "E: <$uri> new: $@".onion_hint($lei, $uri); if ($cred) { $cred->fill($lei) unless defined($p); # may prompt user here if ($nn->authinfo($u, $p)) { -- cgit v1.2.3-24-ge0c7