Skip to content
Snippets Groups Projects
Commit 0cf4761e authored by Arie Peterson's avatar Arie Peterson
Browse files

Add stackspin role info to user listing endpoint

parent 970ac4fb
No related branches found
No related tags found
No related merge requests found
......@@ -20,18 +20,24 @@ kratos_frontend_api = frontend_api.FrontendApi(kratos_client)
kratos_identity_api = identity_api.IdentityApi(kratos_client)
class UserService:
@staticmethod
def get_users():
@classmethod
def get_users(cls):
page = 0
userList = []
dashboardRoles = cls.__getDashboardRoles()
while page >= 0:
if page == 0:
res = KratosApi.get("/admin/identities?per_page=1000").json()
else:
res = KratosApi.get("/admin/identities?per_page=1000&page={}".format(page)).json()
for r in res:
# removed the app role assignment function, passing simple user data
# userList.append(UserService.__insertAppRoleToUser(r["id"], r))
# Inject information from the `stackspin` database that's associated to this user.
# In particular, the dashboard role (admin or regular user).
stackspinData = {}
dashboardRole = dashboardRoles.get(r["id"])
if dashboardRole is not None:
stackspinData["stackspin_admin"] = dashboardRole == Role.ADMIN_ROLE_ID
r["stackspin_data"] = stackspinData
userList.append(r)
if len(res) == 0:
page = -1
......@@ -40,10 +46,10 @@ class UserService:
return userList
@staticmethod
def get_user(id):
@classmethod
def get_user(cls, id):
res = KratosApi.get("/admin/identities/{}".format(id)).json()
return UserService.__insertAppRoleToUser(id, res)
return cls.__insertAppRoleToUser(id, res)
@staticmethod
def create_recovery_link(id):
......@@ -53,8 +59,8 @@ class UserService:
res = KratosApi.post("/admin/recovery/link", kratos_data).json()
return res
@staticmethod
def post_user(data):
@classmethod
def post_user(cls, data):
kratos_data = {
"schema_id": "default",
"traits": {
......@@ -90,7 +96,7 @@ class UserService:
# We start a recovery flow immediately after creating the
# user, so the user can set their initial password.
UserService.__start_recovery_flow(data["email"])
cls.__start_recovery_flow(data["email"])
return UserService.get_user(res["id"])
......@@ -119,8 +125,8 @@ class UserService:
api_response = kratos_frontend_api.update_recovery_flow(flow,
update_recovery_flow_body=update_recovery_flow_body)
@staticmethod
def put_user(id, user_editing_id, data):
@classmethod
def put_user(cls, id, user_editing_id, data):
kratos_data = {
"schema_id": "default",
"traits": {"email": data["email"], "name": data["name"]},
......@@ -148,10 +154,10 @@ class UserService:
db.session.add(appRole)
db.session.commit()
return UserService.get_user(id)
return cls.get_user(id)
@staticmethod
def put_multiple_users(user_editing_id, data):
@classmethod
def put_multiple_users(cls, user_editing_id, data):
for user_data in data["users"]:
kratos_data = {
# "schema_id": "default",
......@@ -180,7 +186,7 @@ class UserService:
db.session.add(appRole)
db.session.commit()
return UserService.get_user(user_data["id"])
return cls.get_user(user_data["id"])
@staticmethod
def delete_user(id):
......@@ -254,3 +260,15 @@ class UserService:
userRes["traits"]["app_roles"] = app_roles
return userRes
@staticmethod
def __getDashboardRoles():
dashboardRoles = {}
for appRole, app in (
db.session.query(AppRole, App)
.filter(AppRole.app_id == App.id)
.filter(App.slug == "dashboard")
.all()
):
dashboardRoles[appRole.user_id] = appRole.role_id
return dashboardRoles
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment