Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 28 additions & 5 deletions src/clearpass/client.py
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -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 = {
Expand Down Expand Up @@ -119,17 +121,38 @@ 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,
headers=self.getheaders,
verify=False,
)

def get_session_ids(self, 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={}):
if mac not in self._macinfo:
ret = {}
Expand Down
7 changes: 7 additions & 0 deletions tests/test_connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,10 @@ 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_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)
Loading