CGI-Mungo
view release on metacpan or search on metacpan
use strict;
use warnings;
use Module::Build;
my $build = Module::Build->new(
module_name => 'CGI::Mungo',
license => 'perl',
dist_author => 'MacGyveR <dumb@cpan.org>',
dist_abstract => 'Very simple CGI web framework',
requires => {
"CGI::Thin::Cookies" => 0,
"HTTP::Response" => 0,
"CGI::Minimal" => 0,
"Carp" => 0,
"Digest::SHA1" => 0,
"File::Basename" => 0,
"Data::Dumper" => 0,
"Template" => 0,
"File::Spec" => 0
},
build_requires => {
CGI::Mungo::Response::SimpleTemplate:
file: lib/CGI/Mungo/Response/SimpleTemplate.pm
CGI::Mungo::Response::TemplateToolkit:
file: lib/CGI/Mungo/Response/TemplateToolkit.pm
CGI::Mungo::Session:
file: lib/CGI/Mungo/Session.pm
CGI::Mungo::Utils:
file: lib/CGI/Mungo/Utils.pm
requires:
CGI::Minimal: 0
CGI::Thin::Cookies: 0
Carp: 0
Data::Dumper: 0
Digest::SHA1: 0
File::Basename: 0
File::Spec: 0
HTTP::Response: 0
Template: 0
resources:
license: http://dev.perl.org/licenses/
version: 1.701
Makefile.PL view on Meta::CPAN
'NAME' => 'CGI::Mungo',
'EXE_FILES' => [],
'VERSION_FROM' => 'lib/CGI/Mungo.pm',
'PREREQ_PM' => {
'Digest::SHA1' => 0,
'File::Spec' => 0,
'Data::Dumper' => 0,
'Template' => 0,
'HTTP::Status' => 0,
'Carp' => 0,
'CGI::Thin::Cookies' => 0,
'Test::More' => 0,
'HTTP::Response' => 0,
'HTTP::Daemon' => 0,
'File::Basename' => 0,
'CGI::Minimal' => 0
}
)
;
lib/CGI/Mungo/Session.pm view on Meta::CPAN
Class to deal with session management.
=head1 METHODS
=cut
use strict;
use warnings;
use Digest::MD5;
use Data::Dumper;
use CGI::Thin::Cookies;
use File::Spec;
use base qw(CGI::Mungo::Base CGI::Mungo::Log);
our $prefix = "MG";
our $path = "/tmp";
##############################################################################################################################
sub new{ #constructor
my $class = shift;
my $self = $class->SUPER::new();
$self->{'id'} = undef;
$self->{'error'} = "";
lib/CGI/Mungo/Session.pm view on Meta::CPAN
$response = $wf->getResponse();
my $hashref = {
username => "bob"
};
$s->create($hashref, $response);
Creates a new session for the visitor.
This saves the contents of the given hash reference into the session.
The correct Set-Cookie header will be issued through the provided L<CGI::Mungo::Response> object.
=cut
##############################################################################################################
sub create{ #creates a server-side cookie for the session
my($self, $hash_p, $response) = @_;
$self->setError(""); #as we are starting a new session we clear any previous errors first
my $result = 0;
my $sessionId = time() * $$; #time in seconds * process id
my $ctx = Digest::MD5->new;
lib/CGI/Mungo/Session.pm view on Meta::CPAN
$self->setId($sessionId); #remember the session id
#set some initial values
$self->setVar('remoteIp', $ENV{'REMOTE_ADDR'});
$self->setVar('scriptPath', $ENV{'SCRIPT_NAME'});
while(my($name, $value) = each(%{$hash_p})){ #save any user provided variables
$self->setVar($name, $value);
}
if(!$self->getError()){ #all ok so far
my $domain = $ENV{'HTTP_HOST'}; #use the full domain name here
if($response){
my $cookie = &Set_Cookie(NAME => 'SESSION', VALUE => $sessionId, EXPIRE => 0, DOMAIN => $domain);
if($cookie =~ m/^([^ ]+): (.+)$/){
$response->header($1 => $2);
$result = 1;
}
else{
$self->setError("Invalid cookie line: $cookie");
}
}
else{ #old method if it is still used
print &Set_Cookie(NAME => 'SESSION', VALUE => $sessionId, EXPIRE => 0, DOMAIN => $domain);
$result = 1;
}
}
return $result;
}
##############################################################################################################
sub read{ #read an existing session
my $self = shift;
my $result = 0;
my $sessionId = $self->_getCookie("SESSION"); #get the session id from the browser
if(defined($sessionId)){ #got a sessionid of some sort
my $prefix = $self->_getPrefix();
if($sessionId =~ m/^($prefix[a-f0-9]+)$/){ #filename valid
my $path = $self->_getPath();
my $sessionFile = File::Spec->catfile($path, $1);
if(open(SSIDE, "<", $sessionFile)){ #try to open the session file
my $contents = "";
while(<SSIDE>){ #read each line of the file
$contents .= $_;
}
lib/CGI/Mungo/Session.pm view on Meta::CPAN
my($self, $response) = @_;
my $result = 0;
my $sessionId = $self->getId();
my $prefix = $self->_getPrefix();
if($sessionId =~ m/^$prefix[a-f0-9]+$/){ #id valid
my $path = $self->_getPath();
my $sessionFile = File::Spec->catfile($path, $sessionId);
if(unlink($sessionFile)){
$self->log("Deleted session: $sessionId");
if($response){
my $cookie = &Set_Cookie(NAME => 'SESSION', EXPIRE => 'delete');
if($cookie =~ m/^([^ ]+): (.+)$/){
$response->header($1 => $2);
}
else{
$self->setError("Invalid cookie line: $cookie");
}
}
else{
print &Set_Cookie(NAME => 'SESSION', EXPIRE => 'delete');
}
$self = undef; #destroy this object
$result = 1;
}
else{
$self->setError("Could not delete session");
}
}
else{
$self->setError("Session ID invalid: $sessionId");
lib/CGI/Mungo/Session.pm view on Meta::CPAN
}
close(SSIDE);
}
else{$self->setError("Cant write session: $!");}
}
else{$self->setError('Session ID invalid');}
if($self->getError()){return 0;}
else{return 1;}
}
############################################################################################################
sub _getCookie{ #returns the value of a cookie
my $self = shift;
my $name = shift;
my $value = undef;
if(exists($ENV{'HTTP_COOKIE'})){ #we have some kind of cookie
my @pairs = split(/; /, $ENV{'HTTP_COOKIE'}); #this cookie might contain multiple name value pairs
foreach(@pairs){
my($n, $v) = split(/=/, $_, 2);
if($n eq $name){$value = $v;}
}
}
( run in 0.667 second using v1.01-cache-2.11-cpan-e9199f4ba4c )