File: views.py

package info (click to toggle)
python-pycrowdsec 0.0.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 332 kB
  • sloc: python: 879; sh: 6; makefile: 4
file content (56 lines) | stat: -rw-r--r-- 1,627 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import os

import requests
from django.core.cache import cache
from django.core.exceptions import PermissionDenied
from django.http.response import HttpResponse
from django.shortcuts import redirect, render
from django.urls import reverse

# Create your views here.


def validate_captcha_resp(g_recaptcha_response):
    resp = requests.post(
        url="https://www.google.com/recaptcha/api/siteverify",
        data={
            "secret": os.environ.get("GOOGLE_RECAPTCHA_PRIVATE_KEY"),
            "response": g_recaptcha_response,
        },
    ).json()
    return resp["success"]


def captcha_view(request):
    if not cache.get("valid_captcha_keys"):
        cache.set("valid_captcha_keys", set(), 30)

    if request.method == "GET":
        return render(
            request,
            "captcha_page.html",
            context={"public_key": os.environ.get("GOOGLE_RECAPTCHA_SITE_KEY")},
        )

    elif request.method == "POST":
        captcha_resp = request.POST.get("g-recaptcha-response")
        if not captcha_resp:
            return redirect(reverse("captcha_view"))

        is_valid = validate_captcha_resp(captcha_resp)
        if is_valid:
            valid_keys = cache.get("valid_captcha_keys")
            valid_keys.add(captcha_resp)
            cache.set("valid_captcha_keys", valid_keys, 30)
            request.session["captcha_key"] = captcha_resp
            return redirect(reverse("index"))
        else:
            return redirect(reverse("captcha_view"))


def ban_view(request):
    raise PermissionDenied


def index_view(request):
    return HttpResponse("<h1> Hello  ! </h1>")