fix contact self-service password reset link vs. outlook, RT#32657
[freeside.git] / fs_selfservice / FS-SelfService / cgi / selfservice.cgi
index 4e21ad8..c232c45 100755 (executable)
@@ -88,12 +88,17 @@ my @nologin_actions = (qw(
   do_forgot_password
   process_forgot_password
   do_process_forgot_password
+  process_forgot_password_session
 ));
 push @actions, @nologin_actions;
 my %nologin_actions = map { $_=>1 } @nologin_actions;
 
 my $action = 'myaccount'; # sensible default
-if ( $cgi->param('action') =~ /^(\w+)$/ ) {
+
+if ( $cgi->param('action') =~ /^process_forgot_password_session_(\w+)$/ ) {
+  $action = 'process_forgot_password_session';
+  $session_id = $1;
+} elsif ( $cgi->param('action') =~ /^(\w+)$/ ) {
   if (grep {$_ eq $1} @actions) {
     $action = $1;
   } else {
@@ -936,11 +941,17 @@ sub delete_svc {
 }
 
 sub view_usage {
-  list_svcs(
+  my $res = list_svcs(
     'session_id'  => $session_id,
     'svcdb'       => [ 'svc_acct', 'svc_phone', 'svc_port', ],
     'ncancelled'  => 1,
   );
+  if ($res->{hide_usage}) {
+    $action = 'myaccount';
+    return myaccount();
+  } else {
+    return $res;
+  }
 }
 
 sub real_port_graph {
@@ -1045,6 +1056,13 @@ sub process_forgot_password {
   );
 }
 
+sub process_forgot_password_session {
+  $action = 'process_forgot_password';
+  check_reset_passwd(
+    'session_id' => $session_id,
+  );
+}
+
 sub do_process_forgot_password {
   process_reset_passwd(
     map { $_ => scalar($cgi->param($_)) }