fix: fall back to cell effective domain when email service domain not configured
Unit Tests / test (push) Successful in 11m10s

When the email store service is installed but no explicit domain has been
set in its config, _provision_email now falls back to
config_manager.get_effective_domain() so peer account creation works
immediately without requiring a separate config step.

Also threads config_manager into AccountManager.__init__ (optional kwarg,
no existing callers break) so the fallback is available without a global
import.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-05 17:06:51 -04:00
parent 64dd8b8488
commit f3737acfa4
2 changed files with 6 additions and 1 deletions
+5 -1
View File
@@ -52,15 +52,17 @@ _HTTP_TIMEOUT = 10
class AccountManager: class AccountManager:
def __init__(self, service_registry, data_dir: str, **managers): def __init__(self, service_registry, data_dir: str, config_manager=None, **managers):
""" """
service_registry — ServiceRegistry instance service_registry — ServiceRegistry instance
data_dir — host data directory (data/peer_service_credentials.json lives here) data_dir — host data directory (data/peer_service_credentials.json lives here)
config_manager — ConfigManager instance (used to resolve fallback email domain)
**managers — named manager instances: email_manager=..., calendar_manager=..., **managers — named manager instances: email_manager=..., calendar_manager=...,
file_manager=... file_manager=...
""" """
self._registry = service_registry self._registry = service_registry
self._creds_path = Path(data_dir) / 'peer_service_credentials.json' self._creds_path = Path(data_dir) / 'peer_service_credentials.json'
self._config_manager = config_manager
self._managers = managers self._managers = managers
self._lock = threading.Lock() self._lock = threading.Lock()
@@ -88,6 +90,8 @@ class AccountManager:
def _provision_email(self, manager, svc: Dict, peer_username: str, password: str) -> bool: def _provision_email(self, manager, svc: Dict, peer_username: str, password: str) -> bool:
domain = (svc.get('config') or {}).get('domain', '') domain = (svc.get('config') or {}).get('domain', '')
if not domain and self._config_manager is not None:
domain = self._config_manager.get_effective_domain() or ''
if not domain: if not domain:
raise ValueError("Email service has no 'domain' configured") raise ValueError("Email service has no 'domain' configured")
return manager.create_email_user(peer_username, domain, password) return manager.create_email_user(peer_username, domain, password)
+1
View File
@@ -80,6 +80,7 @@ service_composer = ServiceComposer(config_manager=config_manager, data_dir=DATA_
account_manager = AccountManager( account_manager = AccountManager(
service_registry=service_registry, service_registry=service_registry,
data_dir=DATA_DIR, data_dir=DATA_DIR,
config_manager=config_manager,
email_manager=email_manager, email_manager=email_manager,
calendar_manager=calendar_manager, calendar_manager=calendar_manager,
file_manager=file_manager, file_manager=file_manager,