Bug 25947 - Improve locked account message
Summary: Improve locked account message
Status: Needs Signoff
Alias: None
Product: Koha
Classification: Unclassified
Component: Patrons (show other bugs)
Version: Main
Hardware: All All
: P5 - low enhancement
Assignee: Baptiste Wojtkowski (bwoj)
QA Contact: Marcel de Rooy
URL:
Keywords:
Depends on: 23979
Blocks: 37512
  Show dependency treegraph
 
Reported: 2020-07-07 19:46 UTC by Caroline Cyr La Rose
Modified: 2024-11-08 13:26 UTC (History)
6 users (show)

See Also:
Change sponsored?: ---
Patch complexity: Small patch
Documentation contact:
Documentation submission:
Text to go in the release notes:
Version(s) released in:
Circulation function:


Attachments
Warning messages in the patron details (28.92 KB, image/png)
2020-07-07 19:46 UTC, Caroline Cyr La Rose
Details
Bug 25947: Improve locked account message (5.10 KB, patch)
2023-01-20 06:53 UTC, Fridolin Somers
Details | Diff | Splinter Review
Screenshot of feature (53.55 KB, image/png)
2023-01-20 07:09 UTC, Fridolin Somers
Details
Bug 25947: Improve locked account message (5.15 KB, patch)
2023-01-23 16:14 UTC, ByWater Sandboxes
Details | Diff | Splinter Review
Bug 25947: Improve locked account message (5.20 KB, patch)
2023-01-31 14:32 UTC, solene.ngamga
Details | Diff | Splinter Review
Bug 25947: (QA follow-up) Fix filter (1.45 KB, patch)
2023-03-03 09:24 UTC, Marcel de Rooy
Details | Diff | Splinter Review
Bug 25947: Improve locked account message (3.91 KB, patch)
2024-07-29 15:05 UTC, Baptiste Wojtkowski (bwoj)
Details | Diff | Splinter Review
Bug 25947: Improve locked account message (3.91 KB, patch)
2024-07-30 08:16 UTC, Baptiste Wojtkowski (bwoj)
Details | Diff | Splinter Review
Bug 25947: Improve locked account message (3.97 KB, patch)
2024-07-30 14:07 UTC, Roman Dolny
Details | Diff | Splinter Review
Bug 25947: (follow-up) Improve locked account message (3.06 KB, patch)
2024-11-08 13:25 UTC, Baptiste Wojtkowski (bwoj)
Details | Diff | Splinter Review
Bug 25947: (follow-up) Improve locked account message (3.06 KB, patch)
2024-11-08 13:26 UTC, Baptiste Wojtkowski (bwoj)
Details | Diff | Splinter Review

Note You need to log in before you can comment on or make changes to this bug.
Description Caroline Cyr La Rose 2020-07-07 19:46:40 UTC
Created attachment 106643 [details]
Warning messages in the patron details

When using FailedLoginAttempts, a patron's account is blocked after X many failed login attempts on the OPAC. When that happens, a message 'Account has been locked.' appears on the patron account details page.

This message does not indicate why or how it was blocked.

I suggest we change it to 'Account has been locked due to too many failed login attempts'.

Furthermore, the font is dark red whereas the font for other warnings (such as wrong category or unpaid fines) is bright red and bold.

To test:
1. Change FailedLoginAttempts to a small number, like 2
2. Go to a patron's account and copy their username (while you're there, change the password and add some fines, too)
3. In the OPAC, try to log in with the username and a wrong password several times
4. Go back to the patron's account in the staff interface
5. Note that there is no indication as to why the patron's account is locked and that the font color and weight does not match the other warnings.

Also, there is no button to change the password next to the warning. When a patron has unpaid fines or is in the wrong category, there is a button to either pay/writeoff the fines or change the category next to the warning. I would add a button that says 'Change password' next to the locked account warning. This might be outside the scope of this bug, but I think it would improve usability.
Comment 1 Caroline Cyr La Rose 2020-07-07 19:51:30 UTC
Again, this might be outside the scope, but I also think the OPAC message could be improved.

Right now, it says

'You entered an incorrect username or password. Please try again! But note that passwords are case sensitive and that your account will be locked out after a fixed number of failed login attempts. Please contact a library staff member if you continue to have problems.'

I would add the number of failed attempts rather than 'after a fixed number of failed login attempts'

And I would also change the message once the account is blocked. Right now, even if FailedLoginAttempts is at 2, you can try to log in 10 times and it will never tell you that your account is now blocked.
Comment 2 David Cook 2020-07-08 03:14:23 UTC
I don't 100% understand these comments. 

I think that I agree that the Staff Client could be more descriptive about why the account is locked.

As for the OPAC, we shouldn't indicate that the account has been locked, as that indicates to an attacker that the account exists, which is not a good idea from a security perspective.
Comment 3 Fridolin Somers 2023-01-20 01:28:48 UTC
We have the same demand.
I'm on it
Comment 4 Fridolin Somers 2023-01-20 06:53:15 UTC
Created attachment 145502 [details] [review]
Bug 25947: Improve locked account message

When using system preference 'FailedLoginAttempts', a patron's account is blocked after X many failed login attempts on the OPAC.

This patch adds, like for "Patron's card has expired" message :
  * a message "Patron's account has been locked (due to X failed login attempts)" on the patron details and circulation pages
  * a link to change password
  * a link to reset login attempts to 0
Links are only displayed if libarian has permission to edit patrons.

For administrative lock, only a message is displayed :
"Patron's account has been administratively locked"

Reset login attempts to 0 feature uses members/setstatus.pl with
resetloginattempts=y like reregistration=y for an expired patron

To test:
1. Change system preference 'FailedLoginAttempts' to a small number, like 2
2. Go to a patron's account and copy their username (while you're there, change the password and add some fines, too)
3. In the OPAC, try to log in with the username and a wrong password 3 times
4. Go back to the patron's account in the staff interface
5. Note that there is a message : "Patron's account has been locked (due to 3 failed login attempts)"
6. Click on "Change password", you go to change password page
7. Click on "Reset login attempts", page reloads and you see patron in unlocked
Comment 5 Fridolin Somers 2023-01-20 07:09:36 UTC
Created attachment 145503 [details]
Screenshot of feature
Comment 6 Fridolin Somers 2023-01-20 07:12:50 UTC
You may ask to improve the text.

We may add some text explaining the value of syspref FailedLoginAttempts, but maybe message would be too long.

Reset login attempts as been asked by the library, this is a new feature.
I hope it makes sens, otherwise I may create a new bug report.
Comment 7 ByWater Sandboxes 2023-01-23 16:14:47 UTC
Created attachment 145589 [details] [review]
Bug 25947: Improve locked account message

When using system preference 'FailedLoginAttempts', a patron's account is blocked after X many failed login attempts on the OPAC.

This patch adds, like for "Patron's card has expired" message :
  * a message "Patron's account has been locked (due to X failed login attempts)" on the patron details and circulation pages
  * a link to change password
  * a link to reset login attempts to 0
Links are only displayed if libarian has permission to edit patrons.

For administrative lock, only a message is displayed :
"Patron's account has been administratively locked"

Reset login attempts to 0 feature uses members/setstatus.pl with
resetloginattempts=y like reregistration=y for an expired patron

To test:
1. Change system preference 'FailedLoginAttempts' to a small number, like 2
2. Go to a patron's account and copy their username (while you're there, change the password and add some fines, too)
3. In the OPAC, try to log in with the username and a wrong password 3 times
4. Go back to the patron's account in the staff interface
5. Note that there is a message : "Patron's account has been locked (due to 3 failed login attempts)"
6. Click on "Change password", you go to change password page
7. Click on "Reset login attempts", page reloads and you see patron in unlocked

Signed-off-by: Amaury GAU <amaury.gau@bulac.fr>
Comment 8 solene.ngamga 2023-01-31 14:32:59 UTC
Created attachment 145878 [details] [review]
Bug 25947: Improve locked account message

