Skip to content

Commit 9043d61

Browse files
committed
rm get_user
1 parent 649ab2d commit 9043d61

File tree

9 files changed

+49
-48
lines changed

9 files changed

+49
-48
lines changed

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,18 +155,20 @@ async def update_user_password(
155155
user_id: int,
156156
current_password: str,
157157
new_password: str,
158+
verify_current_password: bool = True,
158159
) -> None:
159160
"""Updates user password after verifying current password"""
160161
repo = UsersRepo(get_asyncpg_engine(app))
161162

162-
# Get current password hash
163-
current_password_hash = await repo.get_password_hash(user_id=user_id)
163+
if verify_current_password:
164+
# Get current password hash
165+
current_password_hash = await repo.get_password_hash(user_id=user_id)
164166

165-
# Verify current password
166-
if not security_service.check_password(current_password, current_password_hash):
167-
raise web.HTTPUnauthorized(
168-
text=MSG_WRONG_PASSWORD, content_type=MIMETYPE_APPLICATION_JSON
169-
)
167+
# Verify current password
168+
if not security_service.check_password(current_password, current_password_hash):
169+
raise web.HTTPUnauthorized(
170+
text=MSG_WRONG_PASSWORD, content_type=MIMETYPE_APPLICATION_JSON
171+
)
170172

