import re from flask import Blueprint, request, jsonify, session from custom_functions.database.user_db import change_password, change_api_key user_change_bp = Blueprint("user_change_bp", __name__) # Define allowed characters regex (no spaces allowed) PASSWORD_REGEX = re.compile(r'^[A-Za-z0-9!@#$%^&*()_+\-=\[\]{};\'":\\|,.<>\/?`~]+$') @user_change_bp.route("/user/change_password", methods=["POST"]) def change_password_route(): username = session.get("username") if not username: return jsonify({"message": "False"}), 400 try: data = request.get_json() new_password = data.get("new_password", "") if not PASSWORD_REGEX.match(new_password): return jsonify({"message": "Invalid password format"}), 400 change_password(username=username, new_password=new_password) return jsonify({"message": "True"}), 200 except Exception as e: return jsonify({"message": "False"}), 400 @user_change_bp.route("/user/change_api_key", methods=["POST"]) def change_api_key_route(): # Ensure the user is logged in by checking session for 'username' username = session.get("username") if not username: return jsonify({"message": "False", "error": "User not logged in"}), 400 # Get the new API key from the request body new_api_key = request.json.get("new_api_key") if not new_api_key: return jsonify({"message": "False", "error": "New API key not provided"}), 400 try: # Call the function to update the API key in the database success = change_api_key(username=username, new_api_key=new_api_key) if success: return ( jsonify({"message": "True", "success": "API key changed successfully"}), 200, ) else: return ( jsonify({"message": "False", "error": "Failed to change API key"}), 500, ) except Exception as e: # Catch any unexpected errors and return a response return jsonify({"message": "False", "error": str(e)}), 500