Skip to content

Commit ae60871

Browse files
committed
fix: session cookie
1 parent 3e71255 commit ae60871

1 file changed

Lines changed: 22 additions & 23 deletions

File tree

core/schema.py

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
from django.db.models import Q, Count
4545
from django.db.models.expressions import RawSQL
4646
from django.http import HttpRequest
47-
from django.middleware.csrf import CsrfViewMiddleware, get_token
47+
from django.middleware.csrf import get_token
4848
from django.utils import translation
4949
from django.utils.timezone import now
5050
from graphene.utils.str_converters import to_snake_case, to_camel_case
@@ -72,7 +72,6 @@
7272
)
7373
from core.utils import (
7474
ExtendedConnection,
75-
is_this_session_superuser,
7675
collect_all_gql_permissions,
7776
)
7877
from core.models import (
@@ -338,16 +337,15 @@ def mutate_and_get_payload(cls, root, info, **data):
338337
request = getattr(info, "context", None)
339338

340339
user_agent = request.headers.get("User-Agent", "")
341-
current_session_key = request.session.session_key
342-
if not is_this_session_superuser(current_session_key):
343-
if not any(
344-
bypass in user_agent
345-
for bypass in getattr(settings, "USER_AGENT_CSRF_BYPASS", [])
346-
):
347-
csrf_middleware = CsrfViewMiddleware(lambda req: None)
348-
reason = csrf_middleware.process_view(request, None, (), {})
349-
if reason:
350-
raise PermissionDenied("CSRF token missing or incorrect.")
340+
341+
if not any(
342+
bypass in user_agent
343+
for bypass in getattr(settings, "USER_AGENT_CSRF_BYPASS", [])
344+
):
345+
session_csrf = request.session['csrftoken']
346+
request_csrf = request.META['HTTP_X_CSRFTOKEN']
347+
if session_csrf != request_csrf:
348+
raise PermissionDenied("CSRF token missing or incorrect.")
351349

352350
mutation_log = MutationLog.objects.create(
353351
json_content=json.dumps(data, cls=OpenIMISJSONEncoder),
@@ -649,16 +647,15 @@ def resolve_queryset(
649647
raise PermissionDenied(_("unauthorized"))
650648

651649
user_agent = request.headers.get("User-Agent", "")
652-
current_session_key = request.session.session_key
653-
if not is_this_session_superuser(current_session_key):
654-
if not any(
655-
bypass in user_agent
656-
for bypass in getattr(settings, "USER_AGENT_CSRF_BYPASS", [])
657-
):
658-
csrf_middleware = CsrfViewMiddleware(lambda req: None)
659-
reason = csrf_middleware.process_view(request, None, (), {})
660-
if reason:
661-
raise PermissionDenied("CSRF token missing or incorrect.")
650+
651+
if not any(
652+
bypass in user_agent
653+
for bypass in getattr(settings, "USER_AGENT_CSRF_BYPASS", [])
654+
):
655+
session_csrf = request.session['csrftoken']
656+
request_csrf = request.META['HTTP_X_CSRFTOKEN']
657+
if session_csrf != request_csrf:
658+
raise PermissionDenied("CSRF token missing or incorrect.")
662659

663660
qs = super(DjangoFilterConnectionField, cls).resolve_queryset(
664661
connection, iterable, info, args
@@ -2153,7 +2150,9 @@ def mutate(cls, root, info):
21532150
csrf_token = get_token(info.context)
21542151
if not csrf_token:
21552152
raise GraphQLError("CSRF token could not be generated")
2156-
2153+
if info.context and hasattr(info.context, 'session'):
2154+
info.context.session['csrftoken'] = csrf_token
2155+
info.context.session.save()
21572156
return GetCsrfTokenMutation(csrf_token=csrf_token)
21582157

21592158

0 commit comments

Comments
 (0)