LinuxDayDemo / app.py
vagrillo's picture
Update app.py
0d635bf verified
raw
history blame
2.69 kB
from flask import Flask, request, render_template, redirect, url_for, make_response
import datetime
app = Flask(__name__)
SECRET_PASSWORD = "VeronaTrento25!"
COOKIE_NAME = "authenticated"
def is_authenticated():
"""Verifica se l'utente è autenticato tramite cookie"""
auth_cookie = request.cookies.get(COOKIE_NAME)
if auth_cookie == "true":
return True
return False
def set_auth_cookie(response):
"""Imposta il cookie di autenticazione per 24 ore"""
expires = datetime.datetime.now() + datetime.timedelta(hours=24)
response.set_cookie(
COOKIE_NAME,
"true",
expires=expires,
httponly=True,
secure=False # Imposta True in produzione con HTTPS
)
return response
@app.route('/')
def index():
# Se l'utente è già autenticato, mostra il contenuto normale
if is_authenticated():
return render_template('index.html') # Sostituisci con il tuo template
# Altrimenti reindirizza alla pagina di login
return redirect(url_for('login'))
@app.route('/login', methods=['GET', 'POST'])
def login():
# Se l'utente è già autenticato, reindirizza alla home
if is_authenticated():
return redirect(url_for('index'))
error = None
if request.method == 'POST':
password = request.form.get('password')
if password == SECRET_PASSWORD:
# Password corretta, crea risposta e imposta cookie
response = make_response(redirect(url_for('index')))
response = set_auth_cookie(response)
return response
else:
error = "Password errata. Riprova."
return render_template('login.html', error=error)
@app.route('/logout')
def logout():
"""Route per il logout (elimina il cookie)"""
response = make_response(redirect(url_for('login')))
response.set_cookie(COOKIE_NAME, '', expires=0)
return response
# Aggiungi questo decoratore a tutte le route che vuoi proteggere
def require_auth(f):
"""Decorator per proteggere le route"""
def decorated_function(*args, **kwargs):
if not is_authenticated():
return redirect(url_for('login'))
return f(*args, **kwargs)
decorated_function.__name__ = f.__name__
return decorated_function
# Esempio di utilizzo del decorator su altre route
@app.route('/protected')
@require_auth
def protected_route():
return "Questa è una pagina protetta!"
# Le tue route esistenti vanno modificate aggiungendo @require_auth
# @app.route('/tua_route')
# @require_auth
# def tua_funzione():
# return render_template('tuo_template.html')
if __name__ == '__main__':
app.run(debug=True)