our $RETRY = 10;
our @BACKOFF = (0.1, 10, 1.5, 0.5, 2.0);
-our $BASEURL = "http://odin.gg/";
-our $STATIC = "http://odin.gg/";
+our $BASEURL = "https://odin.gg/";
+our $STATIC = "https://odin.gg/static/";
our $SHORTURL_PATH = "u";
our $PASTEBIN_PATH = "p";
sub qualify_recip ($) {
my ($r) = @_;
- return $r =~ /\@/ || !defined $MAIL_QUALDOM ? $r : "$r\@$MAIL_QUALDOM";
+ return $r =~ /\@/ || !defined $MAIL_QUALDOM ? $r : "$r\@\%d";
}
sub check_fixup_redir ($) {
}
}
+sub subst_recip ($$) {
+ my ($l, $r) = @_;
+ my %d = ('%' => '%', 'l' => $l, 'd' => $MAIL_QUALDOM);
+ $r =~ s{%([%a-z])}{$d{$1} // fail "undefined substitution `\%$1'"}eg;
+ return $r;
+}
+
sub new_redir ($$\%;$) {
my ($dom, $gen, $r, $n) = @_;
my $db = open_db;
insert_record $db, "odin_mailredir",
lpart => $l, dom => $dom, st => 'live',
owner => $WHO, creator => $WHO,
- recip => $r->{recip} // qualify_recip $Odin::WHO,
+ recip => subst_recip($l, $r->{recip} // qualify_recip $Odin::WHO),
expire => $r->{expire} // -1,
comment => $r->{comment} // "";
push @l, $l;
for (my $i = 0; $i < $n; $i++) { push @l, gen_redir_name $db, $gen; }
for my $l (@l) {
insert_record $db, "odin_mailredir",
- lpart => $l, dom => $dom, owner => $WHO,
+ lpart => $l, dom => $dom, owner => $WHO, creator => $WHO,
st => 'reserved', expire => $NOW + $MAIL_AGEMAX_RESV;
}
check_redir_limits $db;
WHERE lpart = ? AND dom = ? AND owner = ?", undef,
$l, $dom, $WHO);
if (!defined $recip) { Odin::fail "unknown local part `$l'"; }
- elsif ($recip eq "") { $r{recip} //= qualify_recip $WHO; }
+ elsif ($recip eq "" || defined $r{recip})
+ { $r{recip} = subst_recip $l, $r{recip} // qualify_recip $WHO; }
if ($st ne "live") { $r{st} = "live"; $r{expire} //= -1; }
my @var = ();
my @val = ();