1 contributor
<%
my $api = gitprep_api;
my $op = param('op') || '';
my $errors;
if ($op eq 'create') {
# Parameters
my $id = param('id');
my $name = param('name');
my $email = param('email');
my $password = param('password');
my $password2 = param('password2');
# Validator
my $vc = app->vc;
# Validation result
my $validation = $vc->validation;
# "id" check
if (!(defined $id && length $id)) {
$validation->add_failed(id => 'User id is empty.');
}
elsif (!$vc->check($id, 'user_name')) {
$validation->add_failed(id => 'User id contain invalid character.');
}
elsif (length $id > 20) {
$validation->add_failed(id => 'User id is too long.');
}
else {
my $row = app->dbi->model('user')->select(where => {id => $id})->one;
if ($row) {
$validation->add_failed(id => "User id $id already exists");
}
}
# "name" check
$name //= '';
# "email" check
if (!(defined $email && length $email)) {
$validation->add_failed(email => "Mail must be not empty");
}
elsif ($email !~ /\@/) {
$validation->add_failed(email => "Invalid mail address");
}
else {
my $row = app->dbi->model('user')->select(where => {email => $email})->one;
if ($row) {
$validation->add_failed(email => "Mail $email already exists");
}
}
# "password" check
$password2 ||= '';
if (!(defined $password && length $password)) {
$validation->add_failed(password => 'Password is empty.');
}
elsif (!$vc->check($password, 'ascii_graphic')) {
$validation->add_failed(password => 'Password contain invalid character.');
}
elsif ($password ne $password2) {
$validation->add_failed(password => "Two password don't match");
}
if ($validation->is_valid) {
# Encrypt password
my ($password_encrypted, $salt) = $api->encrypt_password($password);
my $params = {};
$params->{password} = $password_encrypted;
$params->{salt} = $salt;
$params->{name} = $name;
$params->{email} = $email;
# Create user
eval { app->manager->create_user($id, $params) };
if (my $e = $@) {
app->log->error(url_for . ": $e");
$errors = ['Internal Error'];
}
else {
$self->flash(success => 1);
$self->flash(id => $id);
$self->redirect_to('current');
}
}
else { $errors = $validation->messages }
}
%>
% layout 'common', title => 'Create User';
%= include '/include/header';
<div class="container">
% my $id = '';
% if (flash('success')) {
<div class="alert alert-success">
<button type="button" class="close" data-dismiss="alert">×</button>
Success: User <b><%= flash('id') %></b> is created.
</div>
% }
% if ($errors) {
<div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">×</button>
% for my $error (@$errors) {
<p><%= $error %></p>
% }
</div>
% }
<div class="topic1" style="text-align:center">Create User</div>
<form class="user-form" action="<%= url_for->query(op => 'create') %>" method="post">
<div class="user-form-container">
<div>
<div>ID</div>
<div>
<%= text_field 'id', placeholder => 'ID' %>
</div>
</div>
<div>
<div>Name</div>
<div>
<%= text_field 'name', placeholder => 'Name' %>
</div>
</div>
<div>
<div>Mail</div>
<div>
<%= text_field 'email', placeholder => 'Mail' %>
</div>
</div>
<div>
<div>Password</div>
<div>
<%= password_field 'password', id => 'input-password', placeholder => 'Password' %>
<%= password_field 'password2', id => 'input-password', placeholder => 'Password Again' %>
</div>
</div>
<div>
<div>
<button type="submit" class="btn btn-green" style="margin-top:20px">Create User</button>
</div>
</div>
</div>
</form>
<div style="text-align:center;margin:20px 0"><big><a href="<%= url_for('/_admin/users') %>">Users</a></big></div>
</div>
%= include '/include/footer';