Commit | Line | Data |
19262e3d |
1 | package stemmaweb::Controller::Users; |
2 | use Moose; |
3 | use namespace::autoclean; |
4 | |
5 | BEGIN {extends 'CatalystX::Controller::Auth'; } |
b74843e5 |
6 | with 'Catalyst::TraitFor::Controller::reCAPTCHA'; |
19262e3d |
7 | |
8 | =head1 NAME |
9 | |
10 | stemmaweb::Controller::Users - Catalyst Controller |
11 | |
12 | =head1 DESCRIPTION |
13 | |
b74843e5 |
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. |
19262e3d |
21 | |
22 | =head1 METHODS |
23 | |
24 | =cut |
25 | |
26 | sub base :Chained('/') :PathPart('') :CaptureArgs(0) |
27 | { |
28 | my ( $self, $c ) = @_; |
1628e97a |
29 | |
19262e3d |
30 | $self->next::method( $c ); |
31 | } |
32 | |
33 | =head2 index |
34 | |
b74843e5 |
35 | The index action is not currently used. |
36 | |
19262e3d |
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 | |
b74843e5 |
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 |
eb38afbc |
50 | site. This adaptation to the C<login> action sets the realm we are |
b74843e5 |
51 | authenticating against to be C<openid> in this case. |
52 | |
53 | =cut |
54 | |
b600c671 |
55 | before login => sub { |
56 | my($self, $c) = @_; |
57 | $c->req->param( realm => 'openid') |
58 | if $c->req->param('openid-check'); |
59 | }; |
19262e3d |
60 | |
b74843e5 |
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 | |
eb38afbc |
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 | |
19262e3d |
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; |