views.py 8.8 KB

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