views.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  1. from django.shortcuts import render
  2. from django.http import HttpResponseRedirect
  3. from django.urls import reverse
  4. from .models import *
  5. from .forms import *
  6. from supporto import managepassword
  7. from sicurezza.views import *
  8. from logger.views import *
  9. from comunicazioni.views import *
  10. from datetime import date,datetime
  11. from configurazione.views import *
  12. from django.db import IntegrityError
  13. from mqtt import views as mm #questo dovrebbe essere il vecchio sistema
  14. from mqtt.views import mqtt
  15. import re
  16. import json
  17. def UserList(request):
  18. session = getSessionParms(request)
  19. userauth = session['_userauth_']
  20. user2edit = session['_user2edit_']
  21. domain2edit = session['_domain2edit_']
  22. request.session['_from_']="Utenti:UserList"
  23. print(next)
  24. if not user2edit:
  25. user2edit = userauth
  26. try:
  27. utenteautorizzato = User.objects.get(pk=userauth)
  28. except User.DoesNotExist as dne:
  29. return HttpResponseRedirect(reverse('Login:login',args={}))
  30. if not domain2edit:
  31. domain2edit = utenteautorizzato.domain.id
  32. dominio = Domini.objects.get(pk=domain2edit)
  33. userlist = User.objects.filter(domain=domain2edit).order_by('mail')
  34. value={}
  35. value['utenteautorizzato'] = utenteautorizzato
  36. value['user'] = None
  37. value['userlist'] = userlist
  38. value['dominio'] = dominio
  39. value['navbar'] = True
  40. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  41. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  42. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  43. value['securityrow'] = securityrow
  44. value['securityrowLen'] = len(securityrow)
  45. value['CANWRITE']=True #per il momento, questo flag serve a capire se e' un record nuovo
  46. if request.method=="POST":
  47. if "Nuova Email" in request.POST:
  48. print('nuova email')
  49. request.session['_user2edit_'] = -1
  50. return HttpResponseRedirect(reverse('Utenti:UserEdit',args={}))
  51. if "Lista Email" in request.POST:
  52. request.session['_user2edit_'] = -1
  53. return HttpResponseRedirect(reverse('Utenti:UserReadOnlyList',args={}))
  54. if "editbutton" in request.POST:
  55. print('id da editare',request.POST['editbutton'])
  56. request.session['_user2edit_'] = request.POST['editbutton']
  57. return HttpResponseRedirect(reverse('Utenti:UserEdit',args={}))
  58. if "enabledisablebutton" in request.POST:
  59. print('id da disattivare',request.POST['enabledisablebutton'])
  60. idpost = request.POST['enabledisablebutton']
  61. u = User.objects.get(pk=idpost)
  62. u.enabled = not u.enabled
  63. if u.enabled: u.tobedeleted = False
  64. t = date.today()
  65. u.account_date_disabled=t.strftime("%Y-%m-%d")
  66. u.save()
  67. if 'enablepassword' in request.POST:
  68. print('id da attivare',request.POST['enablepassword'])
  69. idpost = request.POST['enablepassword']
  70. u = User.objects.get(pk=idpost)
  71. u.enabled = True
  72. u.tobedeleted = False
  73. u.account_date_disabled = None
  74. u.clear = getPassword()
  75. u.crypt = managepassword.GeneraPassword(u.clear)
  76. u.save()
  77. request.session['_user2edit_'] = idpost
  78. return HttpResponseRedirect(reverse('Utenti:UserEdit',args={}))
  79. if 'tobedeletedbutton' in request.POST:
  80. print('id da cancellare',request.POST['tobedeletedbutton'])
  81. idpost = request.POST['tobedeletedbutton']
  82. u = User.objects.get(pk=idpost)
  83. u.tobedeleted = not u.tobedeleted
  84. u.save()
  85. if 'sendInfoToAdmin' in request.POST:
  86. print('richista informazioni mail')
  87. sm = ServizioMail()
  88. idpost = request.POST['sendInfoToAdmin']
  89. record = User.objects.get(pk=idpost)
  90. print(record.nome)
  91. sm.set_rcptto(r'{}@{}'.format(utenteautorizzato.mail.strip(),utenteautorizzato.domain.nome.strip()))
  92. template=Template.objects.get(pk=getConfigurazione("mail:info:info"))
  93. sm.set_oggetto(template.oggetto)
  94. sm.set_soggetto(template.soggetto)
  95. dictdict={}
  96. dictdict['utente'] = record
  97. dictdict['utenteautorizzato'] = utenteautorizzato
  98. dictdict['data'] = datetime.now()
  99. sm.set_data(dictdict)
  100. sm.send()
  101. if 'ritorno' in request.POST:
  102. return HttpResponseRedirect(reverse('Login:welcome',args={}))
  103. if 'notaSubmit' in request.POST:
  104. fm = formMsg(request.POST)
  105. if fm.is_valid():
  106. oggetto = fm.cleaned_data.get('oggetto')
  107. soggetto = fm.cleaned_data.get('soggetto')
  108. conferma = fm.cleaned_data.get('conferma')
  109. utentiToSend = User.objects.filter(domain=dominio).filter(enabled=True)
  110. print('dominio',dominio.id)
  111. print('numero di utenti da raggiungere',len(utentiToSend))
  112. print('soggetto',soggetto)
  113. print('oggetto',oggetto)
  114. print('conferma',conferma)
  115. if conferma:
  116. count=0
  117. for uts in utentiToSend:
  118. count = count +1
  119. print('generato nuovo record',count,uts.mail)
  120. sm = ServizioMail()
  121. sm.set_rcptto(r'{}@{}'.format(uts.mail.strip(),uts.domain.nome.strip()))
  122. sm.set_oggetto(oggetto)
  123. sm.set_soggetto(soggetto)
  124. dictdict={}
  125. dictdict['utente'] = uts
  126. dictdict['utenteautorizzato'] = utenteautorizzato
  127. dictdict['data'] = datetime.now()
  128. sm.set_data(dictdict)
  129. sm.send()
  130. if 'alldeletedbutton' in request.POST:
  131. print('Richiesta di cancellazione di tutte le email disattivate')
  132. listaemail = User.objects.filter(domain=dominio.id)
  133. for lm in listaemail:
  134. if not lm.enabled:
  135. print('email',lm.mail)
  136. lm.tobedeleted=True
  137. lm.save()
  138. print('elenco delle email da rimuovere',len(listaemail))
  139. return render(request,"Utente.List.html",value)
  140. '''
  141. sia userEdit che UserNew usano uno schema semplificato per gestire gli utenti.
  142. per evitare di usare due funzioni che per la maggior parte del tempo si sovrappongono,
  143. genero una terza funzione proprio per gestire tutte le parti comuni.
  144. Questa parte comune, chiamata usermaster, ricevera' svariati parametri e ne ritornera'
  145. altrettanti per gestire l'oggetto mail sia vuoto,nuovo, che da editare.
  146. '''
  147. def UserEdit(request):
  148. session = getSessionParms(request)
  149. userauth = session['_userauth_']
  150. user2edit = session['_user2edit_']
  151. print('user2edit: ',user2edit)
  152. domain2edit = session['_domain2edit_']
  153. _from_ = session['_from_']
  154. print("_from_",_from_)
  155. try:
  156. utenteautorizzato = User.objects.get(pk=userauth)
  157. except User.DoesNotExist as dne:
  158. return HttpResponseRedirect(reverse('Login:login',args={}))
  159. try:
  160. dominio = Domini.objects.get(pk=domain2edit)
  161. except Domini.DoesNotExist as dne:
  162. print("errore, il dominio non e' correttamente gestito in useredit")
  163. dominio = utenteautorizzato.domain
  164. value={}
  165. value['CANWRITE']=False
  166. mailinglist = list()
  167. nuovorecord = False
  168. if not user2edit:
  169. # non e' presente un utente.
  170. record = utenteautorizzato
  171. elif int(user2edit)>0:
  172. record = User.objects.get(pk=user2edit)
  173. totalmailinglist = record.domain.liste_set.all()
  174. for i in totalmailinglist:
  175. if i.listeaccount_set.filter(mail__id = record.id):
  176. mailinglist.append(i)
  177. print("stato mailinglist",mailinglist)
  178. value['mailinglist'] = mailinglist
  179. #13.9.22
  180. #questo campo deve essere sempre valorizzato.
  181. #soprattutto in vista del cambiamento al riferimento server dal dominio al singolo account.
  182. if not record.mail_server_id:
  183. record.mail_server_id = dominio.mail_server_id
  184. elif int(user2edit)-1:
  185. nuovorecord = True
  186. print('dominio:',dominio.nome)
  187. record = User()
  188. record.domain = dominio
  189. record.enabled = dominio.enabled
  190. record.pop3 = dominio.pop3
  191. record.imap = dominio.imap
  192. record.webmail = dominio.webmail
  193. record.smtp = dominio.smtp
  194. record.smtp_relay = dominio.smtp_relay
  195. record.sieve = dominio.sieve
  196. record.antivirus = dominio.antivirus
  197. record.spf = dominio.spf
  198. record.blacklist = dominio.blacklist
  199. record.nextcloud = dominio.nextcloud
  200. record.nextcloud_pwd = dominio.nextcloud_pwd
  201. record.proxy = dominio.proxy
  202. record.lmtp = dominio.lmtp
  203. record.password_change_enable=1
  204. # memorizza i dati del server di posta dal dominio
  205. # ma solo se l'utente non e' gia presente.
  206. record.mail_server_id = dominio.mail_server_id
  207. record.mail_proxy_id = dominio.mail_proxy_id
  208. record.lmtp_server_id = dominio.lmtp_server_id
  209. record.sql_remote_id = dominio.sql_remote_id
  210. record.securitylevel_id = getConfigurazione('default-level')
  211. record.warning_mail_quota = dominio.warning_mail_quota
  212. #record.limit_mail_quota = dominio.limit_mail_quota
  213. record.clear = getPassword()
  214. record.crypt = managepassword.GeneraPassword(record.clear)
  215. print('record.clear:',record.clear)
  216. mq = mqtt()
  217. # mq.build('topic','messaggio') #vediamo se il default funziona
  218. # mq.build('richiesta','MailingList')
  219. mq.build('stampa',True)
  220. tmp = dict()
  221. tmp['utenteautorizzato'] = "".join((utenteautorizzato.mail,'@',utenteautorizzato.domain.nome))
  222. mq.build('data',tmp)
  223. mq.pubblica()
  224. tmp=None
  225. value['utenteautorizzato'] = utenteautorizzato
  226. value['user'] = record
  227. value['userlist'] = None
  228. value['dominio'] = record.domain
  229. value['navbar'] = True
  230. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  231. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  232. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  233. securitylist = getSecurityList(securityrow)
  234. value['securityrow'] = securityrow
  235. value['securityrowLen'] = len(securityrow)
  236. value['securitylist'] = securitylist
  237. value['mail_password_length']=getConfigurazione('mail_password_length')
  238. value['mail_password_message'] = getConfigurazione('mail_password_message')
  239. d = Domini.objects.all().order_by('nome')
  240. domainlist = []
  241. for i in d:
  242. domainlist.append((i.id,i.nome))
  243. value['domainlist'] = domainlist
  244. m = MailServer.objects.all().order_by('ip')
  245. value['mailserverlist'] = m.filter(enabled=True)
  246. value['lmtpserverlist'] = m.filter(enabled=True)
  247. value['sqlremotelist'] = m.filter(enabled=True)
  248. value['mailproxylist'] = m.filter(enabled=True)
  249. # livello utenti (si da' la possibilita di selezionare fino al livello proprio)
  250. livello = SecurityLevel.objects.filter(id__lte = utenteautorizzato.securitylevel_id).filter(enabled=True)
  251. value['livello']=livello
  252. # non effettua il salvataggio, ma ritorna alla lista FTP
  253. if 'Ritorno' in request.POST:
  254. return HttpResponseRedirect(reverse('Utenti:UserList'))
  255. oldpassword = None
  256. if request.method=="POST":
  257. formemail = formEmail(request.POST)
  258. formemail.update()
  259. print("request Method: ",request.method)
  260. if 'emailtest' in request.POST:
  261. '''
  262. richiesta di invio dei parametri di test
  263. '''
  264. print("richiesto invio prova di stampa")
  265. 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})
  266. if 'sendInfoToMe' in request.POST:
  267. print('richeista informazioni mail')
  268. sm = ServizioMail()
  269. sm.set_rcptto(r'{}@{}'.format(record.mail.strip(),record.domain.nome.strip()))
  270. template=Template.objects.get(pk=getConfigurazione("mail:info:info"))
  271. sm.set_oggetto(template.oggetto)
  272. sm.set_soggetto(template.soggetto)
  273. dictdict={}
  274. dictdict['utente'] = record
  275. dictdict['utenteautorizzato'] = utenteautorizzato
  276. dictdict['precedente_password'] = oldpassword
  277. dictdict['data'] = datetime.now()
  278. sm.set_data(dictdict)
  279. sm.send()
  280. if 'sendInfoToAdmin' in request.POST:
  281. print('richeista informazioni mail')
  282. sm = ServizioMail()
  283. sm.set_rcptto(r'{}@{}'.format(utenteautorizzato.mail.strip(),utenteautorizzato.domain.nome.strip()))
  284. template=Template.objects.get(pk=getConfigurazione("mail:info:info"))
  285. sm.set_oggetto(template.oggetto)
  286. sm.set_soggetto(template.soggetto)
  287. dictdict={}
  288. dictdict['utente'] = record
  289. dictdict['utenteautorizzato'] = utenteautorizzato
  290. dictdict['data'] = datetime.now()
  291. sm.set_data(dictdict)
  292. sm.send()
  293. if formemail.is_valid():
  294. print("Formemail.is_valid()")
  295. if 'mail' in formemail.cleaned_data:
  296. record.mail = formemail.cleaned_data.get('mail').lower() #le mail dovrebbero essere sempre salvate in minuscolo.
  297. record.nome = formemail.cleaned_data.get('nome') #dovrebbe venir modificato solo alla creazione
  298. record.domain_id = formemail.cleaned_data.get('dominio')
  299. # pero' non mi piace... dovrebbe reagire in base alla presenza dei campi nel form
  300. # secondo me devo toglierli dalla form di validazione e usarla solo per le cose importanti
  301. if utenteautorizzato.securitylevel_id > 5:
  302. if 'enabled' in formemail.cleaned_data:
  303. record.enabled = formemail.cleaned_data.get('enabled')
  304. if 'pop3' in formemail.cleaned_data:
  305. record.pop3 = formemail.cleaned_data.get('pop3')
  306. if 'imap' in formemail.cleaned_data:
  307. record.imap = formemail.cleaned_data.get('imap')
  308. if 'smtp' in formemail.cleaned_data:
  309. record.smtp = formemail.cleaned_data.get('smtp')
  310. if 'smtp_relay' in formemail.cleaned_data:
  311. record.smtp_relay = formemail.cleaned_data.get('smtp_relay')
  312. print(formemail.cleaned_data)
  313. if 'lmtp' in formemail.cleaned_data:
  314. record.lmtp = formemail.cleaned_data.get('lmtp')
  315. if 'lmtp_server' in formemail.cleaned_data:
  316. record.lmtp_server_id = formemail.cleaned_data.get('lmtp_server')
  317. if 'mail_server' in formemail.cleaned_data:
  318. record.mail_server_id = formemail.cleaned_data.get('mail_server')
  319. if 'mail_proxy' in formemail.cleaned_data:
  320. record.mail_proxy_id = formemail.cleaned_data.get('mail_proxy')
  321. if record.mail_proxy_id:
  322. record.proxy_host = record.mail_proxy.ip #dovra' essere rimosso in futuro
  323. if 'sql_remote' in formemail.cleaned_data:
  324. record.sql_remote_id = formemail.cleaned_data.get('sql_remote')
  325. else: record_sql_remote_id = 0
  326. if 'webmail' in formemail.cleaned_data:
  327. record.webmail = formemail.cleaned_data.get('webmail')
  328. if 'securitylevel' in formemail.cleaned_data:
  329. record.securitylevel_id = formemail.cleaned_data.get('securitylevel')
  330. if 'nextcloud' in formemail.cleaned_data:
  331. record.nextcloud = formemail.cleaned_data.get('nextcloud')
  332. if 'nextcloud_pwd' in formemail.cleaned_data:
  333. record.nextcloud_pwd = formemail.cleaned_data.get('nextcloud_pwd')
  334. if 'sms' in formemail.cleaned_data:
  335. record.sms = formemail.cleaned_data.get('sms')
  336. if 'sendafile' in formemail.cleaned_data:
  337. record.sendafile = formemail.cleaned_data.get('sendafile')
  338. if 'sieve' in formemail.cleaned_data:
  339. record.sieve = formemail.cleaned_data.get('sieve')
  340. if 'antivirus' in formemail.cleaned_data:
  341. record.antivirus = formemail.cleaned_data.get('antivirus')
  342. if 'blacklist' in formemail.cleaned_data:
  343. record.blacklist = formemail.cleaned_data.get('blacklist')
  344. if 'spf' in formemail.cleaned_data:
  345. record.spf = formemail.cleaned_data.get('spf')
  346. record.warning_mail_quota = formemail.cleaned_data.get('warning_mail_quota')
  347. record.limit_mail_quota = formemail.cleaned_data.get('limit_mail_quota')
  348. record.nota = formemail.cleaned_data.get('nota')
  349. record.mail_di_recupero = formemail.cleaned_data.get('mail_di_recupero')
  350. record.forward = formemail.cleaned_data.get('forward')
  351. print('stato password_change_enabled')
  352. print('password_change_enabled originale',record.password_change_enabled)
  353. print('password_change_enabled rilevato',formemail.cleaned_data.get('password_change_enabled'))
  354. if not 'password_change_enabled' in formemail.changed_data:
  355. print("presente campo password_change_enabled")
  356. record.password_change_enabled = formemail.cleaned_data.get('password_change_enabled')
  357. else:
  358. print("Campo password_change_enabled non presente")
  359. print('record.password_change_enabled',record.password_change_enabled)
  360. if record.password_change_enabled:
  361. oldpassword =record.clear #memorizza la vecchia password
  362. record.clear = formemail.cleaned_data.get('password1')
  363. record.crypt = managepassword.GeneraPassword(record.clear)
  364. if oldpassword != record.clear:
  365. oldchanged = True
  366. mq = mqtt()
  367. # mq.build('topic','messaggio') #vediamo se il default funziona
  368. # mq.build('richiesta','MailingList')
  369. mq.build('stampa',True)
  370. tmp = dict()
  371. tmp['utenteautorizzato'] = "".join((utenteautorizzato.mail,'@',utenteautorizzato.domain.nome))
  372. tmp['utentepassword'] = ''.join((record.mail,"@",record.domain.nome))
  373. tmp['vecchia password'] = oldpassword
  374. tmp['nuova password'] = record.clear
  375. mq.build('data',tmp)
  376. mq.pubblica()
  377. tmp=None
  378. t = date.today()
  379. record.last_password_update = t.strftime("%Y-%m-%d")
  380. record.tobedeleted = formemail.cleaned_data.get('tobedeleted')
  381. if record.tobedeleted:
  382. record.enabled = False
  383. record.save()
  384. mq = mqtt()
  385. # mq.build('topic','messaggio') #vediamo se il default funziona
  386. # mq.build('richiesta','MailingList')
  387. mq.build('stampa',True)
  388. tmp = dict()
  389. tmp['utenteautorizzato'] = "".join((utenteautorizzato.mail,'@',utenteautorizzato.domain.nome))
  390. tmp['utentetobedeleted'] = ''.join((record.mail,"@",record.domain.nome))
  391. mq.build('data',tmp)
  392. mq.pubblica()
  393. tmp=None
  394. return HttpResponseRedirect(reverse('Utenti:UserList'))
  395. try:
  396. record.save()
  397. except IntegrityError as ie:
  398. print('Integrity Error',ie)
  399. user2edit = record.id
  400. # quesito: come faccio a tornare alla pagina orginale?
  401. return HttpResponseRedirect(reverse(_from_,args={}))
  402. '''
  403. salvato il record, provvediamo anche a inviare i dati per mqtt per i server remoti
  404. l'operazione viene eseguita solo se sql_remote e' diverso da 0
  405. '''
  406. c = mm.start()
  407. if record.sql_remote_id:
  408. mml={}
  409. mml['op']='upd'
  410. mml['id']=record.id
  411. mml['rm']=record.sql_remote.ip
  412. print(mml)
  413. mm.publish(c,"Richiesta/Mail",json.dumps(mml))
  414. else: print("mqtt: sql_remote e' impostato a 0")
  415. '''
  416. salvato il recordo, provvediamo a inviare una mail
  417. sia all'account ufficiale che alla mail di riserva (se esiste)
  418. per comunicare l'effettivo aggiornamento e avvisare.
  419. '''
  420. mail_who = formemail.cleaned_data.get('mail_who')
  421. # si tratta di un nuovo record
  422. if nuovorecord:
  423. print('generato nuovo record')
  424. sm = ServizioMail()
  425. sm.set_rcptto(r'{}@{}'.format(record.mail.strip(),record.domain.nome.strip()))
  426. sm.add_to(re.findall("[\w\.-_]+@[\w\.]+",getConfigurazione('mail_notification')))
  427. #if utenteautorizzato.id == record.id:
  428. sm.add_to(utenteautorizzato.mail + "@" + utenteautorizzato.domain.nome)
  429. if mail_who:
  430. sm.add_to(re.findall("[\w\.-_]+@[\w\.]+",mail_who))
  431. template=Template.objects.get(pk=getConfigurazione("mail:info:account"))
  432. sm.set_oggetto(template.oggetto)
  433. sm.set_soggetto(template.soggetto)
  434. dictdict={}
  435. dictdict['utente'] = record
  436. dictdict['utenteautorizzato'] = utenteautorizzato
  437. dictdict['precedente_password'] = oldpassword
  438. dictdict['data'] = datetime.now()
  439. sm.set_data(dictdict)
  440. sm.send()
  441. else:
  442. if record.password_change_enabled and oldpassword != record.clear:
  443. print('richiesto aggiornamento password')
  444. sm = ServizioMail()
  445. sm.set_rcptto(r'{}@{}'.format(record.mail.strip(),record.domain.nome.strip()))
  446. sm.add_to(re.findall("[\w\.-_]+@[\w\.]+",getConfigurazione('mail_notification')))
  447. #if utenteautorizzato.id == record.id:
  448. sm.add_to(utenteautorizzato.mail + "@" + utenteautorizzato.domain.nome)
  449. if mail_who:
  450. sm.add_to(re.findall("[\w\.-_]+@[\w\.]+",mail_who))
  451. template=Template.objects.get(pk=getConfigurazione("mail:info:newpassword"))
  452. sm.set_oggetto(template.oggetto)
  453. sm.set_soggetto(template.soggetto)
  454. dictdict={}
  455. dictdict['utente'] = record
  456. dictdict['utenteautorizzato'] = utenteautorizzato
  457. dictdict['precedente_password'] = oldpassword
  458. dictdict['data'] = datetime.now()
  459. sm.set_data(dictdict)
  460. sm.send()
  461. if record.nextcloud and record.nextcloud_pwd:
  462. # la sezione nextcloud e' attiva per l'utente e la password e' in sync
  463. mq = mqtt()
  464. mq.build('stampa',True)
  465. mq.build('topic','nextcloud/password')
  466. tmp = dict()
  467. tmp['utenteautorizzato'] = "".join((utenteautorizzato.mail,'@',utenteautorizzato.domain.nome))
  468. tmp['utente'] = ''.join((record.mail,"@",record.domain.nome))
  469. tmp['password'] = record.clear
  470. mq.build('data',tmp)
  471. mq.pubblica()
  472. tmp=None
  473. mq = None
  474. user2edit = record.id
  475. request.session['_user2edit_'] = user2edit
  476. # quesito: come faccio a tornare alla pagina orginale?
  477. return HttpResponseRedirect(reverse(_from_,args={}))
  478. # pero' non vale, nel caso non dovessi dover tornare alla lista?
  479. # stavp giusto pensando di inviare il referer, per far capire dove tornare.
  480. else:
  481. print("formemail.is_valid non passato")
  482. print("formemail.errors")
  483. print(formemail.errors)
  484. for e in formemail.errors:
  485. print("errors:",e)
  486. print("***")
  487. # tecnicamente ricarica i dati dal post, ma se alcuni campi non ci sono, come si fa.
  488. formemail = formEmail(request.POST)
  489. formemail.update()
  490. value['formemail'] = formemail
  491. else:
  492. ## verifica se e' post o meno....
  493. print('Post Non validato')
  494. temp={}
  495. temp['sieve'] = record.sieve
  496. temp['antivirus'] = record.antivirus
  497. temp['blacklist'] = record.blacklist
  498. temp['spf'] = record.spf
  499. temp['mail'] = record.mail
  500. print("mail: ",temp['mail'])
  501. temp['nome'] = record.nome
  502. temp['dominio'] = record.domain_id
  503. temp['dominio_domain'] = record.domain.nome
  504. temp['password1'] = record.clear
  505. temp['password2'] = record.clear
  506. temp['clear'] = record.clear
  507. temp['securitylevel'] = record.securitylevel_id
  508. temp['enabled'] = record.enabled
  509. temp['pop3'] = record.pop3
  510. temp['imap'] = record.imap
  511. temp['smtp'] = record.smtp
  512. temp['smtp_relay'] = record.smtp_relay
  513. temp['lmtp'] = record.lmtp
  514. temp['lmtp_server'] = record.lmtp_server_id
  515. temp['mail_server'] = record.mail_server_id
  516. temp['sql_remote'] = record.sql_remote_id
  517. temp['mail_proxy'] = record.mail_proxy_id
  518. temp['nextcloud'] = record.nextcloud
  519. temp['nextcloud_pwd'] = record.nextcloud_pwd
  520. temp['webmail'] = record.webmail
  521. temp['sms'] = record.sms
  522. temp['sendafile'] = record.sendafile
  523. temp['tobedeleted'] = record.tobedeleted
  524. temp['mail_quota'] = record.mail_quota
  525. temp['accountdatecreation'] = record.account_date_creation
  526. temp['accountdatedisabled'] = record.account_date_disabled
  527. temp['sms_communication'] = record.sms_communication
  528. temp['nota'] = record.nota
  529. temp['last_mail_checked'] = record.last_mail_checked
  530. temp['proxy_host'] = record.proxy_host
  531. #temp['bigmail'] = record.bigmail
  532. temp['mail_di_recupero'] = record.mail_di_recupero
  533. temp['warning_mail_quota'] = record.warning_mail_quota
  534. temp['limit_mail_quota'] = record.limit_mail_quota
  535. temp['password_change_enabled'] = record.password_change_enabled
  536. temp['passwordchanged'] = False
  537. temp['forward'] = record.forward
  538. formemail = formEmail(temp)
  539. formemail.update()
  540. value['formemail'] = formemail
  541. return render(request,'Utente.Edit.html',value)
  542. def UserInfo(request):
  543. session = getSessionParms(request)
  544. userauth = session['_userauth_']
  545. domain2edit = session['_domain2edit_']
  546. # da qui carica i dati dal db.
  547. try:
  548. utenteautorizzato = User.objects.get(pk=userauth)
  549. except User.DoesNotExist as dne:
  550. return HttpResponseRedirect(reverse('Login:login',args={}))
  551. if not domain2edit:
  552. domain2edit = utenteautorizzato.domain_id
  553. value=dict()
  554. value['utenteautorizzato']=utenteautorizzato
  555. print(utenteautorizzato.nome)
  556. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  557. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  558. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  559. value['securitylevel'] = getSecurityLevel(utenteautorizzato.securitylevel_id)
  560. value['securityrow'] = securityrow
  561. value['securitylist'] = getSecurityList(securityrow)
  562. for i in securityrow: print("-{}-".format(i.securityoptions.id))
  563. value['securityparms'] = {'utente':utenteautorizzato.id,'dominio':utenteautorizzato.domain.id }
  564. value['securityrowLen'] = len(securityrow)
  565. value['navbar']=True
  566. ### recupero informazioni utente:
  567. listautenti = User.objects.filter(domain_id = domain2edit)
  568. size=0
  569. for i in listautenti:
  570. size = size + i.mail_quota
  571. value['dominio_mail_quota'] = size
  572. nota={'data':datetime.now().strftime('%m/%d%Y %H:%M:%S')}
  573. registra(utenteautorizzato,5,nota)
  574. return render(request,'Utente.Info.html',value)
  575. def UserReadOnlyList(request):
  576. session = getSessionParms(request)
  577. userauth = session['_userauth_']
  578. user2edit = session['_user2edit_']
  579. domain2edit = session['_domain2edit_']
  580. request.session['_from_']="Utenti:UserList"
  581. print(next)
  582. if not user2edit:
  583. user2edit = userauth
  584. try:
  585. utenteautorizzato = User.objects.get(pk=userauth)
  586. except User.DoesNotExist as dne:
  587. return HttpResponseRedirect(reverse('Login:login',args={}))
  588. if not domain2edit:
  589. domain2edit = utenteautorizzato.domain.id
  590. dominio = Domini.objects.get(pk=domain2edit)
  591. userlist = User.objects.filter(domain=domain2edit).order_by('mail')
  592. value={}
  593. value['utenteautorizzato'] = utenteautorizzato
  594. value['userlist'] = userlist
  595. value['dominio'] = dominio
  596. value['navbar'] = True
  597. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  598. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  599. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  600. securitylist = getSecurityList(securityrow)
  601. value['securityrow'] = securityrow
  602. value['securityrowLen'] = len(securityrow)
  603. value['securitylist'] = securitylist
  604. return render(request,'Utente.ReadOnlyList.html',value)