Skip to content

Commit 2c594c6

Browse files
committed
🐛 Refactor database connection handling in authentication and change email processes
1 parent 54bc8ab commit 2c594c6

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

services/web/server/src/simcore_service_webserver/login/_auth_service.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
from aiohttp import web
55
from servicelib.mimetype_constants import MIMETYPE_APPLICATION_JSON
66
from simcore_postgres_database.models.users import UserStatus
7+
from simcore_postgres_database.utils_repos import transaction_context
78
from simcore_postgres_database.utils_users import UsersRepo
9+
from simcore_service_webserver.db.plugin import get_asyncpg_engine
810

9-
from ..db.plugin import get_database_engine
10-
from ..groups.api import is_user_by_email_in_group
11+
from ..groups import api as groups_service
1112
from ..products.models import Product
12-
from ..security.api import check_password, encrypt_password
13+
from ..security import api as security_service
1314
from . import _login_service
1415
from ._constants import MSG_UNKNOWN_EMAIL, MSG_WRONG_PASSWORD
1516
from ._login_repository_legacy import AsyncpgStorage, get_plugin_storage
@@ -30,16 +31,16 @@ async def create_user(
3031
expires_at: datetime | None,
3132
) -> dict[str, Any]:
3233

33-
async with get_database_engine(app).acquire() as conn:
34+
async with transaction_context(get_asyncpg_engine(app)) as conn:
3435
user = await UsersRepo.new_user(
3536
conn,
3637
email=email,
37-
password_hash=encrypt_password(password),
38+
password_hash=security_service.encrypt_password(password),
3839
status=status_upon_creation,
3940
expires_at=expires_at,
4041
)
41-
await UsersRepo.join_and_update_from_pre_registration_details(
42-
conn, user.id, user.email
42+
await UsersRepo.link_and_update_user_from_pre_registration(
43+
conn, new_user_id=user.id, new_user_email=user.email
4344
)
4445
return dict(user.items())
4546

@@ -57,7 +58,7 @@ async def check_authorized_user_credentials_or_raise(
5758

5859
_login_service.validate_user_status(user=user, support_email=product.support_email)
5960

60-
if not check_password(password, user["password_hash"]):
61+
if not security_service.check_password(password, user["password_hash"]):
6162
raise web.HTTPUnauthorized(
6263
reason=MSG_WRONG_PASSWORD, content_type=MIMETYPE_APPLICATION_JSON
6364
)
@@ -75,8 +76,11 @@ async def check_authorized_user_in_product_or_raise(
7576
product_group_id = product.group_id
7677
assert product_group_id is not None # nosec
7778

78-
if product_group_id is not None and not await is_user_by_email_in_group(
79-
app, user_email=email, group_id=product_group_id
79+
if (
80+
product_group_id is not None
81+
and not await groups_service.is_user_by_email_in_group(
82+
app, user_email=email, group_id=product_group_id
83+
)
8084
):
8185
raise web.HTTPUnauthorized(
8286
reason=MSG_UNKNOWN_EMAIL, content_type=MIMETYPE_APPLICATION_JSON

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88
from servicelib.logging_errors import create_troubleshotting_log_kwargs
99
from servicelib.mimetype_constants import MIMETYPE_APPLICATION_JSON
1010
from servicelib.request_keys import RQT_USERID_KEY
11+
from simcore_postgres_database.utils_repos import pass_or_acquire_connection
1112
from simcore_postgres_database.utils_users import UsersRepo
13+
from simcore_service_webserver.db.plugin import get_asyncpg_engine
1214

1315
from ...._meta import API_VTAG
14-
from ....db.plugin import get_database_engine
1516
from ....products import products_web
1617
from ....products.models import Product
1718
from ....security.api import check_password, encrypt_password
@@ -238,7 +239,7 @@ async def initiate_change_email(request: web.Request):
238239
if user["email"] == request_body.email:
239240
return flash_response("Email changed")
240241

241-
async with get_database_engine(request.app).acquire() as conn:
242+
async with pass_or_acquire_connection(get_asyncpg_engine(request.app)) as conn:
242243
if await UsersRepo.is_email_used(conn, email=request_body.email):
243244
raise web.HTTPUnprocessableEntity(reason="This email cannot be used")
244245

0 commit comments

Comments
 (0)