Класс Crypto переименован в CryptoManager
This commit is contained in:
70
net/xeaf/rack/managers/crypto_manager.py
Normal file
70
net/xeaf/rack/managers/crypto_manager.py
Normal file
@@ -0,0 +1,70 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Работа с криптографией
|
||||
"""
|
||||
|
||||
import secrets
|
||||
|
||||
|
||||
class CryptoManager:
|
||||
"""
|
||||
Реализует методы работы со случайными и криптографическими значениями
|
||||
"""
|
||||
|
||||
DEFAULT_TOKEN_LENGTH = 32
|
||||
""" Длина токена по умолчанию """
|
||||
|
||||
DEFAULT_PIN_CODE_LENGTH = 4
|
||||
""" Длина PIN-кода по умолчанию """
|
||||
|
||||
DEFAULT_PIN_CODE_ALPHABET = "0123456789"
|
||||
""" Алфавит PIN-кода по умолчанию """
|
||||
|
||||
DEFAULT_SLUG_LENGTH = 8
|
||||
""" Длина slug по умолчанию """
|
||||
|
||||
@classmethod
|
||||
def gen_token(cls, length: int = DEFAULT_TOKEN_LENGTH) -> str:
|
||||
"""
|
||||
Генерирует случайный токен
|
||||
|
||||
:param length: Длина токена
|
||||
:return: Сгенерированный токен
|
||||
"""
|
||||
|
||||
bytes_needed = (length + 1) // 2
|
||||
token = secrets.token_hex(bytes_needed)
|
||||
return token[:length]
|
||||
|
||||
@classmethod
|
||||
def gen_pin_code(cls, length: int = DEFAULT_PIN_CODE_LENGTH, alphabet: str = DEFAULT_PIN_CODE_ALPHABET):
|
||||
"""
|
||||
Генерирует случайный PIN-код
|
||||
|
||||
:param length: Длина PIN-кода
|
||||
:param alphabet: Алфавит PIN-кода
|
||||
:return: Сгенерированный PIN-код
|
||||
"""
|
||||
|
||||
return "".join(secrets.choice(alphabet) for _ in range(length))
|
||||
|
||||
@classmethod
|
||||
def gen_slug(cls, prefix: str, length: int = DEFAULT_SLUG_LENGTH):
|
||||
"""
|
||||
Генерирует случайный slug
|
||||
|
||||
:param prefix: Префикс slug
|
||||
:param length: Длина slug
|
||||
:return: Сгенерированный slug
|
||||
"""
|
||||
|
||||
l = length - len(prefix)
|
||||
if l <= 0:
|
||||
return prefix
|
||||
|
||||
return prefix + cls.gen_token(l)
|
||||
Reference in New Issue
Block a user