1 contributor
<%
use Mojo::JSON ();
use Encode ();
use Gitprep::API;
use Mojo::Util 'md5_sum';
my $api = Gitprep::API->new($self);
my $op = param('op') || '';
my $state = 'start';
# DBI
my $dbi = $self->app->dbi;
if ($op eq 'login') {
sleep 3;
$state = 'login';
my $params = {
id => scalar param('id'),
password => scalar param('password'),
};
my $id = param('id');
my $validator = $self->app->validator;
my $password_check = sub {
my $values = shift;
my ($id, $password) = @$values;
my $password_md5 = md5_sum $password;
my $config_json
= $dbi->model('user')->select('config', id => $id)->value;
return unless $config_json;
my $config = $api->json($config_json);
return $config->{password} eq $password_md5;
};
my $rule = [
id => [
'any'
],
password => [
'any'
],
{password_check => [qw/id password/]}
=> {copy => 0},
=> [
$password_check
]
];
my $vresult = $validator->validate($params, $rule);
if ($vresult->is_ok) {
my $valid_params = $vresult->data;
my $id = $valid_params->{id};
my $password = $valid_params->{password};
my $password_md5 = md5_sum $password;
my $config_json = $self->app->dbi->model('user')->select('config', id => $id)->value;
my $config = $api->json($config_json);
my $admin = $config->{admin};
session(user_id => $id);
session(user_password => $password_md5);
if ($admin) {
$self->redirect_to('/_admin');
return 1;
}
else {
$self->redirect_to("/$id");
return 1;
}
}
else {
$state = 'error';
}
} elsif ($op eq 'logout') {
session(expires => 1);
$self->redirect_to('/');
return 1;
}
%>
% layout 'common';
%= include '/include/header';
% my $id = '';
% if (flash('success')) {
<br>
<b><center>Start up success! Please login as admin user.</center></b>
% $id = flash('id');
% }
<div class="border-gray" style="padding-top:15px;padding-left:60px;width:300px;margin-left:auto;margin-right:auto">
<form action="<%= url_for->query(op => 'login') %>" method="post">
<div class="control-group">
<label class="control-label" for="user-name">user-name</label>
<div class="controls">
<%= input_tag id => $id, type => 'text', placeholder => 'User', id =>'user-name'%>
</div>
</div>
<div class="control-group">
<label class="control-label" for="input-password">Password</label>
<div class="controls">
<%= password_field 'password', id => 'input-password', placeholder => 'Password' %>
</div>
</div>
<div class="control-group">
<div class="controls">
<button type="submit" class="btn">Sign in</button>
</div>
</div>
</form>
</div>