Start getting rid of login-logout. Home page shows books.

This commit is contained in:
barnold 2022-09-29 12:37:03 +01:00
parent 501736f901
commit 4c6d5bf321
6 changed files with 17 additions and 89 deletions

View File

@ -85,27 +85,12 @@ sub startup ($self) {
# Home gets an explicit name, else its name is an empty string. A
# route's default name seems to come from '/path' with the leading
# '/' removed.
$r->get('/')->to('home#index')->name('home');
$r->get('/<page_number:num>')->to('book#books', page_number => 1)->name('home');
$r->get('/<page_number:num>')->to('book#books')->name('books');
$r->get('/about')->to('home#about');
$r->get('/auth')->to('auth#index');
$r->post('/login')->to('auth#login');
$r->get('/logout')->to('auth#logout');
$r->get('/books/<page_number:num>')->to('book#books')->name('books');
$r->get('/authors/<page_number:num>')->to('book#authors')->name('authors');
$r->get('/author/<id:num>/<page_number:num>')->to('book#author')->name('author');
$r->post('/preferences')->to('auth#preferences')->name('preferences');
# Put a route under athentication.
my $auth = $r->under(
'/' => sub ($c) {
return 1 if ($c->logname);
$c->flash('naughty' => 1);
$c->session('post_login' => $c->current_route);
$c->redirect_to('auth');
return undef;
}
);
$auth->get('/account')->to('auth#account')->name('account');
$r->post('/set_rpp')->to('book#set_rpp')->name('set_rpp');
}
1;

View File

@ -1,44 +0,0 @@
package MyApp::Controller::Auth;
use Mojo::Base 'Mojolicious::Controller', -signatures;
use List::Util qw( min max );
sub index ($self) {
my $msg = $self->flash('err');
$self->render(name_msg => $msg);
}
sub login ($self) {
my $logname = $self->param('logname');
if ($logname =~ m/^[[:alpha:]]+$/) {
$self->session(logname => $logname);
my $post_login = $self->session('post_login');
$self->session('post_login' => undef);
$self->redirect_to($post_login || 'home');
} else {
$self->flash(err => "Try again!");
$self->flash(attempted_name => $logname);
$self->redirect_to('auth');
}
}
sub logout ($self) {
# "Delete whole session by setting an expiration date in the past"
# - from Mojolicious::Controller.
$self->session(expiration => 1);
$self->redirect_to('home');
}
sub preferences ($self) {
my $rpp = $self->accept_posint($self->param('rows_per_page'));
if ((!defined $rpp) || $rpp < 1 || $rpp > $self->max_rpp) {
$self->redirect_to('not_found');
return
}
$self->session(rows_per_page => $rpp);
$self->flash(
confirmation => sprintf("Updated rows per page to %s.", $self->rpp)
);
$self->redirect_to($self->param('target_url'));
}
1;

View File

@ -83,4 +83,17 @@ sub author ($self) {
);
}
sub set_rpp ($self) {
my $rpp = $self->accept_posint($self->param('rows_per_page'));
if ((!defined $rpp) || $rpp < 1 || $rpp > $self->max_rpp) {
$self->redirect_to('not_found');
return
}
$self->session(rows_per_page => $rpp);
$self->flash(
confirmation => sprintf("Updated rows per page to %s.", $self->rpp)
);
$self->redirect_to($self->param('target_url'));
}
1;

View File

@ -1,12 +0,0 @@
% layout 'default';
% title 'Account';
<h1><%= logname %>'s account on MyApp</h1>
%= form_for preferences => begin
%= label_for rows_per_page => 'Rows per page'
<%= number_field rows_per_page => $c->rpp,
min => 1, max => max_rpp, maxlength => 4, size => 4 %>
%= submit_button "Update"
% end
<p/>
%= flash('confirmation')

View File

@ -1,14 +0,0 @@
% layout 'default';
% title 'Auth';
<h1>Auth page</h1>
<%= "Login to reach " . session('post_login') . " page." if flash('naughty') %>
<%= $name_msg %>
<p/>
<div>
%= form_for login => begin
%= label_for logname => 'Name (only letters, please)'
%= text_field logname => flash('attempted_name')
%= submit_button "Login"
% end
</div>

View File

@ -19,7 +19,7 @@
<%= link_to("Login" => 'auth') %>
<% } %>
%= form_for preferences => begin
%= form_for set_rpp => begin
<%= hidden_field target_url => url_with('current') %>
%= label_for rows_per_page => 'Rows per page'
<%= number_field rows_per_page => $c->rpp,