privaterelay/types.py (46 lines of code) (raw):

"""Types for the privaterelay app""" from typing import Literal, TypedDict from csp.constants import Nonce RELAY_CHANNEL_NAME = Literal["local", "dev", "stage", "prod"] # django-csp 4.0: types for CONTENT_SECURITY_POLICY in settings.py # Note: this will need adjustments to uplift to django-csp # For example, the django-csp docs say 'sequence' rather than 'list', # and appear more flexible about sending strings or lists. _SERIALIZED_SOURCE_LIST = list[str | Nonce] CSP_DIRECTIVES_T = TypedDict( "CSP_DIRECTIVES_T", { # CSP Level 3 Working Draft, Directives (section 6) # https://www.w3.org/TR/CSP/#csp-directives # 6.1 Fetch Directives "child-src": _SERIALIZED_SOURCE_LIST, "connect-src": _SERIALIZED_SOURCE_LIST, "default-src": _SERIALIZED_SOURCE_LIST, "font-src": _SERIALIZED_SOURCE_LIST, "frame-src": _SERIALIZED_SOURCE_LIST, "img-src": _SERIALIZED_SOURCE_LIST, "manifest-src": _SERIALIZED_SOURCE_LIST, "media-src": _SERIALIZED_SOURCE_LIST, "object-src": _SERIALIZED_SOURCE_LIST, "script-src": _SERIALIZED_SOURCE_LIST, "script-src-elem": _SERIALIZED_SOURCE_LIST, "script-src-attr": _SERIALIZED_SOURCE_LIST, "style-src": _SERIALIZED_SOURCE_LIST, "style-src-elem": _SERIALIZED_SOURCE_LIST, "style-src-attr": _SERIALIZED_SOURCE_LIST, # 6.2 Other Directives "webrtc": Literal["'allow'", "'block'"], "worker-src": _SERIALIZED_SOURCE_LIST, # 6.3 Document Directives "base-uri": _SERIALIZED_SOURCE_LIST, "sandbox": str | list[str], # sequence of tokens in CSP 3 # 6.4 Navigation Directives "form-action": _SERIALIZED_SOURCE_LIST, "frame-ancestors": _SERIALIZED_SOURCE_LIST, "navigate-to": _SERIALIZED_SOURCE_LIST, # 6.5 Reporting Directives "report-uri": str | list[str], # sequence of uri-references in CSP 3 "report-to": str, # "require-sri-for": _SERIALIZED_SOURCE_LIST, # 6.6 Directives Defined in Other Documents "block-all-mixed-content": bool, # Deprecated. "upgrade-insecure-requests": bool, # CSP2 items removed in CSP3 # https://www.w3.org/TR/CSP2/#directives "plugin-types": _SERIALIZED_SOURCE_LIST, # Deprecated, from MDN "prefetch-src": _SERIALIZED_SOURCE_LIST, "referrer": str, # Experimental items, from MDN "fenced-frame-src": _SERIALIZED_SOURCE_LIST, "require-trusted-types-for": str, "trusted-types": str, }, total=False, ) class CONTENT_SECURITY_POLICY_T(TypedDict, total=False): EXCLUDE_URL_PREFIXES: list[str] DIRECTIVES: CSP_DIRECTIVES_T REPORT_PERCENTAGE: int