32f629fcd8c0f87df411ca57cc044b0c64b3c97c
[scpubgit/stemmaweb.git] / lib / stemmaweb / Controller / Users.pm
1 package stemmaweb::Controller::Users;
2 use Moose;
3 use namespace::autoclean;
4
5 BEGIN {extends 'CatalystX::Controller::Auth'; }
6 with 'Catalyst::TraitFor::Controller::reCAPTCHA';
7
8 =head1 NAME
9
10 stemmaweb::Controller::Users - Catalyst Controller
11
12 =head1 DESCRIPTION
13
14 The Users controller is based on L<CatalystX::Controller::Auth>, see
15 there for most of the functionality. Any localised parts are described
16 below.
17
18 This controller uses L<Catalyst::TraitFor::Controller::reCAPTCHA> to
19 create and check a reCaptcha form shown on the C<register> form to
20 help prevent spam signups.
21
22 =head1 METHODS
23
24 =cut
25
26 sub base :Chained('/') :PathPart('') :CaptureArgs(0)
27 {
28         my ( $self, $c ) = @_;
29
30         $self->next::method( $c );
31 }
32
33 =head2 index
34
35 The index action is not currently used.
36
37 =cut
38
39 sub index :Path :Args(0) {
40     my ( $self, $c ) = @_;
41
42     $c->response->body('Matched stemmaweb::Controller::Users in Users.');
43 }
44
45 =head2 login with openid
46
47 Logging in with openid/google requires two passes through the login
48 action, on the 2nd pass the C<openid-check> value is passed in when
49 the openid providing webserver links the user back to the stemmaweb
50 site. This adaptation to the C<login> action sets the realm we are
51 authenticating against to be C<openid> in this case.
52
53 =cut
54
55 before login => sub {
56   my($self, $c) = @_;
57   $c->req->param( realm => 'openid')
58     if $c->req->param('openid-check');
59 };
60
61 =head2 register with recaptcha
62
63 This adapts the C<register> action to add the recaptcha HTML to the
64 page, and verify the recaptcha info entered is correct when the form
65 is submitted. If the recaptcha is not correct, we just redisplay the
66 form with an error message.
67
68 =cut
69
70 before 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
89 =head2 success
90
91 A stub page returned on login / registration success.
92
93 =cut
94
95 sub 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
104 Return to the index page, not to the login page.
105
106 =cut
107
108 sub post_logout {
109         my( $self, $c ) = @_;
110         $c->response->redirect( $c->uri_for_action( '/index' ) );
111         $c->detach;
112 }
113
114 =head1 AUTHOR
115
116 A clever guy
117
118 =head1 LICENSE
119
120 This library is free software. You can redistribute it and/or modify
121 it under the same terms as Perl itself.
122
123 =cut
124
125 __PACKAGE__->meta->make_immutable;
126
127 1;