2017-02-02 08:33:54 +00:00
from flask import Flask , session , url_for , redirect , request , render_template , abort
2017-02-01 07:21:18 +00:00
from flask_sqlalchemy import SQLAlchemy
app = Flask ( __name__ )
2017-02-01 09:37:53 +00:00
app . secret_key = " pepsecret "
2017-02-01 07:21:18 +00:00
# SQL
app . config [ ' SQLALCHEMY_DATABASE_URI ' ] = ' sqlite:///data.db '
db = SQLAlchemy ( app )
# Utente login inventario
class User ( db . Model ) :
uid = db . Column ( db . Integer , primary_key = True )
username = db . Column ( db . String ( 80 ) , unique = True )
passwd = db . Column ( db . String ( 80 ) )
def __init__ ( self , username , passwd ) :
self . username = username
self . passwd = passwd
def __repr__ ( self ) :
return " <User {} > " . format ( self . username , self . passwd )
# Ente (Unione Terre di Castelli, Comune di Vignola...)
class Ente ( db . Model ) :
eid = db . Column ( db . Integer , primary_key = True )
2017-02-01 09:37:53 +00:00
nomeente = db . Column ( db . String ( 64 ) )
nomebreveente = db . Column ( db . String ( 16 ) )
2017-02-01 07:21:18 +00:00
servizi = db . relationship ( " Servizio " , backref = ' ente ' , lazy = ' dynamic ' )
2017-02-01 09:37:53 +00:00
def __init__ ( self , nomeente , nomebreveente ) :
self . nomeente = nomeente
self . nomebreveente = nomebreveente
2017-02-01 07:21:18 +00:00
def __repr__ ( self ) :
2017-02-01 09:37:53 +00:00
return " <Ente {} > " . format ( self . nomebreveente )
2017-02-01 07:21:18 +00:00
# Servizio di un ente
class Servizio ( db . Model ) :
sid = db . Column ( db . Integer , primary_key = True )
eid = db . Column ( db . Integer , db . ForeignKey ( ' ente.eid ' ) )
2017-02-01 09:37:53 +00:00
nomeservizio = db . Column ( db . String ( 128 ) )
2017-02-01 07:21:18 +00:00
impiegati = db . relationship ( " Impiegato " , backref = ' servizio ' , lazy = ' dynamic ' )
2017-02-01 09:37:53 +00:00
def __init__ ( self , eid , nomeservizio ) :
2017-02-01 07:21:18 +00:00
self . eid = eid
2017-02-01 09:37:53 +00:00
self . nomeservizio = nomeservizio
2017-02-01 07:21:18 +00:00
def __repr__ ( self ) :
2017-02-01 09:37:53 +00:00
return " <Servizio {} > " . format ( self . nomeservizio )
2017-02-01 07:21:18 +00:00
class Impiegato ( db . Model ) :
iid = db . Column ( db . Integer , primary_key = True )
sid = db . Column ( db . Integer , db . ForeignKey ( ' servizio.sid ' ) )
2017-02-01 09:37:53 +00:00
nomeimpiegato = db . Column ( db . String ( 128 ) )
2017-02-01 07:21:18 +00:00
username = db . Column ( db . String ( 32 ) , unique = True )
passwd = db . Column ( db . String ( 32 ) )
2017-02-02 08:33:54 +00:00
dispositivi = db . relationship ( " Accesso " , backref = ' impiegato ' , lazy = ' dynamic ' )
2017-02-01 07:21:18 +00:00
2017-02-01 09:37:53 +00:00
def __init__ ( self , sid , nomeimpiegato , username , passwd ) :
2017-02-01 07:21:18 +00:00
self . sid = sid
2017-02-01 09:37:53 +00:00
self . nomeimpiegato = nomeimpiegato
2017-02-01 07:21:18 +00:00
self . username = username
self . passwd = passwd
def __repr__ ( self ) :
2017-02-02 08:33:54 +00:00
return " <Impiegato {} > " . format ( self . nome )
class Dispositivo ( db . Model ) :
did = db . Column ( db . Integer , primary_key = True )
utenti = db . relationship ( " Accesso " , backref = ' dispositivo ' , lazy = ' dynamic ' )
tipo = db . Column ( db . String ( 32 ) )
marca = db . Column ( db . String ( 64 ) )
modello = db . Column ( db . String ( 32 ) )
inv_ced = db . Column ( db . String ( 8 ) )
inv_ente = db . Column ( db . String ( 8 ) )
fornitore = db . Column ( db . String ( 64 ) )
2017-02-02 14:44:26 +00:00
def __init__ ( self , tipo , marca , modello , inv_ced , inv_ente , fornitore ) :
2017-02-02 08:33:54 +00:00
self . tipo = tipo
self . marca = marca
self . modello = modello
self . inv_ced = inv_ced
self . inv_ente = inv_ente
self . fornitore = fornitore
def __repr__ ( self ) :
return " <Dispositivo {} > " . format ( self . inv_ced )
class Accesso ( db . Model ) :
aid = db . Column ( db . Integer , primary_key = True )
iid = db . Column ( db . Integer , db . ForeignKey ( ' impiegato.iid ' ) )
did = db . Column ( db . Integer , db . ForeignKey ( ' dispositivo.did ' ) )
def __init__ ( self , iid , did ) :
self . iid = iid
self . did = did
def __repr__ ( self ) :
2017-02-03 12:04:11 +00:00
return " <Accesso {} su {} > " . format ( self . iid , self . did )
2017-02-02 08:33:54 +00:00
2017-02-01 07:21:18 +00:00
# Funzioni del sito
def login ( username , password ) :
user = User . query . filter_by ( username = username ) . first ( )
2017-02-02 08:33:54 +00:00
try :
return password == user . passwd
except AttributeError :
# Se non esiste l'Utente
return False
2017-02-01 07:21:18 +00:00
# Sito
@app.route ( ' / ' )
def page_home ( ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
else :
session . pop ( ' username ' )
return " Logout eseguito con successo. "
@app.route ( ' /login ' , methods = [ ' GET ' , ' POST ' ] )
def page_login ( ) :
if request . method == ' GET ' :
css = url_for ( " static " , filename = " style.css " )
goldfish = url_for ( " static " , filename = " goldfish.png " )
return render_template ( " login.html.j2 " , css = css , goldfish = goldfish )
else :
if login ( request . form [ ' username ' ] , request . form [ ' password ' ] ) :
session [ ' username ' ] = request . form [ ' username ' ]
return redirect ( url_for ( ' page_dashboard ' ) )
else :
2017-02-02 08:33:54 +00:00
abort ( 403 )
2017-02-01 07:21:18 +00:00
@app.route ( ' /dashboard ' )
def page_dashboard ( ) :
2017-02-02 07:46:15 +00:00
enti = Ente . query . all ( )
conteggioservizi = dict ( )
for ente in enti :
conteggioservizi [ ente . nomeente ] = Servizio . query . join ( Ente ) . filter_by ( eid = ente . eid ) . count ( )
conteggioutenti = dict ( )
for ente in enti :
conteggioutenti [ ente . nomeente ] = Impiegato . query . join ( Servizio ) . join ( Ente ) . filter_by ( eid = ente . eid ) . count ( )
css = url_for ( " static " , filename = " style.css " )
return render_template ( " dashboard.html.j2 " , css = css , type = " main " , user = session [ " username " ] , conteggioutenti = conteggioutenti , conteggioservizi = conteggioservizi )
2017-02-01 07:21:18 +00:00
@app.route ( ' /ente_add ' , methods = [ ' GET ' , ' POST ' ] )
def page_ente_add ( ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
if request . method == ' GET ' :
css = url_for ( " static " , filename = " style.css " )
2017-02-02 07:46:15 +00:00
return render_template ( " ente/add.html.j2 " , css = css , type = " ente " , user = session [ " username " ] )
2017-02-01 07:21:18 +00:00
else :
2017-02-01 09:37:53 +00:00
nuovoent = Ente ( request . form [ ' nomeente ' ] , request . form [ ' nomebreveente ' ] )
2017-02-01 07:21:18 +00:00
db . session . add ( nuovoent )
db . session . commit ( )
return redirect ( url_for ( ' page_ente_list ' ) )
@app.route ( ' /ente_del/<int:eid> ' )
def page_ente_del ( eid ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
ente = Ente . query . get ( eid )
2017-02-01 09:37:53 +00:00
servizi = Servizio . query . filter_by ( eid = ente . eid ) . all ( )
for serv in servizi :
impiegati = Impiegato . query . filter_by ( sid = serv . sid ) . all ( )
for imp in impiegati :
db . session . delete ( imp )
db . session . delete ( serv )
2017-02-01 07:21:18 +00:00
db . session . delete ( ente )
db . session . commit ( )
return redirect ( url_for ( ' page_ente_list ' ) )
@app.route ( ' /ente_list ' )
def page_ente_list ( ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
enti = Ente . query . all ( )
css = url_for ( " static " , filename = " style.css " )
2017-02-01 12:08:56 +00:00
return render_template ( " ente/list.html.j2 " , css = css , enti = enti , type = " ente " , user = session [ " username " ] )
2017-02-01 07:21:18 +00:00
@app.route ( ' /ente_show/<int:eid> ' , methods = [ ' GET ' , ' POST ' ] )
def page_ente_show ( eid ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
if request . method == " GET " :
ente = Ente . query . get ( eid )
css = url_for ( " static " , filename = " style.css " )
2017-02-02 07:19:45 +00:00
return render_template ( " ente/show.html.j2 " , css = css , ente = ente , user = session [ " username " ] )
2017-02-01 07:21:18 +00:00
else :
ente = Ente . query . get ( eid )
2017-02-01 09:37:53 +00:00
ente . nomeente = request . form [ " nomeente " ]
ente . nomebreveente = request . form [ " nomebreveente " ]
2017-02-01 07:21:18 +00:00
db . session . commit ( )
return redirect ( url_for ( ' page_ente_list ' ) )
2017-02-01 09:37:53 +00:00
@app.route ( ' /serv_add ' , methods = [ ' GET ' , ' POST ' ] )
def page_serv_add ( ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
if request . method == ' GET ' :
enti = Ente . query . all ( )
css = url_for ( " static " , filename = " style.css " )
2017-02-01 12:08:56 +00:00
return render_template ( " servizio/add.html.j2 " , css = css , enti = enti , type = " serv " , user = session [ " username " ] )
2017-02-01 09:37:53 +00:00
else :
nuovoserv = Servizio ( request . form [ ' eid ' ] , request . form [ ' nomeservizio ' ] )
db . session . add ( nuovoserv )
db . session . commit ( )
return redirect ( url_for ( ' page_serv_list ' ) )
@app.route ( ' /serv_del/<int:sid> ' )
def page_serv_del ( sid ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
serv = Servizio . query . get ( sid )
impiegati = Impiegato . query . filter_by ( sid = serv . sid ) . all ( )
for imp in impiegati :
db . session . delete ( imp )
db . session . delete ( serv )
db . session . commit ( )
return redirect ( url_for ( ' page_serv_list ' ) )
@app.route ( ' /serv_list ' )
def page_serv_list ( ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
serv = Servizio . query . join ( Ente ) . all ( )
css = url_for ( " static " , filename = " style.css " )
2017-02-01 12:08:56 +00:00
return render_template ( " servizio/list.html.j2 " , css = css , serv = serv , type = " serv " , user = session [ " username " ] )
2017-02-01 09:37:53 +00:00
@app.route ( ' /serv_list/<int:eid> ' )
def page_serv_list_plus ( eid ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
serv = Servizio . query . join ( Ente ) . filter_by ( eid = eid ) . all ( )
css = url_for ( " static " , filename = " style.css " )
2017-02-02 07:19:45 +00:00
return render_template ( " servizio/list.html.j2 " , css = css , user = session [ " username " ] )
2017-02-01 09:37:53 +00:00
@app.route ( ' /serv_show/<int:sid> ' , methods = [ ' GET ' , ' POST ' ] )
def page_serv_show ( sid ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
if request . method == " GET " :
serv = Servizio . query . get ( sid )
enti = Ente . query . all ( )
css = url_for ( " static " , filename = " style.css " )
2017-02-02 07:19:45 +00:00
return render_template ( " servizio/show.html.j2 " , css = css , serv = serv , enti = enti , user = session [ " username " ] )
2017-02-01 09:37:53 +00:00
else :
serv = Servizio . query . get ( sid )
serv . eid = request . form [ " eid " ]
serv . nomeservizio = request . form [ " nomeservizio " ]
db . session . commit ( )
return redirect ( url_for ( ' page_serv_list ' ) )
@app.route ( ' /imp_add ' , methods = [ ' GET ' , ' POST ' ] )
def page_imp_add ( ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
if request . method == ' GET ' :
2017-02-02 08:33:54 +00:00
servizi = Servizio . query . join ( Ente ) . all ( )
2017-02-01 09:37:53 +00:00
css = url_for ( " static " , filename = " style.css " )
2017-02-01 12:08:56 +00:00
return render_template ( " impiegato/add.html.j2 " , css = css , servizi = servizi , type = " imp " , user = session [ " username " ] )
2017-02-01 09:37:53 +00:00
else :
nuovoimp = Impiegato ( request . form [ ' sid ' ] , request . form [ ' nomeimpiegato ' ] , request . form [ ' username ' ] , request . form [ ' passwd ' ] , )
db . session . add ( nuovoimp )
db . session . commit ( )
return redirect ( url_for ( ' page_imp_list ' ) )
@app.route ( ' /imp_del/<int:iid> ' )
def page_imp_del ( iid ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
imp = Impiegato . query . get ( iid )
db . session . delete ( imp )
db . session . commit ( )
return redirect ( url_for ( ' page_imp_list ' ) )
@app.route ( ' /imp_list ' )
def page_imp_list ( ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
impiegati = Impiegato . query . join ( Servizio ) . join ( Ente ) . all ( )
css = url_for ( " static " , filename = " style.css " )
2017-02-01 12:08:56 +00:00
return render_template ( " impiegato/list.html.j2 " , css = css , impiegati = impiegati , type = " imp " , user = session [ " username " ] )
2017-02-01 09:37:53 +00:00
@app.route ( ' /imp_list/<int:sid> ' )
def page_imp_list_plus ( sid ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
impiegati = Impiegato . query . join ( Servizio ) . filter_by ( sid = sid ) . join ( Ente ) . all ( )
css = url_for ( " static " , filename = " style.css " )
2017-02-02 07:19:45 +00:00
return render_template ( " impiegato/list.html.j2 " , css = css , impiegati = impiegati , user = session [ " username " ] )
2017-02-01 09:37:53 +00:00
@app.route ( ' /imp_show/<int:iid> ' , methods = [ ' GET ' , ' POST ' ] )
def page_imp_show ( iid ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
if request . method == " GET " :
imp = Impiegato . query . get ( iid )
servizi = Servizio . query . all ( )
css = url_for ( " static " , filename = " style.css " )
2017-02-02 07:19:45 +00:00
return render_template ( " impiegato/show.html.j2 " , css = css , imp = imp , servizi = servizi , user = session [ " username " ] )
2017-02-01 09:37:53 +00:00
else :
imp = Impiegato . query . get ( iid )
imp . sid = request . form [ " sid " ]
imp . nomeimpiegato = request . form [ " nomeimpiegato " ]
imp . username = request . form [ " username " ]
imp . passwd = request . form [ " passwd " ]
db . session . commit ( )
return redirect ( url_for ( ' page_imp_list ' ) )
2017-02-02 14:44:26 +00:00
@app.route ( ' /disp_add ' , methods = [ ' GET ' , ' POST ' ] )
def page_disp_add ( ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
if request . method == ' GET ' :
opzioni = [ " Centralino " , " Dispositivo generico di rete " , " Marcatempo " , " PC " , " Portatile " , " POS " , " Router " , " Server " , " Stampante di rete " , " Switch " , " Telefono IP " , " Monitor " , " Scanner " , " Stampante locale " ]
impiegati = Impiegato . query . all ( )
css = url_for ( " static " , filename = " style.css " )
return render_template ( " dispositivo/add.html.j2 " , css = css , impiegati = impiegati , opzioni = opzioni , type = " dev " , user = session [ " username " ] )
else :
nuovodisp = Dispositivo ( request . form [ ' tipo ' ] , request . form [ ' marca ' ] , request . form [ ' modello ' ] , request . form [ ' inv_ced ' ] , request . form [ ' inv_ente ' ] , request . form [ ' fornitore ' ] )
db . session . add ( nuovodisp )
db . session . commit ( )
2017-02-03 12:04:11 +00:00
# Trova tutti gli utenti, edizione sporco hack in html
users = list ( )
while True :
# Trova tutti gli utenti esistenti
userstring = ' utente {} ' . format ( len ( users ) )
if userstring in request . form :
users . append ( request . form [ userstring ] )
else :
break
for user in users :
nuovologin = Accesso ( int ( user ) , nuovodisp . did )
db . session . add ( nuovologin )
db . session . commit ( )
#TODO: se un dispositivo non ha utenti si incasina parecchio
2017-02-02 14:44:26 +00:00
return redirect ( url_for ( ' page_disp_list ' ) )
@app.route ( ' /disp_del/<int:did> ' )
def page_disp_del ( did ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
disp = Dispositivo . query . get ( did )
db . session . delete ( disp )
db . session . commit ( )
return redirect ( url_for ( ' page_disp_list ' ) )
@app.route ( ' /disp_list ' )
def page_disp_list ( ) :
if ' username ' not in session :
return redirect ( url_for ( ' page_login ' ) )
2017-02-03 12:04:11 +00:00
accessi = list ( )
2017-02-02 14:44:26 +00:00
dispositivi = Dispositivo . query . all ( )
2017-02-03 12:04:11 +00:00
for dispositivo in dispositivi :
accesso = Accesso . query . join ( Dispositivo ) . filter_by ( did = dispositivo . did ) . join ( Impiegato ) . all ( )
accessi . append ( accesso )
2017-02-02 14:44:26 +00:00
css = url_for ( " static " , filename = " style.css " )
2017-02-03 12:04:11 +00:00
return render_template ( " dispositivo/list.html.j2 " , css = css , accessi = accessi , type = " disp " , user = session [ " username " ] )
2017-02-02 14:44:26 +00:00
2017-02-03 12:04:11 +00:00
@app.route ( ' /disp_details ' )
2017-02-02 14:44:26 +00:00
def page_details_host ( ) :
2017-02-03 12:04:11 +00:00
raise NotImplementedError ( )