X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=fs_signup%2FFS-SignupClient%2Fcgi%2Fsignup.cgi;h=0da9605796ea7de102d455acd0ca36d6c8b9ab7d;hp=7131ad2e876cd3577560062639bd110664774222;hb=294b8c0914f497b7714bad51dfb000d33e843995;hpb=464d6da8fb57fe3e60e4c2c3cae6069bdafff6a5 diff --git a/fs_signup/FS-SignupClient/cgi/signup.cgi b/fs_signup/FS-SignupClient/cgi/signup.cgi index 7131ad2e8..0da960579 100755 --- a/fs_signup/FS-SignupClient/cgi/signup.cgi +++ b/fs_signup/FS-SignupClient/cgi/signup.cgi @@ -1,21 +1,94 @@ #!/usr/bin/perl -Tw # -# $Id: signup.cgi,v 1.1 1999-08-24 07:40:45 ivan Exp $ +# $Id: signup.cgi,v 1.11 2001-08-30 16:23:32 ivan Exp $ use strict; -use vars qw( @payby $cgi $locales $packages $pops $r $error +use vars qw( @payby $cgi $locales $packages $pops $error $last $first $ss $company $address1 $address2 $city $state $county $country $zip $daytime $night $fax $invoicing_list $payby $payinfo - $paydate $payname $pkgpart $username $password $popnum ); -use subs qw( print_form print_okay expselect ); - + $paydate $payname $referral_custnum + $pkgpart $username $password $popnum + $ieak_file $ieak_template $cck_file $cck_template + $signup_html $signup_template $success_html $success_template + $ac $exch $loc + $self_url + ); +use subs qw( print_form print_okay expselect signup_default success_default ); use CGI; use CGI::Carp qw(fatalsToBrowser); -use FS::SignupClient qw( signup_info new_customer ); +use HTTP::Headers::UserAgent 2.00; +use FS::SignupClient 0.02 qw( signup_info new_customer ); +use Text::Template; +#acceptable payment methods +# #@payby = qw( CARD BILL COMP ); #@payby = qw( CARD BILL ); -@payby = qw( CARD ); +#@payby = qw( CARD ); +@payby = qw( CARD PREPAY ); + +$ieak_file = '/usr/local/freeside/ieak.template'; +$cck_file = '/usr/local/freeside/cck.template'; +$signup_html = '/usr/local/freeside/signup.html'; +$success_html = '/usr/local/freeside/success.html'; + +if ( -e $ieak_file ) { + my $ieak_txt = Text::Template::_load_text($ieak_file) + or die $Text::Template::ERROR; + $ieak_txt =~ /^(.*)$/s; #untaint the template source - it's trusted + $ieak_txt = $1; + $ieak_template = new Text::Template ( TYPE => 'STRING', SOURCE => $ieak_txt ) + or die $Text::Template::ERROR; +} else { + $ieak_template = ''; +} + +if ( -e $cck_file ) { + my $cck_txt = Text::Template::_load_text($cck_file) + or die $Text::Template::ERROR; + $cck_txt =~ /^(.*)$/s; #untaint the template source - it's trusted + $cck_txt = $1; + $cck_template = new Text::Template ( TYPE => 'STRING', SOURCE => $cck_txt ) + or die $Text::Template::ERROR; +} else { + $cck_template = ''; +} + +if ( -e $signup_html ) { + my $signup_txt = Text::Template::_load_text($signup_html) + or die $Text::Template::ERROR; + $signup_txt =~ /^(.*)$/s; #untaint the template source - it's trusted + $signup_txt = $1; + $signup_template = new Text::Template ( TYPE => 'STRING', + SOURCE => $signup_txt, + DELIMITERS => [ '<%=', '%>' ] + ) + or die $Text::Template::ERROR; +} else { + $signup_template = new Text::Template ( TYPE => 'STRING', + SOURCE => &signup_default, + DELIMITERS => [ '<%=', '%>' ] + ) + or die $Text::Template::ERROR; +} + +if ( -e $success_html ) { + my $success_txt = Text::Template::_load_text($signup_html) + or die $Text::Template::ERROR; + $success_txt =~ /^(.*)$/s; #untaint the template source - it's trusted + $success_txt = $1; + $success_template = new Text::Template ( TYPE => 'STRING', + SOURCE => $success_txt, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} else { + $success_template = new Text::Template ( TYPE => 'STRING', + SOURCE => &success_default, + DELIMITERS => [ '<%=', '%>' ], + ) + or die $Text::Template::ERROR; +} ( $locales, $packages, $pops ) = signup_info(); @@ -43,29 +116,30 @@ if ( defined $cgi->param('magic') ) { } ( $error = new_customer ( { - 'last' => $last = $cgi->param('last'), - 'first' => $first = $cgi->param('first'), - 'ss' => $ss = $cgi->param('ss'), - 'company' => $company = $cgi->param('company'), - 'address1' => $address1 = $cgi->param('address1'), - 'address2' => $address2 = $cgi->param('address2'), - 'city' => $city = $cgi->param('city'), - 'county' => $county, - 'state' => $state, - 'zip' => $zip = $cgi->param('zip'), - 'country' => $country, - 'daytime' => $daytime = $cgi->param('daytime'), - 'night' => $night = $cgi->param('night'), - 'fax' => $fax = $cgi->param('fax'), - 'payby' => $payby, - 'payinfo' => $payinfo, - 'paydate' => $paydate, - 'payname' => $payname, - 'invoicing_list' => $invoicing_list, - 'pkgpart' => $pkgpart = $cgi->param('pkgpart'), - 'username' => $username = $cgi->param('username'), - '_password' => $password = $cgi->param('_password'), - 'popnum' => $popnum = $cgi->param('popnum'), + 'last' => $last = $cgi->param('last'), + 'first' => $first = $cgi->param('first'), + 'ss' => $ss = $cgi->param('ss'), + 'company' => $company = $cgi->param('company'), + 'address1' => $address1 = $cgi->param('address1'), + 'address2' => $address2 = $cgi->param('address2'), + 'city' => $city = $cgi->param('city'), + 'county' => $county, + 'state' => $state, + 'zip' => $zip = $cgi->param('zip'), + 'country' => $country, + 'daytime' => $daytime = $cgi->param('daytime'), + 'night' => $night = $cgi->param('night'), + 'fax' => $fax = $cgi->param('fax'), + 'payby' => $payby, + 'payinfo' => $payinfo, + 'paydate' => $paydate, + 'payname' => $payname, + 'invoicing_list' => $invoicing_list, + 'referral_custnum' => $referral_custnum = $cgi->param('ref'), + 'pkgpart' => $pkgpart = $cgi->param('pkgpart'), + 'username' => $username = $cgi->param('username'), + '_password' => $password = $cgi->param('_password'), + 'popnum' => $popnum = $cgi->param('popnum'), } ) ) ? print_form() : print_okay(); @@ -97,206 +171,260 @@ if ( defined $cgi->param('magic') ) { $username = ''; $password = ''; $popnum = ''; - + $referral_custnum = $cgi->param('ref') || ''; print_form; } sub print_form { - my $r = qq!*!; - my $self_url = $cgi->self_url; + $cgi->delete('ref'); + $self_url = $cgi->self_url; - print $cgi->header( '-expires' => 'now' ), <ISP Signup form -ISP Signup form -END + $error = "Error: $error" if $error; + + print $cgi->header( '-expires' => 'now' ), + $signup_template->fill_in(); + +} + +sub print_okay { + my $user_agent = new HTTP::Headers::UserAgent $ENV{HTTP_USER_AGENT}; + + $cgi->param('username') =~ /^(.+)$/ + or die "fatal: invalid username got past FS::SignupClient::new_customer"; + my $username = $1; + $cgi->param('_password') =~ /^(.+)$/ + or die "fatal: invalid password got past FS::SignupClient::new_customer"; + my $password = $1; + ( $cgi->param('first'). ' '. $cgi->param('last') ) =~ /^(.*)$/ + or die "fatal: invalid email_name got past FS::SignupCLient::new_customer"; + my $email_name = $1; + + my $pop = pop_info($cgi->param('popnum')) + or die "fatal: invalid popnum got past FS::SignupClient::new_customer"; + ( $ac, $exch, $loc ) = ( $pop->{'ac'}, $pop->{'exch'}, $pop->{'loc'} ); + + if ( $ieak_template + && $user_agent->platform eq 'ia32' + && $user_agent->os =~ /^win/ + && ($user_agent->browser)[0] eq 'IE' + ) + { #send an IEAK config + print $cgi->header('application/x-Internet-signup'), + $ieak_template->fill_in(); + } elsif ( $cck_template + && $user_agent->platform eq 'ia32' + && $user_agent->os =~ /^win/ + && ($user_agent->browser)[0] eq 'Netscape' + ) + { #send a Netscape config + my $cck_data = $cck_template->fill_in(); + print $cgi->header('application/x-netscape-autoconfigure-dialer-v2'), + map { + m/(.*)\s+(.*)$/; + pack("N", length($1)). $1. pack("N", length($2)). $2; + } split(/\n/, $cck_data); + + } else { #send a simple confirmation + print $cgi->header( '-expires' => 'now' ), + $success_template->fill_in(); + } +} + +sub pop_info { + my $popnum = shift; + my $pop; + foreach $pop ( @{$pops} ) { + if ( $pop->{'popnum'} == $popnum ) { return $pop; } + } + ''; +} - print qq!Error: $error! if $error; +sub expselect { + my $prefix = shift; + my $date = shift || ''; + my( $m, $y ) = ( 0, 0 ); + if ( $date =~ /^(\d{4})-(\d{2})-\d{2}$/ ) { #PostgreSQL date format + ( $m, $y ) = ( $2, $1 ); + } elsif ( $date =~ /^(\d{1,2})-(\d{1,2}-)?(\d{4}$)/ ) { + ( $m, $y ) = ( $1, $3 ); + } + my $return = qq!!; + for ( 1 .. 12 ) { + $return .= "/!; + for ( 1999 .. 2037 ) { + $return .= "Signup successful +Signup successful +Thanks for signing up! + +END +} - print < +sub signup_default { #html to use if you don't specify a template file + <<'END'; +ISP Signup form +ISP Signup form +<%= $error %> + + + Contact Information - ${r}Contact name(last, first) - , - - SS# - + *Contact name(last, first) + , + Company - + - ${r}Address - + *Address + - + - ${r}City - - ${r}State/Country + *City + + *State/Country -END - foreach ( @{$locales} ) { - print "{'state'} - && $county eq $_->{'county'} - && $country eq $_->{'country'} - ); - print ">", $_->{'state'}; - print " (",$_->{'county'},")" if $_->{'county'}; - print " / ", $_->{'country'}; - } + <%= + foreach ( @{$locales} ) { + $OUT .= '{'state'} + && $county eq $_->{'county'} + && $country eq $_->{'country'} + ); + $OUT .= '>'. $_->{'state'}; + $OUT .= ' ('. $_->{'county'}. ')' if $_->{'county'}; + $OUT .= ' / '. $_->{'country'}; + } + %> - print < - ${r}Zip - + *Zip + Day Phone - + Night Phone - + Fax - + -$r required fields +* required fields Billing information -END - print qq!Postal mail invoiceEmail invoice ', - qq!!; - - print < + + Postal mail invoice + +Email invoice + Billing type -END - my %payby = ( - 'CARD' => qq!Credit card${r}${r}Exp !. expselect("CARD"). qq!${r}Name on card!, - 'BILL' => qq!BillingP.O. ${r}Exp !. expselect("BILL", "12-2037"). qq!${r}Attention!, - 'COMP' => qq!Complimentary${r}Approved by${r}Exp !. expselect("COMP"), - ); - - my %paybychecked = ( - 'CARD' => qq!Credit card${r}${r}Exp !. expselect("CARD", $paydate). qq!${r}Name on card!, - 'BILL' => qq!BillingP.O. ${r}Exp !. expselect("BILL", $paydate). qq!${r}Attention!, - 'COMP' => qq!Complimentary${r}Approved by${r}Exp !. expselect("COMP", $paydate), - ); - - for (@payby) { - print qq! $paybychecked{$_}!; - } else { - print qq!> $payby{$_}!; + <%= + my %payby = ( + 'CARD' => qq!Credit card**Exp !. expselect("CARD"). qq!*Name on card!, + 'BILL' => qq!BillingP.O. *Exp !. expselect("BILL", "12-2037"). qq!*Attention!, + 'COMP' => qq!Complimentary*Approved by*Exp !. expselect("COMP"), + 'PREPAY' => qq!Prepaid card*!, + ); + + my %paybychecked = ( + 'CARD' => qq!Credit card**Exp !. expselect("CARD", $paydate). qq!*Name on card!, + 'BILL' => qq!BillingP.O. *Exp !. expselect("BILL", $paydate). qq!*Attention!, + 'COMP' => qq!Complimentary*Approved by*Exp !. expselect("COMP", $paydate), + 'PREPAY' => qq!Prepaid card*!, + ); + + for (@payby) { + $OUT .= qq! $paybychecked{$_}!; + } else { + $OUT .= qq!> $payby{$_}!; + } } - } + %> - print <$r required fields for each billing type +* required fields for each billing type First package (none) -END - foreach my $package ( @{$packages} ) { - print qq!{'pkgpart'} == $pkgpart ); - print ">", $package->{'pkg'}; - } + <%= + foreach my $package ( @{$packages} ) { + $OUT .= '{'pkgpart'} == $pkgpart; + $OUT .= '>'. $package->{'pkg'}; + } + %> - print < Username - + Password - + (blank to generate) POP -END - foreach my $pop ( @{$pops} ) { - print qq!{'popnum'} == $popnum ) ? ' SELECTED' : '', ">", - $pop->{'popnum'}, ": ", - $pop->{'city'}, ", ", - $pop->{'state'}, - " (", $pop->{'ac'}, ")/", - $pop->{'exch'}, "\n" - ; - } - print <{'popnum'}. '"'; + $OUT .= ' SELECTED' if $popnum && $pop->{'popnum'} == $popnum; + $OUT .= '>'. $pop->{'popnum'}. ': '. $pop->{'city'}. ', '. + $pop->{'state'}. ' ('. $pop->{'ac'}. ')/'. $pop->{'exch'}. "\n"; + } + %> + END - -} - -sub print_okay { - print $cgi->header( '-expires' => 'now' ), <Signup successful -Signup successful -blah blah blah - -