Commit Graph

254 Commits (00a7478d8df2007697d5caf2e0cb1c298afbb3fd)

Author SHA1 Message Date
Joas Schilling 6417ea0265
fix(authentication): Handle null or empty string password hash
This can happen when the auth.storeCryptedPassword config is used,
which previously errored with:
Hasher::verify(): Argument #2 ($hash) must be of type string, null given

Signed-off-by: Joas Schilling <coding@schilljs.com>
2023-02-10 09:18:50 +07:00
Joas Schilling e47d56ac36
Merge pull request #36621 from nextcloud/perf/noid/only-check-for-token-when-it-can-actually-be
fix(performance): Only search for auth tokens when the provided login…
2023-02-10 01:29:30 +07:00
Julius Härtl 580feecdbf
fix(authtoken): Store only one hash for authtokens with the current password per user
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2023-02-09 13:44:00 +07:00
Joas Schilling 7a85a1596e
fix(authentication): Check minimum length when creating app tokens
Signed-off-by: Joas Schilling <coding@schilljs.com>
2023-02-09 09:58:35 +07:00
Joas Schilling 03a585ab4f
fix(performance): Only search for auth tokens when the provided login is long enough
Signed-off-by: Joas Schilling <coding@schilljs.com>
2023-02-08 22:45:23 +07:00
Côme Chilliet f5c361cf44
composer run cs:fix
Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2023-01-20 11:45:08 +07:00
Vincent Petry c2165b84e6
Merge pull request #36001 from nextcloud/validate-user-tz
Validate user timezone given from login data before saving it
2023-01-11 19:53:37 +07:00
Joas Schilling 2fb4dac7ad
fix(authentication): Update the token when the hash is null or can not be verified
Signed-off-by: Joas Schilling <coding@schilljs.com>
2023-01-09 16:32:36 +07:00
Joas Schilling 28b18d561c
fix(authentication): Only hash the new password when needed
Signed-off-by: Joas Schilling <coding@schilljs.com>
2023-01-09 15:58:26 +07:00
Joas Schilling c5bb19641c
fix(authentication): Invert the logic to the original intention
We need to store the new authentication details when the hash did **not** verify
the old password.

Signed-off-by: Joas Schilling <coding@schilljs.com>
2023-01-09 15:13:08 +07:00
Joas Schilling 55d8aec759
fix(authentication): Only verify each hash once
Signed-off-by: Joas Schilling <coding@schilljs.com>
2023-01-09 14:53:12 +07:00
Julius Härtl 18164ae516
Merge pull request #33898 from nextcloud/fix/authtoken-password-update
PublickKeyTokenProvider: Fix password update routine with password hash
2023-01-05 08:01:47 +07:00
Thomas Citharel 6b7da88b0b
Validate user timezone given from login data before saving it
Follow-up to #36000

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2023-01-04 18:13:25 +07:00
Joas Schilling b4a29644cc
Add a const for the max user password length
Signed-off-by: Joas Schilling <coding@schilljs.com>
2023-01-04 11:23:43 +07:00
Marcel Klehr adfe367106
PublickKeyTokenProvider: Fix password update routine with password hash
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2023-01-04 08:30:53 +07:00
Julius Härtl 6abb37317f
Do not setup a session when not required on WebDAV requests
If basic auth is used on WebDAV endpoints, we will not setup a session
by default but instead set a test cookie. Clients which handle session
cookies properly will send back the cookie then on the second request
and a session will be initialized which can be resued for
authentication.

Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-12-21 21:17:16 +07:00
Roeland Jago Douma 77df92cabf
feat: add event for failed logins
Apps might also like to know about failed logins.
This adds that event.
The private interface changes are backwards compatible so all should be fine.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
2022-11-24 21:24:21 +07:00
Julius Härtl 298d2b9b58
Skip general login with email for non-valid addresses and LDAP
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-26 12:30:25 +07:00
Carl Schwan 00c2c620ac
Merge pull request #34554 from nextcloud/fix/psalm-twofactor-registry
Fix wrong types in phpdoc for twofactor registry
2022-10-18 14:42:43 +07:00
Carl Schwan 419828c791 Fix the type of the return array in a few more places
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2022-10-18 13:22:50 +07:00
Christoph Wurst c5922e67d3
Run session token renewals in a database transaction
The session token renewal does
1) Read the old token
2) Write a new token
3) Delete the old token

If two processes succeed to read the old token there can be two new tokens because
the queries were not run in a transaction. This is particularly problematic on
clustered DBs where 1) would go to a read node and 2) and 3) go to a write node.

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2022-10-18 08:28:22 +07:00
Carl Schwan 9919116716
Merge pull request #31499 from nextcloud/bugfix/empty-secret
Add fallback routines for empty secret cases
2022-10-17 16:02:58 +07:00
Christoph Wurst eff877af03 Pass logger to passwordless auth WebAuthn lib
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2022-10-03 15:03:23 +07:00
Carl Schwan ef31396727
Mark method as deprecated
Co-authored-by: Joas Schilling <213943+nickvergessen@users.noreply.github.com>
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2022-09-13 13:06:54 +07:00
Thomas Citharel 3ce1996d5e
Add back TokenCleanupJob to invalidate old temporary tokens
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
2022-08-25 11:31:21 +07:00
Julius Härtl 9d1ec582ba
Do not update passwords if nothing changed
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-08-09 09:35:44 +07:00
Carl Schwan 952acd4d27
Merge pull request #33225 from nextcloud/fix/handle-one-time-passwords
Handle one time password better
2022-07-29 12:26:52 +07:00
Carl Schwan 702445ba3b
Handle one time password better
Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2022-07-28 14:26:25 +07:00
luz paz 368f83095d Fix typos in lib/private subdirectory
Found via `codespell -q 3 -S l10n -L jus ./lib/private`

