sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #07474
[Merge] ~ack/maas-site-manager:auth-form-json into maas-site-manager:main
Alberto Donato has proposed merging ~ack/maas-site-manager:auth-form-json into maas-site-manager:main.
Commit message:
change the /login url to accept json instead of form data
Requested reviews:
MAAS Lander (maas-lander): unittests
MAAS Committers (maas-committers)
For more details, see:
https://code.launchpad.net/~ack/maas-site-manager/+git/site-manager/+merge/441748
--
Your team MAAS Committers is requested to review the proposed merge of ~ack/maas-site-manager:auth-form-json into maas-site-manager:main.
diff --git a/backend/msm/schema/__init__.py b/backend/msm/schema/__init__.py
index 5c626ef..21e6316 100644
--- a/backend/msm/schema/__init__.py
+++ b/backend/msm/schema/__init__.py
@@ -10,6 +10,7 @@ from ._models import (
Site,
Token,
User,
+ UserLoginRequest,
UserWithPassword,
)
from ._pagination import (
@@ -22,16 +23,17 @@ from ._pagination import (
__all__ = [
"CreateTokensRequest",
"CreateTokensResponse",
- "Site",
- "Token",
- "pagination_params",
- "PaginationParams",
+ "JSONWebToken",
+ "JSONWebTokenData",
+ "MAX_PAGE_SIZE",
"PaginatedResults",
"PaginatedSites",
"PaginatedTokens",
- "MAX_PAGE_SIZE",
- "UserWithPassword",
+ "PaginationParams",
+ "Site",
+ "Token",
"User",
- "JSONWebToken",
- "JSONWebTokenData",
+ "UserLoginRequest",
+ "UserWithPassword",
+ "pagination_params",
]
diff --git a/backend/msm/schema/_models.py b/backend/msm/schema/_models.py
index 86529b6..a62e3e6 100644
--- a/backend/msm/schema/_models.py
+++ b/backend/msm/schema/_models.py
@@ -46,6 +46,13 @@ class User(ReadUser):
id: int
+class UserLoginRequest(BaseModel):
+ """User login details."""
+
+ username: str
+ password: str
+
+
class CreateSite(BaseModel):
"""
A MAAS installation
diff --git a/backend/msm/user_api/_base.py b/backend/msm/user_api/_base.py
index 06ba0e4..48fb1b0 100644
--- a/backend/msm/user_api/_base.py
+++ b/backend/msm/user_api/_base.py
@@ -6,7 +6,6 @@ from fastapi import (
HTTPException,
status,
)
-from fastapi.security import OAuth2PasswordRequestForm
from sqlalchemy.ext.asyncio import AsyncSession
from .. import __version__
@@ -23,6 +22,7 @@ from ..schema import (
pagination_params,
PaginationParams,
User,
+ UserLoginRequest,
)
from ..settings import SETTINGS
from ._forms import (
@@ -42,7 +42,7 @@ async def root() -> dict[str, str]:
async def sites(
- current_user: Annotated[User, Depends(get_authenticated_user)],
+ authenticated_user: Annotated[User, Depends(get_authenticated_user)],
session: AsyncSession = Depends(db_session),
pagination_params: PaginationParams = Depends(pagination_params),
filter_params: SiteFilterParams = Depends(site_filter_parameters),
@@ -63,7 +63,7 @@ async def sites(
async def tokens(
- current_user: Annotated[User, Depends(get_authenticated_user)],
+ authenticated_user: Annotated[User, Depends(get_authenticated_user)],
session: AsyncSession = Depends(db_session),
pagination_params: PaginationParams = Depends(pagination_params),
) -> PaginatedTokens:
@@ -80,7 +80,7 @@ async def tokens(
async def tokens_post(
- current_user: Annotated[User, Depends(get_authenticated_user)],
+ authenticated_user: Annotated[User, Depends(get_authenticated_user)],
create_request: CreateTokensRequest,
session: AsyncSession = Depends(db_session),
) -> CreateTokensResponse:
@@ -97,11 +97,11 @@ async def tokens_post(
async def login_for_access_token(
- form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
+ user_login: UserLoginRequest,
session: AsyncSession = Depends(db_session),
) -> JSONWebToken:
user = await authenticate_user(
- session, form_data.username, form_data.password
+ session, user_login.username, user_login.password
)
if not user:
raise HTTPException(
@@ -119,7 +119,7 @@ async def login_for_access_token(
async def read_users_me(
- current_user: Annotated[User, Depends(get_authenticated_user)],
+ authenticated_user: Annotated[User, Depends(get_authenticated_user)],
session: AsyncSession = Depends(db_session),
) -> User:
- return current_user
+ return authenticated_user
diff --git a/backend/tests/fixtures/app.py b/backend/tests/fixtures/app.py
index 87404a5..11f3443 100644
--- a/backend/tests/fixtures/app.py
+++ b/backend/tests/fixtures/app.py
@@ -31,7 +31,7 @@ class AuthAsyncClient(AsyncClient):
async def login(self, email: str, password: str) -> None:
"""login this client with the email and password"""
response = await self.post(
- "/login", data={"username": email, "password": password}
+ "/login", json={"username": email, "password": password}
)
assert (
response.status_code == 200
diff --git a/backend/tests/user_api/test_handlers.py b/backend/tests/user_api/test_handlers.py
index 6234f52..1c9c121 100644
--- a/backend/tests/user_api/test_handlers.py
+++ b/backend/tests/user_api/test_handlers.py
@@ -265,12 +265,12 @@ async def test_login_fails_with_wrong_password(
fail_response = await user_app_client.post(
"/login",
- data={"username": userdata["email"], "password": "incorrect_pass"},
+ json={"username": userdata["email"], "password": "incorrect_pass"},
)
assert fail_response.status_code == 401, "Expected authentication error."
fail_response = await user_app_client.post(
- "/login", data={"username": userdata["email"], "password": "admin"}
+ "/login", json={"username": userdata["email"], "password": "admin"}
)
assert fail_response.status_code == 200, "Expected user login."