[freeside-commits] freeside/FS/FS/part_export domreg_opensrs.pm, 1.5, 1.5.2.1

Jeff Finucane,420,, jeff at wavetail.420.am
Mon Mar 8 20:41:11 PST 2010


Update of /home/cvs/cvsroot/freeside/FS/FS/part_export
In directory wavetail.420.am:/tmp/cvs-serv8326/FS/FS/part_export

Modified Files:
      Tag: FREESIDE_1_9_BRANCH
	domreg_opensrs.pm 
Log Message:
backport opensrs modifications (RT 5825 stuff)

Index: domreg_opensrs.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/part_export/domreg_opensrs.pm,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -w -d -r1.5 -r1.5.2.1
--- domreg_opensrs.pm	15 Jun 2009 19:41:28 -0000	1.5
+++ domreg_opensrs.pm	9 Mar 2010 04:41:09 -0000	1.5.2.1
@@ -1,7 +1,8 @@
 package FS::part_export::domreg_opensrs;
 
-use vars qw(@ISA %info %options $conf);
+use vars qw(@ISA %info %options $conf $me $DEBUG);
 use Tie::IxHash;
+use DateTime;
 use FS::Record qw(qsearchs qsearch);
 use FS::Conf;
 use FS::part_export::null;
@@ -38,6 +39,8 @@
 =cut
 
 @ISA = qw(FS::part_export::null);
+$me = '[' .  __PACKAGE__ . ']';
+$DEBUG = 1;
 
 my @tldlist = qw/com net org biz info name mobi at be ca cc ch cn de dk es eu fr it mx nl tv uk us/;
 
@@ -50,6 +53,10 @@
                       },
   'masterdomain' => { label => 'Master domain at OpenSRS',
                       },
+  'wait_for_pay' => { label => 'Do not provision until payment is received',
+                      type => 'checkbox',
+                      default => '0',
+                    },
   'debug_level'  => { label => 'Net::OpenSRS debug level',
                       type => 'select',
                       options => [ 0, 1, 2, 3 ],
@@ -213,6 +220,7 @@
   return 'live' if $self->machine eq "rr-n1-tor.opensrs.net";
   return 'test' if $self->machine eq "horizon.opensrs.net";
   undef;
+
 }
 
 =item _export_insert
@@ -241,6 +249,20 @@
   return "Unknown domain action " . $svc_domain->action;
 }
 
+sub _export_insert_on_payment {
+  my( $self, $svc_domain ) = ( shift, shift );
+  warn "$me:_export_insert_on_payment called\n" if $DEBUG;
+  return '' unless $self->option('wait_for_pay');
+
+  my $queue = new FS::queue {
+    'svcnum' => $svc_domain->svcnum,
+    'job'    => 'FS::part_export::domreg_opensrs::renew_through',
+  };
+  $queue->insert( $self, $svc_domain ); #_export_insert with 'R' action?
+
+  return '';
+}
+
 ## Domain registration exports do nothing on replace.  Mainly because we haven't decided what they should do.
 #sub _export_replace {
 #  my( $self, $new, $old ) = (shift, shift, shift);
@@ -376,10 +398,11 @@
 
   my $srs = $self->get_srs;
 
-  my $cookie = $srs->get_cookie( $self->option('masterdomain') );
-  if (!$cookie) {
-     return "Unable to get cookie at OpenSRS: " . $srs->last_response();
-  }
+#  cookie not required for registration
+#  my $cookie = $srs->get_cookie( $self->option('masterdomain') );
+#  if (!$cookie) {
+#     return "Unable to get cookie at OpenSRS: " . $srs->last_response();
+#  }
 
 #  return "Domain registration not enabled" if !$self->option('register');
   return $srs->last_response() if !$srs->register_domain( $svc_domain->domain, $c);
@@ -454,6 +477,84 @@
   return ''; # Should only get here if renewal succeeded
 }
 
+=item renew_through [ EPOCH_DATE ]
+
+Attempts to renew the domain through the specified date.  If no date is
+provided it is gleaned from the associated cust_pkg bill date
+
+Like most export functions, returns an error message on failure or undef on success.
+
+=cut
+
+sub renew_through {
+  my ( $self, $svc_domain, $date ) = @_;
+
+  warn "$me: renew_through called\n" if $DEBUG;
+  eval "use Net::OpenSRS;";
+  return $@ if $@;
+
+  unless ( $date ) {
+    my $cust_pkg = $svc_domain->cust_svc->cust_pkg;
+    return "Can't renew: no date specified and domain is not in a package."
+      unless $cust_pkg;
+    $date = $cust_pkg->bill;
+  }
+
+  my $err = $self->is_supported_domain( $svc_domain );
+  return $err if $err;
+
+  warn "$me: checking status\n" if $DEBUG;
+  my $rv = $self->get_status($svc_domain);
+  return "Domain ". $svc_domain->domain. " is not renewable"
+    unless $rv->{expdate};
+
+  return "Can't parse expiration date for ". $svc_domain->domain
+    unless $rv->{expdate} =~ /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
+
+  my ($year,$month,$day,$hour,$minute,$second) = ($1,$2,$3,$4,$5,$6);
+  my $exp = DateTime->new( year   => $year,
+                           month  => $month,
+                           day    => $day,
+                           hour   => $hour,
+                           minute => $minute,
+                           second => $second,
+                           time_zone => 'America/New_York',#timezone of opensrs
+                         );
+
+  my $bill = DateTime->
+   from_epoch( 'epoch'     => $date,
+               'time_zone' => DateTime::TimeZone->new( name => 'local' ),
+  );
+
+  my $years = 0;
+  while ( DateTime->compare( $bill, $exp ) > 0 ) {
+    $years++;
+    $exp->add( 'years' => 1 );
+
+    return "Can't renew ". $svc_domain->domain. " for more than 10 years."
+      if $years > 10; #no infinite loop
+  }
+
+  warn "$me: renewing ". $svc_domain->domain. "for $years years\n" if $DEBUG;
+  my $srs = $self->get_srs;
+  $rv = $srs->make_request(
+    {
+      action     => 'renew',
+      object     => 'domain',
+      attributes => {
+        domain                => $svc_domain->domain,
+        auto_renew            => 0,
+        handle                => 'process',
+        period                => $years,
+        currentexpirationyear => $year,
+      }
+    }
+  );
+  return $rv->{response_text} unless $rv->{is_success};
+
+  return ''; # Should only get here if renewal succeeded
+}
+
 =item revoke
 
 Attempts to revoke the domain registration.  Only succeeds if invoked during the OpenSRS



More information about the freeside-commits mailing list