package CatDap::Controller::register; use Moose; use namespace::autoclean; use Data::Dumper; use Email::Valid; use Data::UUID; BEGIN {extends 'Catalyst::Controller'; } =head1 NAME CatDap::Controller::register - Catalyst Controller =head1 DESCRIPTION Catalyst Controller. =head1 METHODS =cut =head2 index =cut sub index :Path :Args(0) : Form { my ( $self, $c ) = @_; #my $form = Catalyst::Controller::HTML::FormFu->form(); #$c->response->body('Matched CatDap::Controller::register in register.'); } sub check : Local { my ( $self, $c ) = @_; my %details = %{$c->request->params}; my $username = $c->request->params->{uid}; $username =~ s/[A-Z]/[a-z]/g; my @errors; $c->stash(errors => []); # Check username, start with letter, followed by letters or numbers if ($username !~ /^[a-z][a-z0-9_\-]*$/) { push @errors, $c->loc('Invalid username'); } my $email = $c->request->params->{mail1}; if (! Email::Valid->address($email)) { push @errors, $c->loc('Invalid email address'); } if ($email ne $c->request->params->{mail2}) { push @errors, $c->loc('Addresses do not match'); } if (! $c->validate_captcha($c->req->param('validate'))){ push @errors, $c->loc('Incorrect validation text, please try again'); } if ($c->request->params->{gn} !~ /^\p{IsAlnum}*\z$/) { push @errors, $c->loc('The first name supplied contains illegal characters'); } if ($c->request->params->{sn} !~ /^\p{IsAlnum}*\z$/) { #push @errors, $c->loc('The') . ' ' $c->loc('surname') . ' ' . $c->loc('supplied contains unprintable characters'); push @errors, $c->loc('The surname supplied contains illegal characters'); } if (@errors gt 0) { $c->stash(errors => \@errors); $c->stash(template => 'register/index.tt'); } else { # check in LDAP now that we have validated username and email my $mesg = $c->model('Proxy')->search("(mail=$email)"); if ($mesg->entries ne 0) { push @errors,$c->loc('An account already exists with this email address'); } $mesg = $c->model('Proxy')->search("(uid=$username)"); if ($mesg->entries ne 0) { my $foo = Dumper(${$c->config}{'Model::Proxy'}{'base'}); push @errors,$c->loc('An account already exists with this username'); #push @errors,"under base" . __PACKAGE__->config{Model::Proxy}{base}; push @errors,$foo; } if (@errors gt 0) { $c->stash(errors => \@errors); $c->stash(template => 'register/index.tt'); } else { my $dn = "uid=$username,${$c->config}{'Model::Proxy'}{'base'}"; my $ug = Data::UUID->new; my $password = $ug->create_str(); my $cn = $c->request->params->{gn} . " " . $c->request->params->{sn}; $mesg = $c->model('Proxy')->add($dn, attr => [ objectclass => [ 'inetOrgPerson' ], sn => $c->request->params->{sn}, gn => $c->request->params->{gn}, cn => $cn, mail => $email, pwdReset => 'TRUE', userPassword => $password, ] ); if ($mesg) { push @errors,$mesg->error; $c->stash(errors => \@errors); #$c->stash(template => 'register/index.tt'); } #} else { my $body; $body .= $c->loc('Dear') . " $c->request->params->{gn},\n"; $body .= $c->loc("Your Mageia indentity has been successfully created, but requires activation.\n"); $body .= $c->loc("To activate your account, please follow the link below.\n"); $body .= $c->uri_for('/user/firstlogin') . "?username=$username&key=$password"; $c->stash->{email} = { to => $email, from => 'no-reply@mageia.org', subject => $c->loc('Mageia Identity Activation'), body => $body, }; $c->forward( $c->view('Email') ); if ( scalar( @{ $c->error } ) ) { my $errors = join "\n",@{ $c->error }; $c->response->body($c->loc('An error occured sending the email, but your account was created. Please try the password recovery process f you entered the correct email address: [_1]', $errors)); $c->error(0); # Reset the error condition if you need to } $c->stash(template => 'register/complete.tt'); $c->stash(message => 'Check your email'); #} } } } sub captcha : Local { my ($self, $c) = @_; return $c->create_captcha(); } =head1 AUTHOR Buchan Milne =head1 LICENSE This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself. =cut __PACKAGE__->meta->make_immutable; 1;