Make registration page better

This commit is contained in:
Citlali del Rey 2022-10-15 11:57:48 -07:00
parent e03100ef4b
commit 01ad8acd9a
Signed by: nullobsi
GPG Key ID: 933A1F44222C2634
3 changed files with 55 additions and 29 deletions

View File

@ -2,6 +2,7 @@ package unix_dog::Controller::Register;
use Mojo::Base 'Mojolicious::Controller', -signatures;
use Net::LDAPS;
use Net::LDAP::Extension::SetPassword;
use Net::LDAP::Constant qw(LDAP_NO_SUCH_OBJECT);
use Email::Simple;
use Email::Sender::Simple;
use Email::Sender::Transport::Sendmail;
@ -16,24 +17,29 @@ sub register($self) {
$v->required('username', 'trim')->size(1,32)->like(qr/^([a-z_][a-z0-9_-]*[\$]?)$/);
$v->required('password')->size(8, 256);
$v->required('email')->size(1, 512);
$v->required('pub-key')->size(1,4096);
$v->required('pubkey')->size(1,4096);
$v->required('bio')->size(1, 2048);
if ($v->has_error) {
$self->stash(err => 'Your input was invalid. Please try again.');
return $self->render('register/registerPage');
}
my $username = $self->param('username');
my $password = $self->param('password');
my $email = $self->param('email');
my $pubkeys = $self->param('pub-key');
my $pubkeys = $self->param('pubkey');
my $bio = $self->param('bio');
my $fromIP = $self->tx->remote_address;
$self->stash(email => $email);
$self->stash(username => $username);
$self->stash(email => $email);
$self->stash(pubkeys => $pubkeys);
$self->stash(bio => $bio);
if ($v->has_error) {
my $err = "Your input was invalid. Please try again.";
my @failed = $v->failed;
$self->stash(err => $err);
$self->stash(failed => @failed);
$self->stash(v => $v);
return $self->render('register/registerPage');
}
my $config = $self->config;
return Mojo::IOLoop->subprocess->run_p(sub {
@ -59,6 +65,20 @@ sub register($self) {
my $nextUID = int($uidEntry->get_value('uidnumber'));
my $nextGID = int($uidEntry->get_value('gidnumber'));
$mesg = $ldap->search(
base => 'ou=Dogs,dc=unix,dc=dog',
filter => '(uid=' .$username. ')',
);
$mesg->code and die $mesg->error;
$mesg->count == 0 or die 'That username is already in use.';
$mesg = $ldap->search(
base => 'ou=Dogs,ou=Unverified,dc=unix,dc=dog',
filter => '(uid='. $username .')',
);
$mesg->code and die $mesg->error;
$mesg->count == 0 or die 'That username is already in use.';
$mesg = $ldap->modify(
$uidEntry,
replace => {
@ -74,7 +94,7 @@ sub register($self) {
$userDN,
attrs => [
cn => $username,
mail => $email,
mail => $username . '@unix.dog',
sshPublicKey => (split "\n", $pubkeys),
objectClass => [
'top',

View File

@ -151,3 +151,7 @@ textarea {
#header-content a:hover {
text-decoration: underline;
}
label.field-with-error {
color: red;
}

View File

@ -5,6 +5,14 @@
<p class="error">
<%= $err %>
</p>
<% if (my $failed = stash 'failed' and my $v = stash 'v') { %>
<ul class="error">
<% foreach my $fn (@{$failed}) { %>
<% my ($check, $result, @args) = @{$v->error($fn)}; %>
<li><%= $fn %>: <%= $check %> <%= join "-", @args %></li>
<% } %>
</ul>
<% } %>
<% } %>
<p>
Before registering for UNIX.dog, please be sure you agree
@ -24,34 +32,28 @@
information over LDAP under cn=username,ou=Dogs,dc=unix,dc=dog.
</p>
<form action="/register" method="POST">
%= form_for register => (method => 'POST') => begin
<p>
<label for="username">Username:</label>
<input type="text" id="username" name="username">
%= label_for username => 'Username:'
%= text_field 'username', id=>'username'
</p>
<p>
<label for="password">Password:</label>
<input type="password" id="password" name="password">
%= label_for password => 'Password:'
%= password_field 'password', id=>'password'
</p>
<p>
<label for="email">EMail:</label>
<input type="email" id="email" name="email">
%= label_for email => 'EMail:'
%= email_field 'email', id=>'email'
</p>
<p>
<label for="pub-key">
Put your SSH keys here.
Separate them by a newline if you have multiple.
</label>
%= label_for pubkey => 'Put your SSH keys here. Separate them by a newline if you have multiple.'
<br>
<textarea name="pub-key" id="pub-key"></textarea>
%= text_area 'pubkey', id=>'pubkey'
</p>
<p>
<label for="bio">
Tell us a bit about yourself here.
Feel free to put some links, too :)
</label>
%= label_for bio => 'Tell us a bit about yourself here. Feel free to put some links, too :)'
<br>
<textarea name="bio" id="bio"></textarea>
%= text_area 'bio', id=>'bio'
</p>
<input type="submit" value="Submit!" id="submit">
</form>
%= submit_button
% end