Files
ctf/training/htb/challenges/web/cdnio/challenge/app/middleware/auth.py
2026-04-15 01:05:54 +02:00

37 lines
1.2 KiB
Python

from flask import request, jsonify, current_app
from functools import wraps
import jwt
def decode_jwt_token(token):
try:
payload = jwt.decode(token, current_app.config["JWT_SECRET_KEY"], algorithms=["HS256"])
return payload
except jwt.ExpiredSignatureError:
return {"error": "Token has expired."}
except jwt.InvalidTokenError:
return None
except Exception as e:
print(f"Unexpected error decoding JWT: {str(e)}")
return None
def jwt_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
auth_header = request.headers.get('Authorization', '').strip()
if not auth_header.startswith('Bearer '):
return jsonify({"error": "Token is missing or invalid!"}), 401
token = auth_header.split(" ", 1)[1].strip()
decoded_token = decode_jwt_token(token)
if decoded_token is None:
return jsonify({"error": "Invalid token!"}), 401
elif "error" in decoded_token:
return jsonify(decoded_token), 401
request.decoded_token = decoded_token
return f(*args, **kwargs)
return decorated_function