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