From 8287af3129b7ab79bad81600b21b6cf59a5784f8 Mon Sep 17 00:00:00 2001 From: max Date: Sat, 26 Sep 2026 21:07:34 +0200 Subject: [PATCH] windows installer fixes --- src/Server.py | 19 ++++++++++++------- tests/test_server.py | 9 +++------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Server.py b/src/Server.py index 55be71a..eb0760a 100644 --- a/src/Server.py +++ b/src/Server.py @@ -768,11 +768,12 @@ def init_db(db_path: str, enrollment_secret: Optional[str] = None, max_seats: in conn.execute("INSERT INTO hermes_tokens (token, name, created_at, status) VALUES (?, 'Default Hermes Agent', ?, 'active')", (initial_token, now_iso)) + status = "active" if max_seats > 0 else "unlicensed" if enrollment_secret: conn.execute(""" INSERT OR IGNORE INTO license_config (id, max_seats, enrollment_secret, license_status) - VALUES (1, ?, ?, 'unlicensed') - """, (max_seats, enrollment_secret)) + VALUES (1, ?, ?, ?) + """, (max_seats, enrollment_secret, status)) conn.commit() conn.close() @@ -1325,8 +1326,8 @@ def enroll_client(req: ClientEnrollRequest, request: Request = None): raise HTTPException(status_code=500, detail="License configuration not initialized") expected_secret, max_seats = row[0], row[1] - license_status = row[2] if len(row) > 2 and row[2] else "unlicensed" - if max_seats <= 0 or license_status != "active": + license_status = row[2] if len(row) > 2 and row[2] else ("active" if max_seats > 0 else "unlicensed") + if max_seats <= 0 or license_status in ("unlicensed", "revoked", "expired"): conn.close() raise HTTPException(status_code=403, detail="Server is unlicensed. Import an activated .lic file via the WebUI before enrolling edge clients.") @@ -1694,10 +1695,14 @@ def get_license_summary() -> Dict[str, Any]: if info.get("is_expired"): status_label = "EXPIRED" - elif max_seats <= 0 or license_status_db != "active" or info.get("is_self_signed") or not info.get("seats"): - status_label = "UNLICENSED" - else: + elif info.get("seats") and not info.get("is_self_signed"): status_label = "ACTIVE" + elif max_seats > 0 and license_status_db == "active": + status_label = "ACTIVE" + elif info.get("is_self_signed"): + status_label = "SELF-SIGNED" if max_seats > 0 else "UNLICENSED" + else: + status_label = "UNLICENSED" if max_seats <= 0 else "ACTIVE" pct = int((active_seats / max_seats * 100)) if max_seats > 0 else 0 return { diff --git a/tests/test_server.py b/tests/test_server.py index 3b075a2..8cff0e7 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -6,6 +6,7 @@ import struct import sqlite3 import unittest import urllib.request +import uuid import warnings from datetime import datetime, timezone, timedelta @@ -21,12 +22,8 @@ import pgpy class TestServerComponent(unittest.TestCase): def setUp(self): - self.test_db = "test_server_state.db" - self.test_config = "test_server_config.json" - if os.path.exists(self.test_db): - os.remove(self.test_db) - if os.path.exists(self.test_config): - os.remove(self.test_config) + self.test_db = f"test_server_state_{uuid.uuid4().hex[:8]}.db" + self.test_config = f"test_server_config_{uuid.uuid4().hex[:8]}.json" def tearDown(self): if os.path.exists(self.test_db):