views.py 27 KB

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