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 Mojo::Base 'Mojolicious::Controller', -signatures;
use Net::LDAPS; use Net::LDAPS;
use Net::LDAP::Extension::SetPassword; use Net::LDAP::Extension::SetPassword;
use Net::LDAP::Constant qw(LDAP_NO_SUCH_OBJECT);
use Email::Simple; use Email::Simple;
use Email::Sender::Simple; use Email::Sender::Simple;
use Email::Sender::Transport::Sendmail; 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('username', 'trim')->size(1,32)->like(qr/^([a-z_][a-z0-9_-]*[\$]?)$/);
$v->required('password')->size(8, 256); $v->required('password')->size(8, 256);
$v->required('email')->size(1, 512); $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); $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 $username = $self->param('username');
my $password = $self->param('password'); my $password = $self->param('password');
my $email = $self->param('email'); my $email = $self->param('email');
my $pubkeys = $self->param('pub-key'); my $pubkeys = $self->param('pubkey');
my $bio = $self->param('bio'); my $bio = $self->param('bio');
my $fromIP = $self->tx->remote_address; my $fromIP = $self->tx->remote_address;
$self->stash(email => $email);
$self->stash(username => $username); $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; my $config = $self->config;
return Mojo::IOLoop->subprocess->run_p(sub { return Mojo::IOLoop->subprocess->run_p(sub {
@ -59,6 +65,20 @@ sub register($self) {
my $nextUID = int($uidEntry->get_value('uidnumber')); my $nextUID = int($uidEntry->get_value('uidnumber'));
my $nextGID = int($uidEntry->get_value('gidnumber')); 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( $mesg = $ldap->modify(
$uidEntry, $uidEntry,
replace => { replace => {
@ -74,7 +94,7 @@ sub register($self) {
$userDN, $userDN,
attrs => [ attrs => [
cn => $username, cn => $username,
mail => $email, mail => $username . '@unix.dog',
sshPublicKey => (split "\n", $pubkeys), sshPublicKey => (split "\n", $pubkeys),
objectClass => [ objectClass => [
'top', 'top',

View File

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

View File

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