From a11111944f4fbfe019c93c2f33c5c144a39933e8 Mon Sep 17 00:00:00 2001 From: "David D. Riddle" Date: Thu, 28 Aug 2025 10:21:09 -0500 Subject: [PATCH 1/2] A NEW HOPE --- src/clearpass/client.py | 4 ++++ tests/test_connector.py | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/clearpass/client.py b/src/clearpass/client.py index 59dd2c3..93aa01b 100644 --- a/src/clearpass/client.py +++ b/src/clearpass/client.py @@ -130,6 +130,10 @@ def _get_api(self, resource, filter=None): verify=False, ) + def get_session_ids(self, mac): + info = self._get_api("session", {"mac_address": mac}) + breakpoint() + def get_info_for_mac_address(self, mac, filter={}): if mac not in self._macinfo: ret = {} diff --git a/tests/test_connector.py b/tests/test_connector.py index df76dc8..cfd5615 100644 --- a/tests/test_connector.py +++ b/tests/test_connector.py @@ -39,3 +39,6 @@ def test_404_enable_mac(cassette, clearpass_client): def test_get_info_for_mac_address(cassette, clearpass_client): result = clearpass_client.get_info_for_mac_address(mac=TEST_DATA['mac']) assert result + +def test_get_info_for_mac_address(cassette, clearpass_client): + result = clearpass_client.get_session_ids("deadbeef1234") From a7b1d7fe04e230c135fb83cfc16bfa89d8de8ccc Mon Sep 17 00:00:00 2001 From: "David D. Riddle" Date: Wed, 3 Sep 2025 11:25:39 -0500 Subject: [PATCH 2/2] FIXUP --- src/clearpass/client.py | 31 +++++++++++++++++++++++++------ tests/test_connector.py | 8 ++++++-- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/clearpass/client.py b/src/clearpass/client.py index 93aa01b..21c8362 100644 --- a/src/clearpass/client.py +++ b/src/clearpass/client.py @@ -1,8 +1,9 @@ +import json import logging import re import requests -import json -import urllib.parse + +from urllib.parse import urlencode, urlunsplit, SplitResult from clearpass.exceptions import TokenError @@ -54,6 +55,7 @@ def hyphenate_mac(macstring): class APIConnection(): def __init__(self, username, password, endpoint, client_id, client_secret): self._baseurl = f"https://{endpoint}/" + self._endpoint = endpoint self._authurl = f"{self._baseurl}api/oauth" self._authpayload = { @@ -119,10 +121,20 @@ def _put_api(self, resource, payload): verify=False, ) - def _get_api(self, resource, filter=None): + def _get_api(self, resource, **kwargs): url = f"{self._baseurl}api/{resource}" - if filter: - url += f"?filter={urllib.parse.quote(json.dumps(filter))}" + + params = {} + for parameter, value in kwargs.items(): + params[parameter] = json.dumps(value) + + url = urlunsplit(SplitResult( + scheme="https", + netloc=f"{self._endpoint}", + path=f"api/{resource}", + query=urlencode(params), + fragment=None, + )) return requests.get( url=url, @@ -131,7 +143,14 @@ def _get_api(self, resource, filter=None): ) def get_session_ids(self, mac): - info = self._get_api("session", {"mac_address": mac}) + info = self._get_api( + "session", + filter={"mac_address": mac}, + calculate_count=True + ) + + # info.json()['count'] == 0 # Nothing found! + # info.json()['_embedded']['items'] = [] # Nothing returned! breakpoint() def get_info_for_mac_address(self, mac, filter={}): diff --git a/tests/test_connector.py b/tests/test_connector.py index cfd5615..ba3d095 100644 --- a/tests/test_connector.py +++ b/tests/test_connector.py @@ -40,5 +40,9 @@ def test_get_info_for_mac_address(cassette, clearpass_client): result = clearpass_client.get_info_for_mac_address(mac=TEST_DATA['mac']) assert result -def test_get_info_for_mac_address(cassette, clearpass_client): - result = clearpass_client.get_session_ids("deadbeef1234") + +def test_get_session_ids(cassette, clearpass_client): + # result = clearpass_client.get_session_ids("deadbeef1234") + mac = "064e250bd18d" # splunk-soar-dev + mac = "00d8610881d6" # from clearpass_api cli example + result = clearpass_client.get_session_ids(mac)