mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-09-26 08:36:45 +00:00
fix: improve host diagnostics, storage handling, and maintenance workflows
- add zero-downtime Proxmox TLS certificate refresh from the Security panel (#307) - classify storage availability independently from missing capacity information (#309) - update ZFS ARC sizing and safely reconcile conflicting module configurations - preserve and restore migrated ZFS settings without overwriting later administrator changes - stop memory optimization from forcing the kernel overcommit policy - correlate multi-line OOM events and identify the affected LXC, cgroup limits, swap and killed process - add selectable Bash prompt path styles and clearer shell activation guidance - protect technical names during automatic translation and correct localized terminology - update the Coral and VM/LXC Apps and Updates documentation, translations and screenshots
This commit is contained in:
@@ -249,6 +249,78 @@ def ssl_disable():
|
||||
return jsonify({"success": False, "message": str(e)}), 500
|
||||
|
||||
|
||||
@auth_bp.route('/api/ssl/reload', methods=['POST'])
|
||||
@require_auth
|
||||
def ssl_reload():
|
||||
"""Reload the configured certificate without restarting the Monitor."""
|
||||
config = auth_manager.load_ssl_config()
|
||||
if not config.get("enabled"):
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"code": "ssl_not_enabled",
|
||||
"message": "HTTPS is not enabled",
|
||||
}), 400
|
||||
|
||||
source = config.get("source", "custom")
|
||||
cert_info = None
|
||||
if source == "proxmox":
|
||||
detection = auth_manager.detect_proxmox_certificates()
|
||||
if not detection.get("proxmox_available"):
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"code": "certificate_unavailable",
|
||||
"message": "No Proxmox certificate was detected",
|
||||
}), 404
|
||||
cert_path = detection.get("proxmox_cert", "")
|
||||
key_path = detection.get("proxmox_key", "")
|
||||
cert_info = detection.get("cert_info")
|
||||
else:
|
||||
cert_path = config.get("cert_path", "")
|
||||
key_path = config.get("key_path", "")
|
||||
|
||||
valid, validation_message = auth_manager.validate_certificate_files(cert_path, key_path)
|
||||
if not valid:
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"code": "certificate_invalid",
|
||||
"message": validation_message,
|
||||
}), 400
|
||||
|
||||
paths_changed = (
|
||||
cert_path != config.get("cert_path", "") or
|
||||
key_path != config.get("key_path", "")
|
||||
)
|
||||
if paths_changed:
|
||||
updated_config = dict(config)
|
||||
updated_config["cert_path"] = cert_path
|
||||
updated_config["key_path"] = key_path
|
||||
if not auth_manager.save_ssl_config(updated_config):
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"code": "config_save_failed",
|
||||
"message": "Failed to save the renewed certificate paths",
|
||||
}), 500
|
||||
|
||||
try:
|
||||
changed = auth_manager.reload_server_ssl_context(cert_path, key_path)
|
||||
except Exception as e:
|
||||
if paths_changed:
|
||||
auth_manager.save_ssl_config(config)
|
||||
return jsonify({
|
||||
"success": False,
|
||||
"code": "runtime_reload_failed",
|
||||
"message": str(e),
|
||||
}), 409
|
||||
|
||||
return jsonify({
|
||||
"success": True,
|
||||
"changed": changed,
|
||||
"cert_path": cert_path,
|
||||
"key_path": key_path,
|
||||
"cert_info": cert_info,
|
||||
})
|
||||
|
||||
|
||||
def _refresh_pve_webhook_for_ssl_change():
|
||||
"""Helper used by both `ssl_configure` and `ssl_disable`.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user