added a config value to control the extent of credit card masking, but since cust_mai...
authorivan <ivan>
Sat, 1 Mar 2008 23:30:44 +0000 (23:30 +0000)
committerivan <ivan>
Sat, 1 Mar 2008 23:30:44 +0000 (23:30 +0000)
FS/FS/Conf.pm
FS/FS/payinfo_Mixin.pm

index 0c0485a..a763ed4 100644 (file)
@@ -2184,6 +2184,23 @@ worry that config_items is freeside-specific and icky.
                      ],
   },
 
+  {
+    'key'         => 'card_masking_method',
+    'section'     => 'UI',
+    'description' => 'Digits to display when masking credit cards.  Note that the first six digits are necessary to canonically identify the credit card type (Visa/MC, Amex, Discover, Maestro, etc.) in all cases.  The first four digits can identify the most common credit card types in most cases (Visa/MC, Amex, and Discover).  The first two digits can distinguish between Visa/MC and Amex.',
+    'type'        => 'select',
+    'select_hash' => [
+                       ''            => '123456xxxxxx1234',
+                       'first6last2' => '123456xxxxxxxx12',
+                       'first4last4' => '1234xxxxxxxx1234',
+                       'first4last2' => '1234xxxxxxxxxx12',
+                       'first2last4' => '12xxxxxxxxxx1234',
+                       'first2last2' => '12xxxxxxxxxxxx12',
+                       'first0last4' => 'xxxxxxxxxxxx1234',
+                       'first0last2' => 'xxxxxxxxxxxxxx12',
+                     ],
+  },
+
 );
 
 1;
index 2d7b4ff..15c4e39 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 );