TT#146101 add external base url parameter

for deployments that expose panel/csc via a proxy,
the auto-generated base url printed in emails can
be unreachable. we therefore introduce the option
to explicitly specify a base url to use.

it will support an sprintf pattern with individual
params for eg.:

- protocol scheme
- domain part
- port
- base url path

Change-Id: I6a9ca23126c669d249ef7f3e092cae0161235ebe
mr11.0
Rene Krenn 4 years ago
parent 70ce9d364e
commit eac6c2dc4c

@ -8,7 +8,7 @@ use Data::HAL qw();
use Data::HAL::Link qw();
use HTTP::Headers qw();
use HTTP::Status qw(:constants);
use NGCP::Panel::Utils::Email qw();
sub allowed_methods{
return [qw/POST OPTIONS/];
@ -96,7 +96,12 @@ sub POST :Allow {
uuid => $uuid_string,
timestamp => NGCP::Panel::Utils::DateTime::current_local->epoch + 300, #expire in 5 minutes
});
my $url = $c->uri_for_action('/subscriber/recover_webpassword')->as_string . '?uuid=' . $uuid_string;
my $url = NGCP::Panel::Utils::Email::rewrite_url(
$c->config->{contact}->{external_base_url},
$c->uri_for_action('/subscriber/recover_webpassword')->as_string);
$url .= '?uuid=' . $uuid_string;
NGCP::Panel::Utils::Email::password_reset($c, $subscriber, $url);
}
}

@ -470,10 +470,14 @@ sub reset_webpassword :Chained('base') :PathPart('resetwebpassword') :Args(0) {
uuid => $uuid_string,
timestamp => NGCP::Panel::Utils::DateTime::current_local->epoch + 31536000,
});
my $url = $c->uri_for_action('/subscriber/recover_webpassword')->as_string . '?uuid=' . $uuid_string;
my $url = NGCP::Panel::Utils::Email::rewrite_url(
$c->config->{contact}->{external_base_url},
$c->uri_for_action('/subscriber/recover_webpassword')->as_string);
$url .= '?uuid=' . $uuid_string;
NGCP::Panel::Utils::Email::password_reset($c, $subscriber, $url);
});
NGCP::Panel::Utils::Message::info(
c => $c,
@ -533,7 +537,12 @@ sub reset_webpassword_nosubscriber :Chained('/') :PathPart('resetwebpassword') :
uuid => $uuid_string,
timestamp => NGCP::Panel::Utils::DateTime::current_local->epoch,
});
my $url = $c->uri_for_action('/subscriber/recover_webpassword')->as_string . '?uuid=' . $uuid_string;
my $url = NGCP::Panel::Utils::Email::rewrite_url(
$c->config->{contact}->{external_base_url},
$c->uri_for_action('/subscriber/recover_webpassword')->as_string);
$url .= '?uuid=' . $uuid_string;
NGCP::Panel::Utils::Email::password_reset($c, $subscriber, $url);
}
});

@ -442,9 +442,14 @@ sub initiate_password_reset {
$redis->hset("password_reset:admin::$uuid_string", 'user', $username);
$redis->hset("password_reset:admin::$uuid_string", 'ip', $c->req->address);
$redis->expire("password_reset:admin::$uuid_string", 300);
my $url = $c->req->header('Referer') && $c->req->header('Referer') =~ /\/v2\// ?
$c->req->base . 'v2/recoverpassword?token=' . $uuid_string :
$c->uri_for_action('/login/recover_password')->as_string . '?token=' . $uuid_string;
$c->req->base . 'v2/recoverpassword' :
$c->uri_for_action('/login/recover_password')->as_string;
$url= NGCP::Panel::Utils::Email::rewrite_url(
$c->config->{contact}->{external_base_url},$url);
$url .= '?token=' . $uuid_string;
NGCP::Panel::Utils::Email::admin_password_reset($c, $admin, $url);
}
return {success => 1};

@ -139,6 +139,27 @@ sub process_template{
# }
# return process_template($c, $tmpl_hash, $vars);
#}
sub rewrite_url {
my ($format,$url) = @_;
if (length($url) and length($format)) {
if ($url =~ /^(https?):\/\/([^\/]+)(\/.+)?$/i) {
my $scheme = $1;
my $domain = $2;
my $base_path = $3;
$base_path =~ s/^\///;
my $port;
if ($domain =~ /^([^@]*@)?([^:]+)(:\d+)?$/) {
$domain = $2;
$port = $3;
$port =~ s/^://;
}
$url = sprintf($format,$scheme,$domain,$port,$base_path);
}
}
return $url;
}
1;
# vim: set tabstop=4 expandtab:

Loading…
Cancel
Save