Feature 10941: User Management Enhancements
[osm/osmclient.git] / osmclient / sol005 / user.py
index d94b9c4..74a7c59 100644 (file)
@@ -88,9 +88,9 @@ class User(object):
         """Updates an existing OSM user identified by name"""
         self._logger.debug("")
         if pwd_change:
-            self._client.get_token(pwd_change)
+            token_info = self._client.get_token(pwd_change)
         else:
-            self._client.get_token()
+            token_info = self._client.get_token()
         # print(user)
         myuser = self.get(name)
         update_user = {
@@ -151,6 +151,28 @@ class User(object):
                     mapping = {"project": project, "role": role}
                     update_user["remove_project_role_mappings"].append(mapping)
 
+        if user.get("unlock"):
+            if token_info.get("admin_show"):
+                update_user["unlock"] = user["unlock"]
+                update_user["system_admin_id"] = token_info.get("user_id")
+            else:
+                raise ClientException(
+                    "{} does not have privilege to unlock {}".format(
+                        token_info.get("username"), myuser.get("username")
+                    )
+                )
+
+        if user.get("renew"):
+            if token_info.get("admin_show"):
+                update_user["renew"] = user["renew"]
+                update_user["system_admin_id"] = token_info.get("user_id")
+            else:
+                raise ClientException(
+                    "{} does not have privilege to renew {}".format(
+                        token_info.get("username"), myuser.get("username")
+                    )
+                )
+
         if not update_user["remove_project_role_mappings"]:
             del update_user["remove_project_role_mappings"]
         if not update_user["add_project_role_mappings"]:
@@ -216,7 +238,11 @@ class User(object):
     def list(self, filter=None):
         """Returns the list of OSM users"""
         self._logger.debug("")
-        self._client.get_token()
+        response = self._client.get_token()
+        admin_show = None
+        if response:
+            admin_show = response.get("admin_show")
+
         filter_string = ""
         if filter:
             filter_string = "?{}".format(filter)
@@ -224,7 +250,9 @@ class User(object):
             "{}{}".format(self._apiBase, filter_string), skip_query_admin=True
         )
         # print('RESP: {}'.format(resp))
-        if resp:
+        if resp and response:
+            return json.loads(resp), admin_show
+        elif resp:
             return json.loads(resp)
         return list()