wasm-cli 0.15.7__tar.gz → 0.15.8__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 (155) hide show
  1. {wasm_cli-0.15.7/src/wasm_cli.egg-info → wasm_cli-0.15.8}/PKG-INFO +1 -1
  2. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/pyproject.toml +1 -1
  3. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/setup.py +1 -1
  4. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/__init__.py +1 -1
  5. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/site.py +14 -13
  6. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/cert_manager.py +31 -2
  7. {wasm_cli-0.15.7 → wasm_cli-0.15.8/src/wasm_cli.egg-info}/PKG-INFO +1 -1
  8. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/LICENSE +0 -0
  9. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/MANIFEST.in +0 -0
  10. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/README.md +0 -0
  11. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/docs/MONITOR.md +0 -0
  12. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/docs/OBS_SETUP.md +0 -0
  13. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/docs/assets/logo.png +0 -0
  14. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/docs/assets/logo_bg.png +0 -0
  15. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/man/wasm.1 +0 -0
  16. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/setup.cfg +0 -0
  17. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/__main__.py +0 -0
  18. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/__init__.py +0 -0
  19. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/__init__.py +0 -0
  20. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/backup.py +0 -0
  21. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/cert.py +0 -0
  22. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/config.py +0 -0
  23. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/db.py +0 -0
  24. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/env.py +0 -0
  25. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/health.py +0 -0
  26. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/monitor.py +0 -0
  27. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/service.py +0 -0
  28. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/setup.py +0 -0
  29. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/store.py +0 -0
  30. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/version.py +0 -0
  31. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/web.py +0 -0
  32. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/commands/webapp.py +0 -0
  33. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/interactive.py +0 -0
  34. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/cli/parser.py +0 -0
  35. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/completions/__init__.py +0 -0
  36. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/completions/_wasm +0 -0
  37. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/completions/wasm.bash +0 -0
  38. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/completions/wasm.fish +0 -0
  39. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/core/__init__.py +0 -0
  40. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/core/config.py +0 -0
  41. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/core/dependencies.py +0 -0
  42. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/core/exceptions.py +0 -0
  43. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/core/logger.py +0 -0
  44. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/core/store.py +0 -0
  45. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/core/update_checker.py +0 -0
  46. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/core/utils.py +0 -0
  47. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/__init__.py +0 -0
  48. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/base.py +0 -0
  49. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/docker_compose.py +0 -0
  50. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/helpers/__init__.py +0 -0
  51. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/helpers/env_manager.py +0 -0
  52. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/helpers/nginx_config.py +0 -0
  53. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/helpers/package_manager.py +0 -0
  54. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/helpers/path_resolver.py +0 -0
  55. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/helpers/prisma.py +0 -0
  56. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/helpers/turbo.py +0 -0
  57. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/helpers/workspace.py +0 -0
  58. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/monorepo.py +0 -0
  59. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/nextjs.py +0 -0
  60. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/nodejs.py +0 -0
  61. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/python.py +0 -0
  62. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/registry.py +0 -0
  63. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/static.py +0 -0
  64. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/deployers/vite.py +0 -0
  65. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/main.py +0 -0
  66. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/__init__.py +0 -0
  67. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/apache_manager.py +0 -0
  68. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/backup_manager.py +0 -0
  69. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/backup_scheduler.py +0 -0
  70. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/base_manager.py +0 -0
  71. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/database/__init__.py +0 -0
  72. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/database/base.py +0 -0
  73. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/database/mongodb.py +0 -0
  74. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/database/mysql.py +0 -0
  75. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/database/postgres.py +0 -0
  76. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/database/redis.py +0 -0
  77. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/database/registry.py +0 -0
  78. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/nginx_manager.py +0 -0
  79. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/service_manager.py +0 -0
  80. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/managers/source_manager.py +0 -0
  81. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/monitor/__init__.py +0 -0
  82. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/monitor/ai_analyzer.py +0 -0
  83. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/monitor/email_notifier.py +0 -0
  84. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/monitor/process_monitor.py +0 -0
  85. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/monitor/threat_store.py +0 -0
  86. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/__init__.py +0 -0
  87. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/apache/proxy.conf.j2 +0 -0
  88. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/apache/static.conf.j2 +0 -0
  89. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/nginx/advanced.conf.j2 +0 -0
  90. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/nginx/monorepo.conf.j2 +0 -0
  91. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/nginx/proxy.conf.j2 +0 -0
  92. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/nginx/static.conf.j2 +0 -0
  93. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/systemd/app.service.j2 +0 -0
  94. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/systemd/backup-service.j2 +0 -0
  95. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/systemd/backup-timer.j2 +0 -0
  96. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/templates/systemd/docker-compose.service.j2 +0 -0
  97. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/validators/__init__.py +0 -0
  98. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/validators/domain.py +0 -0
  99. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/validators/port.py +0 -0
  100. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/validators/source.py +0 -0
  101. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/validators/ssh.py +0 -0
  102. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/__init__.py +0 -0
  103. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/__init__.py +0 -0
  104. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/apps.py +0 -0
  105. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/auth.py +0 -0
  106. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/backups.py +0 -0
  107. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/certs.py +0 -0
  108. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/config.py +0 -0
  109. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/databases.py +0 -0
  110. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/jobs.py +0 -0
  111. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/monitor.py +0 -0
  112. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/router.py +0 -0
  113. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/services.py +0 -0
  114. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/sites.py +0 -0
  115. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/api/system.py +0 -0
  116. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/auth.py +0 -0
  117. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/jobs.py +0 -0
  118. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/server.py +0 -0
  119. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/css/main.css +0 -0
  120. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/index.html +0 -0
  121. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/components/cards.js +0 -0
  122. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/components/jobs.js +0 -0
  123. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/components/metrics.js +0 -0
  124. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/components/skeleton.js +0 -0
  125. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/core/api.js +0 -0
  126. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/core/dialogs.js +0 -0
  127. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/core/notifications.js +0 -0
  128. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/core/router.js +0 -0
  129. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/core/search.js +0 -0
  130. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/core/shortcuts.js +0 -0
  131. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/core/theme.js +0 -0
  132. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/core/ui.js +0 -0
  133. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/core/websocket.js +0 -0
  134. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/main.js +0 -0
  135. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/apps.js +0 -0
  136. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/backups.js +0 -0
  137. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/certs.js +0 -0
  138. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/config.js +0 -0
  139. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/dashboard.js +0 -0
  140. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/databases.js +0 -0
  141. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/jobs.js +0 -0
  142. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/logs.js +0 -0
  143. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/monitor.js +0 -0
  144. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/services.js +0 -0
  145. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/js/pages/sites.js +0 -0
  146. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/login.html +0 -0
  147. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/logo.png +0 -0
  148. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/static/logo.webp +0 -0
  149. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/websockets/__init__.py +0 -0
  150. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm/web/websockets/router.py +0 -0
  151. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm_cli.egg-info/SOURCES.txt +0 -0
  152. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm_cli.egg-info/dependency_links.txt +0 -0
  153. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm_cli.egg-info/entry_points.txt +0 -0
  154. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm_cli.egg-info/requires.txt +0 -0
  155. {wasm_cli-0.15.7 → wasm_cli-0.15.8}/src/wasm_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wasm-cli
3
- Version: 0.15.7
3
+ Version: 0.15.8
4
4
  Summary: Web App System Management - Deploy and manage web applications on Linux servers
5
5
  Author: Yago López Prado
6
6
  Author-email: Yago López Prado <yago.lopez.adeje@gmail.com>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "wasm-cli"
7
- version = "0.15.7"
7
+ version = "0.15.8"
8
8
  description = "Web App System Management - Deploy and manage web applications on Linux servers"
9
9
  readme = "README.md"
10
10
  license = { text = "WASM-NCSAL" }
@@ -9,7 +9,7 @@ from setuptools import setup, find_packages
9
9
 
10
10
  setup(
11
11
  name="wasm-cli",
12
- version="0.15.7",
12
+ version="0.15.8",
13
13
  description="Web App System Management - Deploy and manage web applications on Linux servers",
14
14
  author="Yago López Prado",
15
15
  author_email="yago.lopez.adeje@gmail.com",
@@ -8,7 +8,7 @@ WASM - Web App System Management
8
8
  A robust CLI tool for deploying and managing web applications on Linux servers.
9
9
  """
10
10
 
11
- __version__ = "0.15.7"
11
+ __version__ = "0.15.8"
12
12
  __author__ = "Yago López Prado"
13
13
  __license__ = "WASM-NCSAL"
14
14
 
@@ -102,29 +102,30 @@ def _handle_create(args: Namespace) -> int:
102
102
  if not no_ssl:
103
103
  cert_manager = CertManager(verbose=args.verbose)
104
104
  if cert_manager.is_installed():
105
- # Check if a valid certificate already exists
105
+ additional_domains = None
106
+ if include_www:
107
+ additional_domains = [f"www.{domain}"]
108
+
109
+ # Check if a valid certificate already exists and covers all domains
106
110
  if cert_manager.cert_exists(domain):
107
111
  test = cert_manager.test_cert(domain)
108
112
  if test.get("valid"):
109
- logger.info(f"Valid SSL certificate found for {domain}")
110
- ssl_obtained = True
113
+ all_required = [domain] + (additional_domains or [])
114
+ if cert_manager.cert_covers_domains(domain, all_required):
115
+ logger.info(f"Valid SSL certificate found covering all domains")
116
+ ssl_obtained = True
117
+ else:
118
+ logger.info("Existing certificate does not cover all domains, expanding...")
111
119
  else:
112
- logger.warning(f"Existing certificate invalid, obtaining new one...")
120
+ logger.warning("Existing certificate invalid, obtaining new one...")
113
121
 
114
122
  if not ssl_obtained:
115
123
  logger.info(f"Obtaining SSL certificate for {domain}...")
116
124
  try:
117
- additional_domains = None
118
- if include_www:
119
- additional_domains = [f"www.{domain}"]
120
-
121
- nginx = args.webserver == "nginx"
122
- apache = args.webserver == "apache"
123
-
124
125
  cert_manager.obtain(
125
126
  domain,
126
- nginx=nginx,
127
- apache=apache,
127
+ nginx=args.webserver == "nginx",
128
+ apache=args.webserver == "apache",
128
129
  additional_domains=additional_domains,
129
130
  )
130
131
  ssl_obtained = True
@@ -130,6 +130,27 @@ class CertManager(BaseManager):
130
130
 
131
131
  return None
132
132
 
133
+ def cert_covers_domains(self, domain: str, required_domains: List[str]) -> bool:
134
+ """
135
+ Check if an existing certificate covers all required domains.
136
+
137
+ Args:
138
+ domain: Primary domain (certificate name).
139
+ required_domains: List of domains that must be covered.
140
+
141
+ Returns:
142
+ True if all required domains are covered.
143
+ """
144
+ info = self.get_cert_info(domain)
145
+ if not info:
146
+ return False
147
+
148
+ cert_domains = info.get("domains", [])
149
+ for d in required_domains:
150
+ if d not in cert_domains:
151
+ return False
152
+ return True
153
+
133
154
  def _check_certbot_plugin(self, plugin: str) -> bool:
134
155
  """
135
156
  Check if a certbot plugin is available.
@@ -178,10 +199,18 @@ class CertManager(BaseManager):
178
199
  CertificateError: If certificate issuance fails.
179
200
  """
180
201
  if self.cert_exists(domain) and not dry_run:
181
- if not expand or not additional_domains:
202
+ # If additional domains requested, check if cert already covers them
203
+ if additional_domains:
204
+ all_required = [domain] + additional_domains
205
+ if self.cert_covers_domains(domain, all_required):
206
+ self.logger.info(f"Certificate already covers all domains: {', '.join(all_required)}")
207
+ return True
208
+ # Cert exists but doesn't cover all domains - need to expand
209
+ self.logger.info(f"Expanding certificate to include: {', '.join(additional_domains)}")
210
+ expand = True
211
+ elif not expand:
182
212
  self.logger.warning(f"Certificate already exists for {domain}")
183
213
  return True
184
- self.logger.info(f"Expanding certificate for {domain}")
185
214
 
186
215
  # Build command
187
216
  cmd = ["certbot", "certonly"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wasm-cli
3
- Version: 0.15.7
3
+ Version: 0.15.8
4
4
  Summary: Web App System Management - Deploy and manage web applications on Linux servers
5
5
  Author: Yago López Prado
6
6
  Author-email: Yago López Prado <yago.lopez.adeje@gmail.com>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes