views.py 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. from django.shortcuts import render
  2. from django.http import HttpResponse,HttpResponseRedirect,FileResponse
  3. from django.urls import reverse
  4. import django
  5. from .forms import *
  6. from config.views import getConfig
  7. from comunicazione.views import ServizioMail
  8. from att.views import *
  9. #from utente.views import *
  10. import uuid
  11. from utente.models import *
  12. from amministratore.models import *
  13. def start(request):
  14. '''
  15. da qui si comincia
  16. l'utente e' invitato a inserire il suo codice fiscale e la password/pin assegnata in fase di visita medica
  17. se i dati corrispondono, si forniscono i file e alcune info di servizio
  18. '''
  19. request.session.flush()
  20. request.session.set_expiry(3600)
  21. data = dict()
  22. data['HeaderTitle'] = getConfig('HeaderTitle')
  23. if request.method=="POST":
  24. result = LoginUser(request.POST)
  25. if result.is_valid():
  26. print('result is valid')
  27. accesso = result.cleaned_data['cfisc']
  28. pin = result.cleaned_data['passs']
  29. #verifica corrispondenza utente
  30. u = None
  31. try:
  32. # verifica che esista un utente ordinario
  33. u = Utente.objects.get(codicefiscale=accesso.upper())
  34. except Utente.DoesNotExist as dne:
  35. print("utente inesistente a livello dipendente")
  36. if u: #utente esiste
  37. ### obbligo cambio password
  38. ### se è previsto che l'utente a livello di sede cambi la password
  39. ### al primo ingresso, qui vengono effettuati entrambi i check
  40. print('sede',u.sede.nome)
  41. print('stato possibilita cambio password',u.sede.cambiopassword)
  42. print('stato forzatura cambio password',u.sede.forzanuovapassword)
  43. if u.sede.forzanuovapassword and u.primologin:
  44. print("l'utente deve cambiare obbligatoriamente la password")
  45. # la sede e' impostata per forza il cambio password al primo login e l'utente e' al primo login
  46. # forzatura cambio password
  47. data = dict()
  48. data['HeaderTitle'] = getConfig('HeaderTitle')
  49. data['utente'] = u
  50. uuidres = str(uuid.uuid4())
  51. print('uuid',uuidres)
  52. ### comunicazioni ###
  53. sm = ServizioMail(debug=True)
  54. comunicazione = None
  55. try:
  56. comunicazione = Comunicazione.objects.get(pk=6)
  57. print('comunicazione',comunicazione.id)
  58. except Comunicazione.DoesNotExist as dne:
  59. print("Record comunicazione inesistente",dne)
  60. if comunicazione:
  61. sm.set_mailfrom=comunicazione.mittente
  62. sm.add_to(u.mail)
  63. sm.set_soggetto(comunicazione.soggetto)
  64. sm.set_corpo(comunicazione.corpo)
  65. sm_data = dict()
  66. utente=dict() #adattamento campo utente
  67. print(reverse('login:ResetPassword',args=[uuidres]))
  68. utente['link'] = reverse('utente:forceUpdatePassword',args=[uuidres])
  69. utente['nome'] = u.nome
  70. utente['mail'] = u.mail
  71. utente['sito'] = getConfig('DefaultSite')
  72. utente['titolo'] = getConfig('HeaderTitle')
  73. sm_data['utente'] = utente
  74. sm.set_data(sm_data)
  75. sm.send()
  76. ### comunicazioni ###
  77. ### salva uuid
  78. u.uuid = uuidres
  79. u.save()
  80. return render(request,'forzaNuovaPasswordEnd.html',data)
  81. # richiesta forzata cambio password - fine
  82. if u.pin.strip()== pin:
  83. # password valida
  84. data = dict()
  85. data['u'] = u
  86. #data['settings'] = settings
  87. #data['static'] = static
  88. request.session['UserId'] = u.id
  89. print('utente validato:',u.nome)
  90. setLog(1,utente=u)
  91. #setNewLog(1,{'u':u.nome})
  92. ### comunicazioni ###
  93. if len(u.mail) > 0:
  94. comunicazione = None
  95. try:
  96. comunicazione = Comunicazione.objects.get(pk=2)
  97. except Comunicazione.DoesNotExist as dne:
  98. print('comunicazione non valida',dne)
  99. if comunicazione:
  100. sm = ServizioMail(debug=True)
  101. sm.set_mailfrom=comunicazione.mittente
  102. sm.add_to(u.mail)
  103. sm.set_soggetto(comunicazione.soggetto)
  104. sm.set_corpo(comunicazione.corpo)
  105. sm_data = dict()
  106. sm_data['utente'] = u
  107. sm.set_data(sm_data)
  108. sm.send()
  109. ### comunicazioni ###
  110. return HttpResponseRedirect(reverse("utente:download"))
  111. else: # l'utente ordinario non esiste
  112. print('verifica amministratore')
  113. a = None
  114. try:
  115. a = Amministratore.objects.get(login=accesso.strip())
  116. if a:
  117. print('login trovato',a.nome)
  118. except Amministratore.DoesNotExist as dne:
  119. print('amministratore non trovato',dne)
  120. if a:
  121. print(a.id,a.login,a.pin,pin)
  122. if a.pin.strip()== pin:
  123. request.session['AdminId'] = a.id
  124. setLog(1,amministratore=a)
  125. ### comunicazioni ###
  126. sm = ServizioMail(debug=True)
  127. comunicazione = None
  128. try:
  129. comunicazione = Comunicazione.objects.get(pk=1)
  130. except Comunicazione.DoesNotExist as dne:
  131. print("Record comunicazione inesistente",dne)
  132. if comunicazione:
  133. sm.set_mailfrom=comunicazione.mittente
  134. sm.add_to(a.mail)
  135. sm.set_soggetto(comunicazione.soggetto)
  136. sm.set_corpo(comunicazione.corpo)
  137. sm_data = dict()
  138. utente=dict() #adattamento campo utente
  139. utente['nome'] = a.nome
  140. utente['mail'] = a.mail
  141. sm_data['utente'] = a
  142. sm.set_data(sm_data)
  143. sm.send()
  144. ### comunicazioni ###
  145. return HttpResponseRedirect(reverse("azienda:welcome"))
  146. else:
  147. print('Errore: amministratore non valido')
  148. if a.azienda.cambiopassword and a.sede.cambiopassword and a.cambiopassword:
  149. print("all'utente e' richiesto di cambiare la password al primo accesso")
  150. return HttpResponseRedirect(reverse("login:start"))
  151. else:
  152. temp={}
  153. temp['cfisc'] = ''
  154. temp['passs'] = ''
  155. result = LoginUser(temp)
  156. data['login'] = result
  157. return render(request,'login.html',data)
  158. def RichiestaAggiornamentoPassword(request):
  159. '''
  160. la form che segue, serve per aggiornare la propria password/pin
  161. '''
  162. request.session.flush()
  163. request.session.set_expiry(3600)
  164. data = dict()
  165. data['HeaderTitle'] = getConfig('HeaderTitle')
  166. uuidres = str(uuid.uuid4())
  167. print('uuid',uuidres)
  168. if request.method == 'POST':
  169. informazione = PasswordUpdate(request.POST)
  170. if informazione.is_valid():
  171. # invio mail di comunicazione
  172. # con pin annesso.
  173. informazione = informazione.cleaned_data.get('informazione')
  174. print('informazione',informazione)
  175. a = None
  176. d = None
  177. # 1 tentativo su codice fiscale
  178. try:
  179. a = Utente.objects.get(codicefiscale=informazione.upper())
  180. d = 'u'
  181. except Utente.DoesNotExist as dne:
  182. print('informazione non trovata tra i codici fiscali utente')
  183. try:
  184. a = Utente.objects.get(mail=informazione.lower())
  185. d = 'u'
  186. except Utente.DoesNotExist as dne:
  187. print('informazione non trovata tra le email')
  188. try:
  189. a = Amministratore.objects.get(login=informazione.lower())
  190. d = 'a'
  191. except Amministratore.DoesNotExist as dne:
  192. print('informazione non trovata tra i login amministratotore')
  193. if a:
  194. print('informazione',a,d)
  195. ### comunicazioni ###
  196. sm = ServizioMail(debug=True)
  197. comunicazione = None
  198. try:
  199. comunicazione = Comunicazione.objects.get(pk=4)
  200. except Comunicazione.DoesNotExist as dne:
  201. print("Record comunicazione inesistente",dne)
  202. if comunicazione:
  203. sm.set_mailfrom=comunicazione.mittente
  204. sm.add_to(a.mail)
  205. sm.set_soggetto(comunicazione.soggetto)
  206. sm.set_corpo(comunicazione.corpo)
  207. sm_data = dict()
  208. utente=dict() #adattamento campo utente
  209. print(reverse('login:ResetPassword',args=[uuidres]))
  210. utente['link'] = reverse('utente:updatePasswordFromLogin',args=[uuidres])
  211. utente['nome'] = a.nome
  212. utente['mail'] = a.mail
  213. utente['sito'] = getConfig('DefaultSite')
  214. utente['titolo'] = getConfig('HeaderTitle')
  215. sm_data['utente'] = utente
  216. sm.set_data(sm_data)
  217. sm.send()
  218. ### comunicazioni ###
  219. ### salva uuid
  220. a.uuid = uuidres
  221. a.lostpin = True
  222. a.save()
  223. return render(request,'updatePasswordEnd.html',{})
  224. else:
  225. data['informazione'] = PasswordUpdate(request.POST)
  226. else:
  227. data['informazione'] = PasswordUpdate({'informazione':''})
  228. return render(request,'updatePassword.html',data)
  229. def ResetPassword(request,uuid=None):
  230. print('uuid',uuid)
  231. return HttpResponseRedirect(reverse("login:start"))