old_console/core/models.py
2024-11-02 14:12:45 +03:00

52 lines
3.2 KiB
Python

import logging
from datetime import timedelta
from django.contrib.auth.models import User
from django.core.validators import MaxValueValidator, MinValueValidator, FileExtensionValidator
from django.db import models
from django.utils.translation import gettext_lazy
from solo.models import SingletonModel
_log = logging.getLogger(__name__)
class TLSSettings(SingletonModel):
singleton_instance_id = 1
enabled = models.BooleanField(verbose_name=gettext_lazy("Enable TLS"), default=False)
certificate = models.FileField(verbose_name=gettext_lazy("Certificate"),
help_text=gettext_lazy("TLS certificate in PEM format"),
validators=[FileExtensionValidator(allowed_extensions=["crt", "pem"])],
null=True, blank=True)
key = models.FileField(verbose_name=gettext_lazy("Key"), help_text=gettext_lazy("TLS certificate's key"),
validators=[FileExtensionValidator(allowed_extensions=["key"])],
null=True, blank=True)
class UsernameLoginAuthCheck(models.Model):
""" Model for storing authentication data for certain usernames """
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
is_username_auth_blocked = models.BooleanField(default=False,
verbose_name=gettext_lazy(
"Is authentication blocked for this username"),
help_text=gettext_lazy(
"Flag, that shows if authentication for that username is blocked"))
failed_login_attempts = models.IntegerField(default=0,
verbose_name=gettext_lazy("Failed login attempts"),
help_text=gettext_lazy("Failed login attempts for username"))
username_unlock_time = models.DateTimeField(verbose_name=gettext_lazy("Authentication block time"),
help_text=gettext_lazy(
"Time, when access to authentication for that username was blocked"),
blank=True,
null=True)
class ConsoleAuthSettings(SingletonModel):
""" Singleton model for storing console authentication backend settings """
login_attempts_limit = models.IntegerField(default=3,
validators=[MinValueValidator(0), MaxValueValidator(100)],
verbose_name=gettext_lazy('Login attempts limit'),
help_text=gettext_lazy(
'Attempts, after which access to authorization will be blocked. Range from 1 to 100. 0 is off'))
login_block_timeout = models.DurationField(default=timedelta(minutes=30),
verbose_name=gettext_lazy('Login authentication timeout'),
help_text=gettext_lazy('Timeout, during which user cannot authenticate'))