package Routes;
use Dancer2;
use Dancer2::Plugin::Database;
use Model;
use Data::Printer;
our $VERSION = '0.1';
set auto_page => 1; # /login
my $model = Model->new( dbh => database() ); # or:
# sub dbix { DBIx::Simple->new( database() ) } # uses D::P::Database handle
hook before => sub {
# all routes need authenticated session (except /login request):
unless ( session('logged_in') ) {
redirect '/login' unless request->path_info =~ m!^/(login|index)$!;
}
};
get '/' => sub {
# my $user = $model->get_data('select * from users where id = ?', 14); p $user;
template welcome => {};
};
# get '/login' => sub { template 'login' }; # delivered using auto_page()
post '/login' => sub {
my $params = params; # p $params;
# validate login:
if ( $model->authenticate_user($params) ) { # p $user;
session logged_in => 1;
redirect '/';
}
else {
template login => { error => 'invalid username or password' };
}
};
get '/logout' => sub {
app->destroy_session;
redirect('/'); # should redirect to /login
};
# original index page:
get '/index' => sub { template index => {}, { layout => 'index' } };
#==============================================================================
# my $foo = dbix->query('select * from users where id = ?', 14)->hash; p $foo;
# my $bar = $model->get_data('select * from users limit 2'); p $bar;
# my $baz = $model->get_data('select count(*) as count from users'); p $baz;
true;