#!/usr/bin/perl -w package TestProj; use strict; use base 'CGI::Application'; use HTML::Template; use CGI::FormBuilder; use CGI::Session; #setting up runmodes sub setup { print STDERR "setup() : SETTING RUNMODES..."; my $self = shift; $self->run_modes( 'mode1' => 'login', 'mode2' => 'firstpage', 'mode3' => 'secondpage', 'mode4' => 'logout', ); $self->mode_param('rm'); $self->start_mode('mode1'); } #Code for login page sub login { my $self = shift; my $query = $self->query(); my @fields = qw(username password); #using form builder to display login screen my $form = CGI::FormBuilder->new( title => 'TestProj Login Screen', header => 0, method => 'post', name => 'LoginPage', fields => \@fields, submit => 'Login', params => $query, # get CGI params template => './tmpl/login.tmpl', reset => 0, ); $form->field(name => 'username', type => 'text'); $form->field(name => 'password', type => 'password'); if($form->submitted eq "Login") { print STDERR "login() : FORM SUBMITTED..."; #create session if($query->param('password') eq $query->param('username')) { print STDERR "login() : LOGIN SUCCEDED..."; #create a new session and save (logged-in => 1) in session my $session = new CGI::Session( undef, $query, {Directory= +>'/tmp/sessions'} ); my $sid = $session->id(); $session->param('logged-in', 1); #now display first page using pages.tmpl my $template = HTML::Template->new(filename => './tmpl/pag +es.tmpl', associate => $query); $template->param(pagelink => "Second Page" ); $template->param(page => "First Page" ); $template->param(linkmode => "mode3" ); $template->param(sid => "$sid" ); return $template->output; } else { print STDERR "login() : LOGIN FAILED..."; #using loggedout.tmpl with message invalid user name or pa +ssword my $template = HTML::Template->new(filename => './tmpl/log +gedout.tmpl', associate => $query); $template->param(reason => "Invalid Username or Password: +Login Again" ); $template->param(link => "./testproj.pl?rm=mode4" ); return $template->output; } } else { print STDERR "Render..."; return $form->render; } } sub firstpage { my $self = shift; my $query = $self->query(); my $sid = $query->param('sid'); #load existing session using $sid don't create a new one my $session = CGI::Session->load(undef, $sid , {Directory=>'/tmp/s +essions'}); #check if it is a valid session if($session->param('logged-in') == 1) { #Code for first page } else { #Call loggedout.tmpl with message invalid user name or passwo +rd } } sub secondpage { my $self = shift; my $query = $self->query(); my $sid = $query->param('sid'); #load existing session using $sid don't create a new one my $session = CGI::Session->load(undef, $sid , {Directory=>'/tmp/s +essions'}); #check if it is a valid session if($session->param('logged-in') == 1) { #Code for second page } else { #Call loggedout.tmpl with message invalid user name or password } } sub logout { print STDERR "logout() : DELETING SESSION..."; my $self = shift; my $query = $self->query; my $sid = $query->param('sid'); my $session = CGI::Session->load(undef, $sid , {Directory=>'/tmp/ +sessions'}); $session->flush(); $session->delete(); #using template loggedout.tmpl with logged out message my $template = HTML::Template->new(filename => './tmpl/loggedout. +tmpl', associate => $query); #fill the loggedout.tmpl template $template->param(reason => 'Logged Out' ); $template->param(link => './testproj.pl' ); return $template->output; } 1;