#!/usr/bin/perl

use strict;

my %users;
my $user;
my $open_port;
my $close_port;
my $ruby_port;
my $serverxml;
my $profile;
my $password;
my $class;
my $database;
my $dbuser;
my $dbpwd;
my $readmerr;

#=====================================================
# defalt locations - overwriten as needed  
#=====================================================
my $userroot = "/home";
my $skel = "/etc/skel";
my $group = "students";
#=====================================================
#If you want java and rails please set the switch to java_rails=1 do not set them individualy or the program will not run.
#Also if you are creating accounts for java_rails make sure mysql=1 other wise accounts may not work. If you do rails only, mysql and rr has to be set to 1.  
# switches
my $java = 0;
my $web = 0;
my $oracle = 0;
my $mysql = 1;
my $mssql = 0;
my $ms2k = 0;
my $rr = 0;
my $java_rails = 0;

# get class name
unless($ARGV[0]){ die "usage -> ./ms_db_account.pl studentlist.dat\n"; }
if($ARGV[0] =~ /\//){ 
  $ARGV[0] =~ /.*\/(.+?)\..*/;
  $class = $1;
}
else{
  $ARGV[0] =~ /(.*?)\./;
  $class = $1;
}
print "$class\n";

# build hash
open (DAT, "<$ARGV[0]");
while(<DAT>){
  chomp;
  ($user, $password, $open_port, $close_port, $ruby_port) = split(/\,\s*/);
  $users{$user} = [$password, $open_port, $close_port, $ruby_port];
}

foreach $user (keys %users){
  print "$user  ->  ".
  $users{$user}->[0]."\n";
  print "\t".$users{$user}[1]." -- ".$users{$user}[2].
  "\n";
}



if($java){ $skel = "/etc/skel_java"; }
if($rr){ $skel = "/etc/skel_rails"; }
if($java_rails){ $skel = "/etc/skel_java_rails"; }

#=========================================
# This makes the accounts
#========================================
if($web){
  foreach $user (keys %users){
    $password = $users{$user}->[0];
    `useradd -g $group -s /bin/bash -m -k $skel $user`;
    # tom changed this following line, 2012-03-16
    `echo $user:$password | chpasswd -c SHA512`;
    `chmod 755 /home/$user`;
  }
}

if($oracle){
  print "$class\n";
  open(ORACLE, ">/root/userAdmin/dat/$class.oracle") || die $!;
  foreach $user (keys %users){
    $password = $users{$user}->[0];
    $user = uc($user);
    $password = uc($password);
    print ORACLE  "CREATE USER \"$user\" IDENTIFIED BY \"$password\"\n".
                  "DEFAULT TABLESPACE USERS\n".
                  "TEMPORARY TABLESPACE TEMP\n".
                  "QUOTA 2M ON USERS\;\n\n".
                  "GRANT connect to \"$user\"\;\n\n";
# one time fix (maybe) where the accounts had been set up with the wrong password - just comment out the previous print statement.
   print ORACLE  "ALTER USER \"$user\" IDENTIFIED BY \"$password\"\;\n";
  }
}
  
if($mysql){
  open(MYSQL, ">/root/userAdmin/dat/$class.mysql");

  foreach $user (keys %users){
    my $password = $users{$user}->[0];
    my $command = "mysqladmin --password=\"BruBaker\" create $user create ${user}_development create ${user}_test create ${user}_production";
#    my $command = "mysqladmin --password=\"BruBaker\" create ${user}_development";
#    my $command = "mysqladmin --password=\"BruBaker\" create $user $test";
#    my $command = "mysqladmin --password=\"BruBaker\" create $user $production";	
    system($command);
    print MYSQL "INSERT INTO user (Host, User, Password) VALUES('localhost',\"$user\",password(\'$password\'))\;\n".
                "INSERT INTO user (Host, User, Password) VALUES('localhost.localdomain',\"$user\",password(\'$password\'))\;\n".
                "INSERT INTO db VALUES ('localhost',\"$user\",\"$user\",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')\;\n".
                "INSERT INTO db VALUES ('localhost.localdomain',\"$user\",\"$user\",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')\;\n".
                "INSERT INTO db VALUES ('localhost',\"${user}_development\",\"$user\",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')\;\n".
                "INSERT INTO db VALUES ('localhost.localdomain',\"${user}_development\",\"$user\",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')\;\n".
                "INSERT INTO db VALUES ('localhost',\"${user}_test\",\"$user\",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')\;\n".
                "INSERT INTO db VALUES ('localhost.localdomain',\"${user}_test\",\"$user\",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')\;\n".
                "INSERT INTO db VALUES ('localhost',\"${user}_production\",\"$user\",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')\;\n".
                "INSERT INTO db VALUES ('localhost.localdomain',\"${user}_production\",\"$user\",'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')\;\n";


              
# As above - the accounts which had been set up with the wrong password.
#    print MYSQL "UPDATE user SET Password=password(\'$password\') WHERE User=\"$user\"\;\n";
  }
}