When using system preference 'FailedLoginAttempts', a patron's account is blocked after X many failed login attempts on the OPAC.

This patch adds, like for "Patron's card has expired" message :
  * a message "Patron's account has been locked (due to X failed login attempts)" on the patron details and circulation pages
  * a link to change password
  * a link to reset login attempts to 0
Links are only displayed if libarian has permission to edit patrons.

For administrative lock, only a message is displayed :
"Patron's account has been administratively locked"

Reset login attempts to 0 feature uses members/setstatus.pl with
resetloginattempts=y like reregistration=y for an expired patron

To test:
1. Change system preference 'FailedLoginAttempts' to a small number, like 2
2. Go to a patron's account and copy their username (while you're there, change the password and add some fines, too)
3. In the OPAC, try to log in with the username and a wrong password 3 times
4. Go back to the patron's account in the staff interface
5. Note that there is a message : "Patron's account has been locked (due to 3 failed login attempts)"
6. Click on "Change password", you go to change password page
7. Click on "Reset login attempts", page reloads and you see patron in unlocked

Signed-off-by: Amaury GAU <amaury.gau@bulac.fr>
Signed-off-by: Solene Ngamga <solene.ngamga@inLibro.com>
Comment 9 Marcel de Rooy 2023-03-03 09:19:58 UTC
 FAIL   koha-tmpl/intranet-tmpl/prog/en/includes/patron_messages.inc
   FAIL   filters
                wrong_html_filter at line 57 (                        <a href="/cgi-bin/koha/members/member-password.pl?member=[% patron.borrowernumber | html %]">Change password</a>)
