Skip to content

Commit 0919625

Browse files
committed
add list_aps function
return details on nearby access points
1 parent bd01135 commit 0919625

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

ubiquiti/unifi.py

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,3 +228,89 @@ def routes(self, filters: Dict[str, Union[str, Pattern]]=None, order_by: str=Non
228228
data = sorted(data, key=lambda x: x[order_by] if order_by in x.keys() else x['_id'])
229229

230230
return data
231+
232+
def port_forwarding(self, filters: Dict[str, Union[str, Pattern]]=None, order_by: str=None) -> list:
233+
"""
234+
List forwarded ports.
235+
236+
:param filters: dict of k/v pairs; string is compiled to regex
237+
:param order_by: order by a key; defaults to '_id'
238+
:return: A list of forwarded ports as dicts (see below)
239+
_id
240+
dst_port
241+
fwd
242+
fwd_port
243+
name
244+
proto
245+
site_id
246+
src
247+
"""
248+
r = self._session.get("{}/api/s/{}/rest/portforward".format(self._baseurl, self._site, verify=self._verify_ssl), data="json={}")
249+
self._current_status_code = r.status_code
250+
251+
if self._current_status_code == 401:
252+
raise LoggedInException("Invalid login, or login has expired")
253+
254+
data = r.json()['data']
255+
256+
if filters:
257+
for term, value in filters.items():
258+
value_re = value if isinstance(value, Pattern) else re.compile(value)
259+
260+
data = [x for x in data if term in x.keys() and re.fullmatch(value_re, x[term])]
261+
262+
if order_by:
263+
data = sorted(data, key=lambda x: x[order_by] if order_by in x.keys() else x['_id'])
264+
265+
return data
266+
267+
def list_aps(self, filters: Dict[str, Union[str, Pattern]]=None, order_by: str=None) -> list:
268+
"""
269+
List nearby access points (and identify potential rogue APs).
270+
271+
:param filters: dict of k/v pairs; string is compiled to regex
272+
:param order_by: order by a key; defaults to '_id'
273+
:return: A list of access_points as dicts (see below)
274+
_id
275+
age
276+
ap_mac
277+
band
278+
bssid
279+
bw
280+
center_freq
281+
channel
282+
essid
283+
freq
284+
is_adhoc
285+
is_rogue
286+
is_ubnt
287+
last_seen
288+
noise
289+
oui
290+
radio
291+
radio_name
292+
report_time
293+
rssi
294+
rssi_age
295+
security
296+
signal
297+
site_id
298+
"""
299+
r = self._session.get("{}/api/s/{}/stat/rogueap".format(self._baseurl, self._site, verify=self._verify_ssl), data="json={}")
300+
self._current_status_code = r.status_code
301+
302+
if self._current_status_code == 401:
303+
raise LoggedInException("Invalid login, or login has expired")
304+
305+
data = r.json()['data']
306+
307+
if filters:
308+
for term, value in filters.items():
309+
value_re = value if isinstance(value, Pattern) else re.compile(value)
310+
311+
data = [x for x in data if term in x.keys() and re.fullmatch(value_re, x[term])]
312+
313+
if order_by:
314+
data = sorted(data, key=lambda x: x[order_by] if order_by in x.keys() else x['_id'])
315+
316+
return data

0 commit comments

Comments
 (0)