Files
CyberPanel/firewall/models.py

68 lines
2.3 KiB
Python
Raw Normal View History

2025-08-01 14:56:30 +05:00
from django.db import models
from django.utils import timezone
from django.utils.timezone import now
import time
2025-08-01 14:56:30 +05:00
# Create your models here.
class FirewallRules(models.Model):
name = models.CharField(unique=True, max_length=32) # Field name made lowercase.
proto = models.CharField(max_length=10)
port = models.CharField(max_length=25)
ipAddress = models.CharField(max_length=30,default="0.0.0.0/0")
class BannedIP(models.Model):
"""
Model to store banned IP addresses
"""
ip_address = models.GenericIPAddressField(unique=True, db_index=True, verbose_name="IP Address")
reason = models.CharField(max_length=255, verbose_name="Ban Reason")
duration = models.CharField(max_length=50, default='permanent', verbose_name="Duration")
banned_on = models.DateTimeField(auto_now_add=True, verbose_name="Banned On")
expires = models.BigIntegerField(null=True, blank=True, verbose_name="Expires Timestamp")
# expires can be: null (never expires), or Unix timestamp
active = models.BooleanField(default=True, db_index=True, verbose_name="Active")
class Meta:
db_table = 'firewall_bannedips'
verbose_name = "Banned IP"
verbose_name_plural = "Banned IPs"
indexes = [
models.Index(fields=['ip_address', 'active']),
models.Index(fields=['active', 'expires']),
]
def __str__(self):
return f"{self.ip_address} - {self.reason}"
def is_expired(self):
"""
Check if the ban has expired
Returns True if expired, False if still active
"""
if self.expires is None:
# Never expires
return False
current_time = int(time.time())
return self.expires <= current_time
def get_expires_display(self):
"""
Get human-readable expiration date
"""
if self.expires is None:
return "Never"
return timezone.datetime.fromtimestamp(self.expires).strftime('%Y-%m-%d %H:%M:%S')
def get_banned_on_display(self):
"""
Get human-readable banned on date
"""
if self.banned_on:
if hasattr(self.banned_on, 'strftime'):
return self.banned_on.strftime('%Y-%m-%d %H:%M:%S')
return str(self.banned_on)
return timezone.now().strftime('%Y-%m-%d %H:%M:%S')