-# Copyright (C) 2016 all contributors <meta@public-inbox.org>
+# Copyright (C) 2016-2020 all contributors <meta@public-inbox.org>
# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
#
# Standalone PSGI app to handle HTTP(s) unsubscribe links generated
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 {
'Missing mailing list name in path component');
}
my $user = eval { $self->{cipher}->decrypt(decode_base64url($u)) };
- if (!defined $user || index($user, '@') <= 1) {
+ 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");
}
my ($self, $code, $title, @body) = @_;
[ $code, [ @CT_HTML ], [
"<html><head><title>$title</title></head><body><pre>".
- join("\n", "<b>$title</b>\n", @body) . '</pre><hr />'.
+ join("\n", "<b>$title</b>\n", @body) . '</pre><hr>'.
"<pre>This page is available under AGPL-3.0+\n" .
"git clone $self->{code_url}\n" .
qq(Email $self->{contact} if you have any questions).
unless ($archive_url) {
if (my $config = $self->{pi_config}) {
# PublicInbox::Config::lookup
- my $inbox = $config->lookup($list_addr);
+ my $ibx = $config->lookup($list_addr);
# PublicInbox::Inbox::base_url
- $archive_url = $inbox->base_url if $inbox;
+ $archive_url = $ibx->base_url if $ibx;
}
}
# 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";
}