summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/litestar/config/allowed_hosts.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/litestar/config/allowed_hosts.py')
-rw-r--r--venv/lib/python3.11/site-packages/litestar/config/allowed_hosts.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/litestar/config/allowed_hosts.py b/venv/lib/python3.11/site-packages/litestar/config/allowed_hosts.py
new file mode 100644
index 0000000..4c8e6ac
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/litestar/config/allowed_hosts.py
@@ -0,0 +1,43 @@
+from __future__ import annotations
+
+from dataclasses import dataclass, field
+from typing import TYPE_CHECKING
+
+from litestar.exceptions import ImproperlyConfiguredException
+
+__all__ = ("AllowedHostsConfig",)
+
+
+if TYPE_CHECKING:
+ from litestar.types import Scopes
+
+
+@dataclass
+class AllowedHostsConfig:
+ """Configuration for allowed hosts protection.
+
+ To enable allowed hosts protection, pass an instance of this class to the :class:`Litestar <litestar.app.Litestar>`
+ constructor using the ``allowed_hosts`` key.
+ """
+
+ allowed_hosts: list[str] = field(default_factory=lambda: ["*"])
+ """A list of trusted hosts.
+
+ Use ``*.`` to allow all hosts, or prefix domains with ``*.`` to allow all sub domains.
+ """
+ exclude: str | list[str] | None = field(default=None)
+ """A pattern or list of patterns to skip in the Allowed Hosts middleware."""
+ exclude_opt_key: str | None = field(default=None)
+ """An identifier to use on routes to disable hosts check for a particular route."""
+ scopes: Scopes | None = field(default=None)
+ """ASGI scopes processed by the middleware, if None both ``http`` and ``websocket`` will be processed."""
+ www_redirect: bool = field(default=True)
+ """A boolean dictating whether to redirect requests that start with ``www.`` and otherwise match a trusted host."""
+
+ def __post_init__(self) -> None:
+ """Ensure that the trusted hosts have correct domain wildcards."""
+ for host in self.allowed_hosts:
+ if host != "*" and "*" in host and not host.startswith("*."):
+ raise ImproperlyConfiguredException(
+ "domain wildcards can only appear in the beginning of the domain, e.g. ``*.example.com``"
+ )