#!/usr/bin/perl -w
use CGI;
use HTML::Template;
use CGI::Session;
use lib ('/home/scott/intranet/cgi/mods');
use Digest::SHA2;
use DBI;
use DBD::mysql;
CGI::Session->name("test");
my $query = new CGI;
my $sid = $query->cookie( 'test' ) || undef;
my $session = CGI::Session->new("driver:File", $sid, {Directory=>'/tmp'});
$query->param( 'session' => $session);
if (!$sid or $sid ne $session->id ) {
my $cookie = $query->cookie(
-name => 'test',
-value => $session->id,
#-expires => '' makes it so on close session expires.
)
}
init($session, $query);
sub init {
my ($session, $cgi) = @_; # receive two args
if ( $session->param("~logged-in") ) {
return 1; # if logged in, don't bother going further
}
my $lg_name = $cgi->param("lg_nick") or return;
my $lg_psswd=$cgi->param("lg_pass") or return;
# if we came this far, user did submit the login form
# so let's try to load his/her profile if name/psswds match
if ( my $profile = login($lg_name, $lg_psswd) ) {
$session->param("~profile", $profile);
$session->param("~logged-in", 1);
$template->param(PROFILE => 1);
$session->clear(["~login-trials"]);
return 1;
}
# if we came this far, the login/psswds do not match
# the entries in the database
my $trials = $session->param("~login-trials") || 0;
return $session->param("~login-trials", ++$trials);
}
my $template = HTML::Template->new(filename => 'index.tmpl',
path => '/home/scott/intranet/cgi/intranet/',
associate => $query);
sub getpassword {
# MySQL CONFIG VARIABLES
my($username) = @_;
my $host = "localhost";
my $database = "write";
my $user = "userid";
my $pw = "dbpass";
my $dsn = "dbi:mysql:$database:localhost:3306";
my $dbstore = DBI->connect($dsn, $user, $pw) or die "Unable to connect: $DBI::errstr\n";
my $prepquery = $dbstore->prepare("SELECT * FROM userlogin WHERE USERNAME='$username'") or die "Unable to connect: $DBI::errstr\n";
$prepquery->execute();
my $timestampUpdate = $dbstore->prepare("UPDATE write.userlogin SET userlogin.TIMESTAMP = NOW( ) WHERE userlogin.USERNAME = '$username'" ) or die "Unable to connect: $DBI::errstr\n";
$timestampUpdate->execute();
my $ref = $prepquery->fetchrow_hashref();
my $password = $ref->{'PASSWORD'};
$prepquery->finish();
$timestampUpdate->finish();
$dbstore->disconnect();
return $password;
}
sub login{
my($nick, $pass) = @_;
my($password) = getpassword($nick);
my $encryptobj = new Digest::SHA2 512;
$encryptobj->add($pass);
my $digest = $encryptobj->hexdigest();
if($digest eq $password){
# replace this check above with something real ie lookup from a database
return 0;
}
else
{
return 1;
}
}
$template->param('TEST', $query->param('lg_nick'));
$template->param(MYURL => 'http://192.168.1.9/cgi-bin');
print $query->header( -cookie=>$cookie ), $template->output;