self-service: make payment UI done
[freeside.git] / fs_selfservice / FS-SelfService / SelfService.pm
index 3cd4fd9..c561dab 100644 (file)
@@ -1,7 +1,7 @@
 package FS::SelfService;
 
 use strict;
-use vars qw($VERSION @ISA @EXPORT_OK $socket);
+use vars qw($VERSION @ISA @EXPORT_OK $socket %autoload );
 use Exporter;
 use Socket;
 use FileHandle;
@@ -12,10 +12,21 @@ use Storable qw(nstore_fd fd_retrieve);
 $VERSION = '0.03';
 
 @ISA = qw( Exporter );
-@EXPORT_OK = qw( passwd );
 
 $socket =  "/usr/local/freeside/selfservice_socket";
 
+%autoload = (
+  'passwd'        => 'passwd/passwd',
+  'chfn'          => 'passwd/passwd',
+  'chsh'          => 'passwd/passwd',
+  'login'         => 'MyAccount/login',
+  'customer_info' => 'MyAccount/customer_info',
+  'invoice'       => 'MyAccount/invoice',
+  'cancel'        => 'MyAccount/cancel',
+  'payment_info'  => 'MyAccount/payment_info',
+);
+@EXPORT_OK = keys %autoload;
+
 $ENV{'PATH'} ='/usr/bin:/usr/ucb:/bin';
 $ENV{'SHELL'} = '/bin/sh';
 $ENV{'IFS'} = " \t\n";
@@ -49,17 +60,25 @@ Returns the empty value on success, or an error message on errors.
 
 =cut
 
-sub passwd {
-  my $param;
-  if ( ref($_[0]) ) {
-    $param = shift;
-  } else {
-    $param = { @_ };
-  }
+foreach my $autoload ( keys %autoload ) {
+
+  my $eval =
+  "sub $autoload { ". '
+                   my $param;
+                   if ( ref($_[0]) ) {
+                     $param = shift;
+                   } else {
+                     $param = { @_ };
+                   }
+
+                   $param->{_packet} = \''. $autoload{$autoload}. '\';
+
+                   simple_packet($param);
+                 }';
 
-  $param->{_packet} = 'passwd';
+  eval $eval;
+  die $@ if $@;
 
-  simple_packet($param);
 }
 
 sub simple_packet {
@@ -78,7 +97,7 @@ sub simple_packet {
   my $return = fd_retrieve(\*SOCK) or die "error reading result: $!";
   die $return->{'_error'} if defined $return->{_error} && $return->{_error};
 
-  $return->{'error'};
+  $return;
 }
 
 =back