1313# limitations under the License.
1414
1515import json
16- from typing import Dict , List
16+ from typing import Dict , List , Optional
1717
1818import requests
1919
@@ -54,16 +54,18 @@ def __init__(self):
5454 self .invitationCode = ""
5555
5656 @classmethod
57- def new (cls , owner , name , created_time , display_name ):
57+ def new (cls , owner , name , created_time , display_name , email = "" , phone = "" ):
5858 self = cls ()
5959 self .name = name
6060 self .owner = owner
6161 self .createdTime = created_time
6262 self .displayName = display_name
63+ self .email = email
64+ self .phone = phone
6365 return self
6466
6567 @classmethod
66- def from_dict (cls , data : dict ):
68+ def from_dict (cls , data : dict ) -> Optional [ "User" ] :
6769 if data is None :
6870 return None
6971
@@ -79,9 +81,52 @@ def __str__(self):
7981 def to_dict (self ) -> dict :
8082 return self .__dict__
8183
84+ def get_id (self ) -> str :
85+ return f"{ self .owner } /{ self .name } "
86+
8287
8388class _UserSDK :
84- def get_users (self ) -> List [Dict ]:
89+ def get_global_users (self ) -> List [User ]:
90+ """ """
91+ url = self .endpoint + "/api/get-global-users"
92+ params = {
93+ "clientId" : self .client_id ,
94+ "clientSecret" : self .client_secret ,
95+ }
96+ r = requests .get (url , params )
97+ response = r .json ()
98+ if response ["status" ] != "ok" :
99+ raise Exception (response ["msg" ])
100+ users = []
101+ for user in response ["data" ]:
102+ users .append (User .from_dict (user ))
103+ return users
104+
105+ def get_sorted_users (self , sorter : str , limit : str ) -> List [User ]:
106+ """
107+ Get the sorted users from Casdoor.
108+
109+ :param sroter: the DB column name to sort by, e.g., created_time
110+ :param limiter: the count of users to return, e.g., 25
111+ """
112+ url = self .endpoint + "/api/get-sorted-users"
113+ params = {
114+ "owner" : self .org_name ,
115+ "sorter" : sorter ,
116+ "limit" : limit ,
117+ "clientId" : self .client_id ,
118+ "clientSecret" : self .client_secret ,
119+ }
120+ r = requests .get (url , params )
121+ response = r .json ()
122+ if response ["status" ] != "ok" :
123+ raise Exception (response ["msg" ])
124+ users = []
125+ for user in response ["data" ]:
126+ users .append (User .from_dict (user ))
127+ return users
128+
129+ def get_users (self ) -> List [User ]:
85130 """
86131 Get the users from Casdoor.
87132
@@ -102,16 +147,73 @@ def get_users(self) -> List[Dict]:
102147 users .append (User .from_dict (user ))
103148 return users
104149
105- def get_user (self , user_id : str ) -> User :
150+ def get_user (self , name : str ) -> User :
106151 """
107- Get the user from Casdoor providing the user_id .
152+ Get the user from Casdoor providing the name .
108153
109- :param user_id : the id of the user
154+ :param name : the name of the user
110155 :return: a dict that contains user's info
111156 """
112157 url = self .endpoint + "/api/get-user"
113158 params = {
114- "id" : f"{ self .org_name } /{ user_id } " ,
159+ "id" : f"{ self .org_name } /{ name } " ,
160+ "clientId" : self .client_id ,
161+ "clientSecret" : self .client_secret ,
162+ }
163+ r = requests .get (url , params )
164+ response = r .json ()
165+ if response ["status" ] != "ok" :
166+ raise Exception (response ["msg" ])
167+ return User .from_dict (response ["data" ])
168+
169+ def get_user_by_email (self , email : str ) -> User :
170+ """
171+ Get the user from Casdoor providing the email.
172+
173+ :param email: the email of the user
174+ :return: a User object that contains user's info
175+ """
176+ url = self .endpoint + "/api/get-user"
177+ params = {
178+ "email" : email ,
179+ "clientId" : self .client_id ,
180+ "clientSecret" : self .client_secret ,
181+ }
182+ r = requests .get (url , params )
183+ response = r .json ()
184+ if response ["status" ] != "ok" :
185+ raise Exception (response ["msg" ])
186+ return User .from_dict (response ["data" ])
187+
188+ def get_user_by_phone (self , phone : str ) -> User :
189+ """
190+ Get the user from Casdoor providing the phone number.
191+
192+ :param phone: the phone number of the user
193+ :return: a User object that contains user's info
194+ """
195+ url = self .endpoint + "/api/get-user"
196+ params = {
197+ "phone" : phone ,
198+ "clientId" : self .client_id ,
199+ "clientSecret" : self .client_secret ,
200+ }
201+ r = requests .get (url , params )
202+ response = r .json ()
203+ if response ["status" ] != "ok" :
204+ raise Exception (response ["msg" ])
205+ return User .from_dict (response ["data" ])
206+
207+ def get_user_by_user_id (self , user_id : str ) -> User :
208+ """
209+ Get the user from Casdoor providing the user ID.
210+
211+ :param user_id: the user ID of the user
212+ :return: a User object that contains user's info
213+ """
214+ url = self .endpoint + "/api/get-user"
215+ params = {
216+ "userId" : user_id ,
115217 "clientId" : self .client_id ,
116218 "clientSecret" : self .client_secret ,
117219 }
@@ -146,10 +248,25 @@ def get_user_count(self, is_online: bool = None) -> int:
146248 return count
147249
148250 def modify_user (self , method : str , user : User ) -> Dict :
251+ """
252+ modifyUser is an encapsulation of user CUD(Create, Update, Delete) operations.
253+ possible actions are `add-user`, `update-user`, `delete-user`,
254+ """
255+ id = user .get_id ()
256+ return self .modify_user_by_id (method , id , user )
257+
258+ def modify_user_by_id (self , method : str , id : str , user : User ) -> Dict :
259+ """
260+ Modify the user from Casdoor providing the ID.
261+
262+ :param id: the id ( owner/name ) of the user
263+ :param user: a User object that contains user's info
264+ """
265+
149266 url = self .endpoint + f"/api/{ method } "
150267 user .owner = self .org_name
151268 params = {
152- "id" : f" { user . owner } / { user . name } " ,
269+ "id" : id ,
153270 "clientId" : self .client_id ,
154271 "clientSecret" : self .client_secret ,
155272 }
@@ -168,6 +285,10 @@ def update_user(self, user: User) -> Dict:
168285 response = self .modify_user ("update-user" , user )
169286 return response
170287
288+ def update_user_by_id (self , id : str , user : User ) -> Dict :
289+ response = self .modify_user_by_id ("update-user" , id , user )
290+ return response
291+
171292 def delete_user (self , user : User ) -> Dict :
172293 response = self .modify_user ("delete-user" , user )
173294 return response
0 commit comments