feat: Linux SSH admin and remote ssh-monitor update (0.11.0)

This commit is contained in:
PTah
2026-06-20 00:25:35 +10:00
parent 279ea925a8
commit cc8f50de89
17 changed files with 805 additions and 5 deletions
+2 -2
View File
@@ -4,6 +4,6 @@ from app.version import APP_NAME, APP_VERSION, APP_VERSION_LABEL
def test_version_constants():
assert APP_VERSION == "0.10.4"
assert APP_VERSION == "0.11.0"
assert APP_NAME == "Security Alert Center"
assert APP_VERSION_LABEL == "Security Alert Center v.0.10.4"
assert APP_VERSION_LABEL == "Security Alert Center v.0.11.0"
@@ -0,0 +1,79 @@
"""Linux admin settings and SSH host actions."""
from unittest.mock import patch
from app.models import Host
from app.models.ui_settings import UI_SETTINGS_ROW_ID, UiSettings
from app.services.ssh_connect import SshCommandResult, iter_ssh_targets
def test_put_linux_admin_settings_persists(jwt_headers, client, db_session, monkeypatch):
monkeypatch.setenv("SAC_LINUX_ADMIN_USER", "")
monkeypatch.setenv("SAC_LINUX_ADMIN_PASSWORD", "")
from app.config import get_settings
get_settings.cache_clear()
response = client.put(
"/api/v1/settings/linux-admin",
headers=jwt_headers,
json={"user": "root", "password": "secret-pass"},
)
assert response.status_code == 200
body = response.json()
assert body["configured"] is True
assert body["user"] == "root"
assert body["source"] == "db"
row = db_session.get(UiSettings, UI_SETTINGS_ROW_ID)
assert row is not None
assert row.linux_admin_user == "root"
assert row.linux_admin_password == "secret-pass"
def test_iter_ssh_targets_hostname_before_ip():
host = Host(
hostname="ubabuba",
os_family="linux",
product="ssh-monitor",
ipv4="10.0.0.5",
)
targets = iter_ssh_targets(host)
assert targets[0] == "ubabuba"
assert targets[-1] == "10.0.0.5"
def test_host_agent_update_via_ssh(jwt_headers, client, db_session, monkeypatch):
monkeypatch.setenv("SAC_LINUX_ADMIN_USER", "root")
monkeypatch.setenv("SAC_LINUX_ADMIN_PASSWORD", "pw")
from app.config import get_settings
get_settings.cache_clear()
host = Host(
hostname="ubabuba",
os_family="linux",
product="ssh-monitor",
ipv4="10.0.0.5",
)
db_session.add(host)
db_session.commit()
db_session.refresh(host)
with patch("app.api.v1.hosts.run_ssh_monitor_update") as mock_update:
mock_update.return_value = SshCommandResult(
ok=True,
message="SSH OK",
target="ubabuba",
stdout="updated",
exit_code=0,
)
response = client.post(
f"/api/v1/hosts/{host.id}/actions/agent-update",
headers=jwt_headers,
)
assert response.status_code == 200
body = response.json()
assert body["ok"] is True
assert body["target"] == "ubabuba"