Skip to content

Commit 50e2fc3

Browse files
authored
captcha keys (#82)
1 parent 7ba2a9b commit 50e2fc3

2 files changed

Lines changed: 47 additions & 1 deletion

File tree

website/middleware.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from django.conf import settings
2+
from django.shortcuts import render
3+
4+
class FilterCaptchaGateMiddleware(object):
5+
"""
6+
Protects expensive /filter/ GET pages.
7+
8+
Rules:
9+
- page 1 with default sorting is allowed anonymously
10+
- page > 1 requires prior verification
11+
- any sorting (o=...) requires prior verification
12+
- invalid page values are challenged early
13+
"""
14+
def __init__(self, get_response=None):
15+
self.get_response = get_response
16+
17+
def __call__(self, request):
18+
path = request.path
19+
20+
# Only apply to filter endpoints
21+
if path.startswith('/filter/'):
22+
23+
# return if already verified
24+
if request.session.get('filter_verified', False):
25+
return self.get_response(request)
26+
27+
page = request.GET.get('page', '1')
28+
ordering = request.GET.get('o', None)
29+
30+
# Validate page early
31+
if page is None or page == '':
32+
page = 1
33+
page_num = int(page)
34+
35+
# Challenge if:
36+
# - deeper page, OR
37+
# - any sorting is used
38+
needs_verification = (page_num > 1) or bool(ordering)
39+
if needs_verification:
40+
context = {
41+
'next_url': request.get_full_path(),
42+
'site_key': settings.RECAPTCHA_SITE_KEY_v3
43+
}
44+
return render(request, 'website/templates/filter_verify.html',context)
45+
46+
return self.get_response(request)

website/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,7 @@ def verify_filter_access(request):
11021102
return HttpResponseForbidden("Missing captcha token")
11031103

11041104
try:
1105-
data = {'secret': settings.RECAPTCHA_SECRET_KEY, 'response': token}
1105+
data = {'secret': settings.RECAPTCHA_SECRET_KEY_v3, 'response': token}
11061106
resp = requests.post('https://www.google.com/recaptcha/api/siteverify',
11071107
data, timeout=5)
11081108
result = resp.json()

0 commit comments

Comments
 (0)