diff options
Diffstat (limited to 'fs_signup')
-rw-r--r-- | fs_signup/FS-SignupClient/MANIFEST | 1 | ||||
-rw-r--r-- | fs_signup/FS-SignupClient/Makefile.PL | 6 | ||||
-rwxr-xr-x | fs_signup/FS-SignupClient/cgi/signup.cgi | 118 | ||||
-rwxr-xr-x | fs_signup/FS-SignupClient/cgi/signup.html | 4 | ||||
-rwxr-xr-x | fs_signup/FS-SignupClient/fs_signupd | 86 |
5 files changed, 130 insertions, 85 deletions
diff --git a/fs_signup/FS-SignupClient/MANIFEST b/fs_signup/FS-SignupClient/MANIFEST index 365ae660b..b4a9900c8 100644 --- a/fs_signup/FS-SignupClient/MANIFEST +++ b/fs_signup/FS-SignupClient/MANIFEST @@ -4,4 +4,5 @@ MANIFEST.SKIP Makefile.PL SignupClient.pm test.pl +fs_signupd cgi/signup.cgi diff --git a/fs_signup/FS-SignupClient/Makefile.PL b/fs_signup/FS-SignupClient/Makefile.PL index 9850c870d..310200b57 100644 --- a/fs_signup/FS-SignupClient/Makefile.PL +++ b/fs_signup/FS-SignupClient/Makefile.PL @@ -4,9 +4,9 @@ use ExtUtils::MakeMaker; WriteMakefile( 'NAME' => 'FS::SignupClient', 'VERSION_FROM' => 'SignupClient.pm', # finds $VERSION -# 'EXE_FILES' => [ 'fs_signupd' ], -# 'INSTALLSCRIPT' => '/usr/local/sbin', -# 'INSTALLSITEBIN' => '/usr/local/sbin', + 'EXE_FILES' => [ 'fs_signupd' ], + 'INSTALLSCRIPT' => '/usr/local/sbin', + 'INSTALLSITEBIN' => '/usr/local/sbin', 'PERM_RWX' => '750', 'PREREQ_PM' => { 'Business::CreditCard' => 0, diff --git a/fs_signup/FS-SignupClient/cgi/signup.cgi b/fs_signup/FS-SignupClient/cgi/signup.cgi index 0a9a51008..28dc4c95b 100755 --- a/fs_signup/FS-SignupClient/cgi/signup.cgi +++ b/fs_signup/FS-SignupClient/cgi/signup.cgi @@ -1,6 +1,6 @@ #!/usr/bin/perl -Tw # -# $Id: signup.cgi,v 1.50 2004-01-04 03:52:54 ivan Exp $ +# $Id: signup.cgi,v 1.29.2.21 2004-01-04 03:52:57 ivan Exp $ use strict; use vars qw( @payby $cgi $locales $packages @@ -130,7 +130,8 @@ $packages = $init_data->{agentnum2part_pkg}{$agentnum} if $agentnum; %pop = (); %popnum2pop = (); foreach (@$pops) { - push @{ $pop{ $_->{state} }->{ $_->{ac} } }, $_; + #push @{ $pop{ $_->{state} }->{ $_->{ac} } }, $_; + push @{ $pop{ $_->{state} } }, $_; $popnum2pop{$_->{popnum}} = $_; } @@ -156,10 +157,9 @@ if ( defined $cgi->param('magic') ) { } $payby = $cgi->param('payby'); - if ( $payby eq 'CHEK' || $payby eq 'DCHK' ) { + if ( $payby eq 'CHEK' ) { #$payinfo = join('@', map { $cgi->param( $payby. "_payinfo$_" ) } (1,2) ); - $payinfo = $cgi->param($payby. '_payinfo1'). '@'. - $cgi->param($payby. '_payinfo2'); + $payinfo = $cgi->param('CHEK_payinfo1').'@'.$cgi->param('CHEK_payinfo2'); } else { $payinfo = $cgi->param( $payby. '_payinfo' ); } @@ -215,7 +215,7 @@ if ( defined $cgi->param('magic') ) { } else { $password2 = $cgi->param('_password2'); - if ( $payby =~ /^(CARD|DCRD)$/ && $cgi->param('CARD_type') ) { + if ( $payby eq 'CARD' && $cgi->param('CARD_type') ) { $payinfo =~ s/\D//g; $payinfo =~ /^(\d{13,16})$/ @@ -284,7 +284,7 @@ if ( defined $cgi->param('magic') ) { $address1 = ''; $address2 = ''; $city = ''; - $state = $init_data->{statedefault}; + $state = $cgi->param('init_popstate') || $init_data->{statedefault}; $county = ''; $country = $init_data->{countrydefault}; $zip = ''; @@ -362,8 +362,7 @@ sub print_okay { #horrible false laziness with FS/FS/svc_acct_pop.pm::popselector sub popselector { - - my( $popnum ) = @_; + my( $popnum, $state ) = @_; return '<INPUT TYPE="hidden" NAME="popnum" VALUE="">' unless @$pops; return $pops->[0]{city}. ', '. $pops->[0]{state}. @@ -372,96 +371,61 @@ sub popselector { if scalar(@$pops) == 1; #my %pop = (); - #my %popnum2pop = (); - #foreach (@$pops) { - # push @{ $pop{ $_->{state} }->{ $_->{ac} } }, $_; - # $popnum2pop{$_->{popnum}} = $_; - #} + #push @{ $pop{$_->{state}} }, $_ foreach @$pops; - my $text = <<END; - <SCRIPT> - function opt(what,href,text) { - var optionName = new Option(text, href, false, false) - var length = what.length; - what.options[length] = optionName; - } -END + my $text; if ( $init_popstate ) { $text .= '<INPUT TYPE="hidden" NAME="init_popstate" VALUE="'. $init_popstate. '">'; } else { $text .= <<END; - function acstate_changed(what) { - state = what.options[what.selectedIndex].text; - what.form.popac.options.length = 0 - what.form.popac.options[0] = new Option("Area code", "-1", false, true); -END - } - - my @states = $init_popstate ? ( $init_popstate ) : keys %pop; - foreach my $state ( sort { $a cmp $b } @states ) { - $text .= "\nif ( state == \"$state\" ) {\n" unless $init_popstate; - - foreach my $ac ( sort { $a cmp $b } keys %{ $pop{$state} }) { - $text .= "opt(what.form.popac, \"$ac\", \"$ac\");\n"; - if ($ac eq $cgi->param('popac')) { - $text .= "what.form.popac.options[what.form.popac.length-1].selected = true;\n"; + <SCRIPT> + function opt(what,href,text) { + var optionName = new Option(text, href, false, false) + var length = what.length; + what.options[length] = optionName; } - } - $text .= "}\n" unless $init_popstate; - } - $text .= "popac_changed(what.form.popac)}\n"; - - $text .= <<END; - function popac_changed(what) { - ac = what.options[what.selectedIndex].text; - what.form.popnum.options.length = 0; - what.form.popnum.options[0] = new Option("City", "-1", false, true); - + function popstate_changed(what) { + state = what.options[what.selectedIndex].text; + what.form.popnum.options.length = 0; + what.form.popnum.options[0] = new Option("", "", false, true); END - foreach my $state ( @states ) { - foreach my $popac ( keys %{ $pop{$state} } ) { - $text .= "\nif ( ac == \"$popac\" ) {\n"; + foreach my $popstate ( sort { $a cmp $b } keys %pop ) { + $text .= "\nif ( state == \"$popstate\" ) {\n"; - foreach my $pop ( @{$pop{$state}->{$popac}}) { + foreach my $pop ( @{$pop{$popstate}}) { my $o_popnum = $pop->{popnum}; my $poptext = $pop->{city}. ', '. $pop->{state}. ' ('. $pop->{ac}. ')/'. $pop->{exch}. '-'. $pop->{loc}; - $text .= "opt(what.form.popnum, \"$o_popnum\", \"$poptext\");\n"; - if ($popnum == $o_popnum) { - $text .= "what.form.popnum.options[what.form.popnum.length-1].selected = true;\n"; - } + $text .= "opt(what.form.popnum, \"$o_popnum\", \"$poptext\");\n" } $text .= "}\n"; } - } - - - $text .= "}\n</SCRIPT>\n"; - - $text .= - qq!<TABLE CELLPADDING="0"><TR><TD><SELECT NAME="acstate"! . - qq!SIZE=1 onChange="acstate_changed(this)"><OPTION VALUE=-1>State!; - $text .= "<OPTION" . ($_ eq $cgi->param('acstate') ? " SELECTED" : "") . - ">$_" foreach sort { $a cmp $b } @states; - $text .= '</SELECT>'; #callback? return 3 html pieces? #'</TD>'; - $text .= - qq!<SELECT NAME="popac" SIZE=1 onChange="popac_changed(this)">!. - qq!<OPTION>Area code</SELECT></TR><TR VALIGN="top">!; + $text .= "}\n</SCRIPT>\n"; - $text .= qq!<TR><TD><SELECT NAME="popnum" SIZE=1 STYLE="width: 20em"><OPTION>City!; + $text .= + qq!<SELECT NAME="popstate" SIZE=1 onChange="popstate_changed(this)">!. + qq!<OPTION> !; + $text .= "<OPTION>$_" foreach sort { $a cmp $b } keys %pop; + $text .= '</SELECT>'; #callback? return 3 html pieces? #'</TD><TD>'; + } + $text .= qq!<SELECT NAME="popnum" SIZE=1><OPTION> !; - #comment this block to disable initial list polulation + #comment this block to disable initial list population my @initial_select = (); - if ( scalar( @$pops ) > 100 ) { - push @initial_select, $popnum2pop{$popnum} if $popnum2pop{$popnum}; + if ( $init_popstate ) { + @initial_select = grep { $_->{state} eq $init_popstate } @$pops; } else { - @initial_select = @$pops; + if ( scalar( @$pops ) > 100 ) { + push @initial_select, $popnum2pop{$popnum} if $popnum2pop{$popnum}; + } else { + @initial_select = @$pops; + } } foreach my $pop ( sort { $a->{state} cmp $b->{state} } @initial_select ) { $text .= qq!<OPTION VALUE="!. $pop->{popnum}. '"'. @@ -469,11 +433,9 @@ END $pop->{city}. ', '. $pop->{state}. ' ('. $pop->{ac}. ')/'. $pop->{exch}. '-'. $pop->{loc}; } - - $text .= qq!</SELECT></TD></TR></TABLE>!; + $text .= '</SELECT>'; $text; - } sub expselect { diff --git a/fs_signup/FS-SignupClient/cgi/signup.html b/fs_signup/FS-SignupClient/cgi/signup.html index 96bdac666..2b35d4a51 100755 --- a/fs_signup/FS-SignupClient/cgi/signup.html +++ b/fs_signup/FS-SignupClient/cgi/signup.html @@ -115,9 +115,7 @@ Contact Information my %payby = ( 'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD"). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="">!, - 'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD"). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="">!, 'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="">!, - 'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="">!, 'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!, 'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("BILL", "12-2037"). qq!<BR><font color="#ff0000">*</font>Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="Accounts Payable">!, 'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE=""><BR><font color="#ff0000">*</font>Exp !. expselect("COMP"), @@ -133,9 +131,7 @@ Contact Information my( $account, $aba ) = split('@', $payinfo); my %paybychecked = ( 'CARD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="CARD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("CARD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="CARD_payname" VALUE="$payname">!, - 'DCRD' => qq!Credit card<BR><font color="#ff0000">*</font>$cardselect<INPUT TYPE="text" NAME="DCRD_payinfo" VALUE="$payinfo" MAXLENGTH=19><BR><font color="#ff0000">*</font>Exp !. expselect("DCRD", $paydate). qq!<BR><font color="#ff0000">*</font>Name on card<BR><INPUT TYPE="text" NAME="DCRD_payname" VALUE="$payname">!, 'CHEK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="CHEK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="CHEK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="CHEK_month" VALUE="12"><INPUT TYPE="hidden" NAME="CHEK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="CHEK_payname" VALUE="$payname">!, - 'DCHK' => qq!Electronic check<BR>${r}Account number <INPUT TYPE="text" NAME="DCHK_payinfo1" VALUE="$account" MAXLENGTH=10><BR>${r}ABA/Routing code <INPUT TYPE="text" NAME="DCHK_payinfo2" VALUE="$aba" SIZE=10 MAXLENGTH=9><INPUT TYPE="hidden" NAME="DCHK_month" VALUE="12"><INPUT TYPE="hidden" NAME="DCHK_year" VALUE="2037"><BR>${r}Bank name <INPUT TYPE="text" NAME="DCHK_payname" VALUE="$payname">!, 'LECB' => qq!Phone bill billing<BR>${r}Phone number <INPUT TYPE="text" BANE="LECB_payinfo" VALUE="$payinfo" MAXLENGTH=15 SIZE=16><INPUT TYPE="hidden" NAME="LECB_month" VALUE="12"><INPUT TYPE="hidden" NAME="LECB_year" VALUE="2037"><INPUT TYPE="hidden" NAME="LECB_payname" VALUE="">!, 'BILL' => qq!Billing<BR>P.O. <INPUT TYPE="text" NAME="BILL_payinfo" VALUE="$payinfo"><BR><font color="#ff0000">*</font>Exp !. expselect("BILL", $paydate). qq!<BR><font color="#ff0000">*</font>Attention<BR><INPUT TYPE="text" NAME="BILL_payname" VALUE="$payname">!, 'COMP' => qq!Complimentary<BR><font color="#ff0000">*</font>Approved by<INPUT TYPE="text" NAME="COMP_payinfo" VALUE="$payinfo"><BR><font color="#ff0000">*</font>Exp !. expselect("COMP", $paydate), diff --git a/fs_signup/FS-SignupClient/fs_signupd b/fs_signup/FS-SignupClient/fs_signupd new file mode 100755 index 000000000..85bd68a2f --- /dev/null +++ b/fs_signup/FS-SignupClient/fs_signupd @@ -0,0 +1,86 @@ +#!/usr/bin/perl -Tw +# +# fs_signupd +# +# This is run REMOTELY over ssh by fs_signup_server. + +use strict; +use Socket; +use Storable qw(nstore_fd fd_retrieve); +use IO::Handle; + +use vars qw( $Debug ); + +$Debug = 1; + +my $fs_signupd_socket = "/usr/local/freeside/fs_signupd_socket"; +my $pid_file = "$fs_signupd_socket.pid"; + +$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin'; +$ENV{'SHELL'} = '/bin/sh'; +$ENV{'IFS'} = " \t\n"; +$ENV{'CDPATH'} = ''; +$ENV{'ENV'} = ''; +$ENV{'BASH_ENV'} = ''; + +$|=1; + +warn "[fs_signupd] Reading init data...\n" if $Debug; +my $init_data = fd_retrieve(\*STDIN); + +warn "[fs_signupd] Creating $fs_signupd_socket\n" if $Debug; +my $uaddr = sockaddr_un($fs_signupd_socket); +my $proto = getprotobyname('tcp'); +socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!"; +unlink($fs_signupd_socket); +bind(Server, $uaddr) or die "bind: $!"; +listen(Server,SOMAXCONN) or die "listen: $!"; + +if ( -e $pid_file ) { + open(PIDFILE,"<$pid_file"); + #chomp( my $old_pid = <PIDFILE> ); + my $old_pid = <PIDFILE>; + close PIDFILE; + $old_pid =~ /^(\d+)$/; + kill 'TERM', $1; +} +open(PIDFILE,">$pid_file"); +print PIDFILE "$$\n"; +close PIDFILE; + +warn "[fs_signupd] Entering main loop...\n" if $Debug; +my $paddr; +for ( ; $paddr = accept(Client,Server); close Client) { + + chop( my $command = <Client> ); + + if ( $command eq "signup_info" ) { + + warn "[fs_signupd] sending signup info...\n" if $Debug; + nstore_fd($init_data, \*Client) or die "can't send init data: $!"; + Client->flush; + + } elsif ( $command eq "new_customer" ) { + + #inefficient... + + warn "[fs_signupd] reading customer signup...\n" if $Debug; + my $signup_data = fd_retrieve(\*Client); + + warn "[fs_signupd] sending customer data to remote server...\n" if $Debug; + nstore_fd($signup_data, \*STDOUT) or die "can't send signup data: $!"; + STDOUT->flush; + + warn "[fs_signupd] reading error from remote server...\n" if $Debug; + my $error = <STDIN>; + + warn "[fs_signupd] sending error to local client...\n" if $Debug; + print Client $error; + Client->flush; + + } else { + die "unexpected command from client: $command"; + } + +} + |