140 Commits

Author SHA1 Message Date
1d91040207 Fix depreciation warning 2025-10-24 18:06:39 +02:00
df930dc20b Fix linting 2025-10-24 18:03:28 +02:00
ad99e4d66a Fix depreciation warnings 2024-11-03 12:56:54 +00:00
caa17889e1 Drop Python 3.8 support 2024-11-03 12:51:32 +00:00
7f92a82e07 Fix linting 2024-11-03 12:46:46 +00:00
352b22f01a Upgrade pytest-asyncio usage 2024-03-11 14:09:55 +01:00
9d07464be1 Upgrade linting configuration 2024-02-05 09:20:38 +01:00
0bf4e218f0 Fix password update None handling. (#1275) 2023-08-26 10:14:26 +02:00
e17bb609ae Add compatibility layer for Pydantic V2 2023-07-12 10:44:22 +02:00
8fd097cbc8 Revamp Transport so they always build a full Response object (#1049)
* Revamp Transport so they always build a full Response object

* Fix linting

* Add private methods to set cookies on CookieTransport

* Change on_after_login login_return parameter to response
2023-04-27 09:32:49 +02:00
4e426d6823 Add login_return to on_after_login method (#1187) 2023-04-14 16:10:22 +02:00
cefcb7a433 Fix pytest-asyncio warning regarding event loop fixture 2023-04-14 15:49:58 +02:00
9b57fa2e73 Allow to set is_verified to True after OAuth callback 2023-02-13 17:42:31 +01:00
5c48283155 Update docs for SQLAlchemy 2.0 2023-02-13 17:28:49 +01:00
b18389439a Use "sub" claim instead of "user_id" for JWT, verify and reset password tokens 2023-01-16 11:44:42 +01:00
794133c4fe Ensure reset password token is single use 2023-01-16 11:38:49 +01:00
c91e7657db Update for httpx-oauth >= 0.10 where account_email can be None 2022-11-04 09:35:51 +01:00
7ad5f8073d on_after_login hook (#1092)
* on_after_login minimal impl.

Questions: is the spot logical for after method? Is after the internal login call.
Would before_login be needed? Maybe not, as auth is the way to do pre-login things.

Added fastapi request as a param just in case, as other callbacks had it too.

Docs addition is missing.

* tried to complete the implementation, but the test with user_manager.on_after_login.called fails though

* move on_after_login tests to right place, to TestLogin. These ones pass.

TODO: check TestCallback

* on_after_login tests to TestCallback too, for oauth. Apparently test_redirect_url_router fires the callback too, I guess that's correct, am not using oauth myself.

* fix formatting with make format

* docs for on_after_login

Co-authored-by: Toni Alatalo <toni.alatalo@gmail.com>
2022-10-18 08:02:01 +02:00
13fdcccfa2 Fix unit tests for latest FastAPI version 2022-09-08 08:46:27 +02:00
d661585238 Revert "Cookie transport must return empty json and not null in response.data on login (#1037)"
This reverts commit 77d0077503d9d6b4dd206e3fc643d96bc3c5834c.
2022-07-25 10:23:55 +02:00
d7a1e3420c Fix #1043: Add a prefix to the generated key in RedisStrategy 2022-07-23 07:53:57 +00:00
77d0077503 Cookie transport must return empty json and not null in response.data on login (#1037)
* Fix: LoginResponse is set to application/json, and should return response with status code 204 when body is empty.

The database backend login response is a cookie header with empty body. This causes issues when integrating the openapi schema into openapi-generator. Because the code generator expects the response to be a JSON when the status code isn't 204.

* Fix: Bump fastapi version to appropriate version for status code 204 handling.

* Build a full response for CookieTransport login_response

Co-authored-by: Can H. Tartanoglu <2947298-caniko@users.noreply.gitlab.com>
Co-authored-by: François Voron <fvoron@gmail.com>
2022-07-22 15:53:56 +02:00
f4338ca3df Handle UserAlreadyExists error in oauth callback route 2022-06-20 16:55:58 +02:00
ce15284fe9 Implement a router to associate an OAuth account with an authenticated user 2022-06-20 14:44:25 +02:00
64d3996415 Add flag to enable/disable email association with OAuth 2022-06-20 13:46:47 +02:00
3bb3728261 add on delete hook (#1014)
Co-authored-by: Schwannden Kuo <schwannden@mobagel.com>
2022-06-20 13:26:02 +02:00
78be936297 Put exceptions in a dedicated module to avoid circular imports 2022-05-06 13:17:22 +02:00
72aa68c462 Native model and generic ID (#971)
* Use a generic Protocol model for User instead of Pydantic

* Remove UserDB Pydantic schema

* Harmonize schema variable naming to avoid confusions

* Revamp OAuth account model management

* Revamp AccessToken DB strategy to adopt generic model approach

* Make ID a generic instead of forcing UUIDs

* Improve generic typing

* Improve Strategy typing

* Tweak base DB typing

* Don't set Pydantic schemas on FastAPIUsers class: pass it directly on router creation

* Add IntegerIdMixin and export related classes

* Start to revamp doc for V10

* Revamp OAuth documentation

* Fix code highlights

* Write the 9.x.x ➡️ 10.x.x migration doc

* Fix pyproject.toml
2022-05-05 14:51:19 +02:00
bce37a1116 Fix unit test following httpx-oauth update 2022-04-21 11:20:32 +02:00
7f6d038d91 Create a class helper to let configure the password hasher dynamically 2022-03-22 14:16:49 +01:00
b054383fbf Enable RS256/ES256 and other algorithms for JWT strategy (#943)
* Implement RS256 for JWT auth

* Update docs with RS256 example

* Added ES256 tests

* Format with isort and black

* Removed example RSA key pair (so as not to tempt people to use it)

* Added pyjwt[crypto] to requirements

* Removed pycryptodome by hardcoding example keys

* Removed unnecessary Tuple import from typing
2022-03-22 10:28:00 +01:00
533504634f Improve dependencies typing 2022-01-15 11:08:49 +01:00
53271a32c5 Implement database strategy (#833)
* Implement database strategy

* Export generic AccessToken type

* Apply formatting
2021-12-31 14:43:39 +01:00
c4de66b81c Revamp authentication (#831)
* Implement Transport classes

* Implement authentication strategy classes

* Revamp authentication with Transport and Strategy

* Revamp strategy and OAuth so that they can use a callable dependency

* Update docstring

* Make ErrorCode a proper Enum and cleanup unused OpenAPI utils

* Remove useless check

* Tweak typing in authenticator

* Update docs

* Improve logout/destroy token logic

* Update docs

* Update docs

* Update docs and full examples

* Apply formatting to examples

* Update OAuth doc and examples

* Add migration doc

* Implement Redis session token

* Add Redis Session documentation

* RedisSession -> Redis

* Fix links in docs
2021-12-30 15:22:07 +01:00
2e8f1f2eb2 Fixed #823 (#824)
* Added a failing test for the multi-oauth-router issue

* Fixed the #823 regression.

Using a regex for the backend name validation instead of an enum.

* Fixed formatting errors

* Moved the `AuthenticationBackendName` enum to `Authenticator`

This prevents an issue with OpenAPI schema generation caused by two
endpoints accepting a parameter with a duplicate name.
2021-12-29 13:25:15 +01:00
c759bb6915 Extending generated OpenAPI docs (#799)
* Added login endpoint docs

* make format

* Changed login route into multiple examples.

* Added reset password router docs

* Updated /{id} routes for user

* Updated /me routes

* Fixed user already exists response description

* Updated the /register route

* Updated verify routes

* Updated oauth2 endpoints.

* Applied `make format`

* Renamed Authentication methods for getting their openapi schemas

- `get_login_responses_success` -> `get_openapi_login_responses_success`
- `get_logout_responses_success` -> `get_openapi_logout_responses_success`

* Fixed flake8 errors

* Not using `Final` to keep python37 compatibility

Co-authored-by: François Voron <fvoron@gmail.com>
2021-11-23 13:13:51 +01:00
48d1be87a4 Added codestyle check and lint to the build action (#798)
* Applied `make format`

* Added format-check to makefile

* Added a "Check codestyle" step to the build action.

* Rerun `make format`

* Added a "lint" target to makefile

* Added lint step to the build action

* Added W503 to the list of ignored flake8 errors.

See https://www.flake8rules.com/rules/W503.html
2021-11-23 08:13:11 +01:00
f578a01a8b Updated OAuth2 router generator for better OpenAPI docs (#793)
* Added OAuth2 authorize route response_model

* Changed OAuth2 "authorize" route backend param type.

On OAuth2 router creation, an enum is created for the `authentication_backend` parameter. This allows us to generate OpenAPI docs correctly.

* Reformatted with "make format"

* Updated OAuth2 authorize url docs

- /authorize now returns 422 instead of 400 for an invalid authentication backend
2021-11-10 07:55:40 +01:00
9eb49482c7 Users now become unverified when email is changed (#783)
* Users now become unverified when email is changed

Occurs when updating user.email to a new value

* changed wording
2021-11-07 10:04:06 +01:00
0c45cbc179 Add a name on every route #762 (#774)
* Names for urls added

* Tests for Login/Logout Names

* Register Name Test

* tests/test_router_reset.py

* Tests to verify url names in users router

* Test Verify Router Names

* oauth routes updated with prefix

* Test for authorize.  Didn't right test for callback as covered under other tests
2021-11-02 08:12:43 +01:00
872b85de03 Code Expression (#1) (#767)
* Replace unused `for` index with underscore

* Use `items()` to directly unpack dictionary values

* Merge duplicate blocks in conditional

* Use `any()` instead of for loop

* Format __init__.py
2021-10-16 09:29:34 +02:00
eb47dc8e75 Pass user_manager instance in get_login_response/get_logout_response 2021-09-21 08:28:25 +02:00
e819bb0b65 Add get_enabled_backends advanced feature 2021-09-21 08:20:07 +02:00
ab06778adf Fix #733: don't raise error when updating user with same email 2021-09-20 08:49:19 +02:00
69f18cff47 Put user_db_model as attribute of UserManager 2021-09-17 11:24:49 +02:00
de86456af2 Add some manager tests 2021-09-15 15:20:28 +02:00
4aac218d8a Add manager pytest marker 2021-09-15 14:49:49 +02:00
6fca8d1306 Add a test for JWT helpers 2021-09-15 14:45:28 +02:00
5cba969679 Refactor verify logic into manager 2021-09-15 14:36:04 +02:00
1aea32ca4a Tweak unit test 2021-09-15 13:35:28 +02:00