Coverage for app/venv/lib/python3.14/site-packages/weblate/utils/pii.py: 0%
20 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
1# Copyright © Michal Čihař <michal@weblate.org>
2#
3# SPDX-License-Identifier: GPL-3.0-or-later
6def mask_string(string: str, include_first: bool = False, limit: int = 3) -> str:
7 length = len(string)
8 if length <= limit:
9 return length * "*"
11 parts = []
12 if include_first:
13 parts.append(string[0])
14 string = string[1:]
15 length -= 1
17 parts.extend(("*" * (length - 1), string[-1]))
18 return "".join(parts)
21def mask_email(email: str) -> str:
22 name, domain = email.rsplit("@", maxsplit=1)
23 masked_name = mask_string(name, include_first=True)
25 if len(domain) <= 4 or "." not in domain:
26 masked_domain = mask_string(domain, limit=0)
27 else:
28 part, tld = domain.rsplit(".", maxsplit=1)
29 masked_tld = mask_string(tld, limit=0)
30 masked_domain = f"{len(part) * '*'}.{masked_tld}"
32 return f"{masked_name}@{masked_domain}"