package Reporter::Routes; use Reporter::Class; # provides Moo, Modern::Perl & Data::Printer::p use Reporter; use Dancer2; my $app = Reporter->new(dbname => 'hilis4'); # contains model & db classes hook before => sub { # all routes need login: if (! session('user_profile') && request->path_info !~ m!^/login! ) { redirect '/login'; } # sql query output to stdout: $app->enable_sql_trace if setting('enable_sql_trace'); # development env }; # default route: get '/' => sub { template load => { target => uri_for('/load') }; }; # login route: get '/login' => sub { template 'login' }; # submitted user credentials: post '/login' => sub { my $params = params; # p $params; # validate username/password if ( my $user = $app->model->authenticate_user($params) ) { # p $user; session user_profile => $user; redirect '/'; } else { # p 'here'; my $failed_logins = session('failed_logins') || 0; session failed_logins => $failed_logins + 1; # increment redirect '/login'; } }; get '/load' => sub { my $params = params; # p $params; # validate lab number format: my $result = $app->model->validate($params); # p $result; if ( $result->{failed} ) { # p $result->errors; my $errs = $result->{errors}; p $errs; return template load => { format_errors => $errs }; } my $data = $app->model->load_request($params->{lab_number}); template report => { data => $data }; }; # logout route: get '/logout' => sub { app->destroy_session; redirect('/'); # should redirect to /login }; # default Dancer2 app index page: get '/index' => sub { template 'index', {}, { layout => 'index' } }; #=============================================================================== # http://blog.geekuni.com/2015/06/three-ways-to-implement-sessions.html get '/count' => sub { if ( my $user = session('user') ) { session count => session('count') + 1; my $ordinal = $app->model->num2ordinal(session('count')); p $ordinal; return 'Click here for the name of the eldest son of ' . 'Count von '. ucfirst $user.' the '. ucfirst $ordinal .''; } return 'Cookie Monster!'; }; get '/do_login/:user' => sub { session user => params->{user}; session count => 0; redirect '/count'; }; #=============================================================================== dance;