appname: "TestSession"
layout: "main"
charset: "UTF-8"
# session setup
session: YAML
engines:
session:
YAML:
session_dir: /tmp/dancer-sessions
# template engine
template: "template_toolkit"
engines:
template:
template_toolkit:
start_tag: '[%'
end_tag: '%]'
####
#!/usr/bin/env perl
use FindBin;
use lib "$FindBin::Bin/../lib";
use TestSession;
TestSession->dance;
##
##
package TestSession;
use Dancer2;
our $VERSION = '0.11';
use DBI;
use File::Spec;
use File::Slurp;
use Template;
set 'logger' => 'file';
set 'log' => 'debug';
set 'show_errors' => 1;
set 'startup_info' => 1;
set 'warnings' => 1;
set 'username' => 'admin';
set 'password' => 'password';
set 'layout' => 'main';
my $timestamp = localtime;
my $login_status;
my $dbh = DBI->connect('DBI:mysql:testsession','test','dr_dfRFgt@');\
my $flash;
sub set_flash {
my $message = shift;
$flash = $message;
}
sub get_flash {
my $msg = $flash;
$flash = "";
return $msg;
}
hook before_template => sub {
my $tokens = shift;
$tokens->{'session_logged_in'} = session('logged_in');
$tokens->{'css_url'} = request->base . 'css/style.css';
$tokens->{'login_url'} = uri_for('/login');
$tokens->{'logout_url'} = uri_for('/logout');
};
get '/' => sub {
my $sql = 'select id, etitle, etext from entries order by id desc';
my $sth = $dbh->prepare($sql) or die $dbh->errstr;
$sth->execute or die $sth->errstr;
template 'show_entries.tt', {
'session_logged_in' => session('logged_in'),
'msg' => get_flash(),
'add_entry_url' => uri_for('/add'),
'entries' => $sth->fetchall_hashref('id'),
};
};
post '/add' => sub {
if (not $login_status) {
debug "add route attempted with login_status $login_status";
send_error("Not logged in", 401);
}
debug "login_status $login_status: adding entry on status $login_status";
my $sql = 'insert into entries (etitle, etext) values (?, ?)';
my $sth = $dbh->prepare($sql) or die $dbh->errstr;
$sth->execute(params->{'etitle'}, params->{'etext'}) or die $sth->errstr;
set_flash('New entry posted!');
redirect '/';
};
any ['get', 'post'] => '/login' => sub {
my $err;
if ( request->method() eq "POST" ) {
debug "executing login attempt\n";
# process form input
if ( params->{'username'} ne setting('username') ) {
$err = "Invalid username";
debug "Got Invalid username";
}
elsif ( params->{'password'} ne setting('password') ) {
$err = "Invalid password";
debug "Got Invalid password";
}
else {
debug "Login Successful";
session logged_in => true;
$login_status = 1;
debug "login_status:".session('logged_in');
set_flash('You are logged in.');
redirect '/';
}
}
# display login form
template 'login.tt', {
'err' => $err,
};
};
get '/logout' => sub {
debug "login:\t executng LOGOUT\n";
context->destroy_session;
$login_status = 0;
debug "login_status on LOGOUT:\t$login_status";
set_flash('You are logged out.');
debug "login LOGOUT flash message: ".$flash;
redirect '/';
};
start;
true;
##
##
ServerAdmin webmaster@dataship.com
DocumentRoot /var/www/retireaboard/RetireAboard
ServerName retireaboard.com
AllowOverride None
Order allow,deny
Allow from all
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /var/www/retireaboard/RetireAboard/bin/app.pl
SetEnv DANCER_ENVIRONMENT "development"
ErrorLog /var/log/httpd/www.retireaboard.com.log
CustomLog /var/log/httpd/retireaboard_access.log combined
##
##
[Wed Nov 27 01:15:53 2013] [error] [client 24.86.10.67] Error while loading /var/www/retireaboard/RetireAboard/bin/app.pl: Unable to create session dir : ./sessions : Permission denied at (eval 135) line 11\nCompilation failed in require at /var/www/retireaboard/RetireAboard/bin/app.pl line 6.\nBEGIN failed--compilation aborted at /var/www/retireaboard/RetireAboard/bin/app.pl line 6.\n