#!/usr/bin/perl
#
# New user script
#
# This script gets called from a web form where users apply for usership
# on your server. It creates a executable file that you as admin can
# just run and the user gets created without headaches.

$| = 1;

if ($ENV{'REQUEST_METHOD'} eq 'POST')
{

$base="/hamster/home";


chop($date = `date`);
chop($ddd = `date +\%j\%H\%M`);
print "Content-type: text/html\n\n";
print <<"HTML";
<HTML>
<TITLE>New user details completed</TITLE>
<BODY BACKGROUND=/yourown.gif>
<IMG SRC="/yourlogo.gif" ALT="MY OWN LOGO" HEIGHT=114 WIDTH=640><BR>
<H1>New User Application</H1>
HTML

  read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  @pairs=split(/&/, $buffer);
  foreach $pair(@pairs)
  {
	($name, $value) = split(/=/, $pair);
	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$contents{$name} = $value;
        $contents{'remoteip'} = $ENV{'REMOTE_ADDR'};
#        print "$contents{$name} = $value <BR>\n";
  }
# Check if some-one gave in a bullshit form.
if (($contents{'fname'} eq '') or ($contents{'sname1'} eq ''))
{
print <<"HTML";
<HR>
Dear person working from machine or proxy $ENV{'REMOTE_ADDR'}, do WE have some
news for you: <P>

Oh boy! You cannot even complete a form! How do you think it makes you look?
At least fill in a Full name and one username, else this form is useless! <P>

Please take some time and consider if you are <I>really</I> capable of using a 
computer and if you <I>should</I> apply for usership. 
If your previous attempt to fill in a form turned out like this 
then we do not consider you a good canidate.
Take a deep breath.

Use your browsers BACK button and 
try again!
<HR>
</BODY>
</HTML>
HTML
exit;
}
else { ; }
print <<"HTML";
Thank you for taking the time to complete the form. Please read the following
information carefully. Use your browsers save function to save this page to
a file. It will act as a receipt of your new (possible) user account.<P>

If we think that the IP $contents{'remoteip'} that you appear to work from is
not in our domain, extra effort will be made to ensure that
you are in fact a valid applicant.<P>

<P> This is how your details will appear to others:
<CENTER><TABLE BORDER=1 WIDTH=80%>
<TR><TD> Name </TD><TD>
$contents{'fname'}
HTML

if ($contents{'addtitle'} eq 'addmytitle') 
{
print <<"HTML";
 ,$contents{'title'} 
HTML
}
else
{ ; }

print <<"HTML";
 $contents{'fname'}
</TD></TR>
<TR><TD>
Office</TD><TD>$contents{'office'}</TD></TR>
<TR><TD>Username choices:</TD><TD><B>$contents{'sname1'}</B>, 
<B>$contents{'sname2'}</B> or <B>$contents{'sname3'}</B> </TD></TR>
<TR><TD>Work Tel: $contents{'wtel'}</TD><TD>Home Tel: $contents{'htel'}</TD></TR> 
<TR><TD>Stud/ID number:</TD><TD> $contents{'idnum'}</TD></TR>
<TR><TD>Birthdate:</TD><TD> $contents{'bidate'}</TD></TR>
</TABLE></CENTER><P>

You will most probably granted the first choice of username, unless it clashes
with an existing name, is too short or too close to a swearing word.
<B><P>PLEASE PHONE netadmin at 555-5555 to arrange a password for your account</B>

$contents{'reff'} is your reference person or study leader that will be 
contacted at email address <B>$contents{'refmail'}</B>. 
Your account might be stopped if the reference person does not know you or give us a good reason to do so.</B><P>

Reason why you would like to be a network user:
<QUOTE>$contents{'whyi'}</QUOTE><P>
You rate yourself a $contents{'skill'} computer user that will be using 
$contents{'os'} as your primary operating system. You also have some knowlage on
$contents{'oos1'} $contents{'oos2'} $contents{'oos3'} $contents{'oos4'} 
$contents{'oos5'} $contents{'oos6'} $contents{'oos7'} $contents{'oos8'} 
$contents{'oos9'}<P>
Please read the section on operating systems carefully to give you a broader understanding on how to connect to the network.
HTML

if ($contents{'helpme'} eq 'yes')
{
print <<"HTML";
  You are also interrested in giving a helping hand with network related problems. <B>Good!</B> As soon as there is a problem near you, <I>you</I> will be seen as the
solution. We'll keep in touch.
HTML

}
else
{ ; }

print <<"HTML";
<P> Your feedback on the questionaire will be stored in a database for future
refference. These details will give us direction on how to expand the network
services.
<P> You rate the following services:
<CENTER><TABLE BORDER=1 WIDTH=80%}
<TR><TD>E-Mail and other communication tools: </TD><TD>$contents{'s1'}</TD></TR>
<TR><TD>WWW for info search and research:</TD><TD>$contents{'s2'}</TD></TR>
<TR><TD>Wordprocessing and office based work:</TD><TD>$contents{'s3'}</TD></TR>
<TR><TD>Cruising internet for fun and pleasure</TD><TD>$contents{'s4'}</TD></TR>
<TR><TD>Engineering apps CADCAM, PCB etc.</TD><TD>$contents{'s5'}</TD></TR>
<TR><TD>Shareware source</TD><TD>$contents{'s6'}</TD></TR>
<TR><TD>Programming apps, VisC, Pascal, VB etc</TD><TD>$contents{'s7'}</TD></TR>
<TR><TD>Storage of files and userdata</TD><TD>$contents{'s8'}</TD></TR>
<TR><TD>Exam results electronic lecture notes.</TD><TD>$contents{'s9'}</TD></TR>
</TABLE></CENTER>

