package Reporter::Routes; use Modern::Perl; use Dancer2; use Reporter; my $app = Reporter->new; # contains model & db classes #set session => 'Cookie'; set session => 'JSON'; #set session => 'Sereal'; #set session => 'Memcached'; # defined in config.yml =begin # probably not needed as only 1 entry point hook before => sub { if (! session('user') && request->path_info !~ m!^/login!) { var request_path => request->path_info; } }; =cut get '/' => sub { session('user') || redirect('/login'); template index => {}, { layout => 'index' }; }; get '/login' => sub { # display a login page; the original URL is available as vars->{request_path}, # so could be put in a hidden field in the form template 'login'; }; post '/login' => sub { my $params = params; # p $params; # validate username/password if ( my $user = $app->model->authenticate_user($params) ) { # p 'here'; session user => $user; redirect params->{path} || '/'; } else { # p 'here'; var failed_login => 1; redirect '/login'; } }; get '/logout' => sub { context->destroy_session; redirect('/'); # should redirect to /login }; #=============================================================================== # default Dancer2 app index page: get '/index' => sub { template 'index', {}, { layout => 'index' } }; get '/count' => sub { if ( my $user = session('user') ) { session count => session('count') + 1; return 'Click here for the name of the eldest son of Count von '. ucfirst $user.' the '. ucfirst num2en_ordinal(session('count')).''; } return 'Cookie Monster!'; }; get '/do_login/:user' => sub { session user => params->{user}; session count => 0; redirect '/'; }; dance;