| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- from django.shortcuts import render
- from django.http import HttpResponseRedirect
- from django.urls import reverse
- from django import template
- from .models import *
- from .forms import *
- from supporto import managepassword
- from sicurezza.views import *
- from logger.views import *
- from comunicazioni.views import *
- from datetime import date
- from configurazione.views import *
- from mqtt import views as m
- from random import randint
- @securitywrap
- def FtpList(request):
- session = getSessionParms(request)
- userauth = session['_userauth_']
- ftp2edit = session['_ftp2edit_']
- domain2edit = session['_domain2edit_']
- request.session['_from_']="Ftp:FtpList"
- _from_ = session['_from_']
- print("_from_",_from_)
- print("next",next)
- try:
- utenteautorizzato = User.objects.get(pk=userauth)
- except User.DoesNotExist as dne:
- return HttpResponseRedirect(reverse('Login:login',args={}))
- c = m.start()
- m.publish(c,'Messaggio/Ftp',json.dumps({'me':"Accesso al ftp di {}".format(utenteautorizzato.nome)}))
- if not domain2edit:
- domain2edit = utenteautorizzato.domain.id
- dominio = Domini.objects.get(pk=domain2edit)
- ftplist = FTPUser.objects.filter(dominio=domain2edit).order_by('utente')
- value={}
- value['utenteautorizzato'] = utenteautorizzato
- value['ftp'] = None
- value['ftplist'] = ftplist
- value['dominio'] = dominio
- value['navbar'] = True
- print("livello autorizzazione",utenteautorizzato.securitylevel_id)
- securitylevel = getSecurityLevel(utenteautorizzato.securitylevel_id)
- securityrow = getSecurityRow(utenteautorizzato.securitylevel_id)
- securitylist = getSecurityList(securityrow)
- value['securitylist'] = securitylist
- value['securityrow'] = securityrow
- value['securityrowLen'] = len(securityrow)
- value['CANWRITE']=True #per il momento, questo flag serve a capire se e' un record nuovo
- if request.method=="POST":
- if 'Ritorna' in request.POST:
- return HttpResponseRedirect(reverse('Login:welcome',args={}))
- if "Nuovo Accesso FTP" in request.POST:
- print('nuovo ftp')
- request.session['_ftp2edit_'] = 0
- return HttpResponseRedirect(reverse('Ftp:FtpEdit',args={}))
- if "BackupAllFTPHTTP" in request.POST:
- for d in value['ftplist']:
- q={}
- q['op']='backup'
- q['do']=d.dominio.nome
- q['dt']=d.dominio.http_server.path
- q['ho']=d.ftpgroup.directory % {'site':d.dominio.nome,'ftp':d.utente}
- if d.ftpgroup.section == 'http':
- q['su']='site'
- else:
- q['su'] = ''
- topic = 'ftp/' + d.dominio.http_server.nome.strip()
- print('topic:',topic,q)
- m.publish(c,topic,json.dumps(q))
- topic = '/Richiesta/Ftp/' + d.dominio.http_server.nome.strip()
- print('topic:',topic,q)
- m.publish(c,topic,json.dumps(q))
- '''
- record.dominio__id = formftp.cleaned_data.get('dominio')
- record.utente = formftp.cleaned_data.get('utente')
- record.clear = formftp.cleaned_data.get('password1')
- record.crypt = managepassword.GeneraPassword(record.clear)
- record.password_change_enabled = formftp.cleaned_data.get('password_change_enable')
- record.enabled = formftp.cleaned_data.get('enabled')
- record.tobedeleted = formftp.cleaned_data.get('tobedeleted')
- record.ftpgroup_id = formftp.cleaned_data.get('ftpgroup')
- record.ftpserver_id = formftp.cleaned_data.get('ftpserver')
- '''
- if "Edit" in request.POST:
- print('id da editare',request.POST['Edit'])
- request.session['_ftp2edit_'] = request.POST['Edit']
- return HttpResponseRedirect(reverse('Ftp:FtpEdit',args={}))
- if "enabledisablebutton" in request.POST:
- print('id da gestioree',request.POST['enabledisablebutton'])
- idpost = request.POST['enabledisablebutton']
- u = FTPUser.objects.get(pk=idpost)
- u.enabled= not u.enabled
- t = date.today()
- #u.account_date_disabled=t.strftime("%Y-%m-%d")
- u.save()
- if "BackupFTPHTTP" in request.POST:
- print('id da attivare',request.POST.get('BackupFTPHTTP'))
- idpost = request.POST.get('BackupFTPHTTP')
- u = FTPUser.objects.get(pk=idpost)
- q={}
- q['op']='backup'
- q['do']=u.dominio.nome
- q['dt']=u.dominio.http_server.path
- q['ho']=u.ftpgroup.directory % {'site':u.dominio.nome,'ftp':u.utente}
- if u.ftpgroup.section == 'http':
- q['su']='/site'
- else:
- q['su'] = ''
- topic = 'Ftp/' + u.dominio.http_server.nome.strip()
- print('topic:',topic,q)
- m.publish(c,topic,json.dumps(q))
- topic = '/Richiesta/Ftp/' + u.dominio.http_server.nome.strip()
- print('topic:',topic,q)
- m.publish(c,topic,json.dumps(q))
- return render(request,"Ftp.List.html",value)
- def FtpEdit(request):
- session = getSessionParms(request)
- userauth = session['_userauth_']
- ftp2edit = session['_ftp2edit_']
- domain2edit = session['_domain2edit_']
- _from_ = session['_from_']
- print("_from_",_from_)
- utenteautorizzato = User.objects.get(pk=userauth)
- print('utente autorizzato: ',utenteautorizzato.mail)
- try:
- dominio = Domini.objects.get(pk=domain2edit)
- except Domain.DoesNotExist as dne:
- print("errore, il dominio non e' correttamente gestito in ftpEdit")
- dominio = utenteautorizzato.domain
- if ftp2edit:
- record = FTPUser.objects.get(pk=ftp2edit)
- #aggiorna il record con il contenuto nuovo dei record relativi alla posizione e al server
- tmphomedir = record.ftpgroup.home
- if record.ftpgroup.l3:
- tmphomedir += record.utente + '.'
- tmphomedir += record.dominio.nome
- if len(record.ftpgroup.sub) > 0:
- tmphomedir += record.ftpgroup.sub + record.utente
- print('tmphomedir',tmphomedir)
- record.homedir = tmphomedir
- else:
- record = FTPUser()
- record.utente = str(randint(10000000,99999999))
- record.dominio = dominio
- record.enabled = dominio.enabled
- record.password_change_enabled = True
- record.edit = True #prima volta, si puo' modificare il campo.
- value={}
- value['utenteautorizzato'] = utenteautorizzato
- value['dominio'] = dominio
- value['registrar'] = Registrar.objects.all().filter(enabled=True)
- value['ftp_password_length'] = getConfigurazione('ftp_password_length')
- value['ftp_password_message'] = getConfigurazione('ftp_password_message')
- print(value)
- print("livello autorizzazione",utenteautorizzato.securitylevel_id)
- securitylevel = getSecurityLevel(utenteautorizzato.securitylevel.id)
- securityrow = getSecurityRow(securitylevel.id)
- securitylist = getSecurityList(securityrow)
- value['securityrow'] = securityrow
- value['securityrowLen'] = len(securityrow)
- value['securitylist'] = securitylist
- value['navbar']=True
- value['ftp'] = record
-
- ftpgroup = FTPGroup.objects.filter(enabled=1).order_by('nomegruppo')
- ftpserver = FTPServer.objects.filter(enabled=1).order_by('nome')
- value['ftpgroupv'] = ftpgroup
- value['ftpserverv'] = ftpserver
- if 'Ritorno' in request.POST:
- return HttpResponseRedirect(reverse('Ftp:FtpList'))
- if request.method == "POST":
- ## e' stato richiesto il post.
- formftp = formFtp(request.POST)
- formftp.update()
- if formftp.is_valid():
- print('record valido, via al salvataggio: ',formftp.is_valid())
- record.dominio__id = formftp.cleaned_data.get('dominio')
- record.utente = formftp.cleaned_data.get('utente')
- record.password_change_enabled = formftp.cleaned_data.get('password_change_enabled')
- if record.password_change_enabled:
- record.clear = formftp.cleaned_data.get('password1')
- record.crypt = managepassword.GeneraPassword(record.clear)
- print('password_change_enabled',record.password_change_enabled)
- if 'enabled' in formftp.cleaned_data:
- record.enabled = formftp.cleaned_data.get('enabled')
- print('enabled',formftp.cleaned_data.get('tobedeleted'))
- record.tobedeleted = formftp.cleaned_data.get('tobedeleted')
- record.ftpgroup_id = formftp.cleaned_data.get('ftpgroup')
- record.ftpserver_id = formftp.cleaned_data.get('ftpserver')
- record.mail = formftp.cleaned_data.get('mail')
- record.edit = formftp.cleaned_data.get('edit')
- record.save()
- c = m.start()
- topic = '/Messaggio/Ftp/{}/{}'.format(record.ftpgroup.home,record.dominio.nome)
- m.publish(c,topic,json.dumps({'ftp':'Accesso al ftp di {}@{}'.format(record.utente,record.dominio.nome)}))
- q = {}
- q['op'] = 'CreateSpace'
- q['do'] = record.dominio.nome
- q['dp'] = record.ftpgroup.home
- parametri = {}
- parametri['_defaultdomain_']=record.dominio.nome
- parametri['_defaulthome_']=record.ftpgroup.home
- parametri['_defaultip_']=record.ftpgroup.server
- parametri['_defaulthttpport_'] = record.ftpgroup.http_port
- q['pc'] = getConfigurazione('default_proxy_http_config').format(**parametri)
- q['pf'] = getConfigurazione('default_proxy_http_name').format(**parametri)
- q['wc'] = getConfigurazione('default_webserver_http_config').format(**parametri)
- q['wf'] = getConfigurazione('default_webserver_http_name').format(**parametri)
- print(q)
- m.publish(c,'Http',json.dumps(q))
- m.publish(c,'Richiesta/Http',json.dumps(q))
- # verifica cancellazione
- if record.tobedeleted:
- record.enabled = False
- record.save()
- sm = ServizioMail()
- sql_notifica = getConfigurazione('ftp:notifica')
- sql_notifica = re.split(',| ',sql_notifica)
- sm.set_listadestinatari(sql_notifica)
- if formftp.cleaned_data.get('mail_send'):
- mailweb = formftp.cleaned_data.get('mail')
- mailweb = re.split(',| ',mailweb)
- sm.add_listadestinatari(mailweb)
- # questo dovrebbe essere il profilo per la gestione via mail.
- #sm.add_listadestinatari(getConfigurazione('service'))
- #recuperiamo il template
- template = Template.objects.get(pk=getConfigurazione('ftp:template'))
- template_soggetto = template.soggetto
- sm.set_soggetto(template_soggetto)
- template_oggetto = template.oggetto
- sm.set_oggetto(template_oggetto)
- template_dati = {}
- template_dati['ftpuser'] = record
- sm.set_data(template_dati)
- sm.send()
- return HttpResponseRedirect(reverse('Ftp:FtpList',args={}))
- else:
- print("is_valid: ",formftp.is_valid())
- print("formftp.errors")
- print(formftp.errors)
- for e in formftp.errors:
- print("errors:",e)
- print("***")
- value['formftp'] = formFtp(request.POST)
- value['formftp'].update()
- else:
- ## verifica se e' post o meno....
- print('Post Non validato')
- temp={}
- temp['dominio'] = record.dominio.id
- temp['dominio_domain'] = record.dominio.nome
- temp['utente'] = record.utente
- if ftp2edit:
- print("ftp2edit presente")
- temp['ftpgroup'] = record.ftpgroup_id
- temp['ftpserver'] = record.ftpserver_id
- temp['home'] = record.ftpgroup.home
- temp['sub'] = record.ftpgroup.sub
- temp['l3'] = record.ftpgroup.l3
- temp['edit'] = record.edit
- '''
- 21.01.22
- home dir visualizza la path costruita attraverso la query sql
- sqlnamedquery user_by_name SELECT "concat(ftp_user.user,'@',domini.nome) as username,crypt as passwd,ftp_home.uid as uid,ftp_home.gid as gid,concat(ftp_home.home,if(l3,concat(ftp_user.user,'.'),''),domini.nome,if(ftp_home.sub != '',concat(ftp_home.sub,ftp_user.user),'')) as homedir,shell from ftp_user join domini on ftp_user.domain = domini.id join ftp_home on ftp_user.ftp_home = ftp_home.id where (ftp_user.user=substring_index('%U','@',1) and domini.nome=substring_index('%U','@',-1)) and ftp_user.enabled = 1 and ftp_user.tobedeleted = 0 and domini.enabled = 1 and domini.ftp = 1 and domini.tobedeleted = 0 and (ftp_user.server = '7109' or ftp_user.server= '0');"
- if record.l3 la stringa inizia col nome utente che e' il 3 livello
- poi viene il nome dominio
- poi vengono la path ftp e infine l'eventuale utente ftp nel caso sia un ftp non primario (web)
- '''
- tmphomedir = temp['home']
- if temp['l3']:
- tmphomedir += temp['utente'] + '.'
- tmphomedir += temp['dominio_domain']
- if len(temp['sub']) > 0:
- tmphomedir += temp['sub'] + temp['utente']
- print('tmphomedir',tmphomedir)
- temp['homedir'] = tmphomedir
- temp['password1'] = record.clear
- temp['password2'] = record.clear
- temp['clear'] = record.clear
- else:
- print("ftp2edit non presente")
- temp['ftpserver'] = 0
- temp['ftpgroup'] = 0
- newpassword = getPassword()
- temp['password1'] = newpassword
- temp['password2'] = newpassword
- temp['clear'] = newpassword
- temp['enabled'] = record.enabled
- temp['tobedeleted'] = record.tobedeleted
- temp['password_change_enabled'] = record.password_change_enabled
- print('password_change_enabled',record.password_change_enabled)
- temp['nota'] = record.nota
- temp['mail'] = record.mail
- temp['edit'] = record.edit
- value['formftp'] = formFtp(temp)
- value['formftp'].update()
- return render(request,"Ftp.Edit.html",value)
|