X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FUnsubscribe.pm;h=46d5d8d7ea286844eb8f353650fc9ba1067d324a;hb=79bf257cbc4e188992f540d6b4ae1bd5cbcf26ee;hp=4ccdb7e0e33b38f8308650a4119a68cbc82bfe8a;hpb=2ec1ac4a259c87ad453195fa405c6aa7d99d7cb7;p=public-inbox.git diff --git a/lib/PublicInbox/Unsubscribe.pm b/lib/PublicInbox/Unsubscribe.pm index 4ccdb7e0..46d5d8d7 100644 --- a/lib/PublicInbox/Unsubscribe.pm +++ b/lib/PublicInbox/Unsubscribe.pm @@ -12,7 +12,7 @@ use warnings; use Crypt::CBC; use Plack::Util; use MIME::Base64 qw(decode_base64url); -my $CODE_URL = 'git://80x24.org/public-inbox.git'; +my $CODE_URL = 'https://public-inbox.org/public-inbox.git'; my @CT_HTML = ('Content-Type', 'text/html; charset=UTF-8'); sub new { @@ -77,11 +77,12 @@ sub _user_list_addr { 'Missing mailing list name in path component'); } my $user = eval { $self->{cipher}->decrypt(decode_base64url($u)) }; - if (!defined $user || $user eq '') { + if (!defined $user || index($user, '@') < 1) { my $err = quotemeta($@); my $errors = $env->{'psgi.errors'}; $errors->print("error decrypting: $u\n"); $errors->print("$_\n") for split("\n", $err); + $u = Plack::Util::encode_html($u); return r($self, 400, 'Bad request', "Failed to decrypt: $u"); } @@ -157,7 +158,7 @@ sub archive_info { } # protocol-relative URL: "//example.com/" => "https://example.com/" - if ($archive_url =~ m!\A//!) { + if ($archive_url && $archive_url =~ m!\A//!) { $archive_url = "$env->{'psgi.url_scheme'}:$archive_url"; }