[freeside] Netscape CCK patch

ivan ivan at 420.am
Wed May 10 17:11:09 PDT 2000


Okay, I've applied the changes here, updated the documentation and checked
it into CVS.

I didn't apply the agent stuff as that seems too site-specific - I can
see many situations in which you *don't* want users to be able to specify 
their agent.  (Incidentally, you can run multiple signup servers with
different agentnums).

I also changed a few other minor things.  Let me know if I broke anything. 

On Sun, Apr 09, 2000 at 12:35:12AM -0700, Kristian Hoffmann wrote:
> Here's the patch, written by Mark ad myself, for fs_signup plus a few pm's
> so that it will configure netscape if you use it's internet account setup
> wizard.  It also includes changes so that you can enter an "Agent ID" so
> you can track something like a reseller program with unique identifiers on
> your cds.  I can send the patch without those changes if someone would
> rather have that. Everything you need to know about the netscape cck and
> setting it up to work with this can be found at...
> 
> http://help.netscape.com/products/client/mc/acctproc4.html
> 
> -Kristian
> <khoff at pc-intouch.com>
> 

> diff -r -u --new-file fs-1.2.3-orig/fs_signup/FS-SignupClient/SignupClient.pm fs-1.2.3/fs_signup/FS-SignupClient/SignupClient.pm
> --- fs-1.2.3-orig/fs_signup/FS-SignupClient/SignupClient.pm	Tue Feb  1 23:44:00 2000
> +++ fs-1.2.3/fs_signup/FS-SignupClient/SignupClient.pm	Sun Apr  2 03:46:00 2000
> @@ -58,6 +58,7 @@
>      'username'       => $username,
>      '_password'       => $password,
>      'popnum'         => $popnum,
> +    'agentnum'       => $agentnum,
>    } );
>  
>  =head1 DESCRIPTION
> @@ -177,6 +178,7 @@
>    username
>    _password
>    popnum
> +  agentnum
>  
>  Returns a scalar error message, or the empty string for success.
>  
> @@ -192,7 +194,7 @@
>    print SOCK join("\n", map { $hashref->{$_} } qw(
>      first last ss company address1 address2 city county state zip country
>      daytime night fax payby payinfo paydate payname invoicing_list
> -    pkgpart username _password popnum
> +    pkgpart username _password popnum agentnum
>    ) ), "\n";
>    SOCK->flush;
>  
> diff -r -u --new-file fs-1.2.3-orig/fs_signup/FS-SignupClient/cgi/signup.cgi fs-1.2.3/fs_signup/FS-SignupClient/cgi/signup.cgi
> --- fs-1.2.3-orig/fs_signup/FS-SignupClient/cgi/signup.cgi	Wed Mar  1 00:14:30 2000
> +++ fs-1.2.3/fs_signup/FS-SignupClient/cgi/signup.cgi	Sat Apr  8 12:50:39 2000
> @@ -7,9 +7,9 @@
>               $last $first $ss $company $address1 $address2 $city $state $county
>               $country $zip $daytime $night $fax $invoicing_list $payby $payinfo
>               $paydate $payname $pkgpart $username $password $popnum
> -             $ieak_file $ieak_template $ac $exch $loc
> +             $ieak_file $ieak_template $cck_file $cck_template $ac $exch $loc
>             );
> -             #$ieak_docroot $ieak_baseurl
> +             #$ieak_docroot $ieak_baseurl $cck_docroot $cck_baseurl
>  use subs qw( print_form print_okay expselect );
>  
>  use CGI;
> @@ -22,10 +22,11 @@
>  #
>  #@payby = qw( CARD BILL COMP );
>  #@payby = qw( CARD BILL );
> -#@payby = qw( CARD );
> - at payby = qw( CARD PREPAY );
> + at payby = qw( CARD );
> +#@payby = qw( CARD PREPAY );
>  
>  $ieak_file = '/usr/local/freeside/ieak.template';
> +$cck_file = '/usr/local/freeside/cck.template';
>  
>  if ( -e $ieak_file ) {
>    $ieak_template = new Text::Template ( TYPE => 'FILE', SOURCE => $ieak_file )
> @@ -39,6 +40,7 @@
>  #	#
>  #	$ieak_docroot = "/var/www/sisd.420.am/freeside/ieak";
>  #	$ieak_baseurl = "http://sisd.420.am/freeside/ieak";
> +#
>  
>  #srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`);
>  
> @@ -148,7 +150,6 @@
>    <TD COLSPAN=3><INPUT TYPE="text" NAME="last" VALUE="$last">,
>                  <INPUT TYPE="text" NAME="first" VALUE="$first"></TD>
>    <TD ALIGN="right">SS#</TD>
> -  <TD><INPUT TYPE="text" NAME="ss" SIZE=11 VALUE="$ss"></TD>
>  </TR>
>  <TR>
>    <TD ALIGN="right">Company</TD>
> @@ -293,15 +294,21 @@
>  
>  sub print_okay {
>    my $user_agent = new HTTP::Headers::UserAgent $ENV{HTTP_USER_AGENT};
> +
> +  $cgi->param('username') =~ /^(\w{3,8})$/ or die "ERROR: Invalid username at print_okay phase!\n";
> +  my $username = $1;
> +  $cgi->param('_password') =~ /^(.{3,8})$/ or die "ERROR: Invalid password at print_okay phase!\n";
> +  my $password = $1;
> +  ($cgi->param('first'). ' '. $cgi->param('last')) =~ /^(.*)$/ or die "ERROR: Invalid email_name at print_okay phase!\n";
> +  my $email_name = $1;
> +
> +
>    if ( $ieak_template
>         && $user_agent->platform eq 'ia32'
>         && $user_agent->os =~ /^win/
>         && ($user_agent->browser)[0] eq 'IE'
>       )
>    { #send an IEAK config
> -    my $username = $cgi->param('username');
> -    my $password = $cgi->param('_password');
> -    my $email_name = $cgi->param('first'). ' '. $cgi->param('last');
>  
>      print $cgi->header('application/x-Internet-signup'),
>            $ieak_template->fill_in();
> @@ -312,6 +319,38 @@
>  #    close INS_FILE;
>  #    print $cgi->redirect("$ieak_docroot/$ins_file");
>  
> +  } elsif ( $user_agent->platform eq 'ia32'
> +       && $user_agent->os =~ /^win/
> +       && ($user_agent->browser)[0] eq 'Netscape'
> +    )
> +  { #send a Netscape config
> +
> +  print $cgi->header('application/x-netscape-autoconfigure-dialer-v2');
> +
> +  open(CCK, "<$cck_file") or
> +    print pack("N", 6), "STATUS", pack("N", 5), "ERROR" and
> +    die "Can't open file $cck_file";
> +
> +  my $pop = pop_info($cgi->param('popnum')) or die "POP #$popnum not found";
> +
> +  warn join ' ', 'pop:', %{$pop};
> +  warn join ' ', 'cgi:', map { $_, $cgi->param($_) } $cgi->param;
> +
> +  my %cck_user_info;
> +  $cck_user_info{username} = $cgi->param('username');
> +  $cck_user_info{password} = $cgi->param('_password');
> +  $cck_user_info{ac} = $pop->{'ac'};
> +  $cck_user_info{exch} = $pop->{'exch'};
> +  $cck_user_info{loc} = $pop->{'loc'};
> +
> +  warn join " ", '%cck_user_info:', %cck_user_info;
> +
> +  while (<CCK>) {
> +    s/var_([a-z]+)/$cck_user_info{$1}/g;
> +    m/(.*)\t(.*)/ &&
> +    print pack("N", length($1)), $1, pack("N", length($2)), $2;
> +  }
> +
>    } else { #send a simple confirmation
>      print $cgi->header( '-expires' => 'now' ), <<END;
>  <HTML><HEAD><TITLE>Signup successful</TITLE></HEAD>
> @@ -323,6 +362,15 @@
>    }
>  }
>  
> +sub pop_info {
> +  my $popnum = shift;
> +  my $pop;
> +
> +  foreach $pop ( @{$pops} ) {
> +    if ($pop->{'popnum'} == $popnum) { return $pop }
> +  }
> +}
> +
>  sub expselect {
>    my $prefix = shift;
>    my $date = shift || '';
> @@ -348,4 +396,5 @@
>  
>    $return;
>  }
> +
>  
> diff -r -u --new-file fs-1.2.3-orig/fs_signup/FS-SignupClient/fs_signupd fs-1.2.3/fs_signup/FS-SignupClient/fs_signupd
> --- fs-1.2.3-orig/fs_signup/FS-SignupClient/fs_signupd	Fri Jan 28 14:49:28 2000
> +++ fs-1.2.3/fs_signup/FS-SignupClient/fs_signupd	Sun Apr  2 03:47:58 2000
> @@ -117,15 +117,15 @@
>        $first, $last, $ss, $company, $address1, $address2, $city, $county,
>        $state, $zip, $country, $daytime, $night, $fax, $payby, $payinfo,
>        $paydate, $payname, $invoicing_list, $pkgpart, $username, $password,
> -      $popnum,
> -    ) = map { scalar(<Client>) } ( 1 .. 23 );
> +      $popnum, $agentnum,
> +    ) = map { scalar(<Client>) } ( 1 .. 24 );
>  
>      warn "[fs_signupd] sending customer data to remote server...\n" if $Debug;
>      print 
>        $first, $last, $ss, $company, $address1, $address2, $city, $county,
>        $state, $zip, $country, $daytime, $night, $fax, $payby, $payinfo,
>        $paydate, $payname, $invoicing_list, $pkgpart, $username, $password,
> -      $popnum,
> +      $popnum, $agentnum,
>      ;
>  
>      warn "[fs_signupd] reading error from remote server...\n" if $Debug;
> diff -r -u --new-file fs-1.2.3-orig/fs_signup/cck.template fs-1.2.3/fs_signup/cck.template
> --- fs-1.2.3-orig/fs_signup/cck.template	Wed Dec 31 16:00:00 1969
> +++ fs-1.2.3/fs_signup/cck.template	Tue Mar  7 00:29:00 2000
> @@ -0,0 +1,15 @@
> +SITE_FILE	8chrfile
> +SITE_NAME	YourISP
> +LOGIN	{ $username )
> +PASSWORD	{ $password }
> +PHONE_NUM	+1({ $ac }){ $ex }-{ $local } 
> +DNS_ADDR	10.0.0.1
> +DNS_ADDR2	10.0.0.2
> +NNTP_HOST	news.yourisp.com
> +SMTP_HOST	mail.yourisp.com
> +DOMAIN_NAME	yourisp.com
> +POP_SERVER	{ $username }@mail.yourisp.com
> +POP_PASSWORD	{ $password }
> +HOME_URL	http://www.yourisp.com
> +EMAIL_ADDR	{ $username }@yourisp.com
> +
> diff -r -u --new-file fs-1.2.3-orig/fs_signup/fs_signup_server fs-1.2.3/fs_signup/fs_signup_server
> --- fs-1.2.3-orig/fs_signup/fs_signup_server	Wed Feb  2 12:22:18 2000
> +++ fs-1.2.3/fs_signup/fs_signup_server	Sun Apr  2 04:01:17 2000
> @@ -1,4 +1,4 @@
> -#!/usr/bin/perl -Tw
> +#!/usr/bin/perl
>  #
>  # fs_signup_server
>  #
> @@ -10,10 +10,11 @@
>  use FS::Record qw( qsearch qsearchs );
>  use FS::cust_main_county;
>  use FS::cust_main;
> +#use Devel::Trace;
>  
>  use vars qw( $opt $Debug );
>  
> -$Debug = 0;
> +#$Debug = 1;
>  
>  my @payby = qw(CARD PREPAY);
>  
> @@ -22,8 +23,8 @@
>  
>  my $machine = shift or die &usage;
>  
> -my $agentnum = shift or die &usage;
> -my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } ) or die &usage;
> +my $signup_agentnum = shift or die &usage;
> +my $agent = qsearchs( 'agent', { 'agentnum' => $signup_agentnum } ) or die &usage;
>  my $pkgpart = $agent->pkgpart_hashref;
>  
>  my $refnum = shift or die &usage;
> @@ -57,7 +58,7 @@
>    my @part_pkg = grep { $_->svcpart('svc_acct') && $pkgpart->{ $_->pkgpart } }
>      qsearch( 'part_pkg', {} );
>    print $writer $data = join("\n",
> -    ( scalar(@part_pkg) || die "no usable package definitions, agent $agentnum" ),
> +    ( scalar(@part_pkg) || die "no usable package definitions, agent $signup_agentnum" ),
>      map {
>        $_->pkgpart,
>        $_->pkg,
> @@ -87,8 +88,8 @@
>        $first, $last, $ss, $company, $address1, $address2, $city, $county,
>        $state, $zip, $country, $daytime, $night, $fax, $payby, $payinfo,
>        $paydate, $payname, $invoicing_list, $pkgpart, $username, $password,
> -      $popnum,
> -    ) = map { scalar(<$reader>) } ( 1 .. 23 ) );
> +      $popnum, $agentnum,
> +    ) = map { scalar(<$reader>) } ( 1 .. 24 ) );
>  
>      warn "[fs_signup_server] Processing signup...\n" if $Debug;
>  
> @@ -126,14 +127,17 @@
>  
>      $error ||= $cust_main->check_invoicing_list( \@invoicing_list );
>  
> +    $error ||= "Unknown Agent ID.  Please Re-enter." unless
> +      qsearchs( 'agent', { 'agentnum' => $agentnum } );
> +
>      my $part_pkg = qsearchs( 'part_pkg', { 'pkgpart' => $pkgpart } )
>        or $error ||= "WARNING: unknown pkgpart $pkgpart";
>      my $svcpart = $part_pkg->svcpart unless $error;
>  
>      # this should wind up in FS::cust_pkg!
> -    my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } );
> +    my $agent = qsearchs( 'agent', { 'agentnum' => $signup_agentnum } );
>      my $pkgpart_href = $agent->pkgpart_hashref;
> -    $error ||= "WARNING: agent $agentnum can't purchase pkgpart $pkgpart"
> +    $error ||= "WARNING: agent $signup_agentnum can't purchase pkgpart $pkgpart"
>        unless $pkgpart_href->{ $pkgpart };
>  
>      my $cust_pkg = new FS::cust_pkg ( {


-- 
meow
_ivan



More information about the freeside-users mailing list