views.py 9.2 KB

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