mirror of
https://github.com/jazzband/django-axes.git
synced 2026-05-16 11:33:12 +00:00
Add AccessFailureLogclass to models to keep trace of all failed logins
This commit is contained in:
parent
110fe905eb
commit
da7a9b25ed
2 changed files with 42 additions and 0 deletions
30
axes/migrations/0008_accessfailurelog.py
Normal file
30
axes/migrations/0008_accessfailurelog.py
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Generated by Django 3.2.12 on 2022-03-15 03:00
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('axes', '0007_alter_accessattempt_unique_together'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AccessFailureLog',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('user_agent', models.CharField(db_index=True, max_length=255, verbose_name='User Agent')),
|
||||
('ip_address', models.GenericIPAddressField(db_index=True, null=True, verbose_name='IP Address')),
|
||||
('username', models.CharField(db_index=True, max_length=255, null=True, verbose_name='Username')),
|
||||
('http_accept', models.CharField(max_length=1025, verbose_name='HTTP Accept')),
|
||||
('path_info', models.CharField(max_length=255, verbose_name='Path')),
|
||||
('attempt_time', models.DateTimeField(auto_now_add=True, verbose_name='Attempt Time')),
|
||||
('locked_out', models.BooleanField(blank=True, default=False, verbose_name='Access lock out')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'access failure',
|
||||
'verbose_name_plural': 'access failures',
|
||||
},
|
||||
),
|
||||
]
|
||||
|
|
@ -21,6 +21,18 @@ class AccessBase(models.Model):
|
|||
ordering = ["-attempt_time"]
|
||||
|
||||
|
||||
class AccessFailureLog(AccessBase):
|
||||
locked_out = models.BooleanField(_("Access lock out"), null=False, blank=True, default=False)
|
||||
|
||||
def __str__(self):
|
||||
locked_out_str = ' locked out' if self.locked_out else ''
|
||||
return f"Failed access: user {self.username}{locked_out_str} on {self.attempt_time} from {self.ip_address}"
|
||||
|
||||
class Meta:
|
||||
verbose_name = _("access failure")
|
||||
verbose_name_plural = _("access failures")
|
||||
|
||||
|
||||
class AccessAttempt(AccessBase):
|
||||
get_data = models.TextField(_("GET Data"))
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue