From 6e45ea4200aaa5870bdab82709a67c43b9bde081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com> Date: Sat, 4 Dec 2021 13:05:01 +0100 Subject: [PATCH] ENH: add function that generates passwords --- src/caosdb/common/administration.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/caosdb/common/administration.py b/src/caosdb/common/administration.py index dff461e7..450f8de1 100644 --- a/src/caosdb/common/administration.py +++ b/src/caosdb/common/administration.py @@ -26,6 +26,9 @@ """missing docstring.""" +import re +import string +import random from caosdb.common.utils import xml2str from caosdb.connection.connection import get_connection from caosdb.exceptions import (EntityDoesNotExistError, HTTPClientError, @@ -108,6 +111,19 @@ def get_server_property(key): return get_server_properties()[key] +def get_password(length): + """ creates a random password that fulfills the security requirements """ + sample_letters = string.ascii_letters + string.digits + "!#$%*+-/:;?_" + password = ''.join((random.choice(sample_letters) for i in range(length))) + + while not re.match(r"(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[\W_]).{8,}", + password): + password = ''.join((random.choice(sample_letters) + for i in range(length))) + + return password + + def _retrieve_user(name, realm=None, **kwargs): con = get_connection() try: -- GitLab