diff options
author | Mitch Jackson <mitch@mitchjacksontech.com> | 2018-08-26 17:11:38 -0400 |
---|---|---|
committer | Mitch Jackson <mitch@freeside.biz> | 2018-09-07 15:02:26 -0400 |
commit | fb4fda982de4c62e88edfb4302cd52c10ec95d8e (patch) | |
tree | 3643af92da2ebd173e93b46591839652985788d5 /FS | |
parent | f257c3be34aed5f651a1928f4bc18864c0d533bc (diff) |
RT# 80869 Improve cust_payby.paydate validation
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/Record.pm | 54 | ||||
-rw-r--r-- | FS/FS/cust_payby.pm | 2 |
2 files changed, 55 insertions, 1 deletions
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm index 6ea9368..08d681e 100644 --- a/FS/FS/Record.pm +++ b/FS/FS/Record.pm @@ -3207,6 +3207,60 @@ sub ut_enumn { : ''; } +=item ut_date COLUMN + +Check/untaint a column containing a date string. + +Date will be normalized to YYYY-MM-DD format + +=cut + +sub ut_date { + my ( $self, $field ) = @_; + my $value = $self->getfield( $field ); + + my @date = split /[\-\/]/, $value; + if ( scalar(@date) == 3 ) { + @date = @date[2,0,1] if $date[2] >= 1900; + + local $@; + my $ymd; + eval { + # DateTime will die given invalid date + $ymd = DateTime->new( + year => $date[0], + month => $date[1], + day => $date[2], + )->ymd('-'); + }; + + unless( $@ ) { + $self->setfield( $field, $ymd ) unless $value eq $ymd; + return ''; + } + + } + return "Illegal (date) field $field: $value"; +} + +=item ut_daten COLUMN + +Check/untaint a column containing a date string. + +Column may be null. + +Date will be normalized to YYYY-MM-DD format + +=cut + +sub ut_daten { + my ( $self, $field ) = @_; + + $self->getfield( $field ) =~ /^()$/ + ? $self->setfield( $field, '' ) + : $self->ut_date( $field ); +} + =item ut_flag COLUMN Check/untaint a column if it contains either an empty string or 'Y'. This diff --git a/FS/FS/cust_payby.pm b/FS/FS/cust_payby.pm index 704741f..477700d 100644 --- a/FS/FS/cust_payby.pm +++ b/FS/FS/cust_payby.pm @@ -315,7 +315,7 @@ sub check { #encrypted #|| $self->ut_textn('payinfo') #encrypted #|| $self->ut_textn('paycvv') # || $self->ut_textn('paymask') #XXX something - #later #|| $self->ut_textn('paydate') + || $self->ut_daten('paydate') || $self->ut_numbern('paystart_month') || $self->ut_numbern('paystart_year') || $self->ut_numbern('payissue') |