Skip to content

Commit 630443d

Browse files
committed
@matusdrobuliak66 review: masked secret
1 parent 2ddcced commit 630443d

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from pydantic import SecretStr
2+
3+
4+
def _mask(value):
5+
"""
6+
Mask the password, showing only the first and last characters
7+
or *** if very short passwords
8+
"""
9+
if len(value) > 2:
10+
masked_value = value[0] + "*" * (len(value) - 2) + value[-1]
11+
else:
12+
# In case of very short passwords
13+
masked_value = "*" * len(value)
14+
return masked_value
15+
16+
17+
class Secret4TestsStr(SecretStr):
18+
"""Prints a hint of the secret
19+
TIP: Can be handy for testing
20+
"""
21+
22+
def __str__(self) -> str:
23+
value = self.get_secret_value()
24+
return _mask(value) if value else ""
25+
26+
27+
assert str(Secret4TestsStr("123456890")) == "1*******0"
28+
assert repr(Secret4TestsStr("123456890")) == "SecretStr('1*******0')"

tests/e2e-playwright/tests/conftest.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from faker import Faker
2323
from playwright.sync_api import APIRequestContext, BrowserContext, Page, WebSocket
2424
from playwright.sync_api._generated import Playwright
25-
from pydantic import AnyUrl, SecretStr, TypeAdapter
25+
from pydantic import AnyUrl, TypeAdapter
2626
from pytest_simcore.helpers.faker_factories import DEFAULT_TEST_PASSWORD
2727
from pytest_simcore.helpers.logging_tools import log_context
2828
from pytest_simcore.helpers.playwright import (
@@ -37,6 +37,7 @@
3737
decode_socketio_42_message,
3838
web_socket_default_log_handler,
3939
)
40+
from pytest_simcore.helpers.pydantic_ext import Secret4TestsStr
4041

4142
_PROJECT_CLOSING_TIMEOUT: Final[int] = 10 * MINUTE
4243
_OPENING_NEW_EMPTY_PROJECT_MAX_WAIT_TIME: Final[int] = 30 * SECOND
@@ -178,7 +179,7 @@ def pytest_runtest_makereport(item: pytest.Item, call):
178179
)
179180
diagnostics["duration"] = str(end_time - start_time)
180181

181-
print(f"\nDiagnostics report for {test_name} ---") # noqa: RUF001
182+
print(f"\nDiagnostics report for {test_name} ---") # noqa: RUF001
182183
print(textwrap.indent(json.dumps(diagnostics, indent=2), " "))
183184
print("---")
184185

@@ -221,13 +222,13 @@ def user_name(request: pytest.FixtureRequest, auto_register: bool, faker: Faker)
221222
@pytest.fixture
222223
def user_password(
223224
request: pytest.FixtureRequest, auto_register: bool, faker: Faker
224-
) -> SecretStr:
225+
) -> Secret4TestsStr:
225226
if auto_register:
226-
return SecretStr(DEFAULT_TEST_PASSWORD)
227+
return Secret4TestsStr(DEFAULT_TEST_PASSWORD)
227228
if osparc_password := request.config.getoption("--password"):
228229
assert isinstance(osparc_password, str)
229-
return SecretStr(osparc_password)
230-
return SecretStr(os.environ["USER_PASSWORD"])
230+
return Secret4TestsStr(osparc_password)
231+
return Secret4TestsStr(os.environ["USER_PASSWORD"])
231232

232233

233234
@pytest.fixture(scope="session")
@@ -290,7 +291,7 @@ def register(
290291
page: Page,
291292
product_url: AnyUrl,
292293
user_name: str,
293-
user_password: SecretStr,
294+
user_password: Secret4TestsStr,
294295
) -> Callable[[], AutoRegisteredUser]:
295296
def _do() -> AutoRegisteredUser:
296297
with log_context(
@@ -323,7 +324,7 @@ def log_in_and_out(
323324
page: Page,
324325
product_url: AnyUrl,
325326
user_name: str,
326-
user_password: SecretStr,
327+
user_password: Secret4TestsStr,
327328
auto_register: bool,
328329
register: Callable[[], AutoRegisteredUser],
329330
) -> Iterator[WebSocket]:

0 commit comments

Comments
 (0)