fix: propagate Settings config changes to service managers and live pages
- PUT /api/config now calls service_manager.update_config() for each service so changes write to the service's own config file, not just cell_config.json - email_manager.get_status() now reads smtp_port/imap_port/domain from its config file (defaults: 587/993/cell.local) and includes them in the response - calendar_manager.get_status() includes configured port (default 5232) - file_manager.get_status() uses configured port from service config - Email.jsx reads imap_port/smtp_port from API status instead of hardcoding - Settings service sections show "port changes require container restart" note Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+20
-8
@@ -33,15 +33,25 @@ class EmailManager(BaseServiceManager):
|
||||
self.safe_makedirs(self.dovecot_dir)
|
||||
self.safe_makedirs(os.path.dirname(self.domain_config_file))
|
||||
|
||||
def _get_service_config(self) -> Dict[str, Any]:
|
||||
"""Read configured ports/domain from service config file."""
|
||||
cfg = self.get_config()
|
||||
if isinstance(cfg, dict) and 'error' not in cfg:
|
||||
return cfg
|
||||
return {}
|
||||
|
||||
def get_status(self) -> Dict[str, Any]:
|
||||
"""Get email service status"""
|
||||
try:
|
||||
# Check if we're running in Docker environment
|
||||
svc_cfg = self._get_service_config()
|
||||
smtp_port = svc_cfg.get('smtp_port', 587)
|
||||
imap_port = svc_cfg.get('imap_port', 993)
|
||||
domain = svc_cfg.get('domain') or self._get_domain_config().get('domain', 'cell.local')
|
||||
|
||||
import os
|
||||
is_docker = os.path.exists('/.dockerenv') or os.environ.get('DOCKER_CONTAINER') == 'true'
|
||||
|
||||
|
||||
if is_docker:
|
||||
# Check if email container is actually running
|
||||
container_running = self._check_email_container_status()
|
||||
status = {
|
||||
'running': container_running,
|
||||
@@ -49,24 +59,26 @@ class EmailManager(BaseServiceManager):
|
||||
'smtp_running': container_running,
|
||||
'imap_running': container_running,
|
||||
'users_count': 0,
|
||||
'domain': 'cell.local',
|
||||
'domain': domain,
|
||||
'smtp_port': smtp_port,
|
||||
'imap_port': imap_port,
|
||||
'timestamp': datetime.utcnow().isoformat()
|
||||
}
|
||||
else:
|
||||
# Check actual service status in production
|
||||
smtp_running = self._check_smtp_status()
|
||||
imap_running = self._check_imap_status()
|
||||
|
||||
status = {
|
||||
'running': smtp_running and imap_running,
|
||||
'status': 'online' if (smtp_running and imap_running) else 'offline',
|
||||
'smtp_running': smtp_running,
|
||||
'imap_running': imap_running,
|
||||
'users_count': len(self._load_users()),
|
||||
'domain': self._get_domain_config().get('domain', 'unknown'),
|
||||
'domain': domain,
|
||||
'smtp_port': smtp_port,
|
||||
'imap_port': imap_port,
|
||||
'timestamp': datetime.utcnow().isoformat()
|
||||
}
|
||||
|
||||
|
||||
return status
|
||||
except Exception as e:
|
||||
return self.handle_error(e, "get_status")
|
||||
|
||||
Reference in New Issue
Block a user