Skip to content

Commit ecbb33b

Browse files
committed
cleanup schemas
1 parent 2afd7c1 commit ecbb33b

File tree

2 files changed

+72
-60
lines changed

2 files changed

+72
-60
lines changed

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

Lines changed: 7 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,9 @@
11
import logging
22
from datetime import UTC, datetime, timedelta
3-
from typing import Literal
43

54
from aiohttp import web
65
from aiohttp.web import RouteTableDef
76
from common_library.error_codes import create_error_code
8-
from models_library.emails import LowerCaseEmailStr
9-
from pydantic import (
10-
BaseModel,
11-
ConfigDict,
12-
Field,
13-
PositiveInt,
14-
SecretStr,
15-
field_validator,
16-
)
177
from servicelib.aiohttp import status
188
from servicelib.aiohttp.requests_validation import parse_request_body_as
199
from servicelib.logging_errors import create_troubleshootting_log_kwargs
@@ -30,7 +20,7 @@
3020
session_access_required,
3121
)
3222
from ....utils import MINUTE
33-
from ....utils_aiohttp import NextPage, envelope_json_response
23+
from ....utils_aiohttp import envelope_json_response
3424
from ....utils_rate_limiting import global_rate_limit_route
3525
from ... import (
3626
_auth_service,
@@ -54,7 +44,6 @@
5444
from ..._login_service import (
5545
notify_user_confirmation,
5646
)
57-
from ..._models import InputSchema, check_confirm_password_match
5847
from ...constants import (
5948
CODE_2FA_SMS_CODE_REQUIRED,
6049
MAX_2FA_CODE_RESEND,
@@ -71,23 +60,19 @@
7160
get_plugin_settings,
7261
)
7362
from ...web_utils import envelope_response, flash_response
63+
from .registration_schemas import (
64+
InvitationCheck,
65+
InvitationInfo,
66+
RegisterBody,
67+
RegisterPhoneBody,
68+
)
7469

7570
_logger = logging.getLogger(__name__)
7671

7772

7873
routes = RouteTableDef()
7974

8075

81-
class InvitationCheck(InputSchema):
82-
invitation: str = Field(..., description="Invitation code")
83-
84-
85-
class InvitationInfo(InputSchema):
86-
email: LowerCaseEmailStr | None = Field(
87-
None, description="Email associated to invitation or None"
88-
)
89-
90-
9176
@routes.post(
9277
f"/{API_VTAG}/auth/register/invitations:check",
9378
name="auth_check_registration_invitation",
@@ -122,27 +107,6 @@ async def check_registration_invitation(request: web.Request):
122107
return envelope_json_response(InvitationInfo(email=email))
123108

124109

125-
class RegisterBody(InputSchema):
126-
email: LowerCaseEmailStr
127-
password: SecretStr
128-
confirm: SecretStr | None = Field(None, description="Password confirmation")
129-
invitation: str | None = Field(None, description="Invitation code")
130-
131-
_password_confirm_match = field_validator("confirm")(check_confirm_password_match)
132-
model_config = ConfigDict(
133-
json_schema_extra={
134-
"examples": [
135-
{
136-
"email": "[email protected]",
137-
"password": "my secret", # NOSONAR
138-
"confirm": "my secret", # optional
139-
"invitation": "33c451d4-17b7-4e65-9880-694559b8ffc2", # optional only active
140-
}
141-
]
142-
}
143-
)
144-
145-
146110
@routes.post(f"/{API_VTAG}/auth/register", name="auth_register")
147111
async def register(request: web.Request):
148112
"""
@@ -335,23 +299,6 @@ async def register(request: web.Request):
335299
return await _security_service.login_granted_response(request=request, user=user)
336300

337301

338-
class RegisterPhoneBody(InputSchema):
339-
email: LowerCaseEmailStr
340-
phone: str = Field(
341-
..., description="Phone number E.164, needed on the deployments with 2FA"
342-
)
343-
344-
345-
class _PageParams(BaseModel):
346-
expiration_2fa: PositiveInt | None = None
347-
348-
349-
class RegisterPhoneNextPage(NextPage[_PageParams]):
350-
logger: str = Field("user", deprecated=True)
351-
level: Literal["INFO", "WARNING", "ERROR"] = "INFO"
352-
message: str
353-
354-
355302
@routes.post(f"/{API_VTAG}/auth/verify-phone-number", name="auth_register_phone")
356303
@session_access_required(
357304
name="auth_register_phone",
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import logging
2+
from typing import Literal
3+
4+
from models_library.emails import LowerCaseEmailStr
5+
from pydantic import (
6+
BaseModel,
7+
ConfigDict,
8+
Field,
9+
PositiveInt,
10+
SecretStr,
11+
field_validator,
12+
)
13+
14+
from ....utils_aiohttp import NextPage
15+
from ..._models import InputSchema, check_confirm_password_match
16+
17+
_logger = logging.getLogger(__name__)
18+
19+
20+
class InvitationCheck(InputSchema):
21+
invitation: str = Field(..., description="Invitation code")
22+
23+
24+
class InvitationInfo(InputSchema):
25+
email: LowerCaseEmailStr | None = Field(
26+
None, description="Email associated to invitation or None"
27+
)
28+
29+
30+
class RegisterBody(InputSchema):
31+
email: LowerCaseEmailStr
32+
password: SecretStr
33+
confirm: SecretStr | None = Field(None, description="Password confirmation")
34+
invitation: str | None = Field(None, description="Invitation code")
35+
36+
_password_confirm_match = field_validator("confirm")(check_confirm_password_match)
37+
model_config = ConfigDict(
38+
json_schema_extra={
39+
"examples": [
40+
{
41+
"email": "[email protected]",
42+
"password": "my secret", # NOSONAR
43+
"confirm": "my secret", # optional
44+
"invitation": "33c451d4-17b7-4e65-9880-694559b8ffc2", # optional only active
45+
}
46+
]
47+
}
48+
)
49+
50+
51+
class RegisterPhoneBody(InputSchema):
52+
email: LowerCaseEmailStr
53+
phone: str = Field(
54+
..., description="Phone number E.164, needed on the deployments with 2FA"
55+
)
56+
57+
58+
class _PageParams(BaseModel):
59+
expiration_2fa: PositiveInt | None = None
60+
61+
62+
class RegisterPhoneNextPage(NextPage[_PageParams]):
63+
logger: str = Field("user", deprecated=True)
64+
level: Literal["INFO", "WARNING", "ERROR"] = "INFO"
65+
message: str

0 commit comments

Comments
 (0)