Signed-off-by: luz paz <luzpaz@github.com>
2022-07-27 08:52:17 +07:00
Vincent Petry cb9f3423e2
Merge pull request #30510 from nextcloud/user-cleanup-storage-before-cache
delete files before cleaning cache when cleaning user files
2022-07-26 23:08:04 +07:00
Carl Schwan d5c23dbb9f Move CappedMemoryCache to OCP
This is an helpful helper that should be used in more place than just
server and this is already the case with groupfodlers, deck, user_oidc
and more using it, so let's make it public

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2022-07-14 15:54:31 +07:00
Carl Schwan 1c23c029af Handler large passwords
For passwords bigger than 250 characters, use a bigger key since the
performance impact is minor (around one second to encrypt the password).

For passwords bigger than 470 characters, give up earlier and throw
exeception recommanding admin to either enable the previously enabled
configuration or use smaller passwords.

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2022-07-05 11:37:14 +07:00
Carl Schwan cdf3b60555 Handle one time passwords
This adds an option to disable storing passwords in the database. This
might be desirable when using single use token as passwords or very
large passwords.

Signed-off-by: Carl Schwan <carl@carlschwan.eu>
2022-07-05 11:25:44 +07:00
Robin Appelman db3093a46f delete files before cleaning cache when cleaning user files
otherwise, when using object store, we loose track of which files the user owns before we can delete them

Signed-off-by: Robin Appelman <robin@icewind.nl>
2022-06-13 08:51:22 +07:00
Christoph Wurst 90c31cfddc
Fix replacing external storage password during debug log
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2022-06-01 10:31:19 +07:00
Julius Härtl 778db45631
Merge pull request #32357 from nextcloud/user-delete-remove-wrappers
remove storage wrappers when deleting the user storage
2022-05-16 19:08:35 +07:00
Robin Appelman 5d69343efa
remove storage wrappers when deleting the user storage
Signed-off-by: Robin Appelman <robin@icewind.nl>
2022-05-12 14:40:20 +07:00
Joas Schilling 7b3e2217de
Fix user agent trimming on installation
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-05-09 08:36:34 +07:00
Christoph Wurst 69f5f014b3
Log why the login token can't be used for credentials
And always pass the exception object to the logger.

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2022-04-04 16:23:05 +07:00
Joas Schilling d683e0d3d1
Automatically cut the token name on the first level
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-03-23 21:38:53 +07:00
Joas Schilling a0c7798c7d
Limit the length of app password names
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-03-23 10:47:56 +07:00
Julius Härtl 553cb499b2
Rotate token after fallback
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-10 14:01:21 +07:00
Julius Härtl 81f8719cc0
Add fallback routines for empty secret cases
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-03-10 14:01:21 +07:00
Joas Schilling 397b9098e8
Also cache non-existing to reuse it
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-02-16 16:51:22 +07:00
Joas Schilling 7acb438e42
Merge pull request #30016 from nextcloud/techdebt/noid/remove-default-token-provider
Remove default token which is deprecated since Nextcloud 13
2021-12-02 16:48:03 +07:00
Joas Schilling c0ba89ecc9
Remove default token which is deprecated since Nextcloud 13
Signed-off-by: Joas Schilling <coding@schilljs.com>
2021-12-01 18:41:31 +07:00
Joas Schilling 660e550260
Only check the twofactor state once per request
Signed-off-by: Joas Schilling <coding@schilljs.com>
2021-12-01 17:56:30 +07:00
Côme Chilliet 113756db30
Fix ArrayAccess and JsonSerializable return types
First round of modifications for PHP 8.1

Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
2021-11-23 09:28:56 +07:00
Christoph Wurst 7dd7256cfe
Prevent duplicate auth token activity updates
The auth token activity logic works as follows
* Read auth token
* Compare last activity time stamp to current time
* Update auth token activity if it's older than x seconds

This works fine in isolation but with concurrency that means that
occasionally the same token is read simultaneously by two processes and
both of these processes will trigger an update of the same row.
Affectively the second update doesn't add much value. It might set the
time stamp to the exact same time stamp or one a few seconds later. But
the last activity is no precise science, we don't need this accuracy.

This patch changes the UPDATE query to include the expected value in a
comparison with the current data. This results in an affected row when
the data in the DB still has an old time stamp, but won't affect a row
if the time stamp is (nearly) up to date.

This is a micro optimization and will possibly not show any significant
performance improvement. Yet in setups with a DB cluster it means that
the write node has to send fewer changes to the read nodes due to the
lower number of actual changes.

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2021-10-22 09:32:22 +07:00
Christoph Wurst 01b8291c76
Type the autentication provider passwords as nullable strings
For historic reasons we couldn't add a nullable type hint before
nullable type hints were supported by our target php versions. This is
now possible.

Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
2021-10-13 17:17:25 +07:00