Browse Source

aggiornamento cambio password utente

mauro 11 tháng trước cách đây
mục cha
commit
1ea8c3bf44

+ 3 - 0
amministratore/admin.py

@@ -1,3 +1,6 @@
 from django.contrib import admin
 
 # Register your models here.
+class AmministratoreAdmin(admin.ModelAdmin):
+  list_display = ['login','nome','pin','sola_lettura','crea_azienda','crea_sede','crea_utente','crea_documento',]
+

+ 1 - 0
amministratore/fixtures/amministratore.json

@@ -0,0 +1 @@
+[{"model": "amministratore.amministratore", "pk": 1, "fields": {"login": "mauro", "nome": "Mauro Morichi", "mail": "mauro@966.it", "pin": "Abcd.1234", "uuid": "", "sola_lettura": false, "crea_azienda": true, "crea_sede": true, "crea_utente": true, "crea_documento": true}}, {"model": "amministratore.amministratore", "pk": 2, "fields": {"login": "gabriella", "nome": "Gabriella Angelillo", "mail": "g.angelillo@box3srl.it", "pin": "", "uuid": "", "sola_lettura": false, "crea_azienda": true, "crea_sede": true, "crea_utente": true, "crea_documento": true}}]

+ 18 - 0
amministratore/migrations/0002_amministratore_uuid.py

@@ -0,0 +1,18 @@
+# Generated by Django 5.1.4 on 2024-12-17 11:10
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('amministratore', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='amministratore',
+            name='uuid',
+            field=models.CharField(default='', max_length=32),
+        ),
+    ]

+ 1 - 0
amministratore/models.py

@@ -6,6 +6,7 @@ class Amministratore(models.Model):
     nome = models.CharField(max_length=128,null=False,unique=True)
     mail = models.CharField(max_length=128,null=False,default="")
     pin = models.CharField(max_length=64,null=False)
+    uuid = models.CharField(max_length=32,null=False,default="")
     sola_lettura = models.BooleanField(default=False)
     crea_azienda = models.BooleanField(default=True)
     crea_sede = models.BooleanField(default=True)

+ 1 - 1
azienda/fixtures/AssegnazioneAzienda.json

@@ -1 +1 @@
-[{"model": "azienda.assegnazioneazienda", "pk": 4, "fields": {"azienda": 1, "amministratore": 1}}, {"model": "azienda.assegnazioneazienda", "pk": 5, "fields": {"azienda": 1, "amministratore": 2}}, {"model": "azienda.assegnazioneazienda", "pk": 6, "fields": {"azienda": 2, "amministratore": 1}}]
+[{"model": "azienda.assegnazioneazienda", "pk": 4, "fields": {"azienda": 1, "amministratore": 1}}, {"model": "azienda.assegnazioneazienda", "pk": 5, "fields": {"azienda": 1, "amministratore": 2}}, {"model": "azienda.assegnazioneazienda", "pk": 6, "fields": {"azienda": 2, "amministratore": 1}}, {"model": "azienda.assegnazioneazienda", "pk": 7, "fields": {"azienda": 2, "amministratore": 1}}, {"model": "azienda.assegnazioneazienda", "pk": 8, "fields": {"azienda": 2, "amministratore": 1}}, {"model": "azienda.assegnazioneazienda", "pk": 9, "fields": {"azienda": 1, "amministratore": 1}}]

+ 1 - 1
azienda/fixtures/AssegnazioneSede.json

@@ -1 +1 @@
-[{"model": "azienda.assegnazioneazienda", "pk": 4, "fields": {"azienda": 1, "amministratore": 1}}, {"model": "azienda.assegnazioneazienda", "pk": 5, "fields": {"azienda": 1, "amministratore": 2}}, {"model": "azienda.assegnazioneazienda", "pk": 6, "fields": {"azienda": 2, "amministratore": 1}}]
+[{"model": "azienda.assegnazionesede", "pk": 1, "fields": {"sede": 1, "azienda": null, "amministratore": 1}}, {"model": "azienda.assegnazionesede", "pk": 2, "fields": {"sede": 1, "azienda": null, "amministratore": 2}}, {"model": "azienda.assegnazionesede", "pk": 3, "fields": {"sede": 4, "azienda": null, "amministratore": 1}}]

+ 1 - 0
azienda/fixtures/Azienda.json

@@ -0,0 +1 @@
+[{"model": "azienda.azienda", "pk": 1, "fields": {"nome": "Box3 Srl", "partitaiva": "12345678901", "mail": "amministrazione@box3srl.it", "comm": "portale@marchioitalia.it", "cambiopassword": true}}, {"model": "azienda.azienda", "pk": 2, "fields": {"nome": "AleLillo", "partitaiva": "10987654321", "mail": "", "comm": "", "cambiopassword": false}}]

