all: implement black as code formatter
This commit is contained in:
@ -2,4 +2,4 @@
|
||||
|
||||
from passbook.lib.admin import admin_autoregister
|
||||
|
||||
admin_autoregister('passbook_policies_reputation')
|
||||
admin_autoregister("passbook_policies_reputation")
|
||||
|
||||
@ -11,7 +11,7 @@ class ReputationPolicySerializer(ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = ReputationPolicy
|
||||
fields = GENERAL_SERIALIZER_FIELDS + ['check_ip', 'check_username', 'threshold']
|
||||
fields = GENERAL_SERIALIZER_FIELDS + ["check_ip", "check_username", "threshold"]
|
||||
|
||||
|
||||
class ReputationPolicyViewSet(ModelViewSet):
|
||||
|
||||
@ -7,9 +7,9 @@ from django.apps import AppConfig
|
||||
class PassbookPolicyReputationConfig(AppConfig):
|
||||
"""Passbook reputation app config"""
|
||||
|
||||
name = 'passbook.policies.reputation'
|
||||
label = 'passbook_policies_reputation'
|
||||
verbose_name = 'passbook Policies.Reputation'
|
||||
name = "passbook.policies.reputation"
|
||||
label = "passbook_policies_reputation"
|
||||
verbose_name = "passbook Policies.Reputation"
|
||||
|
||||
def ready(self):
|
||||
import_module('passbook.policies.reputation.signals')
|
||||
import_module("passbook.policies.reputation.signals")
|
||||
|
||||
@ -12,11 +12,11 @@ class ReputationPolicyForm(forms.ModelForm):
|
||||
class Meta:
|
||||
|
||||
model = ReputationPolicy
|
||||
fields = GENERAL_FIELDS + ['check_ip', 'check_username', 'threshold']
|
||||
fields = GENERAL_FIELDS + ["check_ip", "check_username", "threshold"]
|
||||
widgets = {
|
||||
'name': forms.TextInput(),
|
||||
'value': forms.TextInput(),
|
||||
"name": forms.TextInput(),
|
||||
"value": forms.TextInput(),
|
||||
}
|
||||
labels = {
|
||||
'check_ip': _('Check IP'),
|
||||
"check_ip": _("Check IP"),
|
||||
}
|
||||
|
||||
@ -10,41 +10,73 @@ class Migration(migrations.Migration):
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('passbook_core', '0001_initial'),
|
||||
("passbook_core", "0001_initial"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='IPReputation',
|
||||
name="IPReputation",
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('ip', models.GenericIPAddressField(unique=True)),
|
||||
('score', models.IntegerField(default=0)),
|
||||
('updated', models.DateTimeField(auto_now=True)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("ip", models.GenericIPAddressField(unique=True)),
|
||||
("score", models.IntegerField(default=0)),
|
||||
("updated", models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ReputationPolicy',
|
||||
name="ReputationPolicy",
|
||||
fields=[
|
||||
('policy_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='passbook_core.Policy')),
|
||||
('check_ip', models.BooleanField(default=True)),
|
||||
('check_username', models.BooleanField(default=True)),
|
||||
('threshold', models.IntegerField(default=-5)),
|
||||
(
|
||||
"policy_ptr",
|
||||
models.OneToOneField(
|
||||
auto_created=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
parent_link=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
to="passbook_core.Policy",
|
||||
),
|
||||
),
|
||||
("check_ip", models.BooleanField(default=True)),
|
||||
("check_username", models.BooleanField(default=True)),
|
||||
("threshold", models.IntegerField(default=-5)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Reputation Policy',
|
||||
'verbose_name_plural': 'Reputation Policies',
|
||||
"verbose_name": "Reputation Policy",
|
||||
"verbose_name_plural": "Reputation Policies",
|
||||
},
|
||||
bases=('passbook_core.policy',),
|
||||
bases=("passbook_core.policy",),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserReputation',
|
||||
name="UserReputation",
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('score', models.IntegerField(default=0)),
|
||||
('updated', models.DateTimeField(auto_now=True)),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
(
|
||||
"id",
|
||||
models.AutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("score", models.IntegerField(default=0)),
|
||||
("updated", models.DateTimeField(auto_now=True)),
|
||||
(
|
||||
"user",
|
||||
models.OneToOneField(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
@ -14,24 +14,27 @@ class ReputationPolicy(Policy):
|
||||
check_username = models.BooleanField(default=True)
|
||||
threshold = models.IntegerField(default=-5)
|
||||
|
||||
form = 'passbook.policies.reputation.forms.ReputationPolicyForm'
|
||||
form = "passbook.policies.reputation.forms.ReputationPolicyForm"
|
||||
|
||||
def passes(self, request: PolicyRequest) -> PolicyResult:
|
||||
remote_ip = get_client_ip(request.http_request)
|
||||
passing = True
|
||||
if self.check_ip:
|
||||
ip_scores = IPReputation.objects.filter(ip=remote_ip, score__lte=self.threshold)
|
||||
ip_scores = IPReputation.objects.filter(
|
||||
ip=remote_ip, score__lte=self.threshold
|
||||
)
|
||||
passing = passing and ip_scores.exists()
|
||||
if self.check_username:
|
||||
user_scores = UserReputation.objects.filter(user=request.user,
|
||||
score__lte=self.threshold)
|
||||
user_scores = UserReputation.objects.filter(
|
||||
user=request.user, score__lte=self.threshold
|
||||
)
|
||||
passing = passing and user_scores.exists()
|
||||
return PolicyResult(passing)
|
||||
|
||||
class Meta:
|
||||
|
||||
verbose_name = _('Reputation Policy')
|
||||
verbose_name_plural = _('Reputation Policies')
|
||||
verbose_name = _("Reputation Policy")
|
||||
verbose_name_plural = _("Reputation Policies")
|
||||
|
||||
|
||||
class IPReputation(models.Model):
|
||||
|
||||
@ -12,7 +12,7 @@ LOGGER = get_logger()
|
||||
|
||||
def update_score(request, username, amount):
|
||||
"""Update score for IP and User"""
|
||||
remote_ip = get_client_ip(request) or '255.255.255.255.'
|
||||
remote_ip = get_client_ip(request) or "255.255.255.255."
|
||||
ip_score, _ = IPReputation.objects.update_or_create(ip=remote_ip)
|
||||
ip_score.score += amount
|
||||
ip_score.save()
|
||||
@ -30,7 +30,7 @@ def update_score(request, username, amount):
|
||||
# pylint: disable=unused-argument
|
||||
def handle_failed_login(sender, request, credentials, **_):
|
||||
"""Lower Score for failed loging attempts"""
|
||||
update_score(request, credentials.get('username'), -1)
|
||||
update_score(request, credentials.get("username"), -1)
|
||||
|
||||
|
||||
@receiver(user_logged_in)
|
||||
|
||||
Reference in New Issue
Block a user