From 74d8f41426017e8b8504904b6e8c5421abfd6618 Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Thu, 18 Nov 2021 08:48:26 +0100 Subject: [PATCH] added views and admin security --- TealCode/TealCode/urls.py | 2 +- TealCode/analytics/admin.py | 4 ++- .../migrations/0002_remove_view_category.py | 17 +++++++++++ .../migrations/0003_auto_20211118_0824.py | 30 +++++++++++++++++++ .../migrations/0004_auto_20211118_0826.py | 25 ++++++++++++++++ .../migrations/0005_auto_20211118_0827.py | 25 ++++++++++++++++ .../analytics/migrations/0006_view_home.py | 18 +++++++++++ TealCode/analytics/models.py | 12 +++++--- TealCode/analytics/views.py | 2 ++ TealCode/main/views.py | 19 +++++++++++- 10 files changed, 147 insertions(+), 7 deletions(-) create mode 100644 TealCode/analytics/migrations/0002_remove_view_category.py create mode 100644 TealCode/analytics/migrations/0003_auto_20211118_0824.py create mode 100644 TealCode/analytics/migrations/0004_auto_20211118_0826.py create mode 100644 TealCode/analytics/migrations/0005_auto_20211118_0827.py create mode 100644 TealCode/analytics/migrations/0006_view_home.py diff --git a/TealCode/TealCode/urls.py b/TealCode/TealCode/urls.py index 763fcdf..dd8007f 100644 --- a/TealCode/TealCode/urls.py +++ b/TealCode/TealCode/urls.py @@ -19,5 +19,5 @@ from django.urls import path, include urlpatterns = [ path('', include('main.urls')), path('analytics/', include('analytics.urls')), - path('admin/', admin.site.urls), + path('SDGFOLKJASDNVASDFASDFSLAKDF/', admin.site.urls), ] diff --git a/TealCode/analytics/admin.py b/TealCode/analytics/admin.py index 8c38f3f..4cd3091 100644 --- a/TealCode/analytics/admin.py +++ b/TealCode/analytics/admin.py @@ -1,3 +1,5 @@ from django.contrib import admin -# Register your models here. +from analytics.models import View + +admin.site.register(View) \ No newline at end of file diff --git a/TealCode/analytics/migrations/0002_remove_view_category.py b/TealCode/analytics/migrations/0002_remove_view_category.py new file mode 100644 index 0000000..10ec19e --- /dev/null +++ b/TealCode/analytics/migrations/0002_remove_view_category.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.9 on 2021-11-18 07:10 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('analytics', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='view', + name='category', + ), + ] diff --git a/TealCode/analytics/migrations/0003_auto_20211118_0824.py b/TealCode/analytics/migrations/0003_auto_20211118_0824.py new file mode 100644 index 0000000..f88bc81 --- /dev/null +++ b/TealCode/analytics/migrations/0003_auto_20211118_0824.py @@ -0,0 +1,30 @@ +# Generated by Django 3.2.9 on 2021-11-18 07:24 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0008_alter_topic_output'), + ('analytics', '0002_remove_view_category'), + ] + + operations = [ + migrations.AddField( + model_name='view', + name='admin', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='view', + name='category', + field=models.ForeignKey(blank=True, default=None, on_delete=django.db.models.deletion.CASCADE, to='main.category'), + ), + migrations.AlterField( + model_name='view', + name='topic', + field=models.ForeignKey(blank=True, default=None, on_delete=django.db.models.deletion.CASCADE, to='main.topic'), + ), + ] diff --git a/TealCode/analytics/migrations/0004_auto_20211118_0826.py b/TealCode/analytics/migrations/0004_auto_20211118_0826.py new file mode 100644 index 0000000..0671363 --- /dev/null +++ b/TealCode/analytics/migrations/0004_auto_20211118_0826.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.9 on 2021-11-18 07:26 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0008_alter_topic_output'), + ('analytics', '0003_auto_20211118_0824'), + ] + + operations = [ + migrations.AlterField( + model_name='view', + name='category', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.category'), + ), + migrations.AlterField( + model_name='view', + name='topic', + field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.topic'), + ), + ] diff --git a/TealCode/analytics/migrations/0005_auto_20211118_0827.py b/TealCode/analytics/migrations/0005_auto_20211118_0827.py new file mode 100644 index 0000000..26bdc97 --- /dev/null +++ b/TealCode/analytics/migrations/0005_auto_20211118_0827.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.9 on 2021-11-18 07:27 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0008_alter_topic_output'), + ('analytics', '0004_auto_20211118_0826'), + ] + + operations = [ + migrations.AlterField( + model_name='view', + name='category', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.category'), + ), + migrations.AlterField( + model_name='view', + name='topic', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='main.topic'), + ), + ] diff --git a/TealCode/analytics/migrations/0006_view_home.py b/TealCode/analytics/migrations/0006_view_home.py new file mode 100644 index 0000000..2032c71 --- /dev/null +++ b/TealCode/analytics/migrations/0006_view_home.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.9 on 2021-11-18 07:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('analytics', '0005_auto_20211118_0827'), + ] + + operations = [ + migrations.AddField( + model_name='view', + name='home', + field=models.BooleanField(default=False), + ), + ] diff --git a/TealCode/analytics/models.py b/TealCode/analytics/models.py index f3e9e93..fc47be0 100644 --- a/TealCode/analytics/models.py +++ b/TealCode/analytics/models.py @@ -1,13 +1,17 @@ from django.db import models -from django.db.models.deletion import CASCADE + from django.utils import timezone -from main.models import Category,Topic +from main.models import Topic, Category class View(models.Model): ip = models.CharField(max_length=200) date = models.DateTimeField(default=timezone.now) - topic = models.ForeignKey(Topic, on_delete=CASCADE) - category = models.ForeignKey(Category, on_delete=CASCADE) + topic = models.ForeignKey(Topic, on_delete=models.CASCADE, blank=True, null=True) + category = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True, null=True) + admin = models.BooleanField(default=False) + home = models.BooleanField(default=False) + + def __str__(self): return self.ip diff --git a/TealCode/analytics/views.py b/TealCode/analytics/views.py index 0dfc116..69c4b4b 100644 --- a/TealCode/analytics/views.py +++ b/TealCode/analytics/views.py @@ -1,4 +1,6 @@ from django.shortcuts import render +from django.contrib.auth.decorators import login_required +@login_required def index(req): return render(req, 'analytics/index.html') \ No newline at end of file diff --git a/TealCode/main/views.py b/TealCode/main/views.py index 95c1c03..5dda026 100644 --- a/TealCode/main/views.py +++ b/TealCode/main/views.py @@ -1,8 +1,10 @@ from django.shortcuts import render, redirect from .models import Category, Topic +from analytics.models import View def index(req): - + view = View(ip=get_client_ip(req), home=True) + view.save() categorys_obj = Category.objects.all() return render(req, "main/index.html", {'categorys': categorys_obj}) @@ -26,6 +28,9 @@ def topic(req, category, topic): 'output': topic_obj.output, } + + view = View(ip=get_client_ip(req), topic=topic_obj) + view.save() return render(req, "main/topic.html", context) return redirect("main-index") @@ -38,6 +43,10 @@ def category(req, category): category_obj = Category.objects.filter(title = category).first() if category_obj: topics_obj = Topic.objects.filter(category=category_obj) + + view = View(ip=get_client_ip(req), category=category_obj) + view.save() + return render(req, "main/category.html", {'category_obj': category_obj, 'topics': topics_obj}) @@ -55,3 +64,11 @@ def about(req): def privacy(req): return render(req, "main/privacy.html") + +def get_client_ip(req): + x_forwarded_for = req.META.get("HTTP_X_FORWARDED_FOR") + if x_forwarded_for: + ip = x_forwarded_for.split[","][0] + else: + ip = req.META.get("REMOTE_ADDR") + return ip \ No newline at end of file