gitprep / templates / main / login.html.ep /
e1385e0 11 years ago
1 contributor
118 lines | 3.023kb
<%
  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>