<% # API my $api = gitprep_api; # Operator my $op = param('op') || ''; # DBI my $dbi = $self->app->dbi; # Errors my $error; # Login if ($op eq 'login') { # Validation my $params = $api->params; my $vc = $self->app->vc; my $password_check = sub { my $values = shift; my ($id, $password) = @$values; my $row = $dbi->model('user')->select(['password', 'salt'], id => $id)->one; return unless defined $password; my $is_valid = $api->check_password( $password, $row->{salt}, $row->{password} ); return $is_valid; }; my $rule = [ id => [ 'any' ], password => [ 'any' ], {password_check => [qw/id password/]} => {copy => 0}, => [ $password_check ], save => {require => 0} => [ 'defined' ] ]; my $vresult = $self->app->vc->validate($params, $rule); if ($vresult->is_ok) { # Login success my $safe_params = $vresult->data; my $id = $safe_params->{id}; my $password = $safe_params ->{password}; my $row = $self->app->dbi->model('user')->select(['admin', 'password'], id => $id)->one; my $password_encrypted = $row->{password}; my $admin = $row->{admin}; session(user => $id); session(password => $password_encrypted); if ($safe_params->{save}) { # 2 weeks save session(expires => time + 60 * 60 * 24 * 14); } # Go to admin page if ($admin) { $self->redirect_to('/_admin'); return 1; } # Go to user page else { $self->redirect_to("/$id"); return 1; } } else { $error = 'User name or password is wrong' } } %> % layout 'common', title => 'Sign in'; %= include '/include/header';
% my $id = ''; % if (flash('admin_user_created')) { % $id = 'admin';
Admin user is created. Let's login as admin user.
% } % if (my $messages = flash('messages')) {
% for my $message (@$messages) {

<%= $message %>

% }
% } % if ($error) {
<%= $error %>
% }
<%= input_tag id => $id, type => 'text', placeholder => 'User', id =>'user-name'%>
<%= password_field 'password', id => 'input-password', placeholder => 'Password' %>
%= include '/include/footer';