-
Notifications
You must be signed in to change notification settings - Fork 3
/
login_getwlan_details.py
130 lines (101 loc) · 5.18 KB
/
login_getwlan_details.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import requests
import json
import sys
# Only use when testing, surpresses warnings about insecure servers
#from requests.packages.urllib3.exceptions import InsecureRequestWarning
#requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
session = requests.Session()
jar = requests.cookies.RequestsCookieJar()
baseurl = "https://general.direction.com:8443/wsg/api/public/v6_1/" #replace "general.direction.com" with either the host name or IP of a member of the cluster
# Written with 3.6.2 in mind
#http://docs.ruckuswireless.com/smartzone/3.6.2/sz100-public-api-reference-guide-3-6-2.html API documentation
sz_username = "" #Enter a username with read privages to everything you want to access
sz_password = "" #Password for the above account
check_cert = True # Change to false if using selfsigned certs or cert chain is not on the machine running the script
login_headers_template = {'Content-Type': "application/json;charset=UTF-8"}
login_payload = '{ "username": "' + sz_username + '",\r\n "password": "' + sz_password + '"}'
wlan_template_id = ""
zone_template_id = ""
def ruckus_login(url,data):
output = session.post(baseurl + url, data=data, headers=login_headers_template, verify=check_cert)
return output
#This uses the ruckus_post above to get a session valid session cookie into the cookie jar
get_login_session_cookie = ruckus_login("session", login_payload)
jar = get_login_session_cookie.cookies
headers_template = {
'Content-Type': "application/json;charset=UTF-8",
'Cookie': 'JSESSIONID='+ jar['JSESSIONID']
}
def ruckus_post(url,data):
output = session.post(baseurl + url, data=data, headers=headers_template, verify=check_cert)
return output
def ruckus_get(url):
output = session.get(baseurl + url, headers=headers_template, verify=check_cert)
return output
jsonzones = ruckus_get("rkszones") #Get the JSON data for the zones confiured on the cluster
#The below function ruckus_list is used for stripping out the "list" dictionary from the returned JSON
def ruckus_list(jsondata):
output = {}
output = json.loads(jsondata.text)
output = output["list"]
return output
zones = ruckus_list(jsonzones)
def clean_ruckus_list(dictdata,dict_parent_name = "NONE",dict_parent_id = "NONE",names="name",ids="id"):
output = []
for row in dictdata:
output_name = ""
output_id = ""
for key,val in row.items():
if key == ids:
output_id = row[key]
elif key == names:
output_name = row[key]
if dict_parent_name and dict_parent_id == "NONE":
output.append([output_name,output_id]) #Produce a list without useless data but catch if someone doesn't pass both arguements
else:
output.append([dict_parent_name,dict_parent_id,output_name,output_id])
return output
cleaned_zones = clean_ruckus_list(zones)
cleaned_all_zone_wlan = []
for row in cleaned_zones:
zone_id = row[1]
zone_name = row[0]
urltemplate = "rkszones/{}/wlans"
jsonwlan = ruckus_get(urltemplate.format(zone_id))
wlan = ruckus_list(jsonwlan)
cleaned_all_zone_wlan.extend(clean_ruckus_list(wlan,zone_name,zone_id))
# The below block will check if there is an assigned template if not then it will ask for a WLAN name and the Zone name and check if they exist.
# Below is ugly and needs rewiritng as a While statement
if wlan_template_id == "" or zone_template_id == "":
wlan_template_name = input("Please enter a WLAN name to display the details of:")
zone_template_name = input("Please enter the zone the WLAN is part of:")
for row in cleaned_all_zone_wlan:
if wlan_template_name == row[2] and zone_template_name == row[0]:
print("Using {} from {} as the template.".format(wlan_template_name,zone_template_name))
wlan_template_id = row[3]
zone_template_id = row[1]
break
elif wlan_template_name[:4] in row[2] and zone_template_name == row[0]: #This will try and account for spelling mistakes in the WLAN name by offering a WLAN that matches with the first 4 charachers in the correct zone
confirm = input("Did you mean {} from {}? Y/N".format(row[2],row[0]))
if confirm.lower() == "y":
wlan_template_id = row[3]
zone_template_id = row[1]
break
else:
sys.exit("WLAN name not found")
# Check to confirm we have an id for both the WLAN and it's zone before continuing and check the WLAN is actually in that zone it was entered directly
if wlan_template_id == "":
sys.exit("No WLAN id")
if zone_template_id == "":
sys.exit("No Zone id to use with the WLAN")
wlan_in_zone = False
for row in cleaned_all_zone_wlan:
if zone_template_id == row[1] and wlan_template_id == row [3]:
wlan_in_zone = True
break
if wlan_in_zone != True:
sys.exit("WLAN id not in Zone id")
# Below we are going to request the details of the WLAN selected
wlan_template_json = ruckus_get("rkszones/{}/wlans/{}".format(zone_template_id,wlan_template_id))
wlan_template = json.loads(wlan_template_json.text)
print(json.dumps(wlan_template, indent=4, sort_keys=True))