File size: 2,692 Bytes
0d635bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d15a538
0d635bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bf50961
0d635bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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)