Класс Crypto переименован в CryptoManager

This commit is contained in:
2026-07-10 23:31:44 +03:00
parent 31a13c7ccc
commit b4c505048d
6 changed files with 25 additions and 26 deletions

View 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)