Files
breez-sdk-liquid/regtest/proxy/ssl_proxy.py
Daniel Granhão f437c9194e Add regtest end-to-end tests (#816)
* Add regtest end-to-end tests

* Check that regtest environment is set up

* Add todo comment

* Add missing gloo-timers feature

* Link GH issues

* Update DEVELOPMENT.md

* Update boltz submodule

* Fix after rebase
2025-04-03 01:26:21 +01:00

106 lines
3.1 KiB
Python

from flask import Flask, request, json, Response
from flask_cors import CORS
import requests
import logging
app = Flask(__name__)
CORS(app) # Allow all origins
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@app.route('/proxy', methods=['GET', 'POST', 'PUT', 'DELETE'])
def proxy_request():
target_url = request.headers.get('X-Proxy-URL')
if not target_url:
return Response(
json.dumps({"error": "No target URL provided"}),
status=400,
mimetype='application/json'
)
try:
# Log the incoming request details
logger.info(f"Proxy request to: {target_url}")
logger.info(f"Request method: {request.method}")
logger.info(f"Request headers: {dict(request.headers)}")
# Try to log request body
try:
request_body = request.get_json(silent=True)
logger.info(f"Request body: {request_body}")
except Exception as body_log_error:
logger.error(f"Could not log request body: {body_log_error}")
# Prepare headers, excluding Flask-specific ones
headers = {
key: value for (key, value) in request.headers
if key not in ['Host', 'X-Proxy-URL', 'Content-Length']
}
# Determine the method and make the request
methods = {
'GET': requests.get,
'POST': requests.post,
'PUT': requests.put,
'DELETE': requests.delete
}
method = methods.get(request.method)
if not method:
return Response(
json.dumps({"error": "Unsupported HTTP method"}),
status=405,
mimetype='application/json'
)
# Prepare request arguments
kwargs = {
'url': target_url,
'headers': headers,
'verify': False # Bypass SSL verification
}
# Add data for methods that support it
if request.method in ['POST', 'PUT']:
# Try to parse request data as JSON if possible
request_json = request.get_json(silent=True)
if request_json:
kwargs['json'] = request_json
else:
kwargs['data'] = request.get_data()
# Make the request
try:
response = method(**kwargs)
except Exception as request_error:
logger.error(f"Request error: {request_error}")
return Response(
json.dumps({
"error": "Failed to make request to target service",
"details": str(request_error)
}),
status=500,
mimetype='application/json'
)
return Response(
response.text,
status=response.status_code,
mimetype='application/json'
)
except Exception as e:
logger.error(f"Unexpected error: {e}")
return Response(
json.dumps({"error": str(e)}),
status=500,
mimetype='application/json'
)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=51234)