Skip to content

Commit f94412e

Browse files
committed
cleanup
1 parent 2ef2191 commit f94412e

File tree

3 files changed

+19
-54
lines changed

3 files changed

+19
-54
lines changed

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

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@
1414
from servicelib.logging_utils import get_log_record_extra, log_context
1515
from servicelib.request_keys import RQT_USERID_KEY
1616
from servicelib.utils import fire_and_forget_task
17-
from simcore_service_webserver.users._users_rest import PreRegisteredUserGet
1817

1918
from ...._meta import API_VTAG
2019
from ....constants import RQ_PRODUCT_KEY
2120
from ....products import products_web
2221
from ....products.models import Product
2322
from ....security import security_service, security_web
2423
from ....security.decorators import permission_required
25-
from ....session.api import get_session
26-
from ....users.api import get_user_credentials, set_user_as_deleted
24+
from ....session import api as session_service
25+
from ....users import api as users_service
26+
from ....users._common.schemas import PreRegisteredUserGet
2727
from ....utils import MINUTE
2828
from ....utils_rate_limiting import global_rate_limit_route
2929
from ... import _preregistration_service
@@ -35,6 +35,7 @@
3535
from ..._login_service import flash_response, notify_user_logout
3636
from ...decorators import login_required
3737
from ...settings import LoginSettingsForProduct, get_plugin_settings
38+
from ._rest_exceptions import handle_rest_requests_exceptions
3839

3940
_logger = logging.getLogger(__name__)
4041

@@ -62,9 +63,10 @@ def _get_ipinfo(request: web.Request) -> dict[str, Any]:
6263
name="request_product_account",
6364
)
6465
@global_rate_limit_route(number_of_requests=30, interval_seconds=MINUTE)
66+
@handle_rest_requests_exceptions
6567
async def request_product_account(request: web.Request):
6668
product = products_web.get_current_product(request)
67-
session = await get_session(request)
69+
session = await session_service.get_session(request)
6870

6971
body = await parse_request_body_as(AccountRequestInfo, request)
7072
assert body.form # nosec
@@ -74,22 +76,17 @@ async def request_product_account(request: web.Request):
7476
raise web.HTTPUnprocessableEntity(text=MSG_WRONG_CAPTCHA__INVALID)
7577
session.pop(CAPTCHA_SESSION_KEY, None)
7678

77-
pre_user_profile = PreRegisteredUserGet.model_validate(
78-
# TODO: can raise vliadation error
79-
body.form
80-
)
81-
82-
user_profile = await _preregistration_service.create_pre_registration(
83-
# TODO: this raises AlreadyPreRegisteredError or ValidationError or anything regarding
79+
# create pre-regiatration or raise if already exists
80+
await _preregistration_service.create_pre_registration(
8481
request.app,
85-
profile=pre_user_profile,
82+
profile=PreRegisteredUserGet.model_validate(body.form),
8683
product_name=product.name,
8784
)
8885

89-
# send email to fogbugz or user itself
86+
# if created send email to fogbugz or user itself
9087
fire_and_forget_task(
9188
_preregistration_service.send_account_request_email_to_support(
92-
request,
89+
request=request,
9390
product=product,
9491
request_form=body.form,
9592
ipinfo=_get_ipinfo(request),
@@ -108,6 +105,7 @@ class _AuthenticatedContext(BaseModel):
108105
@routes.post(f"/{API_VTAG}/auth/unregister", name="unregister_account")
109106
@login_required
110107
@permission_required("user.profile.delete")
108+
@handle_rest_requests_exceptions
111109
async def unregister_account(request: web.Request):
112110
req_ctx = _AuthenticatedContext.model_validate(request)
113111
body = await parse_request_body_as(UnregisterCheck, request)
@@ -118,7 +116,9 @@ async def unregister_account(request: web.Request):
118116
)
119117

120118
# checks before deleting
121-
credentials = await get_user_credentials(request.app, user_id=req_ctx.user_id)
119+
credentials = await users_service.get_user_credentials(
120+
request.app, user_id=req_ctx.user_id
121+
)
122122
if body.email != credentials.email.lower() or not security_service.check_password(
123123
body.password.get_secret_value(), credentials.password_hash
124124
):
@@ -134,7 +134,7 @@ async def unregister_account(request: web.Request):
134134
extra=get_log_record_extra(user_id=req_ctx.user_id),
135135
):
136136
# update user table
137-
await set_user_as_deleted(request.app, user_id=req_ctx.user_id)
137+
await users_service.set_user_as_deleted(request.app, user_id=req_ctx.user_id)
138138

139139
# logout
140140
await notify_user_logout(
@@ -160,8 +160,9 @@ async def unregister_account(request: web.Request):
160160

161161
@routes.get(f"/{API_VTAG}/auth/captcha", name="create_captcha")
162162
@global_rate_limit_route(number_of_requests=30, interval_seconds=MINUTE)
163+
@handle_rest_requests_exceptions
163164
async def create_captcha(request: web.Request):
164-
session = await get_session(request)
165+
session = await session_service.get_session(request)
165166

166167
captcha_text, image_data = await _preregistration_service.create_captcha()
167168

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,4 @@
1-
import functools
2-
import logging
3-
4-
from aiohttp import web
5-
from servicelib.aiohttp.typing_extension import Handler
6-
from servicelib.logging_errors import create_troubleshootting_log_kwargs
7-
from servicelib.mimetype_constants import MIMETYPE_APPLICATION_JSON
8-
91
from ..errors import WebServerBaseError
10-
from ._constants import MSG_2FA_UNAVAILABLE
11-
12-
_logger = logging.getLogger(__name__)
132

143

154
class LoginError(WebServerBaseError, ValueError): ...
@@ -21,28 +10,3 @@ class SendingVerificationSmsError(LoginError):
2110

2211
class SendingVerificationEmailError(LoginError):
2312
msg_template = "Sending verification email failed. {reason}"
24-
25-
26-
def handle_login_exceptions(handler: Handler):
27-
@functools.wraps(handler)
28-
async def wrapper(request: web.Request) -> web.StreamResponse:
29-
try:
30-
return await handler(request)
31-
32-
except (SendingVerificationSmsError, SendingVerificationEmailError) as exc:
33-
error_code = exc.error_code()
34-
front_end_msg = MSG_2FA_UNAVAILABLE
35-
# in these cases I want to log the cause
36-
_logger.exception(
37-
**create_troubleshootting_log_kwargs(
38-
front_end_msg,
39-
error=exc,
40-
error_code=error_code,
41-
)
42-
)
43-
raise web.HTTPServiceUnavailable(
44-
text=front_end_msg,
45-
content_type=MIMETYPE_APPLICATION_JSON,
46-
) from exc
47-
48-
return wrapper

services/web/server/src/simcore_service_webserver/users/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
"get_user_role",
3939
"get_users_in_group",
4040
"is_user_in_product",
41-
"set_user_as_deleted",
4241
"search_public_users",
42+
"set_user_as_deleted",
4343
"update_expired_users",
4444
)
4545
# nopycln: file

0 commit comments

Comments
 (0)