from flask import Blueprint, jsonify, request from api import require_auth, rate_limits import re config_bp = Blueprint('config', __name__, url_prefix='/api/config') RATE_LIMIT_REGEX = re.compile(r'^\d+\s?(per\s|/)\s?(second|minute|hour|day)$') def is_valid_rate_limit(limit): return bool(RATE_LIMIT_REGEX.match(limit)) @config_bp.route('/limits', methods=['GET']) @require_auth(roles=['admin']) def limits(): return jsonify(rate_limits), 200 @config_bp.route('/limits', methods=['PUT']) @require_auth(roles=['admin']) def update_limits(): data = request.json if not data or 'endpoint' not in data or 'method' not in data or 'new_limit' not in data: return jsonify({'error': 'Bad request'}), 400 key = f"{data['endpoint']} : {data['method']}" if key not in rate_limits: return jsonify({'error': 'endpoint not fount'}), 404 if is_valid_rate_limit(data['new_limit']): rate_limits[key] = data['new_limit'] return jsonify({"message": "updated"}), 200 return jsonify({'error': 'Invalid value'}), 400