Comment 10 Marcel de Rooy 2023-03-03 09:22:23 UTC
Looking here
Comment 11 Marcel de Rooy 2023-03-03 09:23:32 UTC
(In reply to Fridolin Somers from comment #6)
> Reset login attempts as been asked by the library, this is a new feature.
> I hope it makes sens, otherwise I may create a new bug report.

+my $resetloginattempts = $input->param('resetloginattempts') || '';

 my $dbh = C4::Context->dbh;
 my $dateexpiry;
@@ -54,6 +55,8 @@ if ( $logged_in_user->can_see_patron_infos($patron) ) {
     if ( $reregistration eq 'y' ) {
         # re-reregistration function to automatic calcul of date expiry
         $dateexpiry = $patron->renew_account;
+    } elsif ( $resetloginattempts eq 'y' ) {
+        $patron->login_attempts(0)->store;

This is not expected here. Improve a message?
Comment 12 Marcel de Rooy 2023-03-03 09:24:05 UTC
Created attachment 147683 [details] [review]
Bug 25947: (QA follow-up) Fix filter
Comment 13 Marcel de Rooy 2023-03-03 09:26:14 UTC
+                        or <a href="/cgi-bin/koha/members/setstatus.pl?borrowernumber=[% patron.borrowernumber | uri %]&amp;destination=circ&amp;resetloginattempts=y">Reset login attempts</a>

You are doing this in an include file. Feels wrong.
Comment 14 Marcel de Rooy 2023-03-03 09:44:59 UTC
The setstatus.pl script certainly needs attention too:

Reading comments like:

#script to set or lift debarred status
No longer true?

# Ideally we should display a warning on the interface if the logged in user is
# not allowed to modify this patron.
# But a librarian is not supposed to hack the system
No longer true?

The code contains:
my ( $loggedinuserid ) = checkauth($input, 0, { borrowers => 'edit_borrowers' }, 'intranet');
...
$logged_in_user->can_see_patron_infos
Includes:             permission => 'borrowers',
            subpermission => 'view_borrower_infos_from_any_libraries',

=> Feels like it is enough. But personally I would rather see a specific permission for things like password, and locked status?

Instead of using this script with a GET operation, it feels better to use our REST API and do a PUT/PATCH patron operation?
Comment 15 Marcel de Rooy 2023-03-03 09:46:21 UTC
Conclusion: I think that you'd better split this into two reports. The reset operation needs more attention too.
Comment 16 David Cook 2023-03-05 23:46:01 UTC
(In reply to solene.ngamga from comment #8)

> 3. In the OPAC, try to log in with the username and a wrong password 3 times
> 4. Go back to the patron's account in the staff interface
> 5. Note that there is a message : "Patron's account has been locked (due to
> 3 failed login attempts)"

We really shouldn't be doing this. It's best practice not to tell an unauthenticated user that an account has been locked due to failed login attempts. It leaks information about system settings and user accounts.
Comment 17 David Cook 2023-03-05 23:46:46 UTC
(In reply to David Cook from comment #16)
> We really shouldn't be doing this. It's best practice not to tell an
> unauthenticated user that an account has been locked due to failed login
> attempts. It leaks information about system settings and user accounts.

If we're going to do something insecure, we should wrap it in a system preference, default it to disabled, and have explanatory text on the system preference page saying it's an insecure setting.
Comment 18 Katrin Fischer 2023-03-06 09:39:03 UTC
(In reply to David Cook from comment #17)
> (In reply to David Cook from comment #16)
> > We really shouldn't be doing this. It's best practice not to tell an
> > unauthenticated user that an account has been locked due to failed login
> > attempts. It leaks information about system settings and user accounts.
> 
> If we're going to do something insecure, we should wrap it in a system
> preference, default it to disabled, and have explanatory text on the system
> preference page saying it's an insecure setting.

I thin this is a misunderstanding. The patch is not about the message that the user sees, but about the message that staff will see.

+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/patron_messages.inc

The user receives a neutral message still. This is to help staff to see the reason why someone has been locked out.
Comment 19 David Cook 2023-03-06 23:11:08 UTC
(In reply to Katrin Fischer from comment #18)
> I thin this is a misunderstanding. The patch is not about the message that
> the user sees, but about the message that staff will see.
> 
> +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/patron_messages.inc
> 
> The user receives a neutral message still. This is to help staff to see the
> reason why someone has been locked out.

Yep, looks I read that comment totally wrong! 

Maybe next time I'm surprised reading something I should slow down and just re-read the comments... ﷐[U+1F605]﷑.
Comment 20 Marcel de Rooy 2023-04-17 13:02:17 UTC
(In reply to Fridolin Somers from comment #6)
> Reset login attempts as been asked by the library, this is a new feature.
> I hope it makes sens, otherwise I may create a new bug report.

As noted above, please remove that part here. It needs more attention too. See earlier comments. Thanks.
Comment 21 Baptiste Wojtkowski (bwoj) 2024-07-29 15:05:16 UTC Comment hidden (obsolete)
Comment 22 Fridolin Somers 2024-07-29 15:31:16 UTC
Thanks a lot Baptiste.

Some little things to fix :

patron.account_locked) %]
=>
patron.account_locked ) %]

<span class="circ-hlt">Locked: </span></span> 
=> 
<span class="circ-hlt">Locked: </span><span> 
right ?

<a href="/cgi-bin/koha/members/member-password.pl?member=[% patron.borrowernumber | html %]">Change password</a>
You need to use URI filter :
https://template-toolkit.org/docs/manual/Filters.html#section_uri
Comment 23 David Cook 2024-07-30 00:01:20 UTC
This is looking good at a glance!
Comment 24 Baptiste Wojtkowski (bwoj) 2024-07-30 08:16:23 UTC
Created attachment 169853 [details] [review]
Bug 25947: Improve locked account message

When using system preference 'FailedLoginAttempts', a patron's account is blocked after X many failed login attempts on the OPAC.

This patch adds, like for "Patron's card has expired" message :
  * a message "Patron's account has been locked (due to X failed login attempts)" on the patron details and circulation pages
  * a link to change password
Links are only displayed if libarian has permission to edit patrons.

For administrative lock, only a message is displayed :
"Patron's account has been administratively locked"

To test:
1. Change system preference 'FailedLoginAttempts' to a small number, like 2
2. Go to a patron's account and copy their username (while you're there, change the password and add some fines, too)
3. In the OPAC, try to log in with the username and a wrong password 3 times
4. Go back to the patron's account in the staff interface
5. Note that there is a message : "Patron's account has been locked (due to 3 failed login attempts)"
6. Click on "Change password", you go to change password page
Comment 25 Roman Dolny 2024-07-30 14:07:09 UTC
Created attachment 169864 [details] [review]
Bug 25947: Improve locked account message

When using system preference 'FailedLoginAttempts', a patron's account is blocked after X many failed login attempts on the OPAC.

This patch adds, like for "Patron's card has expired" message :
  * a message "Patron's account has been locked (due to X failed login attempts)" on the patron details and circulation pages
  * a link to change password
Links are only displayed if libarian has permission to edit patrons.

For administrative lock, only a message is displayed :
"Patron's account has been administratively locked"

To test:
1. Change system preference 'FailedLoginAttempts' to a small number, like 2
2. Go to a patron's account and copy their username (while you're there, change the password and add some fines, too)
3. In the OPAC, try to log in with the username and a wrong password 3 times
4. Go back to the patron's account in the staff interface
5. Note that there is a message : "Patron's account has been locked (due to 3 failed login attempts)"
6. Click on "Change password", you go to change password page

Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>
Comment 26 Marcel de Rooy 2024-10-04 09:49:47 UTC
(In reply to Caroline Cyr La Rose from comment #0)

> Also, there is no button to change the password next to the warning. When a
> patron has unpaid fines or is in the wrong category, there is a button to
> either pay/writeoff the fines or change the category next to the warning. I
> would add a button that says 'Change password' next to the locked account
> warning. This might be outside the scope of this bug, but I think it would
> improve usability.

Incidentally, just sent you a message about this topic on Mattermost ;)

The normal lock could be resolved by the patron him/herself via password reset. Should we add a button to let staff do what a patron can do? Not sure :)

The administrative lockout cannot be removed by a patron. So we should perhaps add the button there only. But perhaps it needs a bit more text? This lockout is there for some reason, a staff member should definitely not remove it without further thought?

Please add your feedback. The patch somehow needs some tweaking still.
Comment 27 Baptiste Wojtkowski (bwoj) 2024-10-04 13:39:15 UTC
(In reply to Marcel de Rooy from comment #26)
> (In reply to Caroline Cyr La Rose from comment #0)
> 
> > Also, there is no button to change the password next to the warning. When a
> > patron has unpaid fines or is in the wrong category, there is a button to
> > either pay/writeoff the fines or change the category next to the warning. I
> > would add a button that says 'Change password' next to the locked account
> > warning. This might be outside the scope of this bug, but I think it would
> > improve usability.
> 
> Incidentally, just sent you a message about this topic on Mattermost ;)
> 
> The normal lock could be resolved by the patron him/herself via password
> reset. Should we add a button to let staff do what a patron can do? Not sure
> :)

Imo we should. I feel like the use case for such a button is: a borrower comes to a librarian because they don't know what to do, the librarian looks at the account, see the message, and is happy to have access to the button right there on the sentence.

We are not adding right to the staff member, since they already have this right. 
Last but not least: there is a Syspref OpacResetPassword which may prevent users from being allowed to reset their password, hence users must come to the librarian to reset their password.
+ I haven't checked but it would look very weird to me to be able to remove a security lock as a anonymous user, I'd rather remove the password reset functionality in such case, don't you think ?


> 
> The administrative lockout cannot be removed by a patron. So we should
> perhaps add the button there only. But perhaps it needs a bit more text?
> This lockout is there for some reason, a staff member should definitely not
> remove it without further thought?

I don't get why there would be a button in this case, like a button to see the fines or something so ?

> Please add your feedback. The patch somehow needs some tweaking still.
Comment 28 Caroline Cyr La Rose 2024-10-04 15:02:43 UTC
(In reply to Marcel de Rooy from comment #26)
> (In reply to Caroline Cyr La Rose from comment #0)
> 
> > Also, there is no button to change the password next to the warning. When a
> > patron has unpaid fines or is in the wrong category, there is a button to
> > either pay/writeoff the fines or change the category next to the warning. I
> > would add a button that says 'Change password' next to the locked account
> > warning. This might be outside the scope of this bug, but I think it would
> > improve usability.
> 
> Incidentally, just sent you a message about this topic on Mattermost ;)

I made a merge request for the manual (https://gitlab.com/koha-community/koha-manual/-/merge_requests/974). Hopefully it is clear...

I did some testing to really understand these two "locks".

"Lock": Created by the FailedLoginAttempts syspref. Can be removed by the patron by resetting their password (if OpacResetPassword is on), or by staff manually changing the password, or by staff sending a password recovery email (if OpacResetPassword is on).

"Administrative lock: Created by the LockExpiredDelay syspref and cleanup_database cron job. Can be removed by staff manually changing the password, or by staff sending a password recovery email (if OpacResetPassword is on). The patron cannot ask for a recovery email through the OPAC (at least, it didn't work for me).

> 
> The normal lock could be resolved by the patron him/herself via password
> reset. Should we add a button to let staff do what a patron can do? Not sure
> :)

It can also be removed by manually changing the password from the staff interface. So a button on the staff side would still be useful.

> 
> The administrative lockout cannot be removed by a patron. So we should
> perhaps add the button there only. But perhaps it needs a bit more text?
> This lockout is there for some reason, a staff member should definitely not
> remove it without further thought?
> 
> Please add your feedback. The patch somehow needs some tweaking still.

Maybe the easiest solution would be a tooltip? Just to let staff know what is happening and how they can resolve it. 

Any staff who can edit patron accounts can change passwords. They can already do this, the button would simply be a shortcut.
Comment 29 Baptiste Wojtkowski (bwoj) 2024-10-25 12:21:46 UTC
I'd be happy to keep taking over that patch but I am not sure of the work that has to be done are we okay about following changes ?

1 - Button for password reset is kept for "Lock" and text (tooltip ?) explains that resetting password will solve the pb 
2 - For administrative lock, we add a tooltip to explain the librarian they can reset the password ?

Shouldn't we then have a button in both cases since the action proposed to the librarian is twice the same ? I'm a bit lost /o/
Comment 30 Marcel de Rooy 2024-11-01 08:26:58 UTC
(In reply to Baptiste Wojtkowski (bwoj) from comment #29)
> I'd be happy to keep taking over that patch but I am not sure of the work
> that has to be done are we okay about following changes ?
> 
> 1 - Button for password reset is kept for "Lock" and text (tooltip ?)
> explains that resetting password will solve the pb 
> 2 - For administrative lock, we add a tooltip to explain the librarian they
> can reset the password ?
> 
> Shouldn't we then have a button in both cases since the action proposed to
> the librarian is twice the same ? I'm a bit lost /o/

Yes, it seems so ;)
Comment 31 Baptiste Wojtkowski (bwoj) 2024-11-08 13:25:28 UTC Comment hidden (obsolete)
Comment 32 Baptiste Wojtkowski (bwoj) 2024-11-08 13:26:35 UTC
Created attachment 174272 [details] [review]
Bug 25947: (follow-up) Improve locked account message

Test plan:

To test:
1. Change system preference 'FailedLoginAttempts' to a small number, like 2
2. Go to a patron's account and copy their username (while you're there, change the password and add some fines, too)
3. In the OPAC, try to log in with the username and a wrong password 3 times
4. Go back to the patron's account in the staff interface
5. Note that there is a message : "Patron's account has been locked (due to 3 failed login attempts)". Note there is a tooltip at the right
6. Click on "Change password", you go to change password page

Note: the follow-up might be unclear to understand:
1 - it moves the button outside the IF patron.login_attempt < 0
2 - Hence it requires the </li> to be moved out so button remains on the
  lane
3 - Finally the <li> must be put before the if and changed a bit