2
0

views.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. from django.shortcuts import render
  2. from django.http import HttpResponseRedirect
  3. from django.shortcuts import redirect
  4. from django.urls import reverse
  5. from configurazione.views import *
  6. from .models import *
  7. # Create your views here.
  8. def getSecurityLevelAll(enabled=1):
  9. '''
  10. ritorna l'elenco dei livelli di sicurezza ordinati per nome
  11. parms:
  12. enabled (default 1)
  13. di default restituisce l'intero elenco solo se le voci sono abituate
  14. '''
  15. return SecurityLevel.objects.all().filter(enabled=enabled).order_by('nome')
  16. def getSecurityLevel(id,enabled=1,debug=0):
  17. '''
  18. ritorna il livello di sicurezza indicato, in forma d'oggetto.
  19. '''
  20. #primo step: verifica l'intestazione, se e' attiva
  21. try:
  22. securitylevel = SecurityLevel.objects.get(pk=id)
  23. except SecurityLevel.DoesNotExist as dne:
  24. if debug:
  25. print('il record {} non esiste o non e\' attivo'.format(id))
  26. #nel caso non fosse possibile, viene preso il valore di default
  27. securitylevel = SecurityLevel.objects.get(pk=getConfigurazione('default-level'))
  28. if securitylevel.enabled != enabled:
  29. securitylevel = SecurityLevel.objects.get(pk=getConfigurazione('default-level'))
  30. return securitylevel
  31. def getSecurityRow(id,enabled=1,debug=0):
  32. '''
  33. securityrow contiene l'associazione tra i livelli di sicurezza e le opzioni.
  34. per ottenerlo gli passiamo l'id del securitylevel.
  35. '''
  36. #verifica che l'id sia valido, semplicemente richiamando getSecurityLevel
  37. id = getSecurityLevel(id,enabled)
  38. orderbylist=['securityoptions__comando','ordine']
  39. try:
  40. securityrow = SecurityRow.objects.filter(securitylevel=id).filter(enabled=enabled).order_by(*orderbylist)
  41. except SecurityRow.DoesNotExist as dne:
  42. print('non ci sono righe associate all\'id {}'.format(id))
  43. return SecurityRow()
  44. #securityrow contiene l'elenco delle Options estratte.
  45. if debug:
  46. print(securityrow)
  47. return securityrow
  48. def getSecurityList(securityrow,debug=0):
  49. securitylist=[]
  50. for sr in securityrow:
  51. srtemp = getSecurityOptions(sr.securityoptions_id)
  52. if debug:
  53. print(srtemp.acronimo)
  54. securitylist.append(srtemp.acronimo)
  55. print("SecurityList: ",securitylist)
  56. return securitylist
  57. def getSecurityOptions(id):
  58. '''
  59. ritorna il contenuto della security options a cui si fa riferimento
  60. '''
  61. #! nota: sarebbe da capire se puo' tornare il record in caso di false enabled in row o level
  62. try:
  63. resultoptions = SecurityOptions.objects.get(pk=id)
  64. except SecurityOptions.DoesNotExist as dne:
  65. print("non ci sono elementi di SecurityOptions da tornare con l'id {}".format(id))
  66. return None
  67. return resultoptions
  68. def getSecurityLevelByUser(userId,enabled=1):
  69. '''
  70. ottiene il livello di sicurezza passando direttamente l'id utente
  71. la sequenza e' veloce:
  72. cerca l'utente indicato
  73. verifica che abbia un level valido altrimenti ritorna il default
  74. estrare l'elenco delle options abilitate
  75. '''
  76. try:
  77. u = User.objects.get(pk=userId)
  78. #l'utente esiste ed e' valido
  79. except User.DoesNotExist as dnf:
  80. #l'utente non esiste
  81. return HttpResponseRedirect(reverse('login:welcome',args={}))
  82. try:
  83. securitylevel = getSecurityLevel(u.securitylevel)
  84. except SecurityLevel.DoesNotExist as dne:
  85. print(f'attenzione, security level non impostata per utente {u.id}')
  86. v = getConfigurazione('default-level')
  87. securitylevel = getSecurityLevel(v)
  88. return securitylevel
  89. def getSecurityOptionsByUser(UserId):
  90. '''
  91. ottiene l'elenco delle righe di securityrow
  92. '''
  93. securitylevel = getSecurityLevelByUser(UserId,enabled=1)
  94. securityoptions = getSecurityOptions(securitylevel.id)
  95. return securityoptions
  96. def _checkSessionValue(request,key,debug=0):
  97. if debug:
  98. print("session:",key,request.session.get(key))
  99. try:
  100. tmp = request.session.get(key)
  101. except:
  102. request.flush()
  103. return HttpResponseRedirect(reverse('Login:login'))
  104. return tmp
  105. def getSessionParms(request,debug=0):
  106. '''
  107. estrae i valori dalla sessione necessari per operare
  108. '''
  109. lista=[
  110. '_userauth_',
  111. '_user2edit_',
  112. '_alias2edit_',
  113. '_domain2edit_',
  114. '_domainservice2edit_',
  115. '_contatto2edit_',
  116. '_registrar2edit_',
  117. '_liste2edit_',
  118. '_listeaccount2edit_',
  119. '_ftp2edit_',
  120. '_sqlserver2edit_',
  121. '_from_',
  122. '_domain_order',
  123. '_sqldatabase2edit_',
  124. '_note2edit_',
  125. '_filtro2edit_',
  126. '_causale2edit_',
  127. '_mqtt2edit_',
  128. '_webserver2edit_',
  129. '_web2edit',
  130. '_proxyserver2edit_',
  131. 'proxy2edit_',
  132. '_spam2edit_',
  133. ]
  134. v2r = dict()
  135. for i in lista:
  136. v2r[i] = _checkSessionValue(request,i)
  137. if debug:
  138. print('v2r from session:',v2r)
  139. '''
  140. nota effettua subito la verifica dell'utente, cosi' salta al volo al login nel caso il check fosse non valido
  141. '''
  142. if not '_userauth_' in v2r:
  143. redirect(reverse('Login:login'))
  144. try:
  145. User.objects.get(pk=v2r['_userauth_'])
  146. except User.DoesNotExist as DNE:
  147. print("errore, utente autorizzato non esistente")
  148. print(DNE)
  149. redirect(reverse('Login:login'))
  150. print('_userauth_',v2r['_userauth_'])
  151. return v2r
  152. def ManageSecurityLevelList(request):
  153. session = getSessionParms(request)
  154. userauth = session['_userauth_']
  155. utenteautorizzato = User.objects.get(pk=userauth)
  156. securitylevel = SecurityLevel.objects.all().order_by('nome')
  157. value = {}
  158. value['utenteautorizzato']=utenteautorizzato
  159. value['sicurezza']=securitylevel
  160. value['navbar'] = True
  161. return render(request,'securitylevellist.html',value)
  162. def ManageSecurityRowList(request,levelId):
  163. session = getSessionParms(request)
  164. userauth = session['_userauth_']
  165. utenteautorizzato = User.objects.get(pk=userauth)
  166. securityrow = SecurityRow.objects.all().filter(securitylevel=levelId).order_by('id')
  167. value = {}
  168. value['utenteautorizzato'] = utenteautorizzato
  169. value['righe'] = securityrow
  170. value['navbar'] = True
  171. return render(request,'securityrowlist.html',value)
  172. #decorator: anziche' gestire tutta la sessione di sicurezza dentro la funzione,
  173. # magari possiamo fare la stessa cosa con un decoratore.
  174. def securitywrap(function):
  175. def wrapper(*args,**kwargs):
  176. print('...wrapping')
  177. print(args)
  178. print(kwargs)
  179. return function(*args,**kwargs)
  180. return wrapper
  181. '''
  182. from supporto import managepassword
  183. from sicurezza.views import *
  184. from logger.views import *
  185. from comunicazioni.views import *
  186. from datetime import date,datetime
  187. from configurazione.views import *
  188. def UserList(request):
  189. session = getSessionParms(request)
  190. userauth = session['_userauth_']
  191. user2edit = session['_user2edit_']
  192. domain2edit = session['_domain2edit_']
  193. request.session['_from_']="Utenti:UserList"
  194. print(next)
  195. if not user2edit:
  196. user2edit = userauth
  197. try:
  198. utenteautorizzato = User.objects.get(pk=userauth)
  199. except User.DoesNotExist as dne:
  200. return HttpResponseRedirect(reverse('Login:login',args={}))
  201. if not domain2edit:
  202. domain2edit = utenteautorizzato.domain.id
  203. dominio = Domini.objects.get(pk=domain2edit)
  204. userlist = User.objects.filter(domain=domain2edit).order_by('mail')
  205. value={}
  206. value['utenteautorizzato'] = utenteautorizzato
  207. value['user'] = None
  208. value['userlist'] = userlist
  209. value['dominio'] = dominio
  210. value['navbar'] = True
  211. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  212. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  213. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  214. value['securityrow'] = securityrow
  215. value['securityrowLen'] = len(securityrow)
  216. value['CANWRITE']=True #per il momento, questo flag serve a capire se e' un record nuovo
  217. '''