171173
# Encrypt new password and update
172174
new_password_hash = security_service.encrypt_password(new_password)

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def _get_error_context(
117117
ok = True
118118

119119
# CHECK user exists
120-
user = await db.get_user({"email": request_body.email})
120+
user = await _auth_service.get_user_or_none(request.app, email=request_body.email)
121121
if not user:
122122
_logger.warning(
123123
**create_troubleshootting_log_kwargs(
@@ -223,7 +223,9 @@ async def initiate_change_email(request: web.Request):
223223

224224
request_body = await parse_request_body_as(ChangeEmailBody, request)
225225

226-
user = await db.get_user({"id": request[RQT_USERID_KEY]})
226+
user = await _auth_service.get_user_or_none(
227+
request.app, user_id=request[RQT_USERID_KEY]
228+
)
227229
assert user # nosec
228230

229231
if user["email"] == request_body.email:

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
from ....products import products_web
2121
from ....products.models import Product
22-
from ....security import security_service
2322
from ....session.access_policies import session_access_required
2423
from ....utils import HOUR, MINUTE
2524
from ....utils_aiohttp import create_redirect_to_page_response
@@ -262,17 +261,19 @@ async def complete_reset_password(request: web.Request):
262261
)
263262

264263
if confirmation:
265-
user = await db.get_user({"id": confirmation["user_id"]})
264+
user = await _auth_service.get_user_or_none(
265+
request.app, user_id=confirmation["user_id"]
266+
)
266267
assert user # nosec
267268

268-
await db.update_user(
269-
user={"id": user["id"]},
270-
updates={
271-
"password_hash": security_service.encrypt_password(
272-
request_body.password.get_secret_value()
273-
)
274-
},
269+
await _auth_service.update_user_password(
270+
request.app,
271+
user_id=user["id"],
272+
current_password="",
273+
new_password=request_body.password.get_secret_value(),
274+
verify_current_password=False, # confirmed by code
275275
)
276+
276277
await db.delete_confirmation(confirmation)
277278

278279
return flash_response(MSG_PASSWORD_CHANGED)
@@ -281,5 +282,4 @@ async def complete_reset_password(request: web.Request):
281282
text=MSG_PASSWORD_CHANGE_NOT_ALLOWED.format(
282283
support_email=product.support_email
283284
),
284-
content_type=MIMETYPE_APPLICATION_JSON,
285285
) # 401

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
from ....products.models import Product
1111
from ....session.access_policies import session_access_required
1212
from ....web_utils import envelope_response
13-
from ... import _twofa_service
14-
from ..._login_repository_legacy import AsyncpgStorage, get_plugin_storage
13+
from ... import _auth_service, _twofa_service
1514
from ...constants import (
1615
CODE_2FA_EMAIL_CODE_REQUIRED,
1716
CODE_2FA_SMS_CODE_REQUIRED,
@@ -41,10 +40,9 @@ async def resend_2fa_code(request: web.Request):
4140
settings: LoginSettingsForProduct = get_plugin_settings(
4241
request.app, product_name=product.name
4342
)
44-
db: AsyncpgStorage = get_plugin_storage(request.app)
4543
resend_2fa_ = await parse_request_body_as(Resend2faBody, request)
4644

47-
user = await db.get_user({"email": resend_2fa_.email})
45+
user = await _auth_service.get_user_or_none(request.app, email=resend_2fa_.email)
4846
if not user:
4947
raise web.HTTPUnauthorized(
5048
text=MSG_UNKNOWN_EMAIL, content_type=MIMETYPE_APPLICATION_JSON

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
InvitationsServiceUnavailableError,
4141
)
4242
from ..products.models import Product
43-
from . import _confirmation_service
43+
from . import _auth_service, _confirmation_service
4444
from ._login_repository_legacy import (
4545
AsyncpgStorage,
4646
BaseConfirmationTokenDict,
@@ -114,8 +114,9 @@ async def check_other_registrations(
114114
db: AsyncpgStorage,
115115
cfg: LoginOptions,
116116
) -> None:
117+
117118
# An account is already registered with this email
118-
if user := await db.get_user({"email": email}):
119+
if user := await _auth_service.get_user_or_none(app, email=email):
119120
user_status = UserStatus(user["status"])
120121
match user_status:
121122

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,6 @@ def __init__(
5252
# CRUD user
5353
#
5454

55-
async def get_user(self, with_data: dict[str, Any]) -> asyncpg.Record | None:
56-
async with self.pool.acquire() as conn:
57-
return await _login_repository_legacy_sql.find_one(
58-
conn, self.user_tbl, with_data
59-
)
60-
6155
async def create_user(self, data: dict[str, Any]) -> dict[str, Any]:
6256
async with self.pool.acquire() as conn:
6357
user_id = await _login_repository_legacy_sql.insert(

services/web/server/src/simcore_service_webserver/publications/_rest.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
from .._meta import API_VTAG as VTAG
1313
from ..login._emails_service import AttachmentTuple, send_email_from_template, themed
1414
from ..login.decorators import login_required
15-
from ..login.login_repository_legacy import AsyncpgStorage, get_plugin_storage
1615
from ..products import products_web
16+
from ..users import users_service
1717
from ._utils import json2html
1818

1919
_logger = logging.getLogger(__name__)
@@ -57,11 +57,9 @@ async def service_submission(request: web.Request):
5757

5858
support_email_address = product.support_email
5959

60-
db: AsyncpgStorage = get_plugin_storage(request.app)
61-
user = await db.get_user({"id": request[RQT_USERID_KEY]})
62-
assert user # nosec
63-
user_email = user.get("email")
64-
assert user_email # nosec
60+
user = await users_service.get_user_name_and_email(
61+
request.app, user_id=request[RQT_USERID_KEY]
62+
)
6563

6664
try:
6765
attachments = [
@@ -80,11 +78,11 @@ async def service_submission(request: web.Request):
8078
# send email
8179
await send_email_from_template(
8280
request,
83-
from_=user_email,
81+
from_=user.email,
8482
to=support_email_address,
8583
template=themed("templates/common", _EMAIL_TEMPLATE_NAME),
8684
context={
87-
"user": user_email,
85+
"user": user.email,
8886
"data": json2html.convert(
8987
json=json_dumps(data), table_attributes='class="pure-table"'
9088
),

services/web/server/tests/unit/with_dbs/03/login/test_login_registration.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from servicelib.rest_responses import unwrap_envelope
2020
from simcore_service_webserver.db.models import UserStatus
2121
from simcore_service_webserver.groups.api import auto_add_user_to_product_group
22+
from simcore_service_webserver.login import _auth_service
2223
from simcore_service_webserver.login._confirmation_web import _url_for_confirmation
2324
from simcore_service_webserver.login._login_repository_legacy import AsyncpgStorage
2425
from simcore_service_webserver.login.constants import (
@@ -263,7 +264,6 @@ async def test_registration_with_invalid_confirmation_code(
263264

264265
async def test_registration_without_confirmation(
265266
client: TestClient,
266-
db: AsyncpgStorage,
267267
mocker: MockerFixture,
268268
user_email: str,
269269
user_password: str,
@@ -293,13 +293,12 @@ async def test_registration_without_confirmation(
293293
data, _ = await assert_status(response, status.HTTP_200_OK)
294294
assert MSG_LOGGED_IN in data["message"]
295295

296-
user = await db.get_user({"email": user_email})
296+
user = await _auth_service.get_user_or_none(client.app, email=user_email)
297297
assert user
298298

299299

300300
async def test_registration_with_confirmation(
301301
client: TestClient,
302-
db: AsyncpgStorage,
303302
capsys: pytest.CaptureFixture,
304303
mocker: MockerFixture,
305304
user_email: str,
@@ -331,7 +330,8 @@ async def test_registration_with_confirmation(
331330
data, error = unwrap_envelope(await response.json())
332331
assert response.status == 200, (data, error)
333332

334-
user = await db.get_user({"email": user_email})
333+
user = await _auth_service.get_user_or_none(client.app, email=user_email)
334+
assert user
335335
assert user["status"] == UserStatus.CONFIRMATION_PENDING.name
336336

337337
assert "verification link" in data["message"]
@@ -350,7 +350,8 @@ async def test_registration_with_confirmation(
350350
assert response.status == 200
351351

352352
# user is active
353-
user = await db.get_user({"email": user_email})
353+
user = await _auth_service.get_user_or_none(client.app, email=user_email)
354+
assert user
354355
assert user["status"] == UserStatus.ACTIVE.name
355356

356357

services/web/server/tests/unit/with_dbs/03/login/test_login_twofa.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from simcore_postgres_database.models.products import ProductLoginSettingsDict, products
2222
from simcore_service_webserver.application_settings import ApplicationSettings
2323
from simcore_service_webserver.db.models import UserStatus
24+
from simcore_service_webserver.login import _auth_service
2425
from simcore_service_webserver.login._login_repository_legacy import AsyncpgStorage
2526
from simcore_service_webserver.login._twofa_service import (
2627
_do_create_2fa_code,
@@ -161,7 +162,8 @@ def _get_confirmation_link_from_email():
161162
assert response.status == status.HTTP_200_OK
162163

163164
# check email+password registered
164-
user = await db.get_user({"email": user_email})
165+
user = await _auth_service.get_user_or_none(client.app, email=user_email)
166+
assert user
165167
assert user["status"] == UserStatus.ACTIVE.name
166168
assert user["phone"] is None
167169

@@ -195,7 +197,8 @@ def _get_confirmation_link_from_email():
195197
assert phone == user_phone_number
196198

197199
# check phone still NOT in db (TODO: should be in database and unconfirmed)
198-
user = await db.get_user({"email": user_email})
200+
user = await _auth_service.get_user_or_none(client.app, email=user_email)
201+
assert user
199202
assert user["status"] == UserStatus.ACTIVE.name
200203
assert user["phone"] is None
201204

@@ -211,7 +214,8 @@ def _get_confirmation_link_from_email():
211214
)
212215
await assert_status(response, status.HTTP_200_OK)
213216
# check user has phone confirmed
214-
user = await db.get_user({"email": user_email})
217+
user = await _auth_service.get_user_or_none(client.app, email=user_email)
218+
assert user
215219
assert user["status"] == UserStatus.ACTIVE.name
216220
assert user["phone"] == user_phone_number
217221

@@ -252,7 +256,8 @@ def _get_confirmation_link_from_email():
252256
await assert_status(response, status.HTTP_200_OK)
253257

254258
# assert users is successfully registered
255-
user = await db.get_user({"email": user_email})
259+
user = await _auth_service.get_user_or_none(client.app, email=user_email)
260+
assert user
256261
assert user["email"] == user_email
257262
assert user["phone"] == user_phone_number
258263
assert user["status"] == UserStatus.ACTIVE.value

0 commit comments

Comments
 (0)