1414from servicelib .logging_utils import get_log_record_extra , log_context
1515from servicelib .request_keys import RQT_USERID_KEY
1616from servicelib .utils import fire_and_forget_task
17- from simcore_service_webserver .users ._users_rest import PreRegisteredUserGet
1817
1918from ...._meta import API_VTAG
2019from ....constants import RQ_PRODUCT_KEY
2120from ....products import products_web
2221from ....products .models import Product
2322from ....security import security_service , security_web
2423from ....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
2727from ....utils import MINUTE
2828from ....utils_rate_limiting import global_rate_limit_route
2929from ... import _preregistration_service
3535from ..._login_service import flash_response , notify_user_logout
3636from ...decorators import login_required
3737from ...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
6567async 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
111109async 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
163164async 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
0 commit comments