devnomads-cli 0.7.0__tar.gz → 0.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/PKG-INFO +2 -2
  2. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/devnomads_cli.egg-info/PKG-INFO +2 -2
  3. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/devnomads_cli.egg-info/requires.txt +1 -1
  4. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/dncli.py +32 -1
  5. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/pyproject.toml +2 -2
  6. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/LICENSE +0 -0
  7. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/README.md +0 -0
  8. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/devnomads_cli.egg-info/SOURCES.txt +0 -0
  9. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/devnomads_cli.egg-info/dependency_links.txt +0 -0
  10. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/devnomads_cli.egg-info/entry_points.txt +0 -0
  11. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/devnomads_cli.egg-info/top_level.txt +0 -0
  12. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/setup.cfg +0 -0
  13. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/tests/test_cert.py +0 -0
  14. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/tests/test_cli.py +0 -0
  15. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/tests/test_config.py +0 -0
  16. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/tests/test_generate.py +0 -0
  17. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/tests/test_generated_cli.py +0 -0
  18. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/tests/test_helpers.py +0 -0
  19. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/tests/test_hook.py +0 -0
  20. {devnomads_cli-0.7.0 → devnomads_cli-0.8.0}/tests/test_transfer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devnomads-cli
3
- Version: 0.7.0
3
+ Version: 0.8.0
4
4
  Summary: Manage your DevNomads services from the command line
5
5
  Author-email: DevNomads <support@devnomads.nl>
6
6
  License: MIT
@@ -11,7 +11,7 @@ Requires-Dist: typer>=0.12
11
11
  Requires-Dist: httpx>=0.27
12
12
  Requires-Dist: rich>=13
13
13
  Requires-Dist: cryptography>=42
14
- Requires-Dist: devnomads[acme]>=0.2.5
14
+ Requires-Dist: devnomads[acme]>=0.5.0
15
15
  Dynamic: license-file
16
16
 
17
17
  # dncli
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devnomads-cli
3
- Version: 0.7.0
3
+ Version: 0.8.0
4
4
  Summary: Manage your DevNomads services from the command line
5
5
  Author-email: DevNomads <support@devnomads.nl>
6
6
  License: MIT
@@ -11,7 +11,7 @@ Requires-Dist: typer>=0.12
11
11
  Requires-Dist: httpx>=0.27
12
12
  Requires-Dist: rich>=13
13
13
  Requires-Dist: cryptography>=42
14
- Requires-Dist: devnomads[acme]>=0.2.5
14
+ Requires-Dist: devnomads[acme]>=0.5.0
15
15
  Dynamic: license-file
16
16
 
17
17
  # dncli
@@ -2,4 +2,4 @@ typer>=0.12
2
2
  httpx>=0.27
3
3
  rich>=13
4
4
  cryptography>=42
5
- devnomads[acme]>=0.2.5
5
+ devnomads[acme]>=0.5.0
@@ -52,7 +52,7 @@ from rich.markup import escape
52
52
  from rich.table import Table
53
53
  from typer.core import TyperGroup
54
54
 
55
- __version__ = "0.7.0"
55
+ __version__ = "0.8.0"
56
56
 
57
57
  # Distribution names, for reporting versions via `dncli version`.
58
58
  CLI_PACKAGE = "devnomads-cli"
@@ -1785,6 +1785,18 @@ class KeyType(str, Enum):
1785
1785
  rsa4096 = "rsa4096"
1786
1786
 
1787
1787
 
1788
+ class PreferredChain(str, Enum):
1789
+ """Terminating root to pin the served certificate chain to (Let's Encrypt).
1790
+
1791
+ This only selects which offered chain is served, not the certificate
1792
+ itself. `ISRG Root X1` gives the broadest compatibility with older clients;
1793
+ the ECDSA-only `ISRG Root X2` chain is smaller but needs a post-2022 trust
1794
+ store. Left unset, the CA's default chain is used unchanged."""
1795
+
1796
+ isrg_root_x1 = "ISRG Root X1"
1797
+ isrg_root_x2 = "ISRG Root X2"
1798
+
1799
+
1788
1800
  class ExportFormat(str, Enum):
