Skip to content

Commit 8ee786b

Browse files
committed
refactor: clean up auth.py and move schemas to auth_schemas.py
1 parent 394a334 commit 8ee786b

File tree

4 files changed

+58
-50
lines changed

4 files changed

+58
-50
lines changed

services/web/server/src/simcore_service_webserver/login/_controller/rest/auth.py

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
from aiohttp import web
44
from aiohttp.web import RouteTableDef
55
from models_library.authentification import TwoFactorAuthentificationMethod
6-
from models_library.emails import LowerCaseEmailStr
7-
from pydantic import BaseModel, Field, PositiveInt, SecretStr, TypeAdapter
6+
from pydantic import TypeAdapter
87
from servicelib.aiohttp import status
98
from servicelib.aiohttp.requests_validation import parse_request_body_as
109
from servicelib.logging_utils import get_log_record_extra, log_context
@@ -21,10 +20,8 @@
2120
session_access_required,
2221
)
2322
from ....users import preferences_api as user_preferences_api
24-
from ....utils_aiohttp import NextPage
2523
from ....web_utils import envelope_response, flash_response
2624
from ... import _auth_service, _login_service, _security_service, _twofa_service
27-
from ..._models import InputSchema
2825
from ...constants import (
2926
CODE_2FA_EMAIL_CODE_REQUIRED,
3027
CODE_2FA_SMS_CODE_REQUIRED,
@@ -42,27 +39,14 @@
4239
from ...decorators import login_required
4340
from ...settings import LoginSettingsForProduct, get_plugin_settings
4441
from ._rest_exceptions import handle_rest_requests_exceptions
42+
from .auth_schemas import LoginBody, LoginTwoFactorAuthBody, LogoutBody
4543

4644
log = logging.getLogger(__name__)
4745

4846

4947
routes = RouteTableDef()
5048

5149

52-
class LoginBody(InputSchema):
53-
email: LowerCaseEmailStr
54-
password: SecretStr
55-
56-
57-
class CodePageParams(BaseModel):
58-
message: str
59-
expiration_2fa: PositiveInt | None = None
60-
next_url: str | None = None
61-
62-
63-
class LoginNextPage(NextPage[CodePageParams]): ...
64-
65-
6650
@routes.post(f"/{API_VTAG}/auth/login", name="auth_login")
6751
@on_success_grant_session_access_to(
6852
name="auth_register_phone",
@@ -209,11 +193,6 @@ async def login(request: web.Request):
209193
)
210194

211195

212-
class LoginTwoFactorAuthBody(InputSchema):
213-
email: LowerCaseEmailStr
214-
code: SecretStr
215-
216-
217196
@routes.post(f"/{API_VTAG}/auth/validate-code-login", name="auth_login_2fa")
218197
@session_access_required(
219198
"auth_login_2fa",
@@ -260,12 +239,6 @@ async def login_2fa(request: web.Request):
260239
return await _security_service.login_granted_response(request, user=dict(user))
261240

262241

263-
class LogoutBody(InputSchema):
264-
client_session_id: str | None = Field(
265-
None, examples=["5ac57685-c40f-448f-8711-70be1936fd63"]
266-
)
267-
268-
269242
@routes.post(f"/{API_VTAG}/auth/logout", name="auth_logout")
270243
@login_required
271244
@handle_rest_requests_exceptions
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from aiohttp.web import RouteTableDef
2+
from models_library.emails import LowerCaseEmailStr
3+
from pydantic import BaseModel, Field, PositiveInt, SecretStr
4+
5+
from ....utils_aiohttp import NextPage
6+
from ..._models import InputSchema
7+
8+
routes = RouteTableDef()
9+
10+
11+
class LoginBody(InputSchema):
12+
email: LowerCaseEmailStr
13+
password: SecretStr
14+
15+
16+
class CodePageParams(BaseModel):
17+
message: str
18+
expiration_2fa: PositiveInt | None = None
19+
next_url: str | None = None
20+
21+
22+
class LoginNextPage(NextPage[CodePageParams]): ...
23+
24+
25+
class LoginTwoFactorAuthBody(InputSchema):
26+
email: LowerCaseEmailStr
27+
code: SecretStr
28+
29+
30+
class LogoutBody(InputSchema):
31+
client_session_id: str | None = Field(
32+
None, examples=["5ac57685-c40f-448f-8711-70be1936fd63"]
33+
)

services/web/server/src/simcore_service_webserver/login/_controller/rest/change.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
from aiohttp import web
44
from aiohttp.web import RouteTableDef
5-
from models_library.emails import LowerCaseEmailStr
6-
from pydantic import SecretStr, field_validator
75
from servicelib.aiohttp.requests_validation import parse_request_body_as
86
from servicelib.logging_errors import create_troubleshootting_log_kwargs
97
from servicelib.request_keys import RQT_USERID_KEY
@@ -27,7 +25,6 @@
2725
CHANGE_EMAIL,
2826
validate_user_status,
2927
)
30-
from ..._models import InputSchema, create_password_match_validator
3128
from ...constants import (
3229
MSG_CANT_SEND_MAIL,
3330
MSG_CHANGE_EMAIL_REQUESTED,
@@ -38,17 +35,14 @@
3835
)
3936
from ...decorators import login_required
4037
from ...settings import LoginOptions, get_plugin_options
38+
from .change_schemas import ChangeEmailBody, ChangePasswordBody, ResetPasswordBody
4139

4240
_logger = logging.getLogger(__name__)
4341

4442

4543
routes = RouteTableDef()
4644

4745

48-
class ResetPasswordBody(InputSchema):
49-
email: LowerCaseEmailStr
50-
51-
5246
@routes.post(f"/{API_VTAG}/auth/reset-password", name="initiate_reset_password")
5347
@global_rate_limit_route(
5448
number_of_requests=10, interval_seconds=HOUR, error_msg=MSG_OFTEN_RESET_PASSWORD
@@ -221,10 +215,6 @@ def _get_error_context(
221215
return flash_response(MSG_EMAIL_SENT.format(email=request_body.email), "INFO")
222216

223217

224-
class ChangeEmailBody(InputSchema):
225-
email: LowerCaseEmailStr
226-
227-
228218
async def initiate_change_email(request: web.Request):
229219
# NOTE: This code have been intentially disabled in https://github.com/ITISFoundation/osparc-simcore/pull/5472
230220
db: AsyncpgStorage = get_plugin_storage(request.app)
@@ -272,16 +262,6 @@ async def initiate_change_email(request: web.Request):
272262
return flash_response(MSG_CHANGE_EMAIL_REQUESTED)
273263

274264

275-
class ChangePasswordBody(InputSchema):
276-
current: SecretStr
277-
new: SecretStr
278-
confirm: SecretStr
279-
280-
_password_confirm_match = field_validator("confirm")(
281-
create_password_match_validator(reference_field="new")
282-
)
283-
284-
285265
@routes.post(f"/{API_VTAG}/auth/change-password", name="auth_change_password")
286266
@login_required
287267
async def change_password(request: web.Request):
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from models_library.emails import LowerCaseEmailStr
2+
from pydantic import SecretStr, field_validator
3+
4+
from ..._models import InputSchema, create_password_match_validator
5+
6+
7+
class ResetPasswordBody(InputSchema):
8+
email: LowerCaseEmailStr
9+
10+
11+
class ChangeEmailBody(InputSchema):
12+
email: LowerCaseEmailStr
13+
14+
15+
class ChangePasswordBody(InputSchema):
16+
current: SecretStr
17+
new: SecretStr
18+
confirm: SecretStr
19+
20+
_password_confirm_match = field_validator("confirm")(
21+
create_password_match_validator(reference_field="new")
22+
)

0 commit comments

Comments
 (0)