diff --git a/lib/NGCP/Panel/Controller/API/PasswordReset.pm b/lib/NGCP/Panel/Controller/API/PasswordReset.pm index d82140b63a..6aadddee69 100644 --- a/lib/NGCP/Panel/Controller/API/PasswordReset.pm +++ b/lib/NGCP/Panel/Controller/API/PasswordReset.pm @@ -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); } } diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 8320912e15..9b7eb6c293 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -458,10 +458,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, @@ -521,7 +525,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); } }); diff --git a/lib/NGCP/Panel/Utils/Auth.pm b/lib/NGCP/Panel/Utils/Auth.pm index 3152a5e812..b91f871985 100644 --- a/lib/NGCP/Panel/Utils/Auth.pm +++ b/lib/NGCP/Panel/Utils/Auth.pm @@ -428,9 +428,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}; diff --git a/lib/NGCP/Panel/Utils/Email.pm b/lib/NGCP/Panel/Utils/Email.pm index fc7f979cb8..22c2e18dba 100644 --- a/lib/NGCP/Panel/Utils/Email.pm +++ b/lib/NGCP/Panel/Utils/Email.pm @@ -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: