91dd8df2952ae49141948f7afc0544e51cd2dd07
[freeside.git] / fs_webdemo / registerd
1 #!/usr/bin/perl -Tw
2 #
3 # $Id: registerd,v 1.1 2000-03-01 08:15:10 ivan Exp $
4
5 use strict;
6 use vars qw(# $freeside_bin $freeside_test 
7             $freeside_conf
8             $mysql_data
9             $datasrc $user $pass $x
10              @pw_set @saltset
11             # $cgi $username $name $email $user_pw $crypt_pw $dbh $sth
12             # $header $msg
13              );
14 #use CGI;
15 #use CGI::Carp qw(fatalsToBrowser);
16 use DBI;
17 use Mail::Internet;
18 use Mail::Header;
19 use Date::Format;
20
21 #$ENV{'PATH'} ='/usr/local/bin:/usr/bin:/usr/ucb:/bin';
22 #$ENV{'SHELL'} = '/bin/sh';
23 #$ENV{'IFS'} = " \t\n";
24 #$ENV{'CDPATH'} = '';
25 #$ENV{'ENV'} = '';
26 #$ENV{'BASH_ENV'} = '';
27
28 #$freeside_bin = '/home/freeside/bin/';
29 #$freeside_test = '/home/freeside/test/';
30 $freeside_conf = '/usr/local/etc/freeside/';
31
32 $mysql_data = "/var/lib/mysql";
33
34 $datasrc = 'DBI:mysql:http_auth';
35 $user = "freeside";
36 $pass = "maelcolm";
37
38 #my(@pw_set)= ( 'a'..'z', 'A'..'Z', '0'..'9', '(', ')', '#', '!', '.', ',' );
39 #my(@pw_set)= ( 'a'..'z', 'A'..'Z', '0'..'9' );
40 @pw_set = ( 'a'..'z', '0'..'9' );
41 @saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' );
42
43 die "not running as system user freeside"
44   unless $> == scalar(getpwnam('freeside'))
45
46 $dbh = DBI->connect( $datasrc, $user, $pass, {
47         'AutoCommit' => 'true',
48 } ) or die "DBI->connect error: $DBI::errstr\n";
49 $x = $DBI::errstr; #silly; to avoid "used only once" warning
50
51 while ( 1 ) {
52
53   $SIG{HUP} = 'IGNORE';
54   $SIG{INT} = 'IGNORE';
55   $SIG{QUIT} = 'IGNORE';
56   $SIG{TERM} = 'IGNORE';
57   $SIG{TSTP} = 'IGNORE';
58   $SIG{PIPE} = 'IGNORE';
59
60   $sth = $dbh->prepare("LOCK TABLES mysql_auth WRITE");
61   $sth->execute or die $sth->errstr;
62
63   $sth = $dbh->prepare(
64     'SELECT * FROM mysql_auth WHERE status = "unconfigured"'
65   );
66   $sth->execute or die $sth->errstr;
67   my $pending = $sth->fetchall_arrayref( {} );
68
69   $sth = $dbh->prepare(
70     'UPDATE mysql_auth SET status = "locked" WHERE status = "unconfigured"'
71   );
72   $sth->execute or die $sth->errstr;
73
74   $sth = $dbh->prepare("UNLOCK TABLES");
75   $sth->execute or die $sth->errstr;
76
77   #
78
79   foreach my $row ( @{$pending} ) {
80
81     my $username = $row->{'username'};
82
83     my $user_pw = join('',map($pw_set[ int(rand $#pw_set) ], (0..7) ) );
84     my $crypt_pw =
85       crypt($user_pw,$saltset[int(rand(64))].$saltset[int(rand(64))]);
86
87     system("/usr/bin/mysqladmin --user=$user --password=$pass ".
88       "create demo_$username >/dev/null");
89
90     system "cp $mysql_data/demo_template/* $mysql_data/demo_$username";
91
92     mkdir "${freeside_conf}conf.DBI:mysql:demo_$username", 0755;    
93     system "cp -r ${freeside_conf}conf.DBI:mysql:demo_template/* ".
94            "${freeside_conf}conf.DBI:mysql:demo_$username";
95
96     mkdir "${freeside_conf}counters.DBI:mysql:demo_$username", 0755;    
97     system "cp ${freeside_conf}counters.DBI:mysql:demo_template/* ".
98            "${freeside_conf}counters.DBI:mysql:demo_$username";
99
100
101     open(SECRETS, ">${freeside_conf}secrets.$username")
102       or die "Can\'t open ${freeside_conf}secrets.demo_$username: $!";
103     chmod 0600, "${freeside_conf}secrets.$username";
104     print SECRETS "DBI:mysql:demo_$username\nfreeside\nmaelcolm\n";
105     close SECRETS;
106
107     open(MAPSECRETS, ">>${freeside_conf}mapsecrets")
108       or die "Can\'t open ${freeside_conf}mapsecrets: $!";
109     print MAPSECRETS "$username secrets.demo_$username\n";
110     close MAPSECRETS;
111
112
113
114
115   }
116
117
118   $SIG{HUP} = 'DEFAULT';
119   $SIG{INT} = 'DEFAULT';
120   $SIG{QUIT} = 'DEFAULT';
121   $SIG{TERM} = 'DEFAULT';
122   $SIG{TSTP} = 'DEFAULT';
123   $SIG{PIPE} = 'DEFAULT';
124
125   sleep 5;
126
127 }
128
129 $sth = $dbh->prepare("INSERT INTO mysql_auth VALUES (". join(", ",
130   $dbh->quote($username),
131   $dbh->quote($crypt_pw),
132   $dbh->quote('freeside'),
133 ). ")" );
134
135 $sth->execute or &idiot("Username in use: ". $sth->errstr);
136
137 $dbh->disconnect or die $dbh->errstr;
138
139 ###
140
141
142
143 open(ADDRESS, ">${freeside_conf}conf.DBI:mysql:$username/address")
144   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/address: $!";
145 print ADDRESS <<END;
146 Internet Service Provider, Inc.
147 1 Packet Blvd.
148 Router, MN  10010  
149
150 END
151 close ADDRESS;
152
153 open(DOMAIN, ">${freeside_conf}conf.DBI:mysql:$username/domain")
154   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/domain: $!";
155 print DOMAIN "this-is-an-example-domain.tld\n";
156 close DOMAIN;
157
158 open(HOME, ">${freeside_conf}conf.DBI:mysql:$username/home")
159   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/home: $!";
160 print HOME "/home\n";
161 close HOME;
162
163 open(INVOICE_FROM, ">${freeside_conf}conf.DBI:mysql:$username/invoice_from")
164   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/invoice_from: $!";
165 print INVOICE_FROM "$email\n";
166 close INVOICE_FROM;
167
168 open(LPR, ">${freeside_conf}conf.DBI:mysql:$username/lpr")
169   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/lpr: $!";
170 print LPR "cat >/dev/null\n";
171 close LPR;
172
173 mkdir "${freeside_conf}conf.DBI:mysql:$username/registries", 0755;
174 mkdir "${freeside_conf}conf.DBI:mysql:$username/registries/internic", 0755;
175 open(FROM, ">${freeside_conf}conf.DBI:mysql:$username/registries/internic/from")
176   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/registries/internic/from: $!";
177 print FROM "$email\n";
178 close FROM;
179 open(NAMESERVERS, ">${freeside_conf}conf.DBI:mysql:$username/registries/internic/nameservers")
180   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/registries/internic/nameservers: $!";
181 print NAMESERVERS <<END;
182 10.0.0.1 ns1.this-is-an-example-domain.tld
183 10.0.0.2 ns2.this-is-an-example-domain.tld
184 10.0.0.3 ns3.this-is-an-example-domain.tld
185 END
186 close NAMESERVERS;
187 open(TECH_CONTACT, ">${freeside_conf}conf.DBI:mysql:$username/registries/internic/tech_contact")
188   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/registries/internic/tech_contact: $!";
189 print TECH_CONTACT "EXAMPLE-INTERNIC-HANDLE\n";
190 close TECH_CONTACT;
191 system ("cp", "${freeside_conf}.domain-template.txt",
192         "${freeside_conf}conf.DBI:mysql:$username/registries/internic/template"
193        );
194 open(TO, ">${freeside_conf}conf.DBI:mysql:$username/registries/internic/to")
195   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/registries/internic/to: $!";
196 print TO "$email\n";
197 close TO;
198
199 open(SHELLS, ">${freeside_conf}conf.DBI:mysql:$username/shells")
200   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/shells: $!";
201 print SHELLS <<END;
202 /bin/sh
203 /bin/csh
204 /bin/bash
205 /bin/tcsh
206 /bin/ksh
207 /bin/passwd
208 /bin/true
209 /bin/false
210
211 END
212 close SHELLS;
213
214 open(SMTPMACHINE, ">${freeside_conf}conf.DBI:mysql:$username/smtpmachine")
215   or die "Can\'t open ${freeside_conf}conf.DBI:mysql:$username/smtpmachine: $!";
216 print SMTPMACHINE "localhost\n";
217 close SMTPMACHINE;
218
219 #make counter dir
220 mkdir("/usr/local/etc/freeside/counters.DBI:mysql:$username",0755)
221   or die "Can't create counter spooldir: $!";
222
223 system("${freeside_bin}fs-setup.webdemo", "$username");
224 system("${freeside_test}cgi-test",
225        "http://freeside.sisd.com/", $username, $user_pw);
226
227 ###
228
229 $ENV{SMTPHOSTS} = "localhost";
230 $ENV{MAILADDRESS} = 'ivan@sisd.com';
231 $header = Mail::Header->new( [
232   'From: ivan@sisd.com',
233   "To: $email",
234   'Cc: ivan-fsreg@sisd.com',
235   'Sender: ivan@sisd.com',
236   'Reply-To: ivan@sisd.com',
237   'Date: '. time2str("%a, %d %b %Y %X %z", time),
238   'Subject: Freeside demo information',
239 ] );
240 $msg = Mail::Internet->new(
241   'Header' => $header,
242   'Body' => [
243 "Hello $name <$email>,\n",
244 "\n",
245 "Your sample Freeside database has been setup.\n",
246 "\n",
247 "Point your web browswer at http://freeside.sisd.com/ and use the following\n",
248 "authentication information:\n",
249 "\n",
250 "Username: $username\n",
251 "Password: $user_pw\n",
252 "\n",
253 "You may wish to subscribe to the Freeside mailing list - send a blank\n",
254 "message to ivan-freeside-subscribe\@sisd.com.\n",
255 "\n",
256 "-- \n",
257 "Ivan Kohler <ivan\@sisd.com>\n",
258 "20 4,16 \* \* \* saytime\n",
259             ]
260 );
261 $msg->smtpsend or die "Can\'t send registration email!";
262
263 ###
264
265 sub idiot {
266   my($error)=@_;
267   print $cgi->header, <<END;
268 <HTML>
269   <HEAD>
270     <TITLE>Registration error</TITLE>
271   </HEAD>
272   <BODY BGCOLOR="#FFFFFF">
273     <CENTER>
274     <H4>Registration error</H4>
275     </CENTER>
276     <P><B>$error</B>
277     <P>Hit the <I>Back</I> button in your web browser, correct this mistake,
278        and submit the form again.
279   </BODY>
280 </HTML>
281 END
282   
283   exit;
284  
285 }