[freeside-commits] branch master updated. 6dcc5cc9c8bdeb5635f122761e2ce2d3f52885b6

Christopher Burger burgerc at freeside.biz
Tue May 7 06:20:32 PDT 2019


The branch, master has been updated
       via  6dcc5cc9c8bdeb5635f122761e2ce2d3f52885b6 (commit)
      from  6899505e393120c3aa980680b43daf36552172a1 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 6dcc5cc9c8bdeb5635f122761e2ce2d3f52885b6
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Tue May 7 09:19:57 2019 -0400

    RT# 82132 - updated selfservice login to use config username-uppercase

diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm
index e8130160b..4e2eb1b31 100644
--- a/FS/FS/ClientAPI/MyAccount.pm
+++ b/FS/FS/ClientAPI/MyAccount.pm
@@ -217,9 +217,9 @@ sub login {
   my $p = shift;
 
   my $conf = new FS::Conf;
-
   my $svc_x = '';
   my $session = {};
+
   if ( $p->{'domain'} eq 'svc_phone'
        && $conf->exists('selfservice_server-phone_login') ) { 
 
@@ -238,15 +238,28 @@ sub login {
     $svc_x = $svc_phone;
 
   } elsif ( $p->{email}
-              && (my $contact = FS::contact->by_selfservice_email($p->{email}))
+              && (my $contact = FS::contact->by_selfservice_email($p->{email},'case_insensitive'))
           )
   {
+    my @customers = grep $_->selfservice_access, $contact->cust_contact;
+    my @cust_contact;
+
+    foreach my $customer (@customers) {
+      if ($conf->exists('username-uppercase') || $conf->exists('username-uppercase', $customer->cust_main->agentnum)) {
+        my $check_contact = FS::contact->by_selfservice_email_custnum($p->{email}, $customer->custnum);
+        push @cust_contact, $customer if $check_contact;
+      }
+      else { push @cust_contact, $customer; }
+    }
+
+    return { error => 'Email '.$p->{email}.' not found!'}
+      unless @cust_contact;
+
     return { error => 'Incorrect contact password.' }
       unless $contact->authenticate_password($p->{'password'});
 
     $session->{'contactnum'} = $contact->contactnum;
 
-    my @cust_contact = grep $_->selfservice_access, $contact->cust_contact;
     if ( scalar(@cust_contact) == 1 ) {
       $session->{'custnum'} = $cust_contact[0]->custnum;
     } elsif ( scalar(@cust_contact) ) {
diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm
index 9775e7f6b..26f39eda5 100644
--- a/FS/FS/contact.pm
+++ b/FS/FS/contact.pm
@@ -828,7 +828,38 @@ or there isn't one, returns the empty string.
 =cut
 
 sub by_selfservice_email {
-  my($class, $email) = @_;
+  my($class, $email, $case_insensitive) = @_;
+
+  my $email_search = "emailaddress = '".$email."'";
+  $email_search = "LOWER(emailaddress) = LOWER('".$email."')" if $case_insensitive;
+
+  my $contact_email = qsearchs({
+    'table'     => 'contact_email',
+    'addl_from' => ' LEFT JOIN contact USING ( contactnum ) ',
+    'extra_sql' => "
+      WHERE $email_search
+      AND ( contact.disabled IS NULL )
+      AND EXISTS ( SELECT 1 FROM cust_contact
+                     WHERE contact.contactnum = cust_contact.contactnum
+                       AND cust_contact.selfservice_access = 'Y'
+                 )
+    ",
+  }) or return '';
+
+  $contact_email->contact;
+
+}
+
+=item by_selfservice_email_custnum EMAILADDRESS, CUSTNUM
+
+Alternate search constructor (class method).  Given an email address and custnum, returns
+the contact for that address and custnum. If that contact doesn't have selfservice access,
+or there isn't one, returns the empty string.
+
+=cut
+
+sub by_selfservice_email_custnum {
+  my($class, $email, $custnum) = @_;
 
   my $contact_email = qsearchs({
     'table'     => 'contact_email',
@@ -839,6 +870,7 @@ sub by_selfservice_email {
       AND EXISTS ( SELECT 1 FROM cust_contact
                      WHERE contact.contactnum = cust_contact.contactnum
                        AND cust_contact.selfservice_access = 'Y'
+                       AND cust_contact.custnum = $custnum
                  )
     ",
   }) or return '';

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/ClientAPI/MyAccount.pm | 19 ++++++++++++++++---
 FS/FS/contact.pm             | 34 +++++++++++++++++++++++++++++++++-
 2 files changed, 49 insertions(+), 4 deletions(-)




More information about the freeside-commits mailing list