From 3a678016d100024011dff730f0a22c5ddaa32393 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Sun, 19 Nov 2017 02:06:54 +0100 Subject: [PATCH] allow banning --- web_dev/sas_web/meingoethopia/admin.py | 14 ++++++++++++++ web_dev/sas_web/meingoethopia/models.py | 4 ++++ web_dev/sas_web/meingoethopia/views.py | 10 ++++++++++ web_dev/sas_web/startpage/admin.py | 6 ++++++ web_dev/sas_web/startpage/models.py | 8 ++++++++ 5 files changed, 42 insertions(+) diff --git a/web_dev/sas_web/meingoethopia/admin.py b/web_dev/sas_web/meingoethopia/admin.py index d5b3d85..4be687c 100644 --- a/web_dev/sas_web/meingoethopia/admin.py +++ b/web_dev/sas_web/meingoethopia/admin.py @@ -1,26 +1,40 @@ from django.contrib import admin from .models import Betrieb, Partei, PresidentCandidate, Question +from startpage.models import Banned + + +def ban_ip(modeladmin, request, queryset): + for obj in queryset: + banned = Banned(ip_address=obj.ip_address, + reason="") + banned.save() + modeladmin.message_user(request, "Ausgewählte Urheber erfolgreich verbannt.") +ban_ip.short_description = "Urheber ausgewählter Eintrage verbannen" # Register your models here. class BetriebAdmin(admin.ModelAdmin): list_display = ('name', 'manager', 'confirmed') list_filter = ('confirmed',) + actions = [ban_ip] class ParteiAdmin(admin.ModelAdmin): list_display = ('name', 'abbreviation', 'chef', 'description', 'confirmed') list_filter = ('confirmed',) + actions = ('ban_ip',) class PresidentAdmin(admin.ModelAdmin): list_display = ('name', 'confirmed') list_filter = ('confirmed',) + actions = ('ban_ip',) class QuestionAdmin(admin.ModelAdmin): list_display = ('subject', 'answered') list_filter = ('answered',) + actions = ('ban_ip',) admin.site.register(Betrieb, BetriebAdmin) admin.site.register(Partei, ParteiAdmin) diff --git a/web_dev/sas_web/meingoethopia/models.py b/web_dev/sas_web/meingoethopia/models.py index 6139e2e..6a2a6e5 100644 --- a/web_dev/sas_web/meingoethopia/models.py +++ b/web_dev/sas_web/meingoethopia/models.py @@ -7,6 +7,7 @@ class Betrieb(models.Model): manager = models.CharField('Betriebsleiter', max_length=200) email = models.EmailField('Kontakt Email') business_idea = models.TextField('Idee') + ip_address = models.CharField('IP Adresse', max_length=50, blank=True) confirmed = models.BooleanField('Bestätigt', default=False) def __str__(self): @@ -23,6 +24,7 @@ class Partei(models.Model): chef = models.CharField('Parteivorsitzende', max_length=200) email = models.EmailField('Kontakt Email') description = models.TextField('Beschreibung (Ziele etc.)') + ip_address = models.CharField('IP Adresse', max_length=50, blank=True) confirmed = models.BooleanField('Bestätigt', default=False) def __str__(self): @@ -37,6 +39,7 @@ class PresidentCandidate(models.Model): name = models.CharField('Name', max_length=100) email = models.EmailField('Kontakt Email') motivation = models.TextField('Motivation') + ip_address = models.CharField('IP Adresse', max_length=50, blank=True) confirmed = models.BooleanField('Bestätigt', default=False) def __str__(self): @@ -51,6 +54,7 @@ class Question(models.Model): subject = models.CharField('Betreff', max_length=100) email = models.EmailField('Kontakt Email') content = models.TextField('Inhalt') + ip_address = models.CharField('IP Adresse', max_length=50, blank=True) answered = models.BooleanField('Beantwortet', default=False) def __str__(self): diff --git a/web_dev/sas_web/meingoethopia/views.py b/web_dev/sas_web/meingoethopia/views.py index 9f9afe1..7104425 100644 --- a/web_dev/sas_web/meingoethopia/views.py +++ b/web_dev/sas_web/meingoethopia/views.py @@ -48,6 +48,7 @@ def betrieb_new(request): manager=form.cleaned_data.get('manager'), email=form.cleaned_data.get('email'), business_idea=form.cleaned_data.get('business_idea'), + ip_address=get_client_ip(request), confirmed=False) betrieb.save() return render_confirmation(request) @@ -105,3 +106,12 @@ def question_new(request): def render_confirmation(request): return render(request, "meingoethopia/confirmed.html") + + +def get_client_ip(request): + x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') + if x_forwarded_for: + ip = x_forwarded_for.split(',')[0] + else: + ip = request.META.get('REMOTE_ADDR') + return ip diff --git a/web_dev/sas_web/startpage/admin.py b/web_dev/sas_web/startpage/admin.py index 8c38f3f..5538316 100644 --- a/web_dev/sas_web/startpage/admin.py +++ b/web_dev/sas_web/startpage/admin.py @@ -1,3 +1,9 @@ from django.contrib import admin +from .models import Banned + + +class BanAdmin(admin.ModelAdmin): + list_display = ('ip_address', 'reason') # Register your models here. +admin.site.register(Banned, BanAdmin) diff --git a/web_dev/sas_web/startpage/models.py b/web_dev/sas_web/startpage/models.py index 71a8362..691b355 100644 --- a/web_dev/sas_web/startpage/models.py +++ b/web_dev/sas_web/startpage/models.py @@ -1,3 +1,11 @@ from django.db import models + # Create your models here. +class Banned(models.Model): + ip_address = models.CharField('IP Adresse', max_length=50) + reason = models.TextField('Grund') + + class Meta: + verbose_name = 'Verbannte' + verbose_name_plural = 'Verbannte'