Netsapiens export; check URLs for validity. (#14919)
authorMike Robinson <miker@freeside.biz>
Fri, 27 Apr 2012 19:47:57 +0000 (14:47 -0500)
committerMike Robinson <miker@freeside.biz>
Fri, 27 Apr 2012 19:47:57 +0000 (14:47 -0500)
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.

FS/FS/option_Common.pm
FS/FS/part_export/netsapiens.pm

index 968dcdf..b29cf44 100644 (file)
@@ -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.
index 867c19a..b30951d 100644 (file)
@@ -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('', @_);