<P>You would like to see the following services at Our Site (Let's pray together that it will happen soon...):<BR>
<QUOTE>$contents{'future'}</QUOTE><P>

You think that $contents{'numstaff'} staff member(s) is/are needed to maintain our network.<P>
According to you an amount of $contents{'hypopay'} is fair for a network account per year, as long as you can get the  no $contents{'hserv'} service you asked for.
<P>
<HR>
Thank you for submitting this request for a new user account.
Your account will be processed by 
<A HREF="mailto:adminuser\@your.domain.name">adminuser\@your.domain.name</A> or 
<A HREF="mailto:bigboss\@your.domain.name">bigboss\@your.domain.name</A>. Please give us a few days to decide whether you would make a suitable user. It normally takes only a few minutes to create the account if one of us is close-by.
<HR>
<h1> Futher information </h1>
You automagically get the following as a bonus:
<UL>
<LI> Electronic mail (Your email account will most probably be $contents{sname1}\@your.domain.name)
<LI> Your own WWW page which you can customize from anywhere.
<LI> Your own public ftp site
<LI> Secure storage space for your data on the file server
<LI> Access to our software and shareware
<LI> Remote access to your data, where-ever you are roaming about.
<LI> A public accessible read-write file area to exchange data with others.
<LI> Automated secure backups of your data
</UL>
<P>
Follow <A HREF="/main/ohhelp.html">this link</a> to get more detailed information on the services and how to make use of it.

<HR>
This automated service creates a file that could create your new account with
a single keypress, if the network administrator feels like it. ALL you need to
do on your own is to visit the network center to select a password for yourself.Even with the account created it will not be active before you either phone or visit your network admin to set up your password. 
<HR>
<FONT SIZE=3><I>Last updated 960916</I></FONT>
</BODY>
</HTML>

HTML

# Now create email message and mail it.
$subject = "New User application - $date";
$sendto = "adminuser\@your.domain.name, bigboss\@your.domain.name";

# open named pip to send mail
open (MAIL, "| /usr/sbin/sendmail $sendto") || die "Cannot send mail: $!\n";
# this selects the open handle to send email:
select(MAIL);
print <<"EMAIL";
Date: $date
From: root\@your.domain.name
Return-Path: <$contents{'refmail'}>
To: $sendto
Subject: $subject

This is an automated reply to the http://yourweb.site.name/ohform.html script.

New user application details - $date
Please note: A file was created under $contents{'base'}/httpd/newuser/$contents{'sname1'}.$ddd 
that can be directly executed by root in order to create the account.
EMAIL

if ($contents{'addtitle'} eq 'addmytitle') 
{ 
print <<"EMAIL";
Full name: $contents{'title'} $contents{'fname'}
EMAIL

}

else 
{ print <<"EMAIL";
Full name: $contents{'fname'}
EMAIL
}

print <<"EMAIL";
Working from machine or proxy: $contents{'remoteip'}
Title: $contents{'title'}

Username1: $contents{'sname1'}
Username2: $contents{'sname2'}
Username3: $contents{'sname3'}

Office: $contents{'office'}
WorkPhone: $contents{'wtel'}
HomePhone: $contents{'htel'}
Birthdate: $contents{'bidate'}
Stud/ID number: $contents{'idnum'}
Refference Person: $contents{'reff'}
Refference Email : $contents{'refmail'}
Would like to help with network problems?: $contents{'helpme'}

Skill: $contents{'skill'}
Primary operating System: $contents{'os'}
Knowlage on: $contents{'oos1'} $contents{'oos2'} $contents{'oos3'} $contents{'oos4'} $contents{'oos5'} $contents{'oos6'} $contents{'oos7'} $contents{'oos8'} $contents{'oos9'}

Usership plea: $contents{'whyi'}

Questionaire
============
Email: $contents{'s1'}
WWW: $contents{'s2'}
Office: $contents{'s3'}
FunGames: $contents{'s4'}
Apps: $contents{'s5'}
Shareware: $contents{'s6'}
Programming: $contents{'s7'}
Storage: $contents{'s8'}
Exam and notes: $contents{'s9'}
Staffnum: $contents{'numstaff'}
YearFee: $contents{'hypopay'}
ServiceLevel: $contents{'hserv'}
ConnectionValue1: $contents{'userv'}
ConnectionValue2: $contents{'nserv'}
MonthAccount: $contents{'aserv'}
AccountMethod: $contents{'aget'}
AccountExtra: $contents{'aret'}

Services interrested in
=======================
BirthdayNotify:  $contents{'c0'}
VoiceMail: $contents{'c1'}
PinupNotice: $contents{'c2'}
AppointRemind: $contents{'c3'}
GlobalPhoneBook: $contents{'c4'}
LocalIRCserver: $contents{'c5'}
AutomatedSoftwareInstalls: $contents{'c6'}
VoiceDictation: $contents{'c7'}
ExamsonComputers: $contents{'c8'}
VideoLectures: $contents{'c9'}
VideoConference: $contents{'c10'}
SharedAppointment: $contents{'c11'}
AnimatedMultimedia: $contents{'c12'}
StudentResults: $contents{'c13'}
HWSFTWMonitor: $contents{'c14'}


Please phone the user and ask him/her to come and select a password for themselves.

From your friendly automated Webserver running Mars.
EMAIL
close(MAIL);

# Append questionaire to the log.
open(CATFILE, ">> /var/log/newusr.questionaire") || die "Cant update newuser questionaire list";
select(CATFILE);
print "$contents{'fname'}:";
print "$contents{'skill'}:";
print "$contents{'helpme'}:";
print "$contents{'os'}:";
print "$contents{'oos1'}:";
print "$contents{'oos2'}:";
print "$contents{'oos3'}:";
print "$contents{'oos4'}:";
print "$contents{'oos5'}:";
print "$contents{'oos6'}:";
print "$contents{'oos7'}:";
print "$contents{'oos8'}:";
print "$contents{'oos9'}:";
print "$contents{'s1'}:";
print "$contents{'s2'}:";
print "$contents{'s3'}:";
print "$contents{'s4'}:";
print "$contents{'s5'}:";
print "$contents{'s6'}:";
print "$contents{'s7'}:";
print "$contents{'s8'}:";
print "$contents{'s9'}:";
print "$contents{'hserv'}:";
print "$contents{'userv'}:";
print "$contents{'nserv'}:";
print "$contents{'aserv'}:";
print "$contents{'aget'}:";
print "$contents{'aret'}:";
print "$contents{'c0'}:";
print "$contents{'c1'}:";
print "$contents{'c2'}:";
print "$contents{'c3'}:";
print "$contents{'c4'}:";
print "$contents{'c5'}:";
print "$contents{'c6'}:";
print "$contents{'c7'}:";
print "$contents{'c8'}:";
print "$contents{'c9'}:";
print "$contents{'c10'}:";
print "$contents{'c11'}:";
print "$contents{'c12'}:";
print "$contents{'c13'}:";
print "$contents{'c14'}\n";
close(CATFILE);

# Create an autouser script
open(NFILE, "> $contents{'base'}/httpd/newuser/$contents{'sname1'}.$ddd") || die "Cannot create autouser file";
select(NFILE);
print "#/bin/bash\n\n";
print "/usr/sbin/ohmasteruser \"$contents{'sname1'}\" ";
if ($contents{'addtitle'} eq 'addmytitle')
{
print "\"$contents{'title'} ";
}
else
{ print "\""; }
print "$contents{'fname'}\" ";
print "\"$contents{'office'}\" ";
print "\"$contents{'wtel'}\" ";
print "\"$contents{'htel'}\" ";
print "\"$contents{'bidate'}\"\n";
print "\n\n# Other names if it is a clash: $contents{'sname2'}";
print "\n# Other name: $contents{'sname3'}\n";
close(NFILE);
$a=`chmod +x "$contents{'base'}/httpd/newuser/$contents{'sname1'}.$ddd"`;
$a=`chmod o-rwx "$contents{'base'}/httpd/newuser/$contents{'sname1'}.$ddd"`;
$a=`chmod g-rwx "$contents{'base'}/httpd/newuser/$contents{'sname1'}.$ddd"`;
}
exit;