Skip to content

Commit 0b37406

Browse files
committed
apply code review changes
1 parent d2af763 commit 0b37406

File tree

1 file changed

+25
-26
lines changed

1 file changed

+25
-26
lines changed

app/app.py

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -26,32 +26,7 @@ def validate_pow(nonce, data, difficulty):
2626
first_uint32 = int.from_bytes(calculated_hash[:4], byteorder='big')
2727
return first_uint32 <= difficulty
2828

29-
30-
@app.route('/', methods=['GET', 'POST'])
31-
def index():
32-
return render_template('index.html', debug=os.getenv('DEBUG'))
33-
34-
@app.before_request
35-
def exempt_csrf_for_ask_token():
36-
if request.endpoint == 'ask':
37-
ask_token = request.headers.get('Ask-Token')
38-
# If ask token matches the expected value, bypass CSRF protection
39-
if ask_token and ask_token == os.getenv('ASK_TOKEN'):
40-
print(f"CSRF protection exempted for endpoint '{request.endpoint}' due to valid Ask-Token")
41-
csrf.exempt(app.view_functions['ask'])
42-
else:
43-
print(f"CSRF protection enabled for endpoint: {request.endpoint}")
44-
45-
@app.route('/ask', methods=['POST'])
46-
def ask():
47-
ask_token = request.headers.get('Ask-Token')
48-
# If ask token matches the expected value, bypass PoW validation
49-
if ask_token != os.getenv('ASK_TOKEN'):
50-
if not validate_pow(request.headers.get('X-Nonce'), request.get_data(), 0x50000):
51-
return jsonify({"error": "Invalid Proof of Work"}), 400
52-
else:
53-
print(f"Proof of Work validation skipped for endpoint: {request.endpoint} due to valid Ask-Token")
54-
29+
def handle_ask_request(request, session):
5530
data = request.get_json()
5631
query = data.get('query')
5732

@@ -86,6 +61,30 @@ def generate():
8661

8762
return Response(stream_with_context(generate()), content_type='text/markdown')
8863

64+
@app.route('/', methods=['GET', 'POST'])
65+
def index():
66+
return render_template('index.html', debug=os.getenv('DEBUG'))
67+
68+
@app.route('/ask', methods=['POST'])
69+
def ask():
70+
if not validate_pow(request.headers.get('X-Nonce'), request.get_data(), 0x50000):
71+
return jsonify({"error": "Invalid Proof of Work"}), 400
72+
73+
response = handle_ask_request(request, session)
74+
return response
75+
76+
# /v1/ask allows bypassing of CSRF and PoW for clients with a valid Ask Token
77+
@app.route('/v1/ask', methods=['POST'])
78+
@csrf.exempt
79+
def v1_ask():
80+
auth_header = request.headers.get('Authorization')
81+
ask_token = auth_header.split("Bearer ")[1] if auth_header and auth_header.startswith("Bearer ") else None
82+
if ask_token and ask_token == os.getenv('ASK_TOKEN'):
83+
response = handle_ask_request(request, session)
84+
return response
85+
else:
86+
jsonify({"error": "Invalid or missing Ask Token"}), 401
87+
8988
@app.route('/trigger-rebuild', methods=['POST'])
9089
@csrf.exempt
9190
def trigger_rebuild():

0 commit comments

Comments
 (0)