diff options
| author | Ben Lomax <lomax.on.the.run@gmail.com> | 2023-04-26 07:08:33 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-05-20 15:52:00 +0200 |
| commit | 00f5d2d110712af84fae2c5f9183a2ea48ce0a4a (patch) | |
| tree | fcfce5199b8e76bbc9b24d4d2db05f677de6da9e /django/views | |
| parent | b43936f2ec37f47277899a91a5464091bd80ad3a (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.py | 68 |
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) |
