[freeside-commits] branch master updated. 03dc5996825a284a3bb922324402730f9f2e404f

Mike Robinson miker at 420.am
Fri Apr 27 13:23:19 PDT 2012


The branch, master has been updated
       via  03dc5996825a284a3bb922324402730f9f2e404f (commit)
      from  d54109cc3035ce63ab0f6c2ec94317e378887d49 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 03dc5996825a284a3bb922324402730f9f2e404f
Author: Mike Robinson <miker at freeside.biz>
Date:   Fri Apr 27 14:47:57 2012 -0500

    Netsapiens export; check URLs for validity.  (#14919)
    
    A new "check_options()" subroutine is added to option_Common.pm which is called by
    "insert" and "replace."  (Do-nothing routine provided, designed to be overridden.)
    A "real" implementation is provided in netsapiens.pm.

diff --git a/FS/FS/option_Common.pm b/FS/FS/option_Common.pm
index 968dcdf..b29cf44 100644
--- a/FS/FS/option_Common.pm
+++ b/FS/FS/option_Common.pm
@@ -65,7 +65,15 @@ sub insert {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
-  my $error = $self->SUPER::insert;
+  my $error;
+  
+  $error = $self->check_options($options);
+  if ( $error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return $error;
+  }
+  
+  $error = $self->SUPER::insert;
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
     return $error;
@@ -197,7 +205,17 @@ sub replace {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
-  my $error = $self->SUPER::replace($old);
+  my $error;
+  
+  if ($options_supplied) {
+  	$error = $self->check_options($options);
+  	if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return $error;
+    }
+  }
+  
+  $error = $self->SUPER::replace($old);
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
     return $error;
@@ -274,6 +292,21 @@ sub replace {
 
 }
 
+=item check_options HASHREF
+
+This method is called by 'insert' and 'replace' to check the options that were supplied.
+
+Return error-message, or false.
+
+(In this class, this is a do-nothing routine that always returns false.  Override as necessary.  No need to call superclass.)
+
+=cut
+
+sub check_options {
+	my ($self, $options) = @_;
+	'';
+}
+
 =item option_objects
 
 Returns all options as FS::I<tablename>_option objects.
diff --git a/FS/FS/part_export/netsapiens.pm b/FS/FS/part_export/netsapiens.pm
index 867c19a..b30951d 100644
--- a/FS/FS/part_export/netsapiens.pm
+++ b/FS/FS/part_export/netsapiens.pm
@@ -5,6 +5,7 @@ use MIME::Base64;
 use Tie::IxHash;
 use FS::part_export;
 use Date::Format qw( time2str );
+use Regexp::Common qw/URI/;
 
 @ISA = qw(FS::part_export);
 $me = '[FS::part_export::netsapiens]';
@@ -80,6 +81,22 @@ END
 
 sub rebless { shift; }
 
+
+sub check_options {
+	my ($self, $options) = @_;
+	
+	my $rex = qr/$RE{URI}{HTTP}{-scheme => qr|https?|}/;			# match any "http:" or "https:" URL
+	
+	for my $key (qw/url device_url/) {
+		if ($$options{$key} && ($$options{$key} !~ $rex)) {
+				return "Invalid (URL): " . $$options{$key};
+		}
+	}
+	return '';
+}
+
+
+
 sub ns_command {
   my $self = shift;
   $self->_ns_command('', @_);

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/option_Common.pm          |   37 +++++++++++++++++++++++++++++++++++--
 FS/FS/part_export/netsapiens.pm |   17 +++++++++++++++++
 2 files changed, 52 insertions(+), 2 deletions(-)




More information about the freeside-commits mailing list