summaryrefslogtreecommitdiff
path: root/django/views
diff options
context:
space:
mode:
authorBen Lomax <lomax.on.the.run@gmail.com>2023-04-26 07:08:33 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2023-05-20 15:52:00 +0200
commit00f5d2d110712af84fae2c5f9183a2ea48ce0a4a (patch)
treefcfce5199b8e76bbc9b24d4d2db05f677de6da9e /django/views
parentb43936f2ec37f47277899a91a5464091bd80ad3a (diff)
Refs #31949 -- Made @xframe_options_(deny/sameorigin/exempt) decorators to work with async functions.
Diffstat (limited to 'django/views')
-rw-r--r--django/views/decorators/clickjacking.py68
1 files changed, 48 insertions, 20 deletions
diff --git a/django/views/decorators/clickjacking.py b/django/views/decorators/clickjacking.py
index 8fa49ddb80..c20fa59d2a 100644
--- a/django/views/decorators/clickjacking.py
+++ b/django/views/decorators/clickjacking.py
@@ -1,5 +1,7 @@
from functools import wraps
+from asgiref.sync import iscoroutinefunction
+
def xframe_options_deny(view_func):
"""
@@ -12,14 +14,23 @@ def xframe_options_deny(view_func):
...
"""
- @wraps(view_func)
- def wrapper_view(*args, **kwargs):
- resp = view_func(*args, **kwargs)
- if resp.get("X-Frame-Options") is None:
- resp["X-Frame-Options"] = "DENY"
- return resp
+ if iscoroutinefunction(view_func):
+
+ async def _view_wrapper(*args, **kwargs):
+ response = await view_func(*args, **kwargs)
+ if response.get("X-Frame-Options") is None:
+ response["X-Frame-Options"] = "DENY"
+ return response
+
+ else:
- return wrapper_view
+ def _view_wrapper(*args, **kwargs):
+ response = view_func(*args, **kwargs)
+ if response.get("X-Frame-Options") is None:
+ response["X-Frame-Options"] = "DENY"
+ return response
+
+ return wraps(view_func)(_view_wrapper)
def xframe_options_sameorigin(view_func):
@@ -33,14 +44,23 @@ def xframe_options_sameorigin(view_func):
...
"""
- @wraps(view_func)
- def wrapper_view(*args, **kwargs):
- resp = view_func(*args, **kwargs)
- if resp.get("X-Frame-Options") is None:
- resp["X-Frame-Options"] = "SAMEORIGIN"
- return resp
+ if iscoroutinefunction(view_func):
+
+ async def _view_wrapper(*args, **kwargs):
+ response = await view_func(*args, **kwargs)
+ if response.get("X-Frame-Options") is None:
+ response["X-Frame-Options"] = "SAMEORIGIN"
+ return response
- return wrapper_view
+ else:
+
+ def _view_wrapper(*args, **kwargs):
+ response = view_func(*args, **kwargs)
+ if response.get("X-Frame-Options") is None:
+ response["X-Frame-Options"] = "SAMEORIGIN"
+ return response
+
+ return wraps(view_func)(_view_wrapper)
def xframe_options_exempt(view_func):
@@ -53,10 +73,18 @@ def xframe_options_exempt(view_func):
...
"""
- @wraps(view_func)
- def wrapper_view(*args, **kwargs):
- resp = view_func(*args, **kwargs)
- resp.xframe_options_exempt = True
- return resp
+ if iscoroutinefunction(view_func):
+
+ async def _view_wrapper(*args, **kwargs):
+ response = await view_func(*args, **kwargs)
+ response.xframe_options_exempt = True
+ return response
+
+ else:
+
+ def _view_wrapper(*args, **kwargs):
+ response = view_func(*args, **kwargs)
+ response.xframe_options_exempt = True
+ return response
- return wrapper_view
+ return wraps(view_func)(_view_wrapper)