+ 1 - 0
azienda/fixtures/Sede.json

@@ -0,0 +1 @@
+[{"model": "azienda.sede", "pk": 1, "fields": {"nome": "Pomezia", "info": "Sede Principale", "azienda": 1, "cambiopassword": true}}, {"model": "azienda.sede", "pk": 4, "fields": {"nome": "Casa", "info": ".", "azienda": 2, "cambiopassword": false}}]

+ 1 - 1
comunicazione/fixtures/comunicazione.json

@@ -1 +1 @@
-[{"model": "comunicazione.comunicazione", "pk": 1, "fields": {"mittente": "amministrazione@box3srl.it", "soggetto": "login Amministratore {{ user.username }} {{ ora_data }}", "corpo": "L'utente amministratore ha effettuato i login.\r\nutente: {{ user.username }}\r\nora/data: {{ ora_data }}", "azienda": 1}}, {"model": "comunicazione.comunicazione", "pk": 2, "fields": {"mittente": "amministrazione@box3srl.it", "soggetto": "login utente {{ user.nome }} {{ ora_data }}", "corpo": "L'utente amministratore ha effettuato i login.\r\nutente: {{ user.nome }}\r\nora/data: {{ ora_data }}", "azienda": 1}}, {"model": "comunicazione.comunicazione", "pk": 3, "fields": {"mittente": "amministrazione@box3srl.it", "soggetto": "Il dipendente {{ utente.nome }}/{{ azienda.nome }} ha scaricato {{ documento.documento }}", "corpo": "In data {{ ora_data }},\r\nil dipendente {{ utente.nome }} \r\ndell'azienda {{ azienda.nome }]\r\nha scaricato {{ documento.documento }}", "azienda": 1}}]
+[{"model": "comunicazione.comunicazione", "pk": 1, "fields": {"mittente": "amministrazione@box3srl.it", "soggetto": "login Amministratore {{ utente.nome }} {{ ora_data }}", "corpo": "L'utente amministratore ha effettuato login.\r\nutente: {{ utente.nome }}\r\nora/data: {{ ora_data }}", "azienda": 1}}, {"model": "comunicazione.comunicazione", "pk": 2, "fields": {"mittente": "amministrazione@box3srl.it", "soggetto": "login utente {{ utente.nome }} {{ ora_data }}", "corpo": "L'utente amministratore ha effettuato i login.\r\nutente: {{ utente.nome }}\r\nora/data: {{ ora_data }}", "azienda": 1}}, {"model": "comunicazione.comunicazione", "pk": 3, "fields": {"mittente": "amministrazione@box3srl.it", "soggetto": "Il dipendente {{ utente.nome }}/{{ azienda.nome }} ha scaricato {{ documento.documento }}", "corpo": "In data {{ ora_data }},\r\nil dipendente {{ utente.nome }} \r\ndell'azienda {{ azienda.nome }}\r\nha scaricato {{ documento.documento }}", "azienda": 1}}, {"model": "comunicazione.comunicazione", "pk": 4, "fields": {"mittente": "amministrazione@box3srl.it", "soggetto": "Richiesta Cambio Password", "corpo": "E' stata richiesto il cambio della password personale.Se hai richiesto Tu l'aggiornamento, clicca sul seguente link {{ utente.sito }}{{ utente.link }}  e segui le istruzioni.Se NON sei stato Tu a fare questa richiesta, ignora e cancella questa mail.", "azienda": 1}}, {"model": "comunicazione.comunicazione", "pk": 5, "fields": {"mittente": "amministrazione@box3srl.it", "soggetto": "Aggiornamento Password", "corpo": "L'account {{ utente.nome}} Ha aggiornato la propria password in data odierna {{ ora_data }}.", "azienda": 1}}]

+ 9 - 2
comunicazione/views.py

@@ -18,11 +18,14 @@ from django.shortcuts import render
 from .models import *
 from .forms import *
 import datetime
-
+import sys
 
 from config.views import *
 from azienda.views import *
-from utente.views import *
+
+# se serve aiuta a capire quali sono i moduli caricati, ma meglio
+# disattivarlo che sono una cifra lunghissima
+#print(sys.modules)
 
 def template_from_string(template_string, using=None):
 
@@ -162,6 +165,10 @@ class ServizioMail:
       except ConnectionRefusedError as cre:
         print('impossibile inviare mail',cre)
 
+####################
+# modulo comunicazioni
+####################
+
 def welcome(request):
   '''
   punto di ingresso.

+ 1 - 1
config/fixtures/config.json

@@ -1 +1 @@
-[{"model": "config.config", "pk": 1, "fields": {"indice": "HeaderTitle", "valore": "Gestione Distribuzione Documenti Dipendenti", "nota": null}}, {"model": "config.config", "pk": 2, "fields": {"indice": "DocPath", "valore": "static/upload", "nota": null}}, {"model": "config.config", "pk": 3, "fields": {"indice": "DocEol", "valore": "60", "nota": null}}, {"model": "config.config", "pk": 4, "fields": {"indice": "DocPathIndex", "valore": "Index", "nota": null}}, {"model": "config.config", "pk": 5, "fields": {"indice": "DefaultEmail", "valore": "portale@gestionedocumenti.lan", "nota": "mail di default per le comunicazioni"}}]
+[{"model": "config.config", "pk": 1, "fields": {"indice": "HeaderTitle", "valore": "Gestione Distribuzione Documenti Dipendenti", "nota": null}}, {"model": "config.config", "pk": 2, "fields": {"indice": "DocPath", "valore": "static/upload", "nota": null}}, {"model": "config.config", "pk": 3, "fields": {"indice": "DocEol", "valore": "60", "nota": null}}, {"model": "config.config", "pk": 4, "fields": {"indice": "DocPathIndex", "valore": "Index", "nota": null}}, {"model": "config.config", "pk": 5, "fields": {"indice": "DefaultEmail", "valore": "portale@gestionedocumenti.lan", "nota": "mail di default per le comunicazioni"}}, {"model": "config.config", "pk": 6, "fields": {"indice": "DefaultSite", "valore": "https://marchioitalia.it/gd", "nota": "sito di riferimento da anteporre a linke e a configurazioni inviate per mail"}}, {"model": "config.config", "pk": 7, "fields": {"indice": "PasswordMin", "valore": "6", "nota": "Lunghezza minima password"}}]

BIN
db/db.sqlite3


+ 46 - 32
login/views.py

@@ -30,6 +30,8 @@ def start(request):
     result = LoginUser(request.POST)
 
     if result.is_valid():
+      print('result is valid')
+
       accesso = result.cleaned_data['cfisc']
       pin = result.cleaned_data['passs']
 
@@ -39,8 +41,8 @@ def start(request):
         # verifica che esista un utente ordinario
         u = Utente.objects.get(codicefiscale=accesso.upper())
       except  Utente.DoesNotExist as dne:
-        print("non ci provare")
-        u = None
+        print("utente inesistente a livello dipendente")
+
       if u: #utente esiste
         if u.pin.strip()== pin:
           # password valida
@@ -77,8 +79,10 @@ def start(request):
           ### obbligo cambio password
           ### se è previsto che l'utente a livello di sede cambi la password
           ### al primo ingresso, qui vengono effettuati entrambi i check
-          if u.sede.cambiopassword and u.primologin:
-            print("l'utente deve cambiare obbligatoriamente la password")
+         
+          if u.sede:
+            if u.sede.cambiopassword and u.primologin:
+              print("l'utente deve cambiare obbligatoriamente la password")
 
           return HttpResponseRedirect(reverse("utente:download"))
       else: # l'utente ordinario non esiste
@@ -86,41 +90,45 @@ def start(request):
         
         a = None
         try:
-          print(dir(Amministratore))
           a = Amministratore.objects.get(login=accesso.strip())
           if a:
-            print('login trovato',a)
+            print('login trovato',a.nome)
         except Amministratore.DoesNotExist as dne:
           print('amministratore non trovato',dne)
-          a = None
+
         if a:
-          request.session['AdminId'] = a.id
-          setLog(1,amministratore=a)
+          print(a.id,a.login,a.pin,pin)
+          if a.pin.strip()== pin:
+            request.session['AdminId'] = a.id
+            setLog(1,amministratore=a)
 
-          ### comunicazioni ###
-          sm = ServizioMail(debug=True)
-          comunicazione = None
-          try:
-            comunicazione = Comunicazione.objects.get(pk=1)
-          except Comunicazione.DoesNotExist as dne:
-            print("Record comunicazione inesistente",dne)
-          if comunicazione: 
-            sm.set_mailfrom=comunicazione.mittente
-            sm.add_to(a.mail)
-
-            sm.set_soggetto(comunicazione.soggetto)
-            sm.set_corpo(comunicazione.corpo)
-
-            sm_data = dict()
-            utente=dict() #adattamento campo utente
-            utente['nome'] = a.nome
-            utente['mail'] = a.mail
-            sm_data['utente'] = a
-            sm.set_data(sm_data)
-            sm.send()
-          ### comunicazioni ###
+            ### comunicazioni ###
+            sm = ServizioMail(debug=True)
+            comunicazione = None
+            try:
+              comunicazione = Comunicazione.objects.get(pk=1)
+            except Comunicazione.DoesNotExist as dne:
+              print("Record comunicazione inesistente",dne)
+            if comunicazione: 
+              sm.set_mailfrom=comunicazione.mittente
+              sm.add_to(a.mail)
 
-          return HttpResponseRedirect(reverse("azienda:welcome"))
+              sm.set_soggetto(comunicazione.soggetto)
+              sm.set_corpo(comunicazione.corpo)
+
+              sm_data = dict()
+              utente=dict() #adattamento campo utente
+              utente['nome'] = a.nome
+              utente['mail'] = a.mail
+              sm_data['utente'] = a
+              sm.set_data(sm_data)
+              sm.send()
+            ### comunicazioni ###
+
+            return HttpResponseRedirect(reverse("azienda:welcome"))
+        else:
+          print('Errore: amministratore non valido')
+          return HttpResponseRedirect(reverse("login:start"))
   else:
     temp={}
     temp['cfisc'] = ''
@@ -166,6 +174,7 @@ def RichiestaAggiornamentoPassword(request):
           print('informazione non trovata tra le email')
           try:
             a = Amministratore.objects.get(login=informazione.lower())
+            d = 'a'
           except Amministratore.DoesNotExist as dne:
             print('informazione non trovata tra i login amministratotore')
 
@@ -179,6 +188,7 @@ def RichiestaAggiornamentoPassword(request):
         comunicazione = Comunicazione.objects.get(pk=4)
       except Comunicazione.DoesNotExist as dne:
         print("Record comunicazione inesistente",dne)
+
       if comunicazione: 
         sm.set_mailfrom=comunicazione.mittente
         sm.add_to(a.mail)
@@ -200,6 +210,10 @@ def RichiestaAggiornamentoPassword(request):
         sm.send()
         ### comunicazioni ###
 
+        ### salva uuid
+        a.uuid = uuidres
+        a.save()
+
       return render(request,'updatePasswordEnd.html',{})
     else:
       data['informazione'] = PasswordUpdate(request.POST)

+ 3 - 3
utente/admin.py

@@ -2,7 +2,7 @@ from django.contrib import admin
 from .models import *
 from amministratore.models import *
 
-@admin.register(Amministratore)
-class AmministratoreAdmin(admin.ModelAdmin):
-  list_display = ['login','nome','pin','sola_lettura','crea_azienda','crea_sede','crea_utente','crea_documento',]
+@admin.register(Utente)
+class Utentedmin(admin.ModelAdmin):
+  list_display = ['codicefiscale','nome','pin','uuid','mail']
 

+ 50 - 1
utente/forms.py

@@ -1,4 +1,7 @@
 from django import  forms
+from config.views import getConfig
+from utente.models import Utente
+from amministratore.models import Amministratore
 
 class formUtente(forms.Form):
   def __init__(self,*args,**kwargs):
@@ -20,7 +23,7 @@ class formPinMail(forms.Form):
 class formUpdatePassword(forms.Form):
   def __init__(self,*args,**kwargs):
     forms.Form.__init__(self,*args,**kwargs)
-    self.fields['login'] = forms.CharField(required=True)
+    self.fields['cfisc'] = forms.CharField(required=True)
     self.fields['uuid'] = forms.CharField(required=True)
     self.fields['pin0'] = forms.CharField(required=True)
     self.fields['pin1'] = forms.CharField(required=True)
@@ -34,3 +37,49 @@ class formUpdatePasswordLogin(forms.Form):
     self.fields['pin1'] = forms.CharField(required=True)
     self.fields['pin2'] = forms.CharField(required=True)
 
+  def clean_pin1(self):
+
+    print(dir(self))
+    # validazione password
+    if self.data['pin1'] != self.data['pin2']:
+      # password non corrispondente
+      raise forms.ValidationError("Le due password devono essere uguali")
+
+    if self.data['pin1'] == self.data['cfisc']:
+      # nome uguale a login
+      raise forms.ValidationError("La password non puo' essere uguale al login")
+  
+    if len(self.data['pin1']) < int(getConfig('PasswordMin')):
+      # lunghezza minima della password
+      raise forms.ValidationError("Password troppo corta")
+
+    return self.data['pin1']
+
+  def clean_uuid(self):
+      a = None
+      d = None
+      login = self.data['cfisc']
+      # 1 tentativo su codice fiscale
+      try: 
+        a = Utente.objects.get(codicefiscale=login.upper())
+        d = 'u'
+      except Utente.DoesNotExist as dne:
+        print('informazione non trovata tra i codici fiscali utente')
+        try:
+          a = Utente.objects.get(mail=login.lower())
+          d = 'u'
+        except Utente.DoesNotExist as dne:
+          print('informazione non trovata tra le email')
+          try:
+            a = Amministratore.objects.get(login=login.lower())
+            d = 'a'
+          except Amministratore.DoesNotExist as dne:
+            print('informazione non trovata tra i login amministratotore')
+
+      if not a:
+        raise forms.ValidationError("UUID Non Validato")
+      else:
+         if a.uuid == self.data['uuid']:
+           return self.data['uuid']
+
+      raise forms.ValidationError("UUID non valido o scaduto")

+ 2 - 2
utente/templates/utente.edit.password.login.html

@@ -27,11 +27,11 @@
      <input type='text'  class='form-control' id='uuid' name='uuid' value="{{ informazione.uuid.value }}" readonly>
     </div>
     <div class='form-outline mb-3'>
-     <label class='form-label' for='uuid'>password/pin</label>
+     <label class='form-label' for='pin1'>password/pin</label>
      <input type='password'  class='form-control' id='pin1' name='pin1' value="{{ informazione.pin1.value }}">
     </div>
     <div class='form-outline mb-3'>
-     <label class='form-label' for='uuid'>ripeti password/pin</label>
+     <label class='form-label' for='pin2'>ripeti password/pin</label>
      <input type='password'  class='form-control' id='pin2' name='pin2' value="{{ informazione.pin2.value }}">
     </div>
 

+ 42 - 8
utente/views.py

@@ -8,6 +8,8 @@ from documento.forms import *
 
 from documento.managefile import *
 from att.views import *
+from comunicazione.views import ServizioMail
+
 from random import randint
 from config.views import *
 import re
@@ -262,12 +264,13 @@ def updatePasswordFromLogin(request,uuid):
   print('uuid',uuid)
 
   if request.method == 'POST':
+    print(request.POST)
     formupdatepasswordlogin = formUpdatePasswordLogin(request.POST)
     if formupdatepasswordlogin.is_valid():
       cfisc = formupdatepasswordlogin.cleaned_data.get('cfisc')
-      pin0 = formupdatepasswordlogin.cleaned_data.get('pin0')
       pin1 = formupdatepasswordlogin.cleaned_data.get('pin1')
-      print(cfisc,pin0,pin1)
+      pin2 = formupdatepasswordlogin.cleaned_data.get('pin2')
+      print('stato',cfisc,pin1,pin2)
 
       a = None
       d = None
@@ -284,22 +287,53 @@ def updatePasswordFromLogin(request,uuid):
           print('informazione non trovata tra le email')
           try:
             a = Amministratore.objects.get(login=cfisc.lower())
+            d = 'a'
           except Amministratore.DoesNotExist as dne:
             print('informazione non trovata tra i login amministratotore')
-      if a:
-        print(a)
-      if d:
-        print(d)
+
+      print('record',a.id,a.nome,a.uuid,d)
+      if d == 'u':
+        print('utente',a.codicefiscale)
+      if d == 'a':
+        print('amministratore',a.login)
+
+      a.pin = pin1
+      a.uuid = ""
+      a.save()
+
+      ### comunicazioni ###
+      if len(a.mail) > 0:
+        comunicazione = None
+        try:
+          comunicazione = Comunicazione.objects.get(pk=5)
+        except Comunicazione.DoesNotExist as dne:
+          print('comunicazione non valida',dne)
+        if comunicazione:
+          sm = ServizioMail(debug=True)
+          sm.set_mailfrom=comunicazione.mittente
+          sm.add_to(a.mail)
+
+          sm.set_soggetto(comunicazione.soggetto)
+          sm.set_corpo(comunicazione.corpo)
+
+          sm_data = dict()
+          sm_data['utente'] = a
+          sm.set_data(sm_data)
+          sm.send()
+      ### comunicazioni ###
+
+      return HttpResponseRedirect(reverse("login:start"))
     else:
       print('form not valid')
       data['informazione'] = formUpdatePasswordLogin(request.POST)
   else:
     print('request non valida', request.POST)
     tmp = dict()
+    tmp['cfisc'] = ""
     tmp['uuid'] = uuid
-    tmp['pin0'] = ""
     tmp['pin1'] = ""
-    tmp['cfisc'] = ""
+    tmp['pin2'] = ""
     data['informazione'] = formUpdatePasswordLogin(tmp)
     print(data)
+
   return render(request,'utente.edit.password.login.html',data)