from django.shortcuts import render from django.http import HttpResponseRedirect from django.urls import reverse from .models import * from .forms import * from supporto import managepassword from sicurezza.views import * from logger.views import * from comunicazioni.views import * from datetime import date,datetime from configurazione.views import * from django.db import IntegrityError from mqtt import views as mm #questo dovrebbe essere il vecchio sistema from mqtt.views import mqtt import re import json def UserList(request): session = getSessionParms(request) userauth = session['_userauth_'] user2edit = session['_user2edit_'] domain2edit = session['_domain2edit_'] request.session['_from_']="Utenti:UserList" print(next) if not user2edit: user2edit = userauth try: utenteautorizzato = User.objects.get(pk=userauth) except User.DoesNotExist as dne: return HttpResponseRedirect(reverse('Login:login',args={})) if not domain2edit: domain2edit = utenteautorizzato.domain.id dominio = Domini.objects.get(pk=domain2edit) userlist = User.objects.filter(domain=domain2edit).order_by('mail') value={} value['utenteautorizzato'] = utenteautorizzato value['user'] = None value['userlist'] = userlist value['dominio'] = dominio value['navbar'] = True print("livello autorizzazione",utenteautorizzato.securitylevel_id) securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id) securityrow = getSecurityRow(utenteautorizzato.securitylevel_id) value['securityrow'] = securityrow value['securityrowLen'] = len(securityrow) value['CANWRITE']=True #per il momento, questo flag serve a capire se e' un record nuovo if request.method=="POST": if "Nuova Email" in request.POST: print('nuova email') request.session['_user2edit_'] = -1 return HttpResponseRedirect(reverse('Utenti:UserEdit',args={})) if "Lista Email" in request.POST: request.session['_user2edit_'] = -1 return HttpResponseRedirect(reverse('Utenti:UserReadOnlyList',args={})) if "editbutton" in request.POST: print('id da editare',request.POST['editbutton']) request.session['_user2edit_'] = request.POST['editbutton'] return HttpResponseRedirect(reverse('Utenti:UserEdit',args={})) if "enabledisablebutton" in request.POST: print('id da disattivare',request.POST['enabledisablebutton']) idpost = request.POST['enabledisablebutton'] u = User.objects.get(pk=idpost) u.enabled = not u.enabled if u.enabled: u.tobedeleted = False t = date.today() u.account_date_disabled=t.strftime("%Y-%m-%d") u.save() if 'enablepassword' in request.POST: print('id da attivare',request.POST['enablepassword']) idpost = request.POST['enablepassword'] u = User.objects.get(pk=idpost) u.enabled = True u.tobedeleted = False u.account_date_disabled = None u.clear = getPassword() u.crypt = managepassword.GeneraPassword(u.clear) u.save() request.session['_user2edit_'] = idpost return HttpResponseRedirect(reverse('Utenti:UserEdit',args={})) if 'tobedeletedbutton' in request.POST: print('id da cancellare',request.POST['tobedeletedbutton']) idpost = request.POST['tobedeletedbutton'] u = User.objects.get(pk=idpost) u.tobedeleted = not u.tobedeleted u.save() if 'sendInfoToAdmin' in request.POST: print('richista informazioni mail') sm = ServizioMail() idpost = request.POST['sendInfoToAdmin'] record = User.objects.get(pk=idpost) print(record.nome) sm.set_rcptto(r'{}@{}'.format(utenteautorizzato.mail.strip(),utenteautorizzato.domain.nome.strip())) template=Template.objects.get(pk=getConfigurazione("mail:info:info")) sm.set_oggetto(template.oggetto) sm.set_soggetto(template.soggetto) dictdict={} dictdict['utente'] = record dictdict['utenteautorizzato'] = utenteautorizzato dictdict['data'] = datetime.now() sm.set_data(dictdict) sm.send() if 'ritorno' in request.POST: return HttpResponseRedirect(reverse('Login:welcome',args={})) if 'notaSubmit' in request.POST: fm = formMsg(request.POST) if fm.is_valid(): oggetto = fm.cleaned_data.get('oggetto') soggetto = fm.cleaned_data.get('soggetto') conferma = fm.cleaned_data.get('conferma') utentiToSend = User.objects.filter(domain=dominio).filter(enabled=True) print('dominio',dominio.id) print('numero di utenti da raggiungere',len(utentiToSend)) print('soggetto',soggetto) print('oggetto',oggetto) print('conferma',conferma) if conferma: count=0 for uts in utentiToSend: count = count +1 print('generato nuovo record',count,uts.mail) sm = ServizioMail() sm.set_rcptto(r'{}@{}'.format(uts.mail.strip(),uts.domain.nome.strip())) sm.set_oggetto(oggetto) sm.set_soggetto(soggetto) dictdict={} dictdict['utente'] = uts dictdict['utenteautorizzato'] = utenteautorizzato dictdict['data'] = datetime.now() sm.set_data(dictdict) sm.send() if 'alldeletedbutton' in request.POST: print('Richiesta di cancellazione di tutte le email disattivate') listaemail = User.objects.filter(domain=dominio.id) for lm in listaemail: if not lm.enabled: print('email',lm.mail) lm.tobedeleted=True lm.save() print('elenco delle email da rimuovere',len(listaemail)) return render(request,"Utente.List.html",value) ''' sia userEdit che UserNew usano uno schema semplificato per gestire gli utenti. per evitare di usare due funzioni che per la maggior parte del tempo si sovrappongono, genero una terza funzione proprio per gestire tutte le parti comuni. Questa parte comune, chiamata usermaster, ricevera' svariati parametri e ne ritornera' altrettanti per gestire l'oggetto mail sia vuoto,nuovo, che da editare. ''' def UserEdit(request): session = getSessionParms(request) userauth = session['_userauth_'] user2edit = session['_user2edit_'] print('user2edit: ',user2edit) domain2edit = session['_domain2edit_'] _from_ = session['_from_'] print("_from_",_from_) try: utenteautorizzato = User.objects.get(pk=userauth) except User.DoesNotExist as dne: return HttpResponseRedirect(reverse('Login:login',args={})) try: dominio = Domini.objects.get(pk=domain2edit) except Domini.DoesNotExist as dne: print("errore, il dominio non e' correttamente gestito in useredit") dominio = utenteautorizzato.domain value={} value['CANWRITE']=False mailinglist = list() nuovorecord = False if not user2edit: # non e' presente un utente. record = utenteautorizzato elif int(user2edit)>0: record = User.objects.get(pk=user2edit) totalmailinglist = record.domain.liste_set.all() for i in totalmailinglist: if i.listeaccount_set.filter(mail__id = record.id): mailinglist.append(i) print("stato mailinglist",mailinglist) value['mailinglist'] = mailinglist #13.9.22 #questo campo deve essere sempre valorizzato. #soprattutto in vista del cambiamento al riferimento server dal dominio al singolo account. if not record.mail_server_id: record.mail_server_id = dominio.mail_server_id elif int(user2edit)-1: nuovorecord = True print('dominio:',dominio.nome) record = User() record.domain = dominio record.enabled = dominio.enabled record.pop3 = dominio.pop3 record.imap = dominio.imap record.webmail = dominio.webmail record.smtp = dominio.smtp record.smtp_relay = dominio.smtp_relay record.sieve = dominio.sieve record.antivirus = dominio.antivirus record.spf = dominio.spf record.blacklist = dominio.blacklist record.nextcloud = dominio.nextcloud record.nextcloud_pwd = dominio.nextcloud_pwd record.proxy = dominio.proxy record.lmtp = dominio.lmtp record.password_change_enable=1 # memorizza i dati del server di posta dal dominio # ma solo se l'utente non e' gia presente. record.mail_server_id = dominio.mail_server_id record.mail_proxy_id = dominio.mail_proxy_id record.lmtp_server_id = dominio.lmtp_server_id record.sql_remote_id = dominio.sql_remote_id record.securitylevel_id = getConfigurazione('default-level') record.warning_mail_quota = dominio.warning_mail_quota #record.limit_mail_quota = dominio.limit_mail_quota record.clear = getPassword() record.crypt = managepassword.GeneraPassword(record.clear) print('record.clear:',record.clear) mq = mqtt() # mq.build('topic','messaggio') #vediamo se il default funziona # mq.build('richiesta','MailingList') mq.build('stampa',True) tmp = dict() tmp['utenteautorizzato'] = "".join((utenteautorizzato.mail,'@',utenteautorizzato.domain.nome)) mq.build('data',tmp) mq.pubblica() tmp=None value['utenteautorizzato'] = utenteautorizzato value['user'] = record value['userlist'] = None value['dominio'] = record.domain value['navbar'] = True print("livello autorizzazione",utenteautorizzato.securitylevel_id) securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id) securityrow = getSecurityRow(utenteautorizzato.securitylevel_id) securitylist = getSecurityList(securityrow) value['securityrow'] = securityrow value['securityrowLen'] = len(securityrow) value['securitylist'] = securitylist value['mail_password_length']=getConfigurazione('mail_password_length') value['mail_password_message'] = getConfigurazione('mail_password_message') d = Domini.objects.all().order_by('nome') domainlist = [] for i in d: domainlist.append((i.id,i.nome)) value['domainlist'] = domainlist m = MailServer.objects.all().order_by('ip') value['mailserverlist'] = m.filter(enabled=True) value['lmtpserverlist'] = m.filter(enabled=True) value['sqlremotelist'] = m.filter(enabled=True) value['mailproxylist'] = m.filter(enabled=True) # livello utenti (si da' la possibilita di selezionare fino al livello proprio) livello = SecurityLevel.objects.filter(id__lte = utenteautorizzato.securitylevel_id).filter(enabled=True) value['livello']=livello # non effettua il salvataggio, ma ritorna alla lista FTP if 'Ritorno' in request.POST: return HttpResponseRedirect(reverse('Utenti:UserList')) oldpassword = None if request.method=="POST": formemail = formEmail(request.POST) formemail.update() print("request Method: ",request.method) if 'emailtest' in request.POST: ''' richiesta di invio dei parametri di test ''' print("richiesto invio prova di stampa") buildemail(getConfigurazione('mail_from'),["{}@{}".format(record.mail,record.domain.nome)],'mail_test_subject','mail_test_body_html','mail_test_body_text',{'domain':record.domain.nome,'mail':record.mail}) if 'sendInfoToMe' in request.POST: print('richeista informazioni mail') sm = ServizioMail() sm.set_rcptto(r'{}@{}'.format(record.mail.strip(),record.domain.nome.strip())) template=Template.objects.get(pk=getConfigurazione("mail:info:info")) sm.set_oggetto(template.oggetto) sm.set_soggetto(template.soggetto) dictdict={} dictdict['utente'] = record dictdict['utenteautorizzato'] = utenteautorizzato dictdict['precedente_password'] = oldpassword dictdict['data'] = datetime.now() sm.set_data(dictdict) sm.send() if 'sendInfoToAdmin' in request.POST: print('richeista informazioni mail') sm = ServizioMail() sm.set_rcptto(r'{}@{}'.format(utenteautorizzato.mail.strip(),utenteautorizzato.domain.nome.strip())) template=Template.objects.get(pk=getConfigurazione("mail:info:info")) sm.set_oggetto(template.oggetto) sm.set_soggetto(template.soggetto) dictdict={} dictdict['utente'] = record dictdict['utenteautorizzato'] = utenteautorizzato dictdict['data'] = datetime.now() sm.set_data(dictdict) sm.send() if formemail.is_valid(): print("Formemail.is_valid()") if 'mail' in formemail.cleaned_data: record.mail = formemail.cleaned_data.get('mail').lower() #le mail dovrebbero essere sempre salvate in minuscolo. record.nome = formemail.cleaned_data.get('nome') #dovrebbe venir modificato solo alla creazione record.domain_id = formemail.cleaned_data.get('dominio') # pero' non mi piace... dovrebbe reagire in base alla presenza dei campi nel form # secondo me devo toglierli dalla form di validazione e usarla solo per le cose importanti if utenteautorizzato.securitylevel_id > 5: if 'enabled' in formemail.cleaned_data: record.enabled = formemail.cleaned_data.get('enabled') if 'pop3' in formemail.cleaned_data: record.pop3 = formemail.cleaned_data.get('pop3') if 'imap' in formemail.cleaned_data: record.imap = formemail.cleaned_data.get('imap') if 'smtp' in formemail.cleaned_data: record.smtp = formemail.cleaned_data.get('smtp') if 'smtp_relay' in formemail.cleaned_data: record.smtp_relay = formemail.cleaned_data.get('smtp_relay') print(formemail.cleaned_data) if 'lmtp' in formemail.cleaned_data: record.lmtp = formemail.cleaned_data.get('lmtp') if 'lmtp_server' in formemail.cleaned_data: record.lmtp_server_id = formemail.cleaned_data.get('lmtp_server') if 'mail_server' in formemail.cleaned_data: record.mail_server_id = formemail.cleaned_data.get('mail_server') if 'mail_proxy' in formemail.cleaned_data: record.mail_proxy_id = formemail.cleaned_data.get('mail_proxy') if record.mail_proxy_id: record.proxy_host = record.mail_proxy.ip #dovra' essere rimosso in futuro if 'sql_remote' in formemail.cleaned_data: record.sql_remote_id = formemail.cleaned_data.get('sql_remote') else: record_sql_remote_id = 0 if 'webmail' in formemail.cleaned_data: record.webmail = formemail.cleaned_data.get('webmail') if 'securitylevel' in formemail.cleaned_data: record.securitylevel_id = formemail.cleaned_data.get('securitylevel') if 'nextcloud' in formemail.cleaned_data: record.nextcloud = formemail.cleaned_data.get('nextcloud') if 'nextcloud_pwd' in formemail.cleaned_data: record.nextcloud_pwd = formemail.cleaned_data.get('nextcloud_pwd') if 'sms' in formemail.cleaned_data: record.sms = formemail.cleaned_data.get('sms') if 'sendafile' in formemail.cleaned_data: record.sendafile = formemail.cleaned_data.get('sendafile') if 'sieve' in formemail.cleaned_data: record.sieve = formemail.cleaned_data.get('sieve') if 'antivirus' in formemail.cleaned_data: record.antivirus = formemail.cleaned_data.get('antivirus') if 'blacklist' in formemail.cleaned_data: record.blacklist = formemail.cleaned_data.get('blacklist') if 'spf' in formemail.cleaned_data: record.spf = formemail.cleaned_data.get('spf') record.warning_mail_quota = formemail.cleaned_data.get('warning_mail_quota') record.limit_mail_quota = formemail.cleaned_data.get('limit_mail_quota') record.nota = formemail.cleaned_data.get('nota') record.mail_di_recupero = formemail.cleaned_data.get('mail_di_recupero') record.forward = formemail.cleaned_data.get('forward') print('stato password_change_enabled') print('password_change_enabled originale',record.password_change_enabled) print('password_change_enabled rilevato',formemail.cleaned_data.get('password_change_enabled')) if not 'password_change_enabled' in formemail.changed_data: print("presente campo password_change_enabled") record.password_change_enabled = formemail.cleaned_data.get('password_change_enabled') else: print("Campo password_change_enabled non presente") print('record.password_change_enabled',record.password_change_enabled) if record.password_change_enabled: oldpassword =record.clear #memorizza la vecchia password record.clear = formemail.cleaned_data.get('password1') record.crypt = managepassword.GeneraPassword(record.clear) if oldpassword != record.clear: oldchanged = True mq = mqtt() # mq.build('topic','messaggio') #vediamo se il default funziona # mq.build('richiesta','MailingList') mq.build('stampa',True) tmp = dict() tmp['utenteautorizzato'] = "".join((utenteautorizzato.mail,'@',utenteautorizzato.domain.nome)) tmp['utentepassword'] = ''.join((record.mail,"@",record.domain.nome)) tmp['vecchia password'] = oldpassword tmp['nuova password'] = record.clear mq.build('data',tmp) mq.pubblica() tmp=None t = date.today() record.last_password_update = t.strftime("%Y-%m-%d") record.tobedeleted = formemail.cleaned_data.get('tobedeleted') if record.tobedeleted: record.enabled = False record.save() mq = mqtt() # mq.build('topic','messaggio') #vediamo se il default funziona # mq.build('richiesta','MailingList') mq.build('stampa',True) tmp = dict() tmp['utenteautorizzato'] = "".join((utenteautorizzato.mail,'@',utenteautorizzato.domain.nome)) tmp['utentetobedeleted'] = ''.join((record.mail,"@",record.domain.nome)) mq.build('data',tmp) mq.pubblica() tmp=None return HttpResponseRedirect(reverse('Utenti:UserList')) try: record.save() except IntegrityError as ie: print('Integrity Error',ie) user2edit = record.id # quesito: come faccio a tornare alla pagina orginale? return HttpResponseRedirect(reverse(_from_,args={})) ''' salvato il record, provvediamo anche a inviare i dati per mqtt per i server remoti l'operazione viene eseguita solo se sql_remote e' diverso da 0 ''' c = mm.start() if record.sql_remote_id: mml={} mml['op']='upd' mml['id']=record.id mml['rm']=record.sql_remote.ip print(mml) mm.publish(c,"Richiesta/Mail",json.dumps(mml)) else: print("mqtt: sql_remote e' impostato a 0") ''' salvato il recordo, provvediamo a inviare una mail sia all'account ufficiale che alla mail di riserva (se esiste) per comunicare l'effettivo aggiornamento e avvisare. ''' mail_who = formemail.cleaned_data.get('mail_who') # si tratta di un nuovo record if nuovorecord: print('generato nuovo record') sm = ServizioMail() sm.set_rcptto(r'{}@{}'.format(record.mail.strip(),record.domain.nome.strip())) sm.add_to(re.findall("[\w\.-_]+@[\w\.]+",getConfigurazione('mail_notification'))) #if utenteautorizzato.id == record.id: sm.add_to(utenteautorizzato.mail + "@" + utenteautorizzato.domain.nome) if mail_who: sm.add_to(re.findall("[\w\.-_]+@[\w\.]+",mail_who)) template=Template.objects.get(pk=getConfigurazione("mail:info:account")) sm.set_oggetto(template.oggetto) sm.set_soggetto(template.soggetto) dictdict={} dictdict['utente'] = record dictdict['utenteautorizzato'] = utenteautorizzato dictdict['precedente_password'] = oldpassword dictdict['data'] = datetime.now() sm.set_data(dictdict) sm.send() else: if record.password_change_enabled and oldpassword != record.clear: print('richiesto aggiornamento password') sm = ServizioMail() sm.set_rcptto(r'{}@{}'.format(record.mail.strip(),record.domain.nome.strip())) sm.add_to(re.findall("[\w\.-_]+@[\w\.]+",getConfigurazione('mail_notification'))) #if utenteautorizzato.id == record.id: sm.add_to(utenteautorizzato.mail + "@" + utenteautorizzato.domain.nome) if mail_who: sm.add_to(re.findall("[\w\.-_]+@[\w\.]+",mail_who)) template=Template.objects.get(pk=getConfigurazione("mail:info:newpassword")) sm.set_oggetto(template.oggetto) sm.set_soggetto(template.soggetto) dictdict={} dictdict['utente'] = record dictdict['utenteautorizzato'] = utenteautorizzato dictdict['precedente_password'] = oldpassword dictdict['data'] = datetime.now() sm.set_data(dictdict) sm.send() if record.nextcloud and record.nextcloud_pwd: # la sezione nextcloud e' attiva per l'utente e la password e' in sync mq = mqtt() mq.build('stampa',True) mq.build('topic','nextcloud/password') tmp = dict() tmp['utenteautorizzato'] = "".join((utenteautorizzato.mail,'@',utenteautorizzato.domain.nome)) tmp['utente'] = ''.join((record.mail,"@",record.domain.nome)) tmp['password'] = record.clear mq.build('data',tmp) mq.pubblica() tmp=None mq = None user2edit = record.id request.session['_user2edit_'] = user2edit # quesito: come faccio a tornare alla pagina orginale? return HttpResponseRedirect(reverse(_from_,args={})) # pero' non vale, nel caso non dovessi dover tornare alla lista? # stavp giusto pensando di inviare il referer, per far capire dove tornare. else: print("formemail.is_valid non passato") print("formemail.errors") print(formemail.errors) for e in formemail.errors: print("errors:",e) print("***") # tecnicamente ricarica i dati dal post, ma se alcuni campi non ci sono, come si fa. formemail = formEmail(request.POST) formemail.update() value['formemail'] = formemail else: ## verifica se e' post o meno.... print('Post Non validato') temp={} temp['sieve'] = record.sieve temp['antivirus'] = record.antivirus temp['blacklist'] = record.blacklist temp['spf'] = record.spf temp['mail'] = record.mail print("mail: ",temp['mail']) temp['nome'] = record.nome temp['dominio'] = record.domain_id temp['dominio_domain'] = record.domain.nome temp['password1'] = record.clear temp['password2'] = record.clear temp['clear'] = record.clear temp['securitylevel'] = record.securitylevel_id temp['enabled'] = record.enabled temp['pop3'] = record.pop3 temp['imap'] = record.imap temp['smtp'] = record.smtp temp['smtp_relay'] = record.smtp_relay temp['lmtp'] = record.lmtp temp['lmtp_server'] = record.lmtp_server_id temp['mail_server'] = record.mail_server_id temp['sql_remote'] = record.sql_remote_id temp['mail_proxy'] = record.mail_proxy_id temp['nextcloud'] = record.nextcloud temp['nextcloud_pwd'] = record.nextcloud_pwd temp['webmail'] = record.webmail temp['sms'] = record.sms temp['sendafile'] = record.sendafile temp['tobedeleted'] = record.tobedeleted temp['mail_quota'] = record.mail_quota temp['accountdatecreation'] = record.account_date_creation temp['accountdatedisabled'] = record.account_date_disabled temp['sms_communication'] = record.sms_communication temp['nota'] = record.nota temp['last_mail_checked'] = record.last_mail_checked temp['proxy_host'] = record.proxy_host #temp['bigmail'] = record.bigmail temp['mail_di_recupero'] = record.mail_di_recupero temp['warning_mail_quota'] = record.warning_mail_quota temp['limit_mail_quota'] = record.limit_mail_quota temp['password_change_enabled'] = record.password_change_enabled temp['passwordchanged'] = False temp['forward'] = record.forward formemail = formEmail(temp) formemail.update() value['formemail'] = formemail return render(request,'Utente.Edit.html',value) def UserInfo(request): session = getSessionParms(request) userauth = session['_userauth_'] domain2edit = session['_domain2edit_'] # da qui carica i dati dal db. try: utenteautorizzato = User.objects.get(pk=userauth) except User.DoesNotExist as dne: return HttpResponseRedirect(reverse('Login:login',args={})) if not domain2edit: domain2edit = utenteautorizzato.domain_id value=dict() value['utenteautorizzato']=utenteautorizzato print(utenteautorizzato.nome) print("livello autorizzazione",utenteautorizzato.securitylevel_id) securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id) securityrow = getSecurityRow(utenteautorizzato.securitylevel_id) value['securitylevel'] = getSecurityLevel(utenteautorizzato.securitylevel_id) value['securityrow'] = securityrow value['securitylist'] = getSecurityList(securityrow) for i in securityrow: print("-{}-".format(i.securityoptions.id)) value['securityparms'] = {'utente':utenteautorizzato.id,'dominio':utenteautorizzato.domain.id } value['securityrowLen'] = len(securityrow) value['navbar']=True ### recupero informazioni utente: listautenti = User.objects.filter(domain_id = domain2edit) size=0 for i in listautenti: size = size + i.mail_quota value['dominio_mail_quota'] = size nota={'data':datetime.now().strftime('%m/%d%Y %H:%M:%S')} registra(utenteautorizzato,5,nota) return render(request,'Utente.Info.html',value) def UserReadOnlyList(request): session = getSessionParms(request) userauth = session['_userauth_'] user2edit = session['_user2edit_'] domain2edit = session['_domain2edit_'] request.session['_from_']="Utenti:UserList" print(next) if not user2edit: user2edit = userauth try: utenteautorizzato = User.objects.get(pk=userauth) except User.DoesNotExist as dne: return HttpResponseRedirect(reverse('Login:login',args={})) if not domain2edit: domain2edit = utenteautorizzato.domain.id dominio = Domini.objects.get(pk=domain2edit) userlist = User.objects.filter(domain=domain2edit).order_by('mail') value={} value['utenteautorizzato'] = utenteautorizzato value['userlist'] = userlist value['dominio'] = dominio value['navbar'] = True print("livello autorizzazione",utenteautorizzato.securitylevel_id) securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id) securityrow = getSecurityRow(utenteautorizzato.securitylevel_id) securitylist = getSecurityList(securityrow) value['securityrow'] = securityrow value['securityrowLen'] = len(securityrow) value['securitylist'] = securitylist return render(request,'Utente.ReadOnlyList.html',value)