summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
authorMitch Jackson <mitch@mitchjacksontech.com>2018-08-26 17:11:38 -0400
committerMitch Jackson <mitch@freeside.biz>2018-09-07 15:02:26 -0400
commitfb4fda982de4c62e88edfb4302cd52c10ec95d8e (patch)
tree3643af92da2ebd173e93b46591839652985788d5 /FS
parentf257c3be34aed5f651a1928f4bc18864c0d533bc (diff)
RT# 80869 Improve cust_payby.paydate validation
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/Record.pm54
-rw-r--r--FS/FS/cust_payby.pm2
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')