52 lines
3.2 KiB
Python
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'))
|