views.py 9.5 KB

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