From 746e797ac661532e6ab01b6633248698160d2968 Mon Sep 17 00:00:00 2001 From: "holger.trampe" Date: Wed, 7 Oct 2020 11:40:58 +0200 Subject: [PATCH] Bug Cronjob --- .../__pycache__/settings.cpython-38.pyc | Bin 4528 -> 4635 bytes digitaleagentur/settings.py | 12 +- recoverdir/forms.py | 19 +++ recoverdir/models.py | 6 + .../recoverdir/rd_areas/rd_area_5.html | 15 ++- .../rd_elements_forms/rd_mainlogin.html | 26 ++++ .../templates/recoverdir/rd_management.html | 6 +- recoverdir/templates/recoverdir/rd_rd.html | 8 +- .../templates/recoverdir/rd_settings.html | 21 +++ .../templates/recoverdir/rd_updates.html | 3 + .../templates/recoverdir/rd_viewsettings.html | 20 +++ recoverdir/urls.py | 7 + recoverdir/views.py | 123 +++++++++++++++++- requirements.txt | 1 + .../__pycache__/counter_tag.cpython-38.pyc | Bin 18729 -> 18731 bytes standards/templatetags/counter_tag.py | 2 +- users/admin.py | 5 +- users/models.py | 3 + users/signals.py | 2 + users/views.py | 18 ++- 20 files changed, 277 insertions(+), 20 deletions(-) create mode 100644 recoverdir/templates/recoverdir/rd_elements_forms/rd_mainlogin.html create mode 100644 recoverdir/templates/recoverdir/rd_settings.html create mode 100644 recoverdir/templates/recoverdir/rd_viewsettings.html diff --git a/digitaleagentur/__pycache__/settings.cpython-38.pyc b/digitaleagentur/__pycache__/settings.cpython-38.pyc index 48a02aa4b614fe29c855d16f111ce4706c21c22f..b97500910b50164a4512ffc60444c6e63c421d9e 100644 GIT binary patch delta 319 zcmdm>JX?h?l$V!_0SKP7)yChGoX97`cxT!W%mef-0L6uXaWNQi4t@GUkMPj}Cd;3)Rs z09R*EN1rIxaQ`5e;K}=Vt}&W!p31v{Q8Y?8z%e)&BpmPT?;GIb8sQldx!IMUmyyj7 fXm*j|&+XPPVF)_m7FE;MUb%I6!jOPY zLZVbtLZj4D!lKku!lN`&8M9ayuz^XPersonal, interne und externe Partner inkl. Funktionen usw.  Personal -Beim externen Aufrufen der Notfallhilfe werden alle aktuell angelegten Mitarbeiter inkl. Kontaktdaten angezeigt. Erstellen Sie daher hier Mitarbeiter, die nicht in der digitalen Agentur angelegt sind.
@@ -29,6 +28,17 @@ {% endfor %} + {% for us in users_of_agency %} + + + + + + + {% endfor %}
{{us.get_full_name}}{{us.profile.func|default:""}} + Intern + +

@@ -101,7 +111,8 @@ $(document).ready(function(){ "pageLength": 50, "buttons" : { "className" : "btn-danger" - } + }, + "order": [[ 1, "desc" ]] }); }); diff --git a/recoverdir/templates/recoverdir/rd_elements_forms/rd_mainlogin.html b/recoverdir/templates/recoverdir/rd_elements_forms/rd_mainlogin.html new file mode 100644 index 0000000..d1bac55 --- /dev/null +++ b/recoverdir/templates/recoverdir/rd_elements_forms/rd_mainlogin.html @@ -0,0 +1,26 @@ +{% extends "users/base.html" %} +{% load counter_tag %} +{% load crispy_forms_tags %} +{% block content %} +{% if request.user.profile.agency.module_recoverdir %} +
+

Notfallhilfe{% if request.user.profile.showtooltips %} {% endif %} + +

+
+
+ Bitte melden Sie sich mit dem Passwort für die Notfallhilfe an! +
+ {% csrf_token %} + {{form.media}} + {{form|crispy}} +
+   +
+
+
+ +{% else %} +Sie haben keinen Zugriff auf das Modul Notfallhilfe. Bitte wenden Sie sich an den Support! +{% endif %} +{% endblock content %} diff --git a/recoverdir/templates/recoverdir/rd_management.html b/recoverdir/templates/recoverdir/rd_management.html index 6bdcfa4..98e60c9 100644 --- a/recoverdir/templates/recoverdir/rd_management.html +++ b/recoverdir/templates/recoverdir/rd_management.html @@ -5,6 +5,7 @@

Notfallhilfe{% if request.user.profile.showtooltips %} {% endif %} +


@@ -63,7 +64,10 @@
- Einstellungen +
Einstellungen{% if request.user.profile.showtooltips %} {% endif %}
+ {% block settings_content %} + {% include "recoverdir/rd_viewsettings.html" %} + {% endblock %}
diff --git a/recoverdir/templates/recoverdir/rd_rd.html b/recoverdir/templates/recoverdir/rd_rd.html index c4259a4..9dc0398 100644 --- a/recoverdir/templates/recoverdir/rd_rd.html +++ b/recoverdir/templates/recoverdir/rd_rd.html @@ -125,7 +125,7 @@

#5

@@ -147,7 +147,7 @@

#6

@@ -169,7 +169,7 @@

#7

@@ -191,7 +191,7 @@

#8

diff --git a/recoverdir/templates/recoverdir/rd_settings.html b/recoverdir/templates/recoverdir/rd_settings.html new file mode 100644 index 0000000..6762b31 --- /dev/null +++ b/recoverdir/templates/recoverdir/rd_settings.html @@ -0,0 +1,21 @@ +{% extends "users/base.html" %} +{% load crispy_forms_tags %} +{% block content %} +{% if request.user.profile.agency.module_recoverdir %} +
+

Einstellungen verwalten

+
+
+ Beachten Sie bitte, dass dieses Passwort allen Personen sicher zugänglich gemacht werden muss, die auf die Notfallhilfe zugreifen können! Zusätzlich benötigen diese Personen den Sicherheitssschlüssel. Dieser wird automatisch generiert und kann nicht geändert werden. Sie finden den Sicherheitsschlüssel unter Notfallhilfe, Einstellungen. + {% csrf_token %} + {{normalForm.media}} + {{ form|crispy }} +
+ Abbrechen +   +
+
+{% else %} +

Das Modul Notfallhilfe wurden in ihrer Agentur deaktiviert.

+{% endif %} +{% endblock content %} diff --git a/recoverdir/templates/recoverdir/rd_updates.html b/recoverdir/templates/recoverdir/rd_updates.html index 6663774..ca5d678 100644 --- a/recoverdir/templates/recoverdir/rd_updates.html +++ b/recoverdir/templates/recoverdir/rd_updates.html @@ -61,6 +61,9 @@ {% elif hisotryelementinfo.1 == 11 %} {{hisotryelementinfo.0}} + {% elif hisotryelementinfo.1 == 20 %} + {{hisotryelementinfo.0}} + {% endif %} {{rdele.history_date|date:"d.m.Y H:i"}} diff --git a/recoverdir/templates/recoverdir/rd_viewsettings.html b/recoverdir/templates/recoverdir/rd_viewsettings.html new file mode 100644 index 0000000..2d6897b --- /dev/null +++ b/recoverdir/templates/recoverdir/rd_viewsettings.html @@ -0,0 +1,20 @@ +
+ + + + + + + + + +
Sicherheitsschlüssel (nicht veränderbar):{{rd_settings.recoverkey}}
Passwort für die Notfallhilfe:*************** +   +   +
+ \ No newline at end of file diff --git a/recoverdir/urls.py b/recoverdir/urls.py index 3cfe267..e447d1a 100644 --- a/recoverdir/urls.py +++ b/recoverdir/urls.py @@ -12,6 +12,13 @@ Permissions definiert in models.py bei USERS und dann hier vor die View geschrie urlpatterns = [ path('', permission_required('users.recoverdirmanager')(RecoverDirManagement.as_view(template_name="recoverdir/rd_management.html")), name='recoverdir'), + + # SETTINGS + path('rdsettings/', permission_required('users.recoverdirmanager')(RecoverDirAddSettings.as_view()), name='recoverdir-addsettings'), + path('rdsettings/update/', permission_required('users.recoverdirmanager')(RecoverDirUpdateSettings.as_view()), name='recoverdir-updatesettings'), + path('rdlogin/', permission_required('users.recoverdirmanager')(RecoverDirLog.as_view()), name='recoverdir-login'), + path('close/', permission_required('users.recoverdirmanager')(CloseRecoverDir), name='closerecoverdir'), + # Persönliches Schreiben path('addpl/', permission_required('users.recoverdirmanager')(RecoverDirAddPL.as_view(template_name="recoverdir/rd_pers_add.html")), name='recoverdir-addpl'), path('updatepl/', permission_required('users.recoverdirmanager')(RecoverDirUpdatePL.as_view(template_name="recoverdir/rd_pers_update.html")), name='recoverdir-updatepl'), diff --git a/recoverdir/views.py b/recoverdir/views.py index 55aff0d..f8a8dfe 100644 --- a/recoverdir/views.py +++ b/recoverdir/views.py @@ -1,9 +1,11 @@ from django.shortcuts import render from django.contrib.auth.mixins import LoginRequiredMixin -from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView +from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView, FormView from .models import * from .forms import * from django.urls import reverse_lazy +from django.shortcuts import redirect +from django.contrib import messages from django.contrib.auth.decorators import login_required import os import sys @@ -12,11 +14,27 @@ from django.http import JsonResponse, HttpResponse, Http404 from django_encrypted_filefield.views import FetchView import string, random from itertools import chain +from django.contrib.auth.password_validation import * +from datetime import datetime +from django.contrib.auth.models import User # Create your views here. class RecoverDirManagement(LoginRequiredMixin, ListView): model = PersLetter + # First Method! + def dispatch(self, request, *args, **kwargs): + # Check, if initial config exist and user has rights + if(len(RecoverDirSetting.objects.filter(agency=self.request.user.profile.agency)) == 0 and self.request.user.has_perm('users.recoverdirmanager')): + # Settings not found + return redirect('recoverdir-addsettings') + # TASK: Hier noch einstellen, dass der Nutzer weniger als 30 Minuten nicht inaktiv war! + elif(self.request.user.profile.rd_login == None and self.request.user.has_perm('users.recoverdirmanager')): + return redirect('recoverdir-login') + else: + return super(RecoverDirManagement, self).get(request) + + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context.update({'active_link' : 'recoverdir'}) @@ -60,7 +78,9 @@ class RecoverDirManagement(LoginRequiredMixin, ListView): finalupdatelist = chain(persletters, handlungsleitfaden, contactfc, contactstrust, handlungsleitfadenvf, depistvollmacht, ergodigi, onlinebank, streamingabo, digitalaccount, personal, onlinebank6, elseele) context.update({"history" : finalupdatelist}) - + + users_of_agency = User.objects.filter(profile__agency=self.request.user.profile.agency) + context.update({"users_of_agency" : users_of_agency}) # DOCUMENTS NOT WORKING Weil das "alte" nicht gespeichert wird sondern lediglich der Datensatz #documents = Documents.objects.filter(agency=self.request.user.profile.agency, area=1) @@ -117,8 +137,93 @@ class RecoverDirManagement(LoginRequiredMixin, ListView): # A9 context.update({'area_9_doc' : Documents.objects.filter(agency=self.request.user.profile.agency, area=9).order_by('-document_date')}) + + # Load Settings + context.update({'rd_settings' : RecoverDirSetting.objects.filter(agency=self.request.user.profile.agency)[0]}) + return context +def CloseRecoverDir(request): + request.user.profile.rd_login = None + request.user.profile.save() + return redirect('recoverdir') + + + +class RecoverDirLog(FormView): + template_name = "recoverdir/rd_elements_forms/rd_mainlogin.html" + form_class = LoginRDForm + success_url = reverse_lazy('recoverdir') + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context.update({ + 'active_link' : 'recoverdir', + 'form' : LoginRDForm() + }) + return context + + def form_valid(self, form): + # Load Settings-Data + settings = RecoverDirSetting.objects.filter(agency=self.request.user.profile.agency)[0] + + if form.cleaned_data.get("pass") == settings.logpass and self.request.user.has_perm("users.recoverdirmanager") and settings.agency == self.request.user.profile.agency: + self.request.user.profile.rd_login = datetime.now() + self.request.user.profile.save() + else: + messages.warning(self.request, f'Passwort nicht korrekt!') + return super().form_valid(form) + +class RecoverDirAddSettings(CreateView): + model = RecoverDirSetting + success_url = reverse_lazy('recoverdir') + form_class = RecoverDirSettingForm + template_name = "recoverdir/rd_settings.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context.update({ + 'active_link' : 'recoverdir', + }) + return context + + def form_valid(self, form): + form.instance.agency = self.request.user.profile.agency + # Initial Recover-Key + if(len(RecoverDirSetting.objects.filter(agency=self.request.user.profile.agency)) == 0 and self.request.user.has_perm('users.recoverdirmanager')): + form.instance.recoverkey = randomStringRecoverKey() + + if(form.cleaned_data.get('logpass') == form.cleaned_data.get('logpass_check')): + messages.warning(self.request, f'Daten gespeichert!') + else: + messages.warning(self.request, f'Die Passwörter stimmen nicht überein. Bitte neu eingeben!') + return redirect('recoverdir-addsettings') + + return super().form_valid(form) + +class RecoverDirUpdateSettings(UpdateView): + model = RecoverDirSetting + success_url = reverse_lazy('recoverdir') + form_class = RecoverDirSettingForm + template_name = "recoverdir/rd_settings.html" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context.update({ + 'active_link' : 'recoverdir', + }) + return context + + def form_valid(self, form): + # Initial Recover-Key + if(form.cleaned_data.get('logpass') == form.cleaned_data.get('logpass_check')): + messages.warning(self.request, f'Daten gespeichert!') + else: + messages.warning(self.request, f'Die Passwörter stimmen nicht überein. Bitte neu eingeben!') + return redirect('recoverdir-addsettings') + return super().form_valid(form) + + class RecoverDirAddPL(CreateView): model = PersLetter success_url = reverse_lazy('recoverdir') @@ -160,6 +265,18 @@ def randomString(stringLength=40): letters = string.ascii_lowercase return ''.join(random.choice(letters) for i in range(stringLength)) +def randomStringRecoverKey(): + letters = string.ascii_uppercase + + key = "" + + for run in range(10): + key += ''.join(random.choice(letters) for i in range(5)) + if(run < 9): + key += "-" + + return key + # Notfallhilfe ELEMENTE # ABNSCHNITT 1 @@ -1070,7 +1187,7 @@ class ElseSingleHistory(DetailView): shown_element = he context.update({ - 'ele' : shown_element, + 'else' : shown_element, 'history' : True }) return context diff --git a/requirements.txt b/requirements.txt index 810c5d6..359d481 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,3 +31,4 @@ python-dateutil==2.8.1 django-simple-history==2.11.0 django-encrypted-filefield==0.2.2 more-itertools==8.5.0 +django-passwords==0.3.12 \ No newline at end of file diff --git a/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc b/standards/templatetags/__pycache__/counter_tag.cpython-38.pyc index b625b13bed8b90935c8190983cab83a4512bf7af..ff7ff43f5fb444bdbffbc6ffc91047c9f55bf396 100644 GIT binary patch delta 62 zcmZ2EiE;HLM&3|fUM>b8P_3b8xVOJ1o@XO(u?tTWpGRhKNq$jga$?TpK9{SE8k