diff --git a/lib/unix_dog/Controller/Register.pm b/lib/unix_dog/Controller/Register.pm index 6cede98..e5eae8e 100644 --- a/lib/unix_dog/Controller/Register.pm +++ b/lib/unix_dog/Controller/Register.pm @@ -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', diff --git a/public/css/main.css b/public/css/main.css index 39624f8..8e9218c 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -151,3 +151,7 @@ textarea { #header-content a:hover { text-decoration: underline; } + +label.field-with-error { + color: red; +} diff --git a/templates/register/registerPage.html.ep b/templates/register/registerPage.html.ep index c83f437..116c891 100644 --- a/templates/register/registerPage.html.ep +++ b/templates/register/registerPage.html.ep @@ -5,6 +5,14 @@
<%= $err %>
+ <% if (my $failed = stash 'failed' and my $v = stash 'v') { %> +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.
- + %= submit_button +% end