views.py 9.0 KB

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