aboutsummaryrefslogtreecommitdiffstats
path: root/lib/CatDap/Controller/register.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CatDap/Controller/register.pm')
-rw-r--r--lib/CatDap/Controller/register.pm150
1 files changed, 150 insertions, 0 deletions
diff --git a/lib/CatDap/Controller/register.pm b/lib/CatDap/Controller/register.pm
new file mode 100644
index 0000000..d8fc7c1
--- /dev/null
+++ b/lib/CatDap/Controller/register.pm
@@ -0,0 +1,150 @@
+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;