Skip to content

Commit ca56177

Browse files
author
Naor Livne
committed
adding all of the user endpoints
1 parent db0bedc commit ca56177

File tree

4 files changed

+108
-20
lines changed

4 files changed

+108
-20
lines changed

NebulaPythonSDK/sdk.py

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,7 @@ def list_device_group(self, device_group):
148148
filtered_response = {"status_code": response.status_code, "reply": response.json()}
149149
return filtered_response
150150

151-
# create a new nebula delete_device_group, requires the app name to create and a complete dict of the config values
152-
# for it
151+
# create a new nebula device_group, requires the app name to create and a complete dict of the config values for it
153152
def create_device_group(self, device_group, config):
154153
url = self.host + "/api/" + self.API_VERSION + "/device_groups/" + device_group
155154
payload = json.dumps(config)
@@ -158,7 +157,7 @@ def create_device_group(self, device_group, config):
158157
filtered_response = {"status_code": response.status_code, "reply": response.json()}
159158
return filtered_response
160159

161-
# delete an existing nebula delete_device_group, no confirmation required in SDK so be careful
160+
# delete an existing nebula device_group, no confirmation required in SDK so be careful
162161
def delete_device_group(self, device_group):
163162
url = self.host + "/api/" + self.API_VERSION + "/device_groups/" + device_group
164163
headers = self.headers
@@ -192,16 +191,52 @@ def list_reports(self, page_size=10, hostname=None, device_group=None, report_cr
192191
filtered_response = {"status_code": response.status_code, "reply": response.json()}
193192
return filtered_response
194193

195-
# TODO - list users
196-
197-
# TODO - get user info
198-
199-
# TODO - delete a user
194+
# list all users
195+
def list_users(self):
196+
url = self.host + "/api/" + self.API_VERSION + "/users"
197+
headers = self.headers
198+
response = requests.request("GET", url, headers=headers, timeout=self.request_timeout)
199+
filtered_response = {"status_code": response.status_code, "reply": response.json()}
200+
return filtered_response
200201

201-
# TODO - update a user
202+
# list a user configuration
203+
def list_user(self, user):
204+
url = self.host + "/api/" + self.API_VERSION + "/users/" + user
205+
headers = self.headers
206+
response = requests.request("GET", url, headers=headers, timeout=self.request_timeout)
207+
filtered_response = {"status_code": response.status_code, "reply": response.json()}
208+
return filtered_response
202209

203-
# TODO - refresh a user token
210+
# delete an existing nebula user, no confirmation required in SDK so be careful
211+
def delete_user(self, user):
212+
url = self.host + "/api/" + self.API_VERSION + "/users/" + user
213+
headers = self.headers
214+
response = requests.request("DELETE", url, headers=headers, timeout=self.request_timeout)
215+
filtered_response = {"status_code": response.status_code, "reply": response.json()}
216+
return filtered_response
204217

205-
# TODO - create new user
218+
# update a user pass and\or bearer token
219+
def update_user(self, user, config):
220+
url = self.host + "/api/" + self.API_VERSION + "/users/" + user + "/update"
221+
payload = json.dumps(config)
222+
headers = self.headers
223+
response = requests.request("PUT", url, data=payload, headers=headers, timeout=self.request_timeout)
224+
filtered_response = {"status_code": response.status_code, "reply": response.json()}
225+
return filtered_response
206226

227+
# refresh a token for a user
228+
def refresh_user_token(self, user):
229+
url = self.host + "/api/" + self.API_VERSION + "/users/" + user + "/refresh"
230+
headers = self.headers
231+
response = requests.request("POST", url, headers=headers, timeout=self.request_timeout)
232+
filtered_response = {"status_code": response.status_code, "reply": response.json()}
233+
return filtered_response
207234

235+
# create a new nebula user, requires the user name to create and a complete dict of the config values for it
236+
def create_user(self, user, config):
237+
url = self.host + "/api/" + self.API_VERSION + "/users/" + user
238+
payload = json.dumps(config)
239+
headers = self.headers
240+
response = requests.request("POST", url, data=payload, headers=headers, timeout=self.request_timeout)
241+
filtered_response = {"status_code": response.status_code, "reply": response.json()}
242+
return filtered_response

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,24 @@ connection.update_device_group("device_group_name", device_group_config)
9999
# list paginated reports
100100
connection.list_reports()
101101

102+
# create a user
103+
user_config = {"password": "user_password", "token": "user_token"}
104+
connection.create_user("user_name", user_config)
105+
106+
# list user info
107+
connection.list_user("user_name")
108+
109+
# list all users
110+
connection.list_users()
111+
112+
# update a user
113+
user_config = {"password": "new_password", "token": "new_token"}
114+
connection.update_user("user_name", user_config)
115+
116+
# refresh a user token
117+
connection.refresh_user_token("user_name")
118+
119+
# delete a user
120+
connection.delete_user("user_name")
121+
102122
```

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
__author__ = 'Naor Livne'
44
__author_email__ = 'naorlivne@gmail.com'
5-
__version__ = '2.2.1'
5+
__version__ = '2.3.0'
66

77
with open('README.md') as f:
88
long_description = f.read()

test/test_nebula_python_sdk.py

Lines changed: 41 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -238,17 +238,50 @@ def test_list_reports(self):
238238
self.assertEqual(reply["reply"]["data"], None)
239239
self.assertEqual(reply["reply"]["last_id"], None)
240240

241-
# TODO - create unit tests for the user flow
242-
243-
# TODO - list users
241+
def test_list_users(self):
242+
nebula_connection_object = nebula_connection()
243+
reply = nebula_connection_object.list_users()
244+
self.assertEqual(reply["status_code"], 200)
245+
self.assertTrue(isinstance(reply["reply"]["users"], list))
244246

245-
# TODO - get user info
247+
def test_user_workflow(self, user="unit_test_user"):
248+
nebula_connection_object = nebula_connection()
246249

247-
# TODO - delete a user
250+
# make sure no user exists prior to the run
251+
nebula_connection_object.delete_user(user)
248252

249-
# TODO - update a user
253+
# check creating a user
254+
user_config = {"password": "unit_test_password", "token": "unit_test_token"}
255+
reply = nebula_connection_object.create_user(user, user_config)
256+
self.assertEqual(reply["status_code"], 200)
257+
self.assertTrue(isinstance(reply["reply"]["password"], str))
258+
self.assertTrue(isinstance(reply["reply"]["token"], str))
250259

251-
# TODO - refresh a user token
260+
# check getting user info
261+
reply = nebula_connection_object.list_user(user)
262+
self.assertEqual(reply["status_code"], 200)
263+
self.assertEqual(reply["reply"]["user_name"], user)
264+
self.assertTrue(isinstance(reply["reply"]["password"], str))
265+
self.assertTrue(isinstance(reply["reply"]["token"], str))
252266

253-
# TODO - create new user
267+
#check updating a user
268+
user_config = {"password": "unit_test_password_updated", "token": "unit_test_token_updated"}
269+
reply = nebula_connection_object.update_user(user, user_config)
270+
self.assertEqual(reply["status_code"], 200)
271+
self.assertEqual(reply["reply"]["user_name"], user)
272+
self.assertTrue(isinstance(reply["reply"]["password"], str))
273+
self.assertTrue(isinstance(reply["reply"]["token"], str))
274+
user_config = {"password": "unit_test_password", "token": "unit_test_token"}
275+
reply_second = nebula_connection_object.update_user(user, user_config)
276+
self.assertNotEqual(reply["reply"]["password"], reply_second["reply"]["password"])
277+
self.assertNotEqual(reply["reply"]["token"], reply_second["reply"]["token"])
278+
279+
# check refreshing a user token
280+
reply = nebula_connection_object.refresh_user_token(user)
281+
self.assertEqual(reply["status_code"], 200)
282+
self.assertTrue(isinstance(reply["reply"]["token"], str))
254283

284+
# check deleting a user
285+
reply = nebula_connection_object.delete_user(user)
286+
self.assertEqual(reply["status_code"], 200)
287+
self.assertEqual(reply["reply"], {})

0 commit comments

Comments
 (0)