views.py 27 KB

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