View | Details | Raw Unified | Return to bug 7174
Collapse All | Expand All

(-)a/C4/Auth.pm (+1 lines)
Lines 1821-1826 sub checkpw_internal { Link Here
1821
        }
1821
        }
1822
    }
1822
    }
1823
1823
1824
    #@DEPRECATED see Bug 7174. I think the demo-user should be represented with permissions instead of a hard-coded non-borrower anomaly.
1824
    if ( $userid && $userid eq 'demo'
1825
    if ( $userid && $userid eq 'demo'
1825
        && "$password" eq 'demo'
1826
        && "$password" eq 'demo'
1826
        && C4::Context->config('demo') )
1827
        && C4::Context->config('demo') )
(-)a/Koha/AuthUtils.pm (-15 / +57 lines)
Lines 30-35 use base 'Exporter'; Link Here
30
30
31
our $VERSION = '1.01';
31
our $VERSION = '1.01';
32
our @EXPORT_OK   = qw(hash_password);
32
our @EXPORT_OK   = qw(hash_password);
33
our @usernameAliasColumns = ('userid', 'cardnumber'); #Possible columns to treat as the username when authenticating. Must be UNIQUE in DB.
33
34
34
=head1 NAME
35
=head1 NAME
35
36
Lines 145-172 sub generate_salt { Link Here
145
Checks if the given username and password match anybody in the Koha DB
146
Checks if the given username and password match anybody in the Koha DB
146
@PARAM1 String, user identifier, either the koha.borrowers.userid, or koha.borrowers.cardnumber
147
@PARAM1 String, user identifier, either the koha.borrowers.userid, or koha.borrowers.cardnumber
147
@PARAM2 String, clear text password from the authenticating user
148
@PARAM2 String, clear text password from the authenticating user
148
@RETURN String 'superuser', if user is the Koha DB user (superuser account)
149
@RETURN Koha::Borrower, if login succeeded.
149
        undef, if the user is but a man.
150
                Sets Koha::Borrower->isSuperuser() if the user is a superuser.
151
                Sets Koha::Borrower->isDemouser() if the user is a demouser.
150
@THROWS Koha::Exception::LoginFailed, if no matching password was found for all username aliases in Koha.
152
@THROWS Koha::Exception::LoginFailed, if no matching password was found for all username aliases in Koha.
151
=cut
153
=cut
152
TODO:: Should return the Koha::Borrower if login succeeded.
154
153
sub checkKohaPassword {
155
sub checkKohaPassword {
154
    my ($userid, $password) = @_;
156
    my ($userid, $password) = @_;
157
    my $borrower; #Find the borrower to return
155
158
156
    if ( $userid && $userid eq C4::Context->config('user') ) {
159
    $borrower = _checkKohaSuperuser($userid, $password);
157
        if ( $password && $password eq C4::Context->config('pass') ) {
160
    return $borrower if $borrower;
158
            # Koha superuser account
159
            #     C4::Context->set_userenv(0,0,C4::Context->config('user'),C4::Context->config('user'),C4::Context->config('user'),"",1);
160
            return 'superuser';
161
        }
162
        else {
163
            Koha::Exception::LoginFailed->throw(error => "Password authentication failed");
164
        }
165
    }
166
161
167
    my $usernameFound = 0; #Report to the user if userid/barcode was found, even if the login failed.
162
    my $usernameFound = 0; #Report to the user if userid/barcode was found, even if the login failed.
168
    #Check for each username alias if we can confirm a login with that.
163
    #Check for each username alias if we can confirm a login with that.
169
    my @usernameAliasColumns = ('userid', 'cardnumber');
170
    for my $unameAlias (@usernameAliasColumns) {
164
    for my $unameAlias (@usernameAliasColumns) {
171
        my $borrower = Koha::Borrowers->find({$unameAlias => $userid});
165
        my $borrower = Koha::Borrowers->find({$unameAlias => $userid});
172
        if ( $borrower ) {
166
        if ( $borrower ) {
Lines 240-245 sub checkLDAPPassword { Link Here
240
    return 0;
234
    return 0;
241
}
235
}
242
236
237
=head _checkKohaSuperuser
238
239
    my $borrower = Koha::AuthUtils::_checkKohaSuperuser($userid, $password);
240
241
Check if the userid and password match the ones in the $KOHA_CONF
242
@PARAM1 String, user identifier, either the koha.borrowers.userid, or koha.borrowers.cardnumber
243
@PARAM2 String, clear text password from the authenticating user
244
@RETURNS Koha::Borrower branded as superuser with ->isSuperuser()
245
         or undef if user logging in is not a superuser.
246
@THROWS Koha::Exception::LoginFailed if user identifier matches, but password doesn't
247
=cut
248
TODO: add Koha::Borrower->isSuperuser(1);
249
sub _checkKohaSuperuser {
250
    my ($userid, $password) = @_;
251
252
    if ( $userid && $userid eq C4::Context->config('user') ) {
253
        if ( $password && $password eq C4::Context->config('pass') ) {
254
            return _createTemporarySuperuser();
255
        }
256
        else {
257
            Koha::Exception::LoginFailed->throw(error => "Password authentication failed");
258
        }
259
    }
260
}
261
262
=head _createTemporarySuperuser
263
264
Create a temporary superuser which should be instantiated only to the environment
265
and then discarded. So do not ->store() it!
266
@RETURN Koha::Borrower, stamped as superuser.
267
=cut
268
269
sub _createTemporarySuperuser {
270
    my $borrower = Koha::Borrower->new();
271
272
    my $superuserName = C4::Context->config('user');
273
    $borrower->isSuperuser(1);
274
    $borrower->update({borrowernumber => 0,
275
                       userid     => $superuserName,
276
                       cardnumber => $superuserName,
277
                       firstname  => $superuserName,
278
                       surname    => $superuserName,
279
                       branchcode => 'NO_LIBRARY_SET',
280
                       flags      => 1,
281
                       email      => C4::Context->preference('KohaAdminEmailAddress')
282
                    });
283
    return $borrower;
284
}
285
243
1;
286
1;
244
287
245
__END__
288
__END__
246
- 

Return to bug 7174