diff --git a/LOGAR-LICENSING b/LOGAR-LICENSING index 13f67d4..0471798 160000 --- a/LOGAR-LICENSING +++ b/LOGAR-LICENSING @@ -1 +1 @@ -Subproject commit 13f67d46f728763094e0ba0d94a85c0ba235e8f1 +Subproject commit 0471798a89b3d5e4b452ce0858aa616b0cca3cc0 diff --git a/src/Server.py b/src/Server.py index b33e17d..859f8be 100644 --- a/src/Server.py +++ b/src/Server.py @@ -1682,12 +1682,25 @@ def main(): ca_info = enrollment.extract_license_info_from_cert(f.read()) ws_url = lic_server if ("ws://" in lic_server or "wss://" in lic_server) else f"{lic_server.replace('https://', 'wss://').replace('http://', 'ws://').rstrip('/')}/ws/license" + + active_seats = 0 + if os.path.exists(config.get("db_path", "server_logs.db")): + try: + conn_tmp = sqlite3.connect(config.get("db_path", "server_logs.db")) + row = conn_tmp.execute("SELECT COUNT(*) FROM clients WHERE status = 'active'").fetchone() + if row: + active_seats = row[0] + conn_tmp.close() + except Exception: + pass + success, msg, res = enrollment.enroll_and_sync_license_ws( cert_dir=cert_dir, license_id=ca_info.get("license_id"), license_authority_ws_url=ws_url, server_fingerprint=config.get("server_fingerprint", ""), - hostname=config.get("server_name", "") + hostname=config.get("server_name", ""), + seats_taken=active_seats ) if not success or not res: diff --git a/src/server_enrollment.py b/src/server_enrollment.py index 87f1cfb..2f5b894 100644 --- a/src/server_enrollment.py +++ b/src/server_enrollment.py @@ -662,6 +662,7 @@ def enroll_and_sync_license_ws( hostname: str = "", comm_cert_pem: Optional[str] = None, master_root_ca_pem: Optional[str] = None, + seats_taken: Optional[int] = None, timeout: int = 15, verify_tls: bool = True ) -> Tuple[bool, str, Optional[Dict[str, Any]]]: @@ -752,6 +753,8 @@ def enroll_and_sync_license_ws( "server_fingerprint": server_fingerprint, "hostname": hostname } + if seats_taken is not None: + payload["seats_taken"] = seats_taken ws.send(json.dumps(payload)) raw_reply = ws.recv(timeout=timeout) reply = json.loads(raw_reply)