Allow for TLS certs to be created on HTTP/1.1 dev servers
This commit is contained in:
parent
97158d8b64
commit
13ee4c4738
@ -175,6 +175,7 @@ Or, a path to a directory to run as a simple HTTP server:
|
|||||||
"unix": self.args.unix,
|
"unix": self.args.unix,
|
||||||
"verbosity": self.args.verbosity or 0,
|
"verbosity": self.args.verbosity or 0,
|
||||||
"workers": self.args.workers,
|
"workers": self.args.workers,
|
||||||
|
"auto_cert": self.args.auto_cert,
|
||||||
}
|
}
|
||||||
|
|
||||||
for maybe_arg in ("auto_reload", "dev"):
|
for maybe_arg in ("auto_reload", "dev"):
|
||||||
@ -184,4 +185,5 @@ Or, a path to a directory to run as a simple HTTP server:
|
|||||||
if self.args.path:
|
if self.args.path:
|
||||||
kwargs["auto_reload"] = True
|
kwargs["auto_reload"] = True
|
||||||
kwargs["reload_dir"] = self.args.path
|
kwargs["reload_dir"] = self.args.path
|
||||||
|
|
||||||
return kwargs
|
return kwargs
|
||||||
|
@ -249,7 +249,16 @@ class DevelopmentGroup(Group):
|
|||||||
"--dev",
|
"--dev",
|
||||||
dest="dev",
|
dest="dev",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
help=("debug + auto reload."),
|
help=("debug + auto reload"),
|
||||||
|
)
|
||||||
|
self.container.add_argument(
|
||||||
|
"--auto-cert",
|
||||||
|
dest="auto_cert",
|
||||||
|
action="store_true",
|
||||||
|
help=(
|
||||||
|
"Create a temporary TLS certificate for local development "
|
||||||
|
"(requires mkcert)"
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -234,7 +234,7 @@ def get_ssl_context(app: Sanic, ssl: Optional[SSLContext]) -> SSLContext:
|
|||||||
|
|
||||||
if app.state.mode is Mode.PRODUCTION:
|
if app.state.mode is Mode.PRODUCTION:
|
||||||
raise SanicException(
|
raise SanicException(
|
||||||
"Cannot run Sanic as an HTTP/3 server in PRODUCTION mode "
|
"Cannot run Sanic as an HTTPS server in PRODUCTION mode "
|
||||||
"without passing a TLS certificate. If you are developing "
|
"without passing a TLS certificate. If you are developing "
|
||||||
"locally, please enable DEVELOPMENT mode and Sanic will "
|
"locally, please enable DEVELOPMENT mode and Sanic will "
|
||||||
"generate a localhost TLS certificate. For more information "
|
"generate a localhost TLS certificate. For more information "
|
||||||
|
@ -95,6 +95,7 @@ class RunnerMixin(metaclass=SanicMeta):
|
|||||||
fast: bool = False,
|
fast: bool = False,
|
||||||
verbosity: int = 0,
|
verbosity: int = 0,
|
||||||
motd_display: Optional[Dict[str, str]] = None,
|
motd_display: Optional[Dict[str, str]] = None,
|
||||||
|
auto_cert: bool = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Run the HTTP Server and listen until keyboard interrupt or term
|
Run the HTTP Server and listen until keyboard interrupt or term
|
||||||
@ -154,6 +155,7 @@ class RunnerMixin(metaclass=SanicMeta):
|
|||||||
fast=fast,
|
fast=fast,
|
||||||
verbosity=verbosity,
|
verbosity=verbosity,
|
||||||
motd_display=motd_display,
|
motd_display=motd_display,
|
||||||
|
auto_cert=auto_cert,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.__class__.serve(primary=self) # type: ignore
|
self.__class__.serve(primary=self) # type: ignore
|
||||||
@ -182,6 +184,7 @@ class RunnerMixin(metaclass=SanicMeta):
|
|||||||
fast: bool = False,
|
fast: bool = False,
|
||||||
verbosity: int = 0,
|
verbosity: int = 0,
|
||||||
motd_display: Optional[Dict[str, str]] = None,
|
motd_display: Optional[Dict[str, str]] = None,
|
||||||
|
auto_cert: bool = False,
|
||||||
) -> None:
|
) -> None:
|
||||||
if version == 3 and self.state.server_info:
|
if version == 3 and self.state.server_info:
|
||||||
raise RuntimeError(
|
raise RuntimeError(
|
||||||
@ -267,6 +270,7 @@ class RunnerMixin(metaclass=SanicMeta):
|
|||||||
protocol=protocol,
|
protocol=protocol,
|
||||||
backlog=backlog,
|
backlog=backlog,
|
||||||
register_sys_signals=register_sys_signals,
|
register_sys_signals=register_sys_signals,
|
||||||
|
auto_cert=auto_cert,
|
||||||
)
|
)
|
||||||
self.state.server_info.append(
|
self.state.server_info.append(
|
||||||
ApplicationServerInfo(settings=server_settings)
|
ApplicationServerInfo(settings=server_settings)
|
||||||
@ -411,6 +415,7 @@ class RunnerMixin(metaclass=SanicMeta):
|
|||||||
backlog: int = 100,
|
backlog: int = 100,
|
||||||
register_sys_signals: bool = True,
|
register_sys_signals: bool = True,
|
||||||
run_async: bool = False,
|
run_async: bool = False,
|
||||||
|
auto_cert: bool = False,
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
"""Helper function used by `run` and `create_server`."""
|
"""Helper function used by `run` and `create_server`."""
|
||||||
if self.config.PROXIES_COUNT and self.config.PROXIES_COUNT < 0:
|
if self.config.PROXIES_COUNT and self.config.PROXIES_COUNT < 0:
|
||||||
@ -427,9 +432,7 @@ class RunnerMixin(metaclass=SanicMeta):
|
|||||||
version = HTTP(version)
|
version = HTTP(version)
|
||||||
|
|
||||||
ssl = process_to_context(ssl)
|
ssl = process_to_context(ssl)
|
||||||
if version is HTTP.VERSION_3:
|
if version is HTTP.VERSION_3 or auto_cert:
|
||||||
# TODO:
|
|
||||||
# - Add API option to allow localhost TLS also on HTTP/1.1
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
self = cast(Sanic, self)
|
self = cast(Sanic, self)
|
||||||
ssl = get_ssl_context(self, ssl)
|
ssl = get_ssl_context(self, ssl)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user