1789
1801
  """Bundle formats for `cert export`."""
1790
1802
 
@@ -1799,6 +1811,18 @@ ProviderOption = Annotated[
1799
1811
  help="ACME certificate authority: letsencrypt (default) or zerossl.",
1800
1812
  ),
1801
1813
  ]
1814
+ PreferredChainOption = Annotated[
1815
+ PreferredChain | None,
1816
+ typer.Option(
1817
+ "--preferred-chain",
1818
+ help=(
1819
+ "Pin the served chain to this terminating root (Let's Encrypt): "
1820
+ "'ISRG Root X1' for the broadest old-client compatibility, or "
1821
+ "'ISRG Root X2' for the smaller ECDSA-only chain. Unset keeps the "
1822
+ "CA default."
1823
+ ),
1824
+ ),
1825
+ ]
1802
1826
  EabKidOption = Annotated[
1803
1827
  str | None,
1804
1828
  typer.Option(
@@ -2069,6 +2093,7 @@ def _issue_certificate(
2069
2093
  provider: str = CertProvider.letsencrypt.value,
2070
2094
  eab_kid: str | None = None,
2071
2095
  eab_hmac_key: str | None = None,
2096
+ preferred_chain: str | None = None,
2072
2097
  out_dir: Path,
2073
2098
  export_path: Path | None = None,
2074
2099
  verbose: bool = False,
@@ -2085,6 +2110,8 @@ def _issue_certificate(
2085
2110
 
2086
2111
  provider_name = provider
2087
2112
  client_kwargs: dict[str, Any] = {"contact_email": email}
2113
+ if preferred_chain:
2114
+ client_kwargs["preferred_chain"] = preferred_chain
2088
2115
  if staging:
2089
2116
  if provider != CertProvider.letsencrypt.value:
2090
2117
  raise CliError("--staging only applies to the letsencrypt provider")
@@ -2172,6 +2199,7 @@ def cert_issue(
2172
2199
  provider: ProviderOption = CertProvider.letsencrypt,
2173
2200
  eab_kid: EabKidOption = None,
2174
2201
  eab_hmac_key: EabHmacKeyOption = None,
2202
+ preferred_chain: PreferredChainOption = None,
2175
2203
  force: Annotated[
2176
2204
  bool,
2177
2205
  typer.Option(
@@ -2218,6 +2246,7 @@ def cert_issue(
2218
2246
  provider=provider.value,
2219
2247
  eab_kid=eab_kid,
2220
2248
  eab_hmac_key=eab_hmac_key,
2249
+ preferred_chain=preferred_chain.value if preferred_chain else None,
2221
2250
  staging=staging,
2222
2251
  out_dir=out_dir,
2223
2252
  export_path=out,
@@ -2268,6 +2297,7 @@ def cert_renew(
2268
2297
  provider: ProviderOption = CertProvider.letsencrypt,
2269
2298
  eab_kid: EabKidOption = None,
2270
2299
  eab_hmac_key: EabHmacKeyOption = None,
2300
+ preferred_chain: PreferredChainOption = None,
2271
2301
  verbose: Annotated[
2272
2302
  bool,
2273
2303
  typer.Option("--verbose", "-v", help="Show detailed ACME progress."),
@@ -2302,6 +2332,7 @@ def cert_renew(
2302
2332
  provider=provider.value,
2303
2333
  eab_kid=eab_kid,
2304
2334
  eab_hmac_key=eab_hmac_key,
2335
+ preferred_chain=preferred_chain.value if preferred_chain else None,
2305
2336
  out_dir=out_dir,
2306
2337
  verbose=verbose,
2307
2338
  )
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "devnomads-cli"
3
- version = "0.7.0"
3
+ version = "0.8.0"
4
4
  description = "Manage your DevNomads services from the command line"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -11,7 +11,7 @@ dependencies = [
11
11
  "httpx>=0.27",
12
12
  "rich>=13",
13
13
  "cryptography>=42",
14
- "devnomads[acme]>=0.2.5",
14
+ "devnomads[acme]>=0.5.0",
15
15
  ]
16
16
 
17
17
  [project.scripts]
File without changes
File without changes
File without changes