X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=stemmaweb%2Flib%2Fstemmaweb%2FController%2FUsers.pm;fp=stemmaweb%2Flib%2Fstemmaweb%2FController%2FUsers.pm;h=8a5c6ac97bb4a1d058e233809186a1ae0fbd32d8;hb=fc5c4949b38572067ab389afa8c1cafec2b5dbd0;hp=0000000000000000000000000000000000000000;hpb=96ba0418c65f3450b419aea78db41bf697612b63;p=scpubgit%2Fstemmatology.git diff --git a/stemmaweb/lib/stemmaweb/Controller/Users.pm b/stemmaweb/lib/stemmaweb/Controller/Users.pm new file mode 100644 index 0000000..8a5c6ac --- /dev/null +++ b/stemmaweb/lib/stemmaweb/Controller/Users.pm @@ -0,0 +1,102 @@ +package stemmaweb::Controller::Users; +use Moose; +use namespace::autoclean; + +BEGIN {extends 'CatalystX::Controller::Auth'; } +with 'Catalyst::TraitFor::Controller::reCAPTCHA'; + +=head1 NAME + +stemmaweb::Controller::Users - Catalyst Controller + +=head1 DESCRIPTION + +The Users controller is based on L, see +there for most of the functionality. Any localised parts are described +below. + +This controller uses L to +create and check a reCaptcha form shown on the C form to +help prevent spam signups. + +=head1 METHODS + +=cut + +sub base :Chained('/') :PathPart('') :CaptureArgs(0) +{ + my ( $self, $c ) = @_; + + $self->next::method( $c ); +} + +=head2 index + +The index action is not currently used. + +=cut + +sub index :Path :Args(0) { + my ( $self, $c ) = @_; + + $c->response->body('Matched stemmaweb::Controller::Users in Users.'); +} + +=head2 login with openid + +Logging in with openid/google requires two passes through the login +action, on the 2nd pass the C value is passed in when +the openid providing webserver links the user back to the stemmaweb +site. This adaption to the C action sets the realm we are +authenticating against to be C in this case. + +=cut + +before login => sub { + my($self, $c) = @_; + $c->req->param( realm => 'openid') + if $c->req->param('openid-check'); +}; + +=head2 register with recaptcha + +This adapts the C action to add the recaptcha HTML to the +page, and verify the recaptcha info entered is correct when the form +is submitted. If the recaptcha is not correct, we just redisplay the +form with an error message. + +=cut + +before register => sub { + my ($self, $c) = @_; + + ## Puts HTML into stash in "recaptcha" key. + $c->forward('captcha_get'); + + ## When submitting, check recaptcha passes, else re-draw form + if($c->req->method eq 'POST') { + if(!$c->forward('captcha_check')) { + + ## Need these two lines to detach, so end can draw the correct template again: + my $form = $self->form_handler->new( active => [ $self->login_id_field, 'password', 'confirm_password' ] ); + $c->stash( template => $self->register_template, form => $form ); + + $c->detach(); + } + } +}; + +=head1 AUTHOR + +A clever guy + +=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;