[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