File Coverage

blib/lib/Rubric/WebApp/Login.pm
Criterion Covered Total %
statement 21 25 84.0
branch 6 10 60.0
condition 1 3 33.3
subroutine 7 10 70.0
pod 8 8 100.0
total 43 56 76.7


line stmt bran cond sub pod time code
1 2     2   2839 use strict;
  2         4  
  2         75  
2 2     2   11 use warnings;
  2         5  
  2         534  
3             package Rubric::WebApp::Login;
4             # ABSTRACT: web login processing
5             $Rubric::WebApp::Login::VERSION = '0.155';
6             # =head1 DESCRIPTION
7             #
8             # This module checks for information needed to confirm that a user is logged into
9             # the Rubric.
10             #
11             # =head1 METHODS
12             #
13             # =head2 Rubric::WebApp::Login->check_for_login($webapp)
14             #
15             # This method is called by the WebApp's C, and checks for a login
16             # attempt in the submitted request.
17             #
18             # It looks for a login username by calling C, then converts
19             # the login name to a Rubric name by calling C and returns
20             # immediately if the name can't be shown valid by calling C.
21             #
22             # It retrieves the User object by calling C or, if needed,
23             # C, and returns if it can't get a User object. It tries to
24             # authenticate by calling C. If the user is authorized but
25             # isn't verified, he won't be logged in and the C parameter will be
26             # set on the Rubric::WebApp object. Otherwise, he will be logged in with
27             # C.
28             #
29             # Most of the methods above are virtual methods in this class, and should be
30             # implemented in subclasses. The bundled L (the
31             # default) and L serve as examples.
32             #
33             # =cut
34              
35             sub check_for_login {
36 48     48 1 130 my ($self, $webapp) = @_;
37              
38 48 100       284 return unless my $username = $self->get_login_username($webapp);
39              
40 17         177 $username = $self->map_username($username);
41 17 50       120 return unless $self->valid_username($username);
42 17 50 33     87 return unless my $user =
43             $self->get_login_user($username) || $self->autocreate_user($username);
44 17 50       23750 return unless $self->authenticate_login($webapp, $user);
45 17 50       8641 if ($user->verification_code) {
46 0         0 $webapp->param('user_pending', 1);
47             } else {
48 17         18511 $self->set_current_user($webapp, $user);
49             }
50             }
51              
52             # =head2 get_login_username($webapp)
53             #
54             # This method returns the login username taken from the request. It is not
55             # necessarily the name of a Rubric user (see C).
56             #
57             # This must be implemented by the login subclass.
58             #
59             # =cut
60              
61 0     0 1 0 sub get_login_username { die "get_login_username unimplemented" }
62              
63             # =head2 map_username($username)
64             #
65             # This method returns the Rubric username to which the login name maps. By
66             # default, it returns the C<$username> verbatim.
67             #
68             # =cut
69              
70 17     17 1 48 sub map_username { $_[1] }
71              
72             # =head2 valid_username($username)
73             #
74             # Returns a true or false value, depending on whether the given username string
75             # is a valid username.
76             #
77             # =cut
78              
79             sub valid_username {
80 17     17 1 50 my ($self, $username) = @_;
81 17         188 $username =~ /^[\pL\d_]+$/;
82             }
83              
84             # =head2 get_login_user($username)
85             #
86             # Given a username, this method returns the Rubric::User object for the user.
87             #
88             # =cut
89              
90             sub get_login_user {
91 17     17 1 44 my ($self, $username) = @_;
92 17         200 Rubric::User->retrieve($username);
93             }
94              
95             # =head2 autocreate_user($username)
96             #
97             # If C can't find a user, this method is called to try to create
98             # the user automatically. By default, it always returns nothing. It may be
99             # subclassed for implementation. (For example, one could create domain users
100             # from a directory.)
101             #
102             # =cut
103              
104 0     0 1 0 sub autocreate_user { }
105              
106             # =head2 authenticate_login($webapp, $user)
107             #
108             # This method attempts to authenticate the user's login, checking the given
109             # password or performing any other needed check. It returns true or false.
110             #
111             # This must be implemented by the login subclass.
112             #
113             # =cut
114              
115 0     0 1 0 sub authenticate_login { die "authenticate_login unimplemented" }
116              
117             # =head2 set_current_user($webapp, $user)
118             #
119             # This method sets the current user on the WebApp by setting the WebApp's
120             # "current_user" attribute to the Rubric::User object.
121             #
122             # =cut
123              
124             sub set_current_user {
125 17     17 1 112 my ($self, $webapp, $user) = @_;
126              
127 17         311 $webapp->param(current_user => $user);
128             }
129              
130             1;
131              
132             __END__