integrate login/register functionality more properly with app
[scpubgit/stemmatology.git] / stemmaweb / lib / stemmaweb / Controller / Users.pm
CommitLineData
4dbd098b 1package stemmaweb::Controller::Users;
2use Moose;
3use namespace::autoclean;
4
5BEGIN {extends 'CatalystX::Controller::Auth'; }
775e7a0e 6with 'Catalyst::TraitFor::Controller::reCAPTCHA';
4dbd098b 7
8=head1 NAME
9
10stemmaweb::Controller::Users - Catalyst Controller
11
12=head1 DESCRIPTION
13
775e7a0e 14The Users controller is based on L<CatalystX::Controller::Auth>, see
15there for most of the functionality. Any localised parts are described
16below.
17
18This controller uses L<Catalyst::TraitFor::Controller::reCAPTCHA> to
19create and check a reCaptcha form shown on the C<register> form to
20help prevent spam signups.
4dbd098b 21
22=head1 METHODS
23
24=cut
25
26sub base :Chained('/') :PathPart('') :CaptureArgs(0)
27{
28 my ( $self, $c ) = @_;
10ef7653 29
4dbd098b 30 $self->next::method( $c );
31}
32
33=head2 index
34
775e7a0e 35The index action is not currently used.
36
4dbd098b 37=cut
38
39sub index :Path :Args(0) {
40 my ( $self, $c ) = @_;
41
42 $c->response->body('Matched stemmaweb::Controller::Users in Users.');
43}
44
775e7a0e 45=head2 login with openid
46
47Logging in with openid/google requires two passes through the login
48action, on the 2nd pass the C<openid-check> value is passed in when
49the openid providing webserver links the user back to the stemmaweb
3e97c22c 50site. This adaptation to the C<login> action sets the realm we are
775e7a0e 51authenticating against to be C<openid> in this case.
52
53=cut
54
8591038d 55before login => sub {
56 my($self, $c) = @_;
57 $c->req->param( realm => 'openid')
58 if $c->req->param('openid-check');
59};
4dbd098b 60
775e7a0e 61=head2 register with recaptcha
62
63This adapts the C<register> action to add the recaptcha HTML to the
64page, and verify the recaptcha info entered is correct when the form
65is submitted. If the recaptcha is not correct, we just redisplay the
66form with an error message.
67
68=cut
69
70before register => sub {
71 my ($self, $c) = @_;
72
73 ## Puts HTML into stash in "recaptcha" key.
74 $c->forward('captcha_get');
75
76 ## When submitting, check recaptcha passes, else re-draw form
77 if($c->req->method eq 'POST') {
78 if(!$c->forward('captcha_check')) {
79
80 ## Need these two lines to detach, so end can draw the correct template again:
81 my $form = $self->form_handler->new( active => [ $self->login_id_field, 'password', 'confirm_password' ] );
82 $c->stash( template => $self->register_template, form => $form );
83
84 $c->detach();
85 }
86 }
87};
88
3e97c22c 89=head2 success
90
91A stub page returned on login / registration success.
92
93=cut
94
95sub success :Local :Args(0) {
96 my ( $self, $c ) = @_;
97
98 $c->load_status_msgs;
99 $c->stash->{template} = 'auth/success.tt';
100}
101
102=head2 post_logout
103
104Return to the index page, not to the login page.
105
106=cut
107
108sub post_logout {
109 my( $self, $c ) = @_;
110 $c->response->redirect( $c->uri_for_action( '/index' ) );
111 $c->detach;
112}
113
4dbd098b 114=head1 AUTHOR
115
116A clever guy
117
118=head1 LICENSE
119
120This library is free software. You can redistribute it and/or modify
121it under the same terms as Perl itself.
122
123=cut
124
125__PACKAGE__->meta->make_immutable;
126
1271;