From a05f5d70ebb435e69827a7b353f33f84ad4ac43e Mon Sep 17 00:00:00 2001 From: Helge Jung <hej@c3pb.de> Date: Mon, 25 Dec 2023 16:02:10 +0100 Subject: [PATCH] add utils.mail2uuid() for frab-style email-derived user GUID generation --- src/core/tests/utils.py | 7 ++++++- src/core/utils.py | 6 ++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/core/tests/utils.py b/src/core/tests/utils.py index 1a7ff7a53..568be24a7 100644 --- a/src/core/tests/utils.py +++ b/src/core/tests/utils.py @@ -1,8 +1,9 @@ +import uuid from datetime import timedelta from django.test import TestCase -from ..utils import GitRepo, mask_url, scheme_and_netloc_from_url, str2timedelta +from ..utils import GitRepo, mail2uuid, mask_url, scheme_and_netloc_from_url, str2timedelta class UtilsTests(TestCase): @@ -41,6 +42,10 @@ class UtilsTests(TestCase): for check in checks: self.assertEqual(check[1], scheme_and_netloc_from_url(check[0])) + def test_mail2uuid(self): + expected_uuid = uuid.UUID('c25334d0-9539-55e3-92b4-f559c384522b') + self.assertEqual(expected_uuid, mail2uuid('hub@cccv.de')) + class GitRepoOfflineTests(TestCase): def test_invalid_url_local_path(self): diff --git a/src/core/utils.py b/src/core/utils.py index f7a3ca8cb..e69123e00 100644 --- a/src/core/utils.py +++ b/src/core/utils.py @@ -4,6 +4,7 @@ import re import shutil import subprocess import tempfile +import uuid from datetime import UTC, datetime, timedelta from io import BytesIO from pathlib import Path @@ -223,6 +224,11 @@ def download_from_url(url: str) -> Tuple[str, bytes]: return filename, data +def mail2uuid(mail: str, prefix: str = 'acct:', suffix: str = '') -> uuid.UUID: + uri = prefix + mail + suffix + return uuid.uuid5(uuid.NAMESPACE_URL, uri) + + class GitCloneError(Exception): pass -- GitLab