| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 |
- from django.shortcuts import render
- from django.http import HttpResponse,HttpResponseRedirect,FileResponse
- from django.urls import reverse
- import django
- from .forms import *
- from config.views import getConfig
- from comunicazione.views import ServizioMail
- from att.views import *
- import uuid
- from utente.models import *
- from amministratore.models import *
- def start(request):
- '''
- da qui si comincia
- l'utente e' invitato a inserire il suo codice fiscale e la password/pin assegnata in fase di visita medica
- se i dati corrispondono, si forniscono i file e alcune info di servizio
- '''
- request.session.flush()
- request.session.set_expiry(3600)
- data = dict()
- data['HeaderTitle'] = getConfig('HeaderTitle')
- real = ""
- if request.method=="POST":
- result = LoginUser(request.POST)
- if result.is_valid():
- print('result is valid')
- accesso = result.cleaned_data['cfisc']
- pin = result.cleaned_data['passs']
- print('dati di login',accesso,pin,accesso.upper())
- #verifica corrispondenza utente
- u = None
- try:
- # verifica che esista un utente ordinario
- u = Utente.objects.get(codicefiscale=accesso.upper())
- except Utente.DoesNotExist as dne:
- print("utente inesistente a livello dipendente")
- if u: #utente esiste
- real = u.nome
- ### obbligo cambio password
- ### se è previsto che l'utente a livello di sede cambi la password
- ### al primo ingresso, qui vengono effettuati entrambi i check
-
- # se l'utente non e' associato a una sede torna errore... quindi meglio che la sede ci sia
- if u.sede:
- print('sede',u.sede.nome)
- print('stato possibilita cambio password',u.sede.cambiopassword)
- print('stato forzatura cambio password',u.sede.forzanuovapassword)
- if u.forzanuovapassword:
- print("l'utente deve cambiare obbligatoriamente la password")
- # la sede e' impostata per forza il cambio password al primo login e l'utente e' al primo login
- # forzatura cambio password
- data = dict()
- data['HeaderTitle'] = getConfig('HeaderTitle')
- data['utente'] = u
- uuidres = str(uuid.uuid4())
- print('uuid',uuidres)
- ### comunicazioni ###
- sm = ServizioMail(debug=True)
- comunicazione = None
- try:
- comunicazione = Comunicazione.objects.get(pk=6)
- print('comunicazione',comunicazione.id)
- except Comunicazione.DoesNotExist as dne:
- print("Record comunicazione inesistente",dne)
- if comunicazione:
- sm.set_mailfrom=comunicazione.mittente
- sm.add_to(u.mail)
- sm.set_soggetto(comunicazione.soggetto)
- sm.set_corpo(comunicazione.corpo)
- sm_data = dict()
- utente=dict() #adattamento campo utente
- print(reverse('login:ResetPassword',args=[uuidres]))
- utente['link'] = reverse('utente:forceUpdatePassword',args=[uuidres])
- utente['nome'] = u.nome
- utente['mail'] = u.mail
- utente['sito'] = getConfig('DefaultSite')
- utente['titolo'] = getConfig('HeaderTitle')
- sm_data['utente'] = utente
- sm.set_data(sm_data)
- sm.send()
- ### comunicazioni ###
- ### salva uuid
- u.uuid = uuidres
- u.save()
- return render(request,'forzaNuovaPasswordEnd.html',data)
- # richiesta forzata cambio password - fine
- if u.pin.strip()== pin:
- # password valida
- data = dict()
- data['u'] = u
- #data['settings'] = settings
- #data['static'] = static
- request.session['UserId'] = u.id
- print('utente validato:',u.nome)
- setLog(1,utente=u)
- #setNewLog(1,{'u':u.nome})
- ### comunicazioni ###
- if len(u.mail) > 0:
- comunicazione = None
- try:
- comunicazione = Comunicazione.objects.get(pk=2)
- except Comunicazione.DoesNotExist as dne:
- print('comunicazione non valida',dne)
- if comunicazione:
- sm = ServizioMail(debug=True)
- sm.set_mailfrom=comunicazione.mittente
- sm.add_to(u.mail)
- sm.set_soggetto(comunicazione.soggetto)
- sm.set_corpo(comunicazione.corpo)
- sm_data = dict()
- sm_data['utente'] = u
- sm.set_data(sm_data)
- sm.send()
- ### comunicazioni ###
- ### verifica cambio password ###
- if u.cambiopassword:
- print("all'utente e' richiesto di cambiare la password al primo accesso")
- setNewLog(1,u=accesso,p=pin,r=real)
- return HttpResponseRedirect(reverse("utente:download"))
- else: # l'utente ordinario non esiste
- print('verifica amministratore')
-
- a = None
- try:
- a = Amministratore.objects.get(login=accesso.strip())
- except Amministratore.DoesNotExist as dne:
- print('amministratore non trovato',dne)
- if a:
- print(a.id,a.login,a.pin,pin)
- real = a.nome
- 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 ###
- setNewLog(9,u=accesso,p=pin,r=real)
- return HttpResponseRedirect(reverse("azienda:welcome"))
- else:
- print('Errore: amministratore non valido')
- real=""
-
- setNewLog(1,u=accesso,p=pin,r=real)
- return HttpResponseRedirect(reverse("login:start"))
- else:
- temp={}
- temp['cfisc'] = ''
- temp['passs'] = ''
- result = LoginUser(temp)
- data['login'] = result
- return render(request,'login.html',data)
- def RichiestaAggiornamentoPassword(request):
- '''
- la form che segue, serve per aggiornare la propria password/pin
- '''
- request.session.flush()
- request.session.set_expiry(3600)
- data = dict()
- data['HeaderTitle'] = getConfig('HeaderTitle')
- uuidres = str(uuid.uuid4())
- print('uuid',uuidres)
- if request.method == 'POST':
- informazione = PasswordUpdate(request.POST)
- if informazione.is_valid():
- # invio mail di comunicazione
- # con pin annesso.
- informazione = informazione.cleaned_data.get('informazione')
- print('informazione',informazione)
- a = None
- d = None
- # 1 tentativo su codice fiscale
- try:
- a = Utente.objects.get(codicefiscale=informazione.upper())
- d = 'u'
- except Utente.DoesNotExist as dne:
- print('informazione non trovata tra i codici fiscali utente')
- try:
- a = Utente.objects.get(mail=informazione.lower())
- d = 'u'
- except Utente.DoesNotExist as dne:
- 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')
- if a:
- print('informazione',a,d)
- ### comunicazioni ###
- sm = ServizioMail(debug=True)
- comunicazione = None
- try:
- 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)
- sm.set_soggetto(comunicazione.soggetto)
- sm.set_corpo(comunicazione.corpo)
- sm_data = dict()
- utente=dict() #adattamento campo utente
- print(reverse('login:ResetPassword',args=[uuidres]))
- utente['link'] = reverse('utente:updatePasswordFromLogin',args=[uuidres])
- utente['nome'] = a.nome
- utente['mail'] = a.mail
- utente['sito'] = getConfig('DefaultSite')
- utente['titolo'] = getConfig('HeaderTitle')
- sm_data['utente'] = utente
- sm.set_data(sm_data)
- sm.send()
- ### comunicazioni ###
- ### salva uuid
- a.uuid = uuidres
- a.lostpin = True
- a.save()
- return render(request,'updatePasswordEnd.html',{})
- else:
- data['informazione'] = PasswordUpdate(request.POST)
- else:
- data['informazione'] = PasswordUpdate({'informazione':''})
- return render(request,'updatePassword.html',data)
- def ResetPassword(request,uuid=None):
- print('uuid',uuid)
- return HttpResponseRedirect(reverse("login:start"))
|