f22ab15d4978a4571d16858b6181fff734f4432d
[freeside.git] / fs_signup / FS-SignupClient / fs_signupd
1 #!/usr/bin/perl -Tw
2 #
3 # fs_signupd
4 #
5 # This is run REMOTELY over ssh by fs_signup_server.
6 #
7
8 use strict;
9 use Socket;
10
11 use vars qw( $Debug );
12
13 $Debug = 0;
14
15 my($fs_signupd_socket)="/usr/local/freeside/fs_signupd_socket";
16
17 $ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
18 $ENV{'SHELL'} = '/bin/sh';
19 $ENV{'IFS'} = " \t\n";
20 $ENV{'CDPATH'} = '';
21 $ENV{'ENV'} = '';
22 $ENV{'BASH_ENV'} = '';
23
24 $|=1;
25
26 warn "[fs_signupd] Reading locales...\n" if $Debug;
27 chomp( my $n_cust_main_county = <STDIN> );
28 my @cust_main_county = map {
29   chomp( my $taxnum = <STDIN> );
30   chomp( my $state = <STDIN> );
31   chomp( my $county = <STDIN> );
32   chomp( my $country = <STDIN> );
33   {
34     'taxnum'  => $taxnum,
35     'state'   => $state,
36     'county'  => $county,
37     'country' => $country,
38   };
39 } ( 1 .. $n_cust_main_county );
40
41 warn "[fs_signupd] Reading package definitions...\n" if $Debug;
42 chomp( my $n_part_pkg = <STDIN> );
43 my @part_pkg = map {
44   chomp( my $pkgpart = <STDIN> );
45   chomp( my $pkg = <STDIN> );
46   {
47     'pkgpart' => $pkgpart,
48     'pkg'     => $pkg,
49   };
50 } ( 1 .. $n_part_pkg );
51
52 warn "[fs_signupd] Reading POPs...\n" if $Debug;
53 chomp( my $n_svc_acct_pop = <STDIN> );
54 my @svc_acct_pop = map {
55   chomp( my $popnum = <STDIN> );
56   chomp( my $city = <STDIN> );
57   chomp( my $state = <STDIN> );
58   chomp( my $ac = <STDIN> );
59   chomp( my $exch = <STDIN> );
60   chomp( my $loc = <STDIN> );
61   {
62     'popnum' => $popnum,
63     'city'   => $city,
64     'state'  => $state,
65     'ac'     => $ac,
66     'exch'   => $exch,
67     'loc'    => $loc,
68   };
69 } ( 1 .. $n_svc_acct_pop );
70
71 warn "[fs_signupd] Creating $fs_signupd_socket\n" if $Debug;
72 my $uaddr = sockaddr_un($fs_signupd_socket);
73 my $proto = getprotobyname('tcp');
74 socket(Server,PF_UNIX,SOCK_STREAM,0) or die "socket: $!";
75 unlink($fs_signupd_socket);
76 bind(Server, $uaddr) or die "bind: $!";
77 listen(Server,SOMAXCONN) or die "listen: $!";
78
79 warn "[fs_signupd] Entering main loop...\n" if $Debug;
80 my $paddr;
81 for ( ; $paddr = accept(Client,Server); close Client) {
82
83   chop( my $command = <Client> );
84
85   if ( $command eq "signup_info" ) {
86     warn "[fs_signupd] sending signup info...\n" if $Debug; 
87     print Client join("\n", $n_cust_main_county,
88       map {
89         $_->{taxnum},
90         $_->{state},
91         $_->{county},
92         $_->{country},
93       } @cust_main_county
94     ), "\n";
95
96     print Client join("\n", $n_part_pkg,
97       map {
98         $_->{pkgpart},
99         $_->{pkg},
100       } @part_pkg
101     ), "\n";
102
103     print Client join("\n", $n_svc_acct_pop,
104       map {
105         $_->{popnum},
106         $_->{city},
107         $_->{state},
108         $_->{ac},
109         $_->{exch},
110         $_->{loc},
111       } @svc_acct_pop
112     ), "\n";
113
114   } elsif ( $command eq "new_customer" ) {
115     warn "[fs_signupd] reading customer signup...\n" if $Debug;
116     my(
117       $first, $last, $ss, $company, $address1, $address2, $city, $county,
118       $state, $zip, $country, $daytime, $night, $fax, $payby, $payinfo,
119       $paydate, $payname, $invoicing_list, $pkgpart, $username, $password,
120       $popnum,
121     ) = map { scalar(<Client>) } ( 1 .. 23 );
122
123     warn "[fs_signupd] sending customer data to remote server...\n" if $Debug;
124     print 
125       $first, $last, $ss, $company, $address1, $address2, $city, $county,
126       $state, $zip, $country, $daytime, $night, $fax, $payby, $payinfo,
127       $paydate, $payname, $invoicing_list, $pkgpart, $username, $password,
128       $popnum,
129     ;
130
131     warn "[fs_signupd] reading error from remote server...\n" if $Debug;
132     my $error = <STDIN>;
133
134     warn "[fs_signupd] sending error to local client...\n" if $Debug;
135     print Client $error;
136
137   } else {
138     die "unexpected command from client: $command";
139   }
140
141 }
142