Added API filtering

API filtering can be useful to only allow certain information to be gathered from the API rather than all data
Implemented API filtering on IPs and changed internal IP filtering for security purposes
reminder
Etzelia 2018-10-16 22:22:28 -05:00
parent ed63871e93
commit 1440c6fa09
3 changed files with 25 additions and 37 deletions

View File

@ -385,7 +385,7 @@ class ModelAPI(View):
break
if model:
keywords = clean(model, get)
objects = model.objects.filter(**keywords).values()
objects = model.api.filter(**keywords).values() if getattr(model, 'api', False) else model.objects.filter(**keywords).values()
json = []
for value in objects:
try:

View File

@ -58,11 +58,6 @@ class UserSettings(models.Model):
return self.auth_user.username
class UnansweredManager(models.Manager):
def get_queryset(self):
return super(UnansweredManager, self).get_queryset().filter(accepted=None)
class Application(models.Model):
username = models.CharField("Minecraft Username", max_length=20, unique=True)
age = models.PositiveSmallIntegerField()
@ -74,7 +69,6 @@ class Application(models.Model):
accepted = models.NullBooleanField()
date = models.DateTimeField(auto_now_add=True, blank=True, null=True)
objects = models.Manager()
unanswered = UnansweredManager()
@property
def status(self):
@ -185,16 +179,6 @@ class Player(models.Model):
return self.username + " (" + self.uuid + ")"
class UnclaimedManager(models.Manager):
def get_queryset(self):
return super(UnclaimedManager, self).get_queryset().filter(staff=None, resolved=False)
class ClaimedManager(models.Manager):
def get_queryset(self):
return super(ClaimedManager, self).get_queryset().filter(staff__isnull=False, resolved=False)
class Ticket(models.Model):
PRIORITY = (
('L', 'Low'),
@ -217,8 +201,6 @@ class Ticket(models.Model):
z = models.CharField(max_length=20, blank=True, null=True)
date = models.DateTimeField(auto_now_add=True, null=True, blank=True)
objects = models.Manager()
unclaimed = UnclaimedManager()
claimed = ClaimedManager()
@property
def location(self):
@ -366,10 +348,24 @@ class Warning(models.Model):
return "Warning for %s" % username
class IPManager(models.Manager):
def get_queryset(self):
users = User.objects.filter(is_active=True)
filtered = []
for user in users:
if getattr(user, 'player', False):
ips = IP.objects.filter(player=user.player)
for ip in ips:
filtered.append(ip.ip)
return super(IPManager, self).get_queryset().exclude(ip__in=filtered)
class IP(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
ip = models.CharField(max_length=30)
last_used = models.DateField(null=True, blank=True)
objects = models.Manager()
api = IPManager()
class Meta:
verbose_name = "IP"
@ -384,7 +380,7 @@ class IP(models.Model):
@property
def associated(self):
ips = IP.objects.filter(ip=self.ip)
ips = IP.api.filter(ip=self.ip)
players = []
for ip in ips:
if self.player != ip.player:

View File

@ -33,11 +33,11 @@ class Overview(View):
request.user.usersettings = UserSettingsModel(auth_user=request.user)
request.user.usersettings.last_ip = user_ip
request.user.usersettings.save()
unanswered_apps = AppModel.unanswered.count()
unanswered_apps = AppModel.objects.filter(accepted=None).count()
accepted_apps = AppModel.objects.filter(accepted=True).count()
denied_apps = AppModel.objects.filter(accepted=False).count()
unclaimed_tickets = TicketModel.unclaimed.count()
claimed_tickets = TicketModel.claimed.count()
unclaimed_tickets = TicketModel.objects.filter(staff=None, resolved=False).count()
claimed_tickets = TicketModel.objects.filter(staff__isnull=False, resolved=False).count()
resolved_tickets = TicketModel.objects.filter(resolved=True).count()
counts = {'applications': AppModel.objects.count(), 'players': PlayerModel.objects.count(),
"ips": IPModel.objects.count(), "tickets": TicketModel.objects.count(),
@ -204,7 +204,7 @@ class PlayerInfo(View):
def get(self, request, player_id):
player = PlayerModel.objects.get(id=player_id)
ips = IPModel.objects.filter(player=player)
ips = IPModel.api.filter(player=player)
tickets = TicketModel.objects.filter(player=player)
warnings = WarningModel.objects.filter(player=player)
form = {'ips': ips, 'tickets': tickets, 'warnings': warnings}
@ -219,17 +219,9 @@ class Ticket(View):
def get(self, request):
get = request.GET
if 'claimed' in get:
if get['claimed'].lower() == 'true':
tickets = TicketModel.claimed.all()
elif get['claimed'].lower() == 'false':
tickets = TicketModel.unclaimed.all()
else:
tickets = TicketModel.objects.filter(resolved=True)
else:
tickets1 = TicketModel.objects.filter(resolved=False).order_by('-id')
tickets2 = TicketModel.objects.filter(resolved=True).order_by('-id')
tickets = list(chain(tickets1, tickets2))
tickets1 = TicketModel.objects.filter(resolved=False).order_by('-id')
tickets2 = TicketModel.objects.filter(resolved=True).order_by('-id')
tickets = list(chain(tickets1, tickets2))
return render(request, 'minecraft_manager/ticket.html', {'current_app': 'ticket', 'tickets': tickets})
@ -379,8 +371,8 @@ class WarningAdd(View):
class IP(View):
def get(self, request, ip_id):
ip = IPModel.objects.get(id=ip_id)
ips = IPModel.objects.filter(ip=ip.ip)
ip = IPModel.api.get(id=ip_id)
ips = IPModel.api.filter(ip=ip.ip)
return render(request, 'minecraft_manager/ip.html', {'ip': ip, 'ips': ips})
def post(self, request, ip_id):