From: ivan Date: Sat, 1 Mar 2008 23:30:44 +0000 (+0000) Subject: added a config value to control the extent of credit card masking, but since cust_mai... X-Git-Tag: TRIXBOX_2_6~41 X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=c21f9fadde9100aedb8c4cfc35629bc3294ba91e added a config value to control the extent of credit card masking, but since cust_main.paymask is in the db, need something to update it for all existing customers too --- diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 0c0485a2a..a763ed4c6 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -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; diff --git a/FS/FS/payinfo_Mixin.pm b/FS/FS/payinfo_Mixin.pm index 2d7b4ffe0..15c4e3979 100644 --- a/FS/FS/payinfo_Mixin.pm +++ b/FS/FS/payinfo_Mixin.pm @@ -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 );