Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added constants into the Config model #96

Merged
merged 6 commits into from
Jan 26, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions buffalogs/buffalogs/settings/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,14 +215,6 @@
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
DATA_UPLOAD_MAX_NUMBER_FIELDS = None

# Certego settings
CERTEGO_BUFFALOGS_DISTANCE_KM_ACCEPTED = 100
CERTEGO_BUFFALOGS_VEL_TRAVEL_ACCEPTED = 300
CERTEGO_BUFFALOGS_USER_MAX_DAYS = 20
CERTEGO_BUFFALOGS_LOGIN_MAX_DAYS = 10
CERTEGO_BUFFALOGS_ALERT_MAX_DAYS = 10
CERTEGO_BUFFALOGS_IP_MAX_DAYS = 7

# Celery config
CELERY_BROKER_URL = CERTEGO_BUFFALOGS_RABBITMQ_URI
CELERY_TIMEZONE = TIME_ZONE
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Generated by Django 4.1.4 on 2024-01-22 11:38

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("impossible_travel", "0009_config_ignored_ips_config_ignored_users_and_more"),
]

operations = [
migrations.AddField(
model_name="config",
name="alert_max_days",
field=models.PositiveIntegerField(
default=30,
help_text="Days after which the alerts will be removed from the db",
),
),
migrations.AddField(
model_name="config",
name="distance_accepted",
field=models.PositiveIntegerField(
default=100,
help_text="Minimum distance (in Km) between two logins after which the impossible travel detection starts",
),
),
migrations.AddField(
model_name="config",
name="ip_max_days",
field=models.PositiveIntegerField(
default=30,
help_text="Days after which the IPs will be removed from the db",
),
),
migrations.AddField(
model_name="config",
name="login_max_days",
field=models.PositiveIntegerField(
default=30,
help_text="Days after which the logins will be removed from the db",
),
),
migrations.AddField(
model_name="config",
name="user_max_days",
field=models.PositiveIntegerField(
default=60,
help_text="Days after which the users will be removed from the db",
),
),
migrations.AddField(
model_name="config",
name="vel_accepted",
field=models.PositiveIntegerField(
default=300,
help_text="Minimum velocity (in Km/h) between two logins after which the impossible travel detection starts",
),
),
]
10 changes: 10 additions & 0 deletions buffalogs/impossible_travel/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,13 @@ class Config(models.Model):
ignored_ips = ArrayField(models.CharField(max_length=100), blank=True, default=list)
allowed_countries = ArrayField(models.CharField(max_length=20), blank=True, default=list)
vip_users = ArrayField(models.CharField(max_length=100), blank=True, default=list)
distance_accepted = models.PositiveIntegerField(
default=100, help_text="Minimum distance (in Km) between two logins after which the impossible travel detection starts"
)
vel_accepted = models.PositiveIntegerField(
default=300, help_text="Minimum velocity (in Km/h) between two logins after which the impossible travel detection starts"
)
user_max_days = models.PositiveIntegerField(default=60, help_text="Days after which the users will be removed from the db")
login_max_days = models.PositiveIntegerField(default=30, help_text="Days after which the logins will be removed from the db")
alert_max_days = models.PositiveIntegerField(default=30, help_text="Days after which the alerts will be removed from the db")
ip_max_days = models.PositiveIntegerField(default=30, help_text="Days after which the IPs will be removed from the db")
8 changes: 4 additions & 4 deletions buffalogs/impossible_travel/modules/impossible_travel.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import logging
from datetime import datetime

from django.conf import settings
from django.utils import timezone
from geopy.distance import geodesic
from impossible_travel.models import Alert, Login, UsersIP
from impossible_travel.models import Alert, Config, Login, UsersIP


class Impossible_Travel:
Expand All @@ -27,11 +26,12 @@ def calc_distance(self, db_user, prev_login, last_login_user_fields):
:return: dictionary with info about the impossible travel alert
:rtype: dict
"""
app_config = Config.objects.get(id=1)
alert_info = {}
vel = 0
distance_km = geodesic((prev_login.latitude, prev_login.longitude), (last_login_user_fields["lat"], last_login_user_fields["lon"])).km

if distance_km > settings.CERTEGO_BUFFALOGS_DISTANCE_KM_ACCEPTED:
if distance_km > app_config.distance_accepted:
last_timestamp_datetimeObj_aware = timezone.make_aware(datetime.strptime(last_login_user_fields["timestamp"], "%Y-%m-%dT%H:%M:%S.%fZ"))
prev_timestamp_datetimeObj_aware = prev_login.timestamp # already aware in the db

Expand All @@ -43,7 +43,7 @@ def calc_distance(self, db_user, prev_login, last_login_user_fields):

vel = distance_km / diff_timestamp_hours

if vel > settings.CERTEGO_BUFFALOGS_VEL_TRAVEL_ACCEPTED:
if vel > app_config.vel_accepted:
alert_info["alert_name"] = Alert.ruleNameEnum.IMP_TRAVEL
alert_info[
"alert_desc"
Expand Down
9 changes: 5 additions & 4 deletions buffalogs/impossible_travel/tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,18 @@

def clear_models_periodically():
"""Delete old data in the models"""
app_config = Config.objects.get(id=1)
now = timezone.now()
delete_user_time = now - timedelta(days=settings.CERTEGO_BUFFALOGS_USER_MAX_DAYS)
delete_user_time = now - timedelta(days=app_config.user_max_days)
User.objects.filter(updated__lte=delete_user_time).delete()

delete_login_time = now - timedelta(days=settings.CERTEGO_BUFFALOGS_ALERT_MAX_DAYS)
delete_login_time = now - timedelta(days=app_config.login_max_days)
Login.objects.filter(updated__lte=delete_login_time).delete()

delete_alert_time = now - timedelta(days=settings.CERTEGO_BUFFALOGS_ALERT_MAX_DAYS)
delete_alert_time = now - timedelta(days=app_config.alert_max_days)
Alert.objects.filter(updated__lte=delete_alert_time).delete()

delete_ip_time = now - timedelta(days=settings.CERTEGO_BUFFALOGS_IP_MAX_DAYS)
delete_ip_time = now - timedelta(days=app_config.ip_max_days)
UsersIP.objects.filter(updated__lte=delete_ip_time).delete()


Expand Down
1 change: 1 addition & 0 deletions buffalogs/impossible_travel/tests/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ def setup(self):
]
)
Config.objects.create(
id=1,
ignored_users=["N/A", "Not Available"],
ignored_ips=["0.0.0.0", "192.168.1.0/24"],
allowed_countries=["Italy", "United States"],
Expand Down
11 changes: 9 additions & 2 deletions buffalogs/impossible_travel/tests/test_impossible_travel.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.test import TestCase
from django.utils import timezone
from impossible_travel.models import Login, User, UsersIP
from impossible_travel.models import Config, Login, User, UsersIP
from impossible_travel.modules import impossible_travel


Expand All @@ -9,6 +9,13 @@ class TestImpossibleTravel(TestCase):

@classmethod
def setUpTestData(self):
Config.objects.create(
id=1,
ignored_users=["N/A", "Not Available"],
ignored_ips=["0.0.0.0", "192.168.1.0/24"],
allowed_countries=["Italy", "United States"],
vip_users=["Asa Strickland", "Krista Moran"],
)
user_obj = User.objects.create(
username="Lorena Goldoni",
risk_score="Low",
Expand All @@ -26,7 +33,7 @@ def setUpTestData(self):
)

def test_calc_distance(self):
# if distance > settings.CERTEGO_BUFFALOGS_DISTANCE_KM_ACCEPTED --> FALSE
# if distance > Config.distance_accepted --> FALSE
last_login_user_fields = {
"timestamp": "2023-03-08T17:10:33.358Z",
"lat": "40.364",
Expand Down