if($mssql){
  my $createfile = "/root/bin/PerlAdmin/dat/db_account_creation_$class\.sql";
  my $permissionfile = "/root/bin/PerlAdmin/dat/permission_switch_$class\.sql";

  open(CREATE, ">$createfile") or die $!;
  open(PERMISSION, ">$permissionfile") or die $!;

  foreach $user (keys %users){
    my $password = $users{$user}->[0];

    print CREATE
        "CREATE DATABASE \"$user\"\n".
        "ON Primary (\n".
        "   NAME = \'$user\',\n".
        "   FILENAME = \'e:\\databases\\$user\.mdf\',\n".
        "   SIZE = 2,\n".
        "   MAXSIZE = 2,\n".
        "   FILEGROWTH = 0 )\n\n".
        "exec sp_addlogin \'$user\',\'$password\',\'$user\'\n\n"
    ;

    print PERMISSION
        "use \"$user\"\n".
        "exec sp_changedbowner \'$user\'\n\n"
    ;
  }
}

if($ms2k){
  open(NEW, ">/root/bin/PerlAdmin/dat/$class\.ms2k");
  foreach $user (keys %users){
    my $password = $users{$user}->[0];
    print NEW "mkdir d:\\httproot\\wwwroot\\$user\n".
              "net user $user $password /ADD /expires:NEVER".
              " /Fullname:\"$user\" /Comment:\"Student in ".
              "Users\" /HomeDir:d:\\httproot\\wwwroot\\$user \n".
              "cd d:\\httproot\\wwwroot\\$user\n".
              "cacls d:\\httproot\\wwwroot\\$user /T /E /G $user:C\n".
              "cd c:\\bin\n".
              "CreateWebDir.vbs $user d:\\httproot\\wwwroot\\$user 80\n\n";
  }
}


if($java){
  foreach $user (keys %users){
    my $close_port = $users{$user}->[1];
    my $open_port = $users{$user}->[2];
    $serverxml = "";

    open(SERVER, "</home/$user/tomcat/conf/server.xml");
    while(<SERVER>){ $serverxml .= $_; }
    close SERVER;
    open(SERVER, ">/home/$user/tomcat/conf/server.xml");
    $serverxml =~ s/STOPPORT/$close_port/;
    $serverxml =~ s/STARTPORT/$open_port/;
    print SERVER "$serverxml";
  }
}
if($rr){
  foreach $user (keys %users){
    my $dbuser = $user;
    my $dbpwd = $users{$user}->[0];
    my $ruby_port = $users{$user}->[3];
    $database = "";
    $readmerr = "";
    open(RAILS, "</home/$user/rails/Hello_World/config/database.yml");
    while(<RAILS>){ $database .= $_; }
    close RAILS;
    open(RAILS, ">/home/$user/rails/Hello_World/config/database.yml");
    $database =~ s/DBDEV/${user}_development/;
    $database =~ s/DBUSER/$dbuser/;
    $database =~ s/DBPWD/$dbpwd/;
    $database =~ s/DBTEST/${user}_test/;
    $database =~ s/DBUSER1/$dbuser/;
    $database =~ s/DBPWD1/$dbpwd/;
    $database =~ s/DBPROD/${user}_production/;
    $database =~ s/DBUSER2/$dbuser/;
    $database =~ s/DBPWD2/$dbpwd/;
    print RAILS "$database";  

    open(READMERR, "</home/$user/README-RUBY-RAILS");
    while(<READMERR>){ $readmerr .= $_; }
    close READMERR;
    open(READMERR, ">/home/$user/README-RUBY-RAILS");
    $readmerr =~ s/studentid/$user/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/studentid/$user/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    print READMERR "$readmerr";

   }
}


if($java_rails){
  foreach $user (keys %users){
    my $close_port = $users{$user}->[1];
    my $open_port = $users{$user}->[2];
    my $dbuser = $user;
    my $dbpwd = $users{$user}->[0];   
    $serverxml = "";
    $database = "";
    
    open(SERVER, "</home/$user/tomcat/conf/server.xml");
    while(<SERVER>){ $serverxml .= $_; }
    close SERVER;
    open(SERVER, ">/home/$user/tomcat/conf/server.xml");
    $serverxml =~ s/STOPPORT/$close_port/;
    $serverxml =~ s/STARTPORT/$open_port/;
    print SERVER "$serverxml";
   
    open(RAILS, "</home/$user/rails/Hello_World/config/database.yml");
    while(<RAILS>){ $database .= $_; }
    close RAILS;
    open(RAILS, ">/home/$user/rails/Hello_World/config/database.yml");
    $database =~ s/DBDEV/${user}_development/;
    $database =~ s/DBUSER/$dbuser/;
    $database =~ s/DBPWD/$dbpwd/;
    $database =~ s/DBTEST/${user}_test/;
    $database =~ s/DBUSER1/$dbuser/;
    $database =~ s/DBPWD1/$dbpwd/;
    $database =~ s/DBPROD/${user}_production/;
    $database =~ s/DBUSER2/$dbuser/;
    $database =~ s/DBPWD2/$dbpwd/;
    print RAILS "$database";

    open(READMERR, "</home/$user/README-RUBY-RAILS");
    while(<READMERR>){ $readmerr .= $_; }
    close READMERR;
    open(READMERR, ">/home/$user/README-RUBY-RAILS");
    $readmerr =~ s/studentid/$user/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/studentid/$user/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    $readmerr =~ s/PNUMB/$ruby_port/;
    print READMERR "$readmerr";

    }
}
