Source code for ucloud.helpers.utils

import random
import base64
import typing

_lowercase = "abcdefghijklmnopqrstuvwxyz"
_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
_numbers = "0123456789"
_specials = "_"


[docs]def gen_password( n: int, lower_letters: str = _lowercase, upper_letters: str = _uppercase, number_letters: str = _numbers, special_letters: str = _specials, min_lower: int = 1, min_upper: int = 1, min_number: int = 1, min_specials: int = 1, ): """generate password for any resource >>> len(gen_password(20)) 20 :param int n: password total length :param str lower_letters: all lowercase letters :param str upper_letters: all uppercase letters :param str number_letters: all number letters :param str special_letters: all special letters :param int min_lower: minimal number of lowercase letters :param int min_upper: minimal number of uppercase letters :param int min_number: minimal number of number letters :param int min_specials: minimal number of special letters :return: """ all_letters = "".join( [lower_letters, upper_letters, number_letters, special_letters] ) minimal_total = min_lower + min_upper + min_number + min_specials if n < minimal_total: raise ValueError( ( "the length of password must be larger than " "total minimal letters number" ) ) minimal_letters = "".join( [ gen_string(lower_letters, min_lower), gen_string(upper_letters, min_upper), gen_string(number_letters, min_number), gen_string(special_letters, min_specials), ] ) additional_letters = random.sample(all_letters, n - minimal_total) results = list(minimal_letters) + additional_letters random.shuffle(results) return "".join(results)
def gen_string(letters: str, length: int): return "".join([random.choice(letters) for i in range(length)]) def first(arr: typing.List[typing.Any]) -> typing.Any: if len(arr) == 0: return None return arr[0]
[docs]def b64encode(s: str) -> str: """base64 encode :param str s: input string :return: base64 string """ return base64.b64encode(s.encode()).decode()
[docs]def b64decode(s: str) -> str: """base64 decode :param str s: base64 string :return: output string """ return base64.b64decode(s.encode()).decode()