RSS Git Download  Clone
Raw Blame History
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
      '<a href="/count">Click here</a> for the name of the eldest son of <b>Count von '.
      ucfirst $user.' the '. ucfirst num2en_ordinal(session('count')).'</b>';
  }
  return 'Cookie Monster!';
};

get '/do_login/:user' => sub {
    session user   => params->{user};
    session count  => 0;
    redirect '/';
};

dance;