1from flask import Flask, request, jsonify
2import jwt
3import datetime
4
5app = Flask(__name__)
6SECRET_KEY = "supersecret"
7
8def generate_token(user):
9 return jwt.encode(
10 {"user": user, "exp": datetime.datetime.utcnow() +
11datetime.timedelta(seconds=10)},
12 SECRET_KEY,
13 algorithm="HS256"
14 )
15
16@app.route("/login", methods=["POST"])
17def login():
18 user = request.json.get("user")
19 token = generate_token(user)
20 return jsonify({"token": token})
21
22@app.route("/protected", methods=["GET"])
23def protected():
24 token = request.headers.get("Authorization").split(" ")[1]
25 try:
26 payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
27 return jsonify({"message": f"Hello {payload['user']}!"})
28 except jwt.ExpiredSignatureError:
29 return jsonify({"error": "Token expired"}), 401
30 except jwt.InvalidTokenError:
31 return jsonify({"error": "Invalid token"}), 403