Skip to content

Commit 2db2a0e

Browse files
authored
Add create_authorization_session and create_self_service_session methods (#4)
* Add create_authorization_session and create_self_service_session methods * Correct function call in example * Add has_permission method
1 parent a4acc12 commit 2db2a0e

File tree

2 files changed

+40
-10
lines changed

2 files changed

+40
-10
lines changed

examples/example.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ def make_warrant_requests(api_key):
99
provided_user_id = "custom_user_100"
1010
user2 = client.create_user(provided_user_id)
1111
print("Created user with provided id: " + user2)
12-
print("Created session token for user " + user1 + ": " + client.create_session(user1))
13-
print("Created session token for user " + user2 + ": " + client.create_session(user2))
12+
print("Created authorization session token for user " + user1 + ": " + client.create_authorization_session({type:"sess", user_id:user1}))
13+
print("Created authorization session token for user " + user2 + ": " + client.create_authorization_session({type:"sess", user_id:user2}))
1414
tenant1 = client.create_tenant("custom_tenant_210")
1515
print("Created tenant with provided id: " + tenant1)
16+
print("Created self service session for user " + user2 + ": " + client.create_self_service_session({type:"ssdash", user_id:user2, tenant_id: tenant1}, "http://example.com"))
1617
admin_role = client.create_role("admin1")
1718
print("Created role: " + admin_role)
1819
permission1 = client.create_permission("create_report")
@@ -61,4 +62,4 @@ def make_warrant_requests(api_key):
6162
if __name__ == '__main__':
6263
# Replace with your Warrant api key
6364
api_key = "API_KEY"
64-
make_warrant_requests(api_key)
65+
make_warrant_requests(api_key)

warrant/__init__.py

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
__version__ = "0.2.1"
55

66
API_ENDPOINT = "https://api.warrant.dev"
7+
SELF_SERVICE_DASHBOARD_BASE_URL = "https://self-serve.warrant.dev"
78

89
class WarrantException(Exception):
910
def __init__(self, msg, status_code=-1):
@@ -31,6 +32,11 @@ def __init__(self, warrants, op):
3132
self.warrants = warrants
3233
self.op = op
3334

35+
class PermissionCheck(object):
36+
def __init__(self, permission_id, user_id):
37+
self.permission_id = permission_id
38+
self.user_id = user_id
39+
3440
class WarrantClient(object):
3541
def __init__(self, api_key):
3642
self._apiKey = api_key
@@ -144,16 +150,26 @@ def remove_permission_from_role(self, role_id, permission_id):
144150
raise WarrantException(msg="Must include a roleId and permissionId")
145151
self._make_delete_request(uri="/v1/roles/"+role_id+"/permissions/"+permission_id)
146152

147-
def create_session(self, user_id):
148-
if user_id == "":
153+
def create_authorization_session(self, session):
154+
if session.user_id == "":
149155
raise WarrantException(msg="Invalid userId provided")
150-
payload = {
151-
"type": "sess",
152-
"userId": user_id
153-
}
154-
json = self._make_post_request(uri="/v1/sessions", json=payload)
156+
if session.type != "sess":
157+
raise WarrantException(msg="Invalid type provided")
158+
if redirect_url == "":
159+
raise WarrantException(msg="Must include a redirect_url")
160+
json = self._make_post_request(uri="/v1/sessions", json=session)
155161
return json['token']
156162

163+
def create_self_service_session(self, session, redirect_url):
164+
if session.tenant_id == "":
165+
raise WarrantException(msg="Invalid tenant_id provided")
166+
if session.user_id == "":
167+
raise WarrantException(msg="Invalid user_id provided")
168+
if session.type != "ssdash":
169+
raise WarrantException(msg="Invalid type provided")
170+
json = self._make_post_request(uri="/v1/sessions", json=session)
171+
return f"{SELF_SERVICE_DASHBOARD_BASE_URL}/{json['token']}?redirectUrl={redirect_url}"
172+
157173
def create_warrant(self, object_type, object_id, relation, subject):
158174
if object_type == "" or object_id == "" or relation == "":
159175
raise WarrantException(msg="Invalid object_type, object_id and/or relation")
@@ -193,3 +209,16 @@ def is_authorized(self, warrant_check):
193209
return True
194210
else:
195211
return False
212+
213+
def has_permission(self, permission_check):
214+
return self.is_authorized({
215+
warrants: [{
216+
objectType: "permission",
217+
objectId: permission_check.permission_id,
218+
relation: "member",
219+
subject: {
220+
objectType: "user",
221+
objectId: permission_check.user_id
222+
}
223+
}]
224+
})

0 commit comments

Comments
 (0)