File tree Expand file tree Collapse file tree 5 files changed +43
-9
lines changed
Expand file tree Collapse file tree 5 files changed +43
-9
lines changed Original file line number Diff line number Diff line change @@ -545,5 +545,5 @@ SECURE_SSL_REDIRECT: bool
545545##################
546546# CSP MIDDLEWARE #
547547##################
548- SECURE_CSP : dict [str , Any ] = {}
549- SECURE_CSP_REPORT_ONLY : dict [str , Any ] = {}
548+ SECURE_CSP : dict [str , Sequence [ str ] | str ]
549+ SECURE_CSP_REPORT_ONLY : dict [str , Sequence [ str ] | str ]
Original file line number Diff line number Diff line change 11from django .http import HttpRequest , HttpResponse
22from django .utils .csp import CSP as CSP
3+ from django .utils .csp import LazyNonce
34from django .utils .deprecation import MiddlewareMixin
45
6+ def get_nonce (request : HttpRequest ) -> LazyNonce | None : ...
7+
58class ContentSecurityPolicyMiddleware (MiddlewareMixin ):
69 def process_request (self , request : HttpRequest ) -> None : ...
710 def process_response (self , request : HttpRequest , response : HttpResponse ) -> HttpResponse : ...
Original file line number Diff line number Diff line change 11import sys
2+ from collections .abc import Sequence
3+
4+ from django .utils .functional import SimpleLazyObject
25
36if sys .version_info >= (3 , 11 ):
4- from enum import StrEnum
7+ from enum import StrEnum as _StrEnum
58else :
69 from enum import Enum
710
8- class ReprEnum (Enum ): ... # type: ignore[misc]
9- class StrEnum (str , ReprEnum ): ... # type: ignore[misc]
11+ class _ReprEnum (Enum ): ... # type: ignore[misc]
12+ class _StrEnum (str , _ReprEnum ): ... # type: ignore[misc]
1013
11- class CSP (StrEnum ):
14+ class CSP (_StrEnum ):
1215 HEADER_ENFORCE = "Content-Security-Policy"
1316 HEADER_REPORT_ONLY = "Content-Security-Policy-Report-Only"
1417
@@ -22,3 +25,7 @@ class CSP(StrEnum):
2225 WASM_UNSAFE_EVAL = "'wasm-unsafe-eval'"
2326
2427 NONCE = "<CSP_NONCE_SENTINEL>"
28+
29+ class LazyNonce (SimpleLazyObject ): ...
30+
31+ def build_policy (config : dict [str , Sequence [str ] | str ], nonce : SimpleLazyObject | str | None = None ) -> str : ...
Original file line number Diff line number Diff line change 1- from collections .abc import Callable
1+ from collections .abc import Callable , Sequence
22from typing import Any , TypeVar
33
44_F = TypeVar ("_F" , bound = Callable [..., Any ])
55
6- def csp_override (config : dict [str , Any ]) -> Callable [[_F ], _F ]: ...
7- def csp_report_only_override (config : dict [str , Any ]) -> Callable [[_F ], _F ]: ...
6+ def csp_override (config : dict [str , Sequence [ str ] | str ]) -> Callable [[_F ], _F ]: ...
7+ def csp_report_only_override (config : dict [str , Sequence [ str ] | str ]) -> Callable [[_F ], _F ]: ...
Original file line number Diff line number Diff line change 1+ from django .http import HttpRequest , HttpResponse
2+ from django .views .decorators .csp import csp_override , csp_report_only_override
3+ from typing_extensions import assert_type
4+
5+
6+ @csp_override (
7+ {
8+ "default-src" : ["'self'" ],
9+ "script-src" : ["'self'" , "'unsafe-inline'" ],
10+ }
11+ )
12+ def my_view (request : HttpRequest ) -> HttpResponse : ...
13+
14+ @csp_report_only_override (
15+ {
16+ "default-src" : ["'self'" ],
17+ "script-src" : ["'self'" , "'unsafe-inline'" ],
18+ }
19+ )
20+ def my_view2 (request : HttpRequest ) -> HttpResponse : ...
21+
22+
23+ assert_type (my_view (HttpRequest ()), HttpResponse )
24+ assert_type (my_view2 (HttpRequest ()), HttpResponse )
You can’t perform that action at this time.
0 commit comments