fix for using new payment duplicate stuff with cc encryption
[freeside.git] / FS / FS / payinfo_Mixin.pm
index 2d7b4ff..40b97a9 100644 (file)
@@ -160,10 +160,16 @@ sub mask_payinfo {
   } else {
     # if not, mask it...
     if ($payby eq 'CARD' || $payby eq 'DCRD' || $payby eq 'MCRD') {
-      # Credit Cards (Show first and last four)
-      $paymask = substr($payinfo,0,6).
-                 'x'x(length($payinfo)-10).
-                 substr($payinfo,(length($payinfo)-4));
+      # Credit Cards
+      my $conf = new FS::Conf;
+      my $mask_method = $conf->config('card_masking_method') || 'first6last4';
+      $mask_method =~ /^first(\d+)last(\d+)$/
+        or die "can't parse card_masking_method $mask_method";
+      my($first, $last) = ($1, $2);
+
+      $paymask = substr($payinfo,0,$first).
+                 'x'x(length($payinfo)-$first-$last).
+                 substr($payinfo,(length($payinfo)-$last));
     } elsif ($payby eq 'CHEK' || $payby eq 'DCHK' ) {
       # Checks (Show last 2 @ bank)
       my( $account, $aba ) = split('@', $payinfo );
@@ -210,7 +216,7 @@ sub payinfo_check {
   FS::payby->can_payby($self->table, $self->payby)
     or return "Illegal payby: ". $self->payby;
 
-  if ( $self->payby eq 'CARD' ) {
+  if ( $self->payby eq 'CARD' && ! $self->is_encrypted($self->payinfo) ) {
     my $payinfo = $self->payinfo;
     $payinfo =~ s/\D//g;
     $self->payinfo($payinfo);
@@ -221,7 +227,7 @@ sub payinfo_check {
       validate($self->payinfo) or return "Illegal credit card number";
       return "Unknown card type" if cardtype($self->payinfo) eq "Unknown";
     } else {
-      $self->payinfo('N/A');
+      $self->payinfo('N/A'); #???
     }
   } else {
     my $error = $self->ut_textn('payinfo');