views.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. from django.shortcuts import render
  2. from django.http import HttpResponseRedirect,HttpResponse,HttpRequest
  3. from django.urls import reverse
  4. from datetime import datetime
  5. import json
  6. from .models import *
  7. from .forms import *
  8. from supporto import managepassword
  9. from sicurezza.views import *
  10. from logger.views import *
  11. from comunicazioni.views import *
  12. from datetime import date,datetime
  13. from time import time,strftime
  14. from configurazione.views import *
  15. import re
  16. from mqtt import views as m
  17. from mqtt.views import mqtt
  18. # Create your views here.
  19. def SqlDatabaseList(request):
  20. session = getSessionParms(request)
  21. userauth = session['_userauth_']
  22. sqldatabase2edit = session['_sqldatabase2edit_']
  23. domain2edit = session['_domain2edit_']
  24. request.session['_from_']="Sql:SqlDatabaseList"
  25. try:
  26. utenteautorizzato = User.objects.get(pk=userauth)
  27. except User.DoesNotExist as dne:
  28. return HttpResponseRedirect(reverse('Login:login',args={}))
  29. if not domain2edit:
  30. domain2edit = utenteautorizzato.domain.id
  31. dominio = Domini.objects.get(pk=domain2edit)
  32. value={}
  33. value['utenteautorizzato'] = utenteautorizzato
  34. value['user'] = None
  35. value['sqldatabaselist'] = SqlDatabase.objects.filter(dominio=domain2edit).order_by('nome')
  36. value['dominio'] = dominio
  37. value['navbar'] = True
  38. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  39. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  40. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  41. value['securityrow'] = securityrow
  42. value['securityrowLen'] = len(securityrow)
  43. value['CANWRITE']=True #per il momento, questo flag serve a capire se e' un record nuovo
  44. # step: procurare la riga ftp master
  45. path = None
  46. print('dominio',dominio.id)
  47. listaftp = dominio.ftpuser_set.all()
  48. path = None
  49. for f in listaftp:
  50. if f.ftpgroup.master:
  51. path = ''.join((f.ftpgroup.home,f.dominio.nome))
  52. print('home ftp',path)
  53. print('Test Database HTTP Server',dominio.id,dominio.nome)
  54. if path:
  55. value['has_http_server'] = True
  56. else:
  57. value['has_http_server']= False
  58. print('non risulta assegnato il server http')
  59. #vecchia versione mqtt
  60. c = m.start()
  61. # nuova versione mqtt
  62. mq = mqtt()
  63. mq.build('topic','Messaggio')
  64. mq.build('richiesta','Database')
  65. mq.build('stampa',False)
  66. tmp = dict()
  67. tmp['login'] = "".join((utenteautorizzato.nome,"@",utenteautorizzato.domain.nome))
  68. tmp['remote'] = request.META.get('REMOTE_ADDRESS')
  69. tmp['forwarder' ] = request.META.get('HTTP_X_FORWARDER_FOR','')
  70. tmp['host'] = request.META.get('REMOTE_ADDR','')
  71. mq.build('data',tmp)
  72. mq.pubblica()
  73. tmp=None
  74. mq=None
  75. if request.method == 'POST':
  76. print('request.method',request.method)
  77. print(request.POST)
  78. if 'NuovoSqlDatabase' in request.POST:
  79. print('Richiesto nuovo database')
  80. request.session['_sqldatabase2edit_'] = 0
  81. return HttpResponseRedirect(reverse('Sql:SqlDatabaseEdit',args={}))
  82. if 'AggiornaDbConf' in request.POST and path != None:
  83. print('Richiesta Aggiornamento db.conf')
  84. mq = mqtt()
  85. mq.build('topic','richiesta/database')
  86. mq.build('richiesta','writedb.conf')
  87. mq.build('stampa',False)
  88. tmp = dict()
  89. data = list()
  90. for d in value['sqldatabaselist']:
  91. tmp=dict()
  92. if d.enabled and not d.tobedeleted:
  93. print('database',d.nome)
  94. tmp['do']=d.dominio.nome
  95. tmp['id']=d.dominio.id
  96. tmp['db']=d.nome
  97. tmp['us']=d.username
  98. tmp['ho']=d.server.server
  99. tmp['pw']=d.password
  100. tmp['pa']=path
  101. data.append(tmp)
  102. print('data',data)
  103. mq.build('data',data)
  104. mq.pubblica()
  105. tmp=None
  106. mq=None
  107. if 'LeggiDbConf' in request.POST and path != None:
  108. print('richiesta lettura db.conf')
  109. mq = mqtt()
  110. mq.build('topic','richiesta/database')
  111. mq.build('richiesta','readdb.conf')
  112. mq.build('stampa',False)
  113. data = list()
  114. q={}
  115. q['op']='readdbconf'
  116. q['do']=dominio.nome
  117. q['id']=dominio.id
  118. q['pa']=path
  119. print(q)
  120. data.append(q)
  121. print(data)
  122. mq.build('data',data)
  123. mq.pubblica()
  124. tmp=None
  125. mq=None
  126. # backup di tutti i db nel dominio
  127. sqlpath = getConfigurazione('sql:path')
  128. backuppath = getConfigurazione('sql:backuppath')
  129. if 'BackupDbDom' in request.POST:
  130. print('Richiesta backup Database Dominio')
  131. q = dict()
  132. database2backup = list()
  133. for i in value['sqldatabaselist']:
  134. if i.enabled:
  135. infodb = dict()
  136. infodb['db']=i.nome
  137. infodb['us']=i.username
  138. infodb['ho']=i.server.server
  139. infodb['pw']=i.password
  140. infodb['do']=i.dominio.nome
  141. infodb['id']=i.dominio.id
  142. infodb['dbid'] = i.id
  143. f = i.dominio.ftpuser_set.all().filter(ftpgroup__master=True)
  144. for singleftp in f:
  145. print(dir(singleftp))
  146. print(singleftp.homedir,singleftp.ftpgroup.l3,singleftp.ftpgroup.directory % { 'ftp':singleftp.utente,'site':i.dominio.nome })
  147. #infodb['st'] = x.homedir + "/" + sqlpath
  148. tmp = singleftp.ftpgroup.directory % { 'ftp':singleftp.utente,'site':i.dominio.nome }
  149. infodb['st'] =tmp
  150. infodb['pa'] = "/" + backuppath
  151. infodb['pr'] = 0 #periodo singolo
  152. print('infodb',infodb)
  153. database2backup.append(infodb)
  154. print(q)
  155. mq = mqtt()
  156. mq.build('topic','richiesta/database')
  157. mq.build('richiesta','backupdatabasedominio')
  158. mq.build('stampa',True)
  159. mq.build('data',database2backup)
  160. mq.pubblica()
  161. tmp=None
  162. mq=None
  163. if 'edit' in request.POST:
  164. print('edit',request.POST.get('edit'))
  165. request.session['_sqldatabase2edit_'] = request.POST.get('edit')
  166. return HttpResponseRedirect(reverse('Sql:SqlDatabaseEdit',args={}))
  167. if 'enable' in request.POST:
  168. print('enabled in request.POST',request.POST.get('enable'))
  169. sqlsingledatabase = SqlDatabase.objects.get(pk=request.POST.get('enable'))
  170. sqlsingledatabase.enabled = True
  171. #qlsingledatabase.tobedeleted = False
  172. sqlsingledatabase.save()
  173. q={}
  174. q['op']='enable'
  175. q['db']=sqlsingledatabase.nome
  176. q['us']=sqlsingledatabase.username
  177. q['pw']=sqlsingledatabase.password
  178. q['ho']=sqlsingledatabase.server.server
  179. mq = mqtt()
  180. mq.build('topic','richiesta/database')
  181. mq.build('richiesta','enable_database')
  182. mq.build('stampa',True)
  183. mq.build('data',q)
  184. mq.pubblica()
  185. tmp=None
  186. mq=None
  187. if 'disable' in request.POST:
  188. print('disabled in request.POST',request.POST.get('disable'))
  189. sqlsingledatabase = SqlDatabase.objects.get(pk=request.POST.get('disable'))
  190. if not sqlsingledatabase.locked:
  191. sqlsingledatabase.enabled = False
  192. sqlsingledatabase.tobedeleted = False
  193. sqlsingledatabase.save()
  194. q={}
  195. q['op']='disable'
  196. q['db']=sqlsingledatabase.nome
  197. q['us']=sqlsingledatabase.username
  198. q['ho']=sqlsingledatabase.server.server
  199. #m.publish(c,"Richiesta/Sql","{}".format(json.dumps(q)))
  200. #m.publish(c,"Messaggio/Sql","{}".format(json.dumps(q)))
  201. mq = mqtt()
  202. mq.build('topic','richiesta/database')
  203. mq.build('richiesta','disable_database')
  204. mq.build('stampa',True)
  205. mq.build('data',q)
  206. mq.pubblica()
  207. tmp=None
  208. mq=None
  209. if 'delete' in request.POST:
  210. print('delete in request.POST',request.POST.get('delete'))
  211. sqlsingledatabase = SqlDatabase.objects.get(pk=request.POST.get('delete'))
  212. print("richiesta cancellazione db:",sqlsingledatabase.id)
  213. if not sqlsingledatabase.locked:
  214. print("coferma richiesta")
  215. sqlsingledatabase.enabled = False
  216. sqlsingledatabase.tobedeleted = True
  217. sqlsingledatabase.save()
  218. q={}
  219. q['op']='disable'
  220. q['db']=sqlsingledatabase.nome
  221. q['us']=sqlsingledatabase.username
  222. q['ho']=sqlsingledatabase.server.server
  223. #m.publish(c,"Richiesta/Sql","{}".format(json.dumps(q)))
  224. #m.publish(c,"Messaggio/Sql","{}".format(json.dumps(q)))
  225. mq = mqtt()
  226. mq.build('topic','richiesta/database')
  227. mq.build('richiesta','disable_database')
  228. mq.build('stampa',True)
  229. mq.build('data',q)
  230. mq.pubblica()
  231. tmp=None
  232. mq=None
  233. if 'backup' in request.POST:
  234. print('effettuo backup request.POST',request.POST.get('backup'))
  235. sqlsingledatabase = SqlDatabase.objects.get(pk=request.POST.get('backup'))
  236. qq={}
  237. qq['op']='backup'
  238. qq['db']=sqlsingledatabase.nome
  239. qq['us']=sqlsingledatabase.username
  240. qq['pw']=sqlsingledatabase.password
  241. qq['ho']=sqlsingledatabase.server.server
  242. qq['do']=sqlsingledatabase.dominio.nome
  243. qq['id']=sqlsingledatabase.dominio.id
  244. qq['dbid']=sqlsingledatabase.id
  245. qq['pa']=path
  246. qq['dd']=sqlsingledatabase.id
  247. f = sqlsingledatabase.dominio.ftpuser_set.all().filter(ftpgroup__master=True)
  248. for singleftp in f:
  249. print(dir(singleftp))
  250. print(singleftp.homedir,singleftp.ftpgroup.l3,singleftp.ftpgroup.directory % { 'ftp':singleftp.utente,'site':sqlsingledatabase.dominio.nome })
  251. #infodb['st'] = x.homedir + "/" + sqlpath
  252. tmp = singleftp.ftpgroup.directory % { 'ftp':singleftp.utente,'site':sqlsingledatabase.dominio.nome }
  253. qq['st'] =tmp
  254. qq['pa'] = "/" + backuppath
  255. qq['pr'] = 0 #periodo
  256. mq = mqtt()
  257. mq.build('topic','richiesta/database')
  258. mq.build('richiesta','backupdatabasesingolo')
  259. mq.build('stampa',True)
  260. mq.build('data',[qq])
  261. mq.pubblica()
  262. tmp=None
  263. mq=None
  264. if 'phpmyadmin' in request.POST:
  265. sqlsingledatabase = SqlDatabase.objects.get(pk=request.POST.get('phpmyadmin'))
  266. #sqlsingledatabase.allowexternal=True
  267. #sqlsingledatabase.save()
  268. print('Eseguo PhpMyAdmin',request.POST.get('phpmyadmin'))
  269. html = HttpResponse('Eseguo php...',status=302)
  270. html['location']='https://altemica.net/phpmyadmin/index.php'
  271. html['Target'] = '_blank'
  272. html.set_cookie('PMA_username',sqlsingledatabase.username,max_age=None)
  273. html.set_cookie('PMA_password',sqlsingledatabase.password,max_age=None)
  274. html.set_cookie('PMA_host',sqlsingledatabase.server.server,max_age=None)
  275. html.set_cookie('PMA_database',sqlsingledatabase.nome,max_age=None)
  276. return html
  277. return render(request,"sql.database.list.html",value)
  278. def SqlServerList(request):
  279. session = getSessionParms(request)
  280. userauth = session['_userauth_']
  281. sqlserver2edit = session['_sqlserver2edit_']
  282. domain2edit = session['_domain2edit_']
  283. request.session['_from_']="Sql:SqlServerList"
  284. try:
  285. utenteautorizzato = User.objects.get(pk=userauth)
  286. except User.DoesNotExist as dne:
  287. return HttpResponseRedirect(reverse('Login:login',args={}))
  288. if not domain2edit:
  289. domain2edit = utenteautorizzato.domain.id
  290. dominio = Domini.objects.get(pk=domain2edit)
  291. value={}
  292. value['utenteautorizzato'] = utenteautorizzato
  293. value['user'] = None
  294. value['dominio'] = dominio
  295. value['navbar'] = True
  296. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  297. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  298. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  299. value['securityrow'] = securityrow
  300. value['securityrowLen'] = len(securityrow)
  301. value['CANWRITE']=True #per il momento, questo flag serve a capire se e' un record nuovo
  302. if request.method == 'POST':
  303. print('request.method',request.method)
  304. if 'NuovoSqlServer' in request.POST:
  305. request.session['_sqlserver2edit_'] = 0
  306. return HttpResponseRedirect(reverse('Sql:SqlServerEdit',args={}))
  307. if 'enabled' in request.POST:
  308. print('enabled in request.POST',request.POST.get('enabled'))
  309. sqlsingleserver = SqlServer.objects.get(pk=request.POST.get('enabled'))
  310. sqlsingleserver.enabled = True
  311. sqlsingleserver.save()
  312. if 'disabled' in request.POST:
  313. print('disabled in request.POST',request.POST.get('disabled'))
  314. sqlsingleserver = SqlServer.objects.get(pk=request.POST.get('disabled'))
  315. sqlsingleserver.enabled = False
  316. sqlsingleserver.save()
  317. if 'edit' in request.POST:
  318. print('edit',request.POST.get('edit'))
  319. request.session['_sqlserver2edit_'] = request.POST.get('edit')
  320. return HttpResponseRedirect(reverse('Sql:SqlServerEdit',args={}))
  321. value['sqlserverlist'] = SqlServer.objects.all().order_by('nome')
  322. return render(request,"sql.server.list.html",value)
  323. def SqlDatabaseEdit(request):
  324. session = getSessionParms(request)
  325. if not '_userauth_' in session:
  326. return HttpResponseRedirect(reverse('Login:login',args={}))
  327. userauth = session['_userauth_']
  328. sqldatabase2edit = session['_sqldatabase2edit_']
  329. domain2edit = session['_domain2edit_']
  330. request.session['_from_']="Sql:SqlDatabaseEdit"
  331. try:
  332. utenteautorizzato = User.objects.get(pk=userauth)
  333. except User.DoesNotExist as dne:
  334. return HttpResponseRedirect(reverse('Login:login',args={}))
  335. if not domain2edit:
  336. domain2edit = utenteautorizzato.domain.id
  337. dominio = Domini.objects.get(pk=domain2edit)
  338. c = m.start()
  339. m.publish(c,"Messaggio/Sql","Accesso al DB di {}".format(utenteautorizzato.nome))
  340. value={}
  341. value['utenteautorizzato'] = utenteautorizzato
  342. value['user'] = None
  343. value['navbar'] = True
  344. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  345. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  346. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  347. value['securityrow'] = securityrow
  348. value['securityrowLen'] = len(securityrow)
  349. sqldatabase = SqlDatabase()
  350. value['nuovorecord']=False
  351. try:
  352. sqldatabase = SqlDatabase.objects.get(pk=sqldatabase2edit)
  353. except SqlDatabase.DoesNotExist as dne:
  354. print("errore nella ricerca del server",sqldatabase2edit)
  355. value['nuovorecord']=True
  356. # il database e' vuoto, quindi possiamo inserire username e password predefiniti
  357. # 1: otteniamo un nome valido per un db, normalizzazione dominio
  358. # 2: otteniamo un nome normalizzato valido per un db
  359. dominio_parte_prima_delpunto = dominio.nome.split('.')[0]
  360. dominio_parte_dopo_delpunto = dominio.nome.split('.')[1]
  361. dominio_senza_punto = dominio_parte_prima_delpunto + dominio_parte_dopo_delpunto
  362. dominio_normalizzato = dominio_senza_punto.translate(''.maketrans('-','_'))
  363. utente_normalizzato = dominio_parte_prima_delpunto.translate(''.maketrans('-','_'))
  364. now = datetime.now().strftime('%f')[:3]
  365. numero_db_presenti = len(SqlDatabase.objects.filter(dominio=dominio.id))
  366. sqldatabase.nome = '{}_db{}'.format(dominio_normalizzato,numero_db_presenti+1)
  367. sqldatabase.username = '{}U{}'.format(utente_normalizzato,now)
  368. sqldatabase.password = getPassword()
  369. sqldatabase.dominio = dominio
  370. sqldatabase.enabled = True
  371. sqldatabase.tobedeleted = False
  372. sqldatabase.locked = False
  373. sqldatabase.password_change_enabled=True
  374. sqldatabase.inbackup=False
  375. sqldatabase.datebackup=None
  376. #sqldatabase.server = getConfigurazione('sql server default')
  377. print(dominio_parte_prima_delpunto,dominio_normalizzato,utente_normalizzato,now,numero_db_presenti)
  378. print(sqldatabase.nome,sqldatabase.username)
  379. print('request.POST',request.POST)
  380. if request.method == 'POST':
  381. print('request.method',request.method)
  382. if 'Ritorna' in request.POST:
  383. request.session['_sqldatabase2edit_'] = sqldatabase2edit
  384. return HttpResponseRedirect(reverse('Sql:SqlDatabaseList',args={}))
  385. # step: procuratori la riga ftp master
  386. listaftp = sqldatabase.dominio.ftpuser_set.all()
  387. path = None
  388. for f in listaftp:
  389. if f.ftpgroup.master:
  390. path = f.homedir
  391. print(f.homedir)
  392. # step: invio comando mqtt
  393. if 'AggiornaDbConf' in request.POST and path != None:
  394. print("Aggiorno il db")
  395. q={}
  396. q['op']='writedbconf'
  397. q['db']=sqldatabase.nome
  398. q['us']=sqldatabase.username
  399. q['ho']=sqldatabase.server.server
  400. q['pw']=sqldatabase.password
  401. q['pa']=f.homedir
  402. q['do']=sqldatabase.dominio.nome
  403. q['id']=sqldatabase.dominio.id
  404. #m.publish(c,"Richiesta/Sql","{}".format(json.dumps(q)))
  405. #m.publish(c,"Messaggio/Sql","{}".format(json.dumps(q)))
  406. mq = mqtt()
  407. mq.build('topic','richiesta/database')
  408. mq.build('richiesta','writedb.conf')
  409. mq.build('stampa',True)
  410. mq.build('data',q)
  411. mq.pubblica()
  412. tmp=None
  413. mq=None
  414. formsqldatabase=formSqlDatabase(request.POST)
  415. if formsqldatabase.is_valid():
  416. print('formsqldatabase.is_valid',formsqldatabase.is_valid())
  417. oldsqldatabase = sqldatabase #faccio una copia del record per confrontarmi.
  418. if not sqldatabase.server_id:
  419. sqldatabase.server_id = formsqldatabase.cleaned_data.get('server')
  420. # sqldatabase.dominio = xxxx
  421. sqldatabase.locked = formsqldatabase.cleaned_data.get('locked')
  422. print('sqldatabase.locked',sqldatabase.locked)
  423. if value['nuovorecord']:
  424. sqldatabase.nome = formsqldatabase.cleaned_data.get('nome')
  425. if not sqldatabase.locked:
  426. sqldatabase.username = formsqldatabase.cleaned_data.get('username')
  427. oldpassword = sqldatabase.password
  428. sqldatabase.password = formsqldatabase.cleaned_data.get('password')
  429. if oldpassword != sqldatabase.password:
  430. sqldatabase.password_last_update = datetime.now()
  431. sqldatabase.enabled = formsqldatabase.cleaned_data.get('enabled')
  432. sqldatabase.tobedeleted = formsqldatabase.cleaned_data.get('tobedeleted')
  433. if sqldatabase.tobedeleted:
  434. sqldatabase.enabled = False
  435. sqldatabase.nota = formsqldatabase.cleaned_data.get('nota')
  436. sqldatabase.mail = formsqldatabase.cleaned_data.get('mail')
  437. print('sqldatabase.mail',sqldatabase.mail)
  438. sqldatabase.aggiornamento = datetime.now()
  439. sqldatabase.server_id = formsqldatabase.cleaned_data.get('server')
  440. noneseguire = formsqldatabase.cleaned_data.get('noneseguire')
  441. print('stato di :noneseguire:',noneseguire)
  442. sqldatabase.save()
  443. print('database salvato')
  444. # creato o cambiato nome utente
  445. if sqldatabase.username != oldsqldatabase.username:
  446. pass
  447. else:
  448. pass
  449. # creata o cambiata password
  450. if sqldatabase.password != oldsqldatabase.password:
  451. pass
  452. else:
  453. pass
  454. if not noneseguire:
  455. # creato nuovo db
  456. if value['nuovorecord']:
  457. q={}
  458. q['op']='create'
  459. q['db']=sqldatabase.nome
  460. q['us']=sqldatabase.username
  461. q['pw']=sqldatabase.password
  462. q['ho']=sqldatabase.server.server
  463. #m.publish(c,"Richiesta/Sql","{}".format(json.dumps(q)))
  464. #m.publish(c,"Messaggio/Sql","{}".format(json.dumps(q)))
  465. mq = mqtt()
  466. mq.build('topic','richiesta/database')
  467. mq.build('richiesta','create_database')
  468. mq.build('stampa',True)
  469. mq.build('data',q)
  470. mq.pubblica()
  471. tmp=None
  472. mq=None
  473. # abilitato accesso al db
  474. if sqldatabase.enabled:
  475. q={}
  476. q['op']='enable'
  477. q['db']=sqldatabase.nome
  478. q['us']=sqldatabase.username
  479. q['ho']=sqldatabase.server.server
  480. q['pw']=sqldatabase.password
  481. #m.publish(c,"Richiesta/Sql","{}".format(json.dumps(q)))
  482. #m.publish(c,"Messaggio/Sql","{}".format(json.dumps(q)))
  483. mq = mqtt()
  484. mq.build('topic','richiesta/database')
  485. mq.build('richiesta','enable_database')
  486. mq.build('stampa',True)
  487. mq.build('data',q)
  488. mq.pubblica()
  489. tmp=None
  490. mq=None
  491. else:
  492. q={}
  493. q['op']='disable'
  494. q['db']=sqldatabase.nome
  495. q['us']=sqldatabase.username
  496. q['ho']=sqldatabase.server.server
  497. #m.publish(c,"Richiesta/Sql","{}".format(json.dumps(q)))
  498. #m.publish(c,"Messaggio/Sql","{}".format(json.dumps(q)))
  499. mq = mqtt()
  500. mq.build('topic','richiesta/database')
  501. mq.build('richiesta','disable_database')
  502. mq.build('stampa',True)
  503. mq.build('data',q)
  504. mq.pubblica()
  505. tmp=None
  506. mq=None
  507. # cancella il database
  508. if sqldatabase.tobedeleted:
  509. q={}
  510. q['op']='delete'
  511. q['db']=sqldatabase.nome
  512. q['us']=sqldatabase.username
  513. q['ho']=sqldatabase.server.server
  514. #m.publish(c,"Richiesta/Sql","{}".format(json.dumps(q)))
  515. #m.publish(c,"Messaggio/Sql","{}".format(json.dumps(q)))
  516. mq = mqtt()
  517. mq.build('topic','richiesta/database')
  518. mq.build('richiesta','delete_database')
  519. mq.build('stampa',True)
  520. mq.build('data',q)
  521. mq.pubblica()
  522. tmp=None
  523. mq=None
  524. sm = ServizioMail()
  525. sql_notifica = getConfigurazione('sql:notifica')
  526. sql_notifica = re.split(',| ',sql_notifica)
  527. sm.set_listadestinatari(sql_notifica)
  528. if formsqldatabase.cleaned_data.get('mail_send'):
  529. mailweb = formsqldatabase.cleaned_data.get('mail')
  530. mailweb = re.split(',| ',mailweb)
  531. sm.add_listadestinatari(mailweb)
  532. # questo dovrebbe essere il profilo per la gestione via mail.
  533. #sm.add_listadestinatari(getConfigurazione('service'))
  534. #recuperiamo il template
  535. template = Template.objects.get(pk=getConfigurazione('sql:template'))
  536. template_soggetto = template.soggetto
  537. sm.set_soggetto(template_soggetto)
  538. template_oggetto = template.oggetto
  539. sm.set_oggetto(template_oggetto)
  540. template_dati = {}
  541. template_dati['sqldatabase'] = sqldatabase
  542. sm.set_data(template_dati)
  543. sqljs = {}
  544. sqljs['service'] = 'SQL'
  545. sqljs['nome'] = sqldatabase.nome
  546. sqljs['server'] = sqldatabase.server.server
  547. sqljs['username'] = sqldatabase.username
  548. sqljs['password'] = sqldatabase.password
  549. sqljs['enabled'] = sqldatabase.enabled
  550. sqljs['locked' ] = sqldatabase.locked
  551. sqljs['tobedeleted'] = sqldatabase.tobedeleted
  552. sm.set_json(sqljs)
  553. sm.send()
  554. return HttpResponseRedirect(reverse('Sql:SqlDatabaseList',args={}))
  555. else:
  556. print('formsqldatabase.errors',formsqldatabase.errors)
  557. tmp = {}
  558. tmp['nome'] = sqldatabase.nome
  559. tmp['dominio'] = sqldatabase.dominio_id
  560. tmp['server'] = sqldatabase.server_id
  561. tmp['username'] = sqldatabase.username
  562. tmp['password'] = sqldatabase.password
  563. tmp['enabled'] = sqldatabase.enabled
  564. tmp['tobedeleted'] = sqldatabase.tobedeleted
  565. tmp['locked'] = sqldatabase.locked
  566. print('locked',sqldatabase.locked)
  567. tmp['quota'] = sqldatabase.quota
  568. tmp['password_last_update'] = sqldatabase.password_last_update
  569. tmp['creazione'] = sqldatabase.creazione
  570. tmp['aggiornamento'] = sqldatabase.aggiornamento
  571. tmp['nota'] = sqldatabase.nota
  572. tmp['mail'] = sqldatabase.mail
  573. print('mail caricata',sqldatabase.mail)
  574. value['formsqldatabase'] = formSqlDatabase(tmp)
  575. value['sqldatabase'] = sqldatabase
  576. value['sqlserver'] = SqlServer.objects.all().filter(enabled=1)
  577. return render(request,"sql.database.edit.html",value)
  578. def SqlServerEdit(request):
  579. session = getSessionParms(request)
  580. userauth = session['_userauth_']
  581. sqlserver2edit = session['_sqlserver2edit_']
  582. domain2edit = session['_domain2edit_']
  583. request.session['_from_']="Sql:SqlServerEdit"
  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. value={}
  592. value['utenteautorizzato'] = utenteautorizzato
  593. value['user'] = None
  594. value['dominio'] = dominio
  595. value['navbar'] = True
  596. print("livello autorizzazione",utenteautorizzato.securitylevel_id)
  597. securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
  598. securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
  599. value['securityrow'] = securityrow
  600. value['securityrowLen'] = len(securityrow)
  601. value['CANWRITE']=True #per il momento, questo flag serve a capire se e' un record nuov
  602. sqlserver = SqlServer()
  603. try:
  604. sqlserver = SqlServer.objects.get(pk=sqlserver2edit)
  605. except SqlServer.DoesNotExist as dne:
  606. print("errore nella ricerca del server",sqlserver2edit)
  607. print('request.POST',request.POST)
  608. if request.method == 'POST':
  609. print('request.method',request.method)
  610. if 'Ritorna' in request.POST:
  611. request.session['_sqlserver2edit_'] = sqlserver2edit
  612. return HttpResponseRedirect(reverse('Sql:SqlServerList',args={}))
  613. formsqlserver = formSqlServer(request.POST)
  614. if formsqlserver.is_valid():
  615. print('formsqlserver.is_valid',formsqlserver.is_valid())
  616. sqlserver.nome = formsqlserver.cleaned_data.get('nome')
  617. sqlserver.server = formsqlserver.cleaned_data.get('server')
  618. sqlserver.adminuser = formsqlserver.cleaned_data.get('adminuser')
  619. sqlserver.adminpass = formsqlserver.cleaned_data.get('adminpass')
  620. sqlserver.enabled = formsqlserver.cleaned_data.get('enabled')
  621. sqlserver.nota = formsqlserver.cleaned_data.get('nota')
  622. sqlserver.save()
  623. tmp = {}
  624. tmp['nome'] = sqlserver.nome
  625. tmp['server'] = sqlserver.server
  626. tmp['adminuser'] = sqlserver.adminuser
  627. tmp['adminpass'] = sqlserver.adminpass
  628. tmp['enabled'] = sqlserver.enabled
  629. tmp['nota'] = sqlserver.nota
  630. value['formsqlserver'] = formSqlServer(tmp)
  631. return render(request,"sql.server.edit.html",value)
  632. def SqlShow(request):
  633. '''
  634. questa pagina serve per fornire le informazioni per attivare il nuovo db.
  635. ho pensato che ogni aggiornamento, creazione e quant'altro memorizzano un timestamp.
  636. la funzione legge l'ultimo timestamp memorizzato. se e' anteriore a quelli registrati nei singoli record,
  637. li esegue e aggiorna il timestamp relativo.
  638. '''
  639. return render(request,"nomefile",value)
  640. #effettua il backup di tutti i db (oppure di un singolo di, suddiviso per periodo
  641. def SqlDatabaseBackup(request,database=0,periodo=0):
  642. # tipo: vedere in urls.py: indica il tipo di backup da effettuare (q,s,m)
  643. c = m.start()
  644. m.publish(c,"Messaggio/Sql","Eseguo Backup di tutti i DB")
  645. '''
  646. cadenza={}
  647. cadenza[0]='Giorno'
  648. cadenza[1]='Settimana'
  649. cadenza[2]='Mese'
  650. cadenza[10]='Singolo'
  651. '''
  652. d = None
  653. alldb = False
  654. if not database:
  655. d = SqlDatabase.objects.all().filter(enabled=True)
  656. alldb = True
  657. else:
  658. d = SqlDatabase.objects.all().filter(pk=database)
  659. value = {}
  660. value['sqldatabaselist']=d
  661. value['sqldatabasecount'] = len(d)
  662. print("Database da sottoporre a backup",len(d))
  663. sqlpath = getConfigurazione('sql:path')
  664. backuppath = getConfigurazione('sql:backuppath')
  665. q = dict()
  666. if not database:
  667. q['op'] = 'backupDbAll'
  668. else:
  669. q['op'] = 'backupDbOne'
  670. database2backup = list()
  671. q['pr'] = periodo
  672. for i in d:
  673. print('database: ',i.nome)
  674. infodb = dict()
  675. infodb['db']=i.nome
  676. infodb['us']=i.username
  677. try:
  678. infodb['ho']=i.server.server
  679. except i.server.DosNotFound:
  680. print ("manca il db per: ",i.nome)
  681. m.publish(c,"Messaggio/Sql","Manca Server per db: {}".format(infodb['db']))
  682. continue
  683. infodb['pw']=i.password
  684. infodb['do']=i.dominio.nome
  685. infodb['id']=i.dominio.id
  686. infodb['dbid'] = i.id
  687. f = i.dominio.ftpuser_set.all().filter(ftpgroup__master=True)
  688. print('lista FTP per dominio',len(f))
  689. for singleftp in f:
  690. print(singleftp.homedir,singleftp.ftpgroup.l3,singleftp.ftpgroup.directory % { 'ftp':singleftp.utente,'site':i.dominio.nome })
  691. #infodb['st'] = x.homedir + "/" + sqlpath
  692. tmp = singleftp.ftpgroup.directory % { 'ftp':singleftp.utente,'site':i.dominio.nome }
  693. infodb['st'] =tmp
  694. if alldb:
  695. infodb['pa'] = "/" + sqlpath
  696. else:
  697. infodb['pa'] = "/" + backuppath
  698. infodb['pr'] = periodo
  699. print('infodb',infodb)
  700. database2backup.append(infodb)
  701. q['db'] = database2backup
  702. mq = mqtt()
  703. mq.build('topic','richiesta/database')
  704. mq.build('richiesta','backupdatabaseperiodico')
  705. mq.build('nota','cliid=22')
  706. mq.build('periodo',periodo)
  707. mq.build('stampa',True)
  708. mq.build('data',database2backup)
  709. mq.pubblica()
  710. tmp=None
  711. mq=None
  712. return render(request,"sql.database.backup.html",value)