1
1
# coding=utf-8
2
2
import logging
3
+ import string
4
+ import secrets
3
5
4
6
from .rest_client import AtlassianRestAPI
5
7
@@ -15,18 +17,112 @@ def __init__(self, url, username, password, timeout=60, api_root="rest", api_ver
15
17
super (Crowd , self ).__init__ (url , username , password , timeout , api_root , api_version )
16
18
17
19
def _crowd_api_url (self , api , resource ):
18
- return "{server}/{api_root}/{api}/{version}/{resource}" .format (
19
- server = self .url ,
20
+ return "/{api_root}/{api}/{version}/{resource}" .format (
20
21
api_root = self .api_root ,
21
22
api = api ,
22
23
version = self .api_version ,
23
24
resource = resource ,
24
25
)
25
26
27
+ def _user_change_status (self , username , active ):
28
+ """
29
+ Change user status
30
+
31
+ :params active bool
32
+
33
+ :return:
34
+ """
35
+
36
+ user = self .user (username )
37
+
38
+ user_object = {
39
+ "name" : username ,
40
+ "active" : active ,
41
+ "display-name" : user .get ("display-name" ),
42
+ "first-name" : user .get ("first-name" ),
43
+ "last-name" : user .get ("last-name" ),
44
+ "email" : user .get ("email" ),
45
+ }
46
+
47
+ params = {"username" : username }
48
+
49
+ return self .put (self ._crowd_api_url ("usermanagement" , "user" ), params = params , data = user_object )
50
+
26
51
def user (self , username ):
27
52
params = {"username" : username }
28
53
return self .get (self ._crowd_api_url ("usermanagement" , "user" ), params = params )
29
54
55
+ def user_activate (self , username ):
56
+ """
57
+ Activate user
58
+ """
59
+
60
+ return self ._user_change_status (username , True )
61
+
62
+ def user_create (self , username , active , first_name , last_name , display_name , email , password = None ):
63
+ """
64
+ Create new user
65
+
66
+ :param active: bool, OPTIONAL: password can be auto-generated if not included
67
+ username (string)
68
+ active (bool)
69
+ first-name (string)
70
+ last-name (string)
71
+ display-name (string)
72
+ email (string)
73
+ password (string, optional)
74
+
75
+ :return:
76
+ """
77
+
78
+ if not password :
79
+ characters = string .ascii_letters + string .punctuation + string .digits
80
+ password = "" .join (secrets .choice (characters ) for x in range (30 ))
81
+
82
+ user_object = {
83
+ "name" : username ,
84
+ "password" : {"value" : password },
85
+ "active" : active ,
86
+ "first-name" : first_name ,
87
+ "last-name" : last_name ,
88
+ "display-name" : display_name ,
89
+ "email" : email ,
90
+ }
91
+
92
+ return self .post (self ._crowd_api_url ("usermanagement" , "user" ), data = user_object )
93
+
94
+ def user_deactivate (self , username ):
95
+ """
96
+ Deactivate user
97
+
98
+ :return:
99
+ """
100
+
101
+ return self ._user_change_status (username , False )
102
+
103
+ def user_delete (self , username ):
104
+ """
105
+ Delete user
106
+
107
+ :return:
108
+ """
109
+
110
+ params = {"username" : username }
111
+
112
+ return self .delete (self ._crowd_api_url ("usermanagement" , "user" ), params = params )
113
+
114
+ def group_add_user (self , username , groupname ):
115
+ """
116
+ Add user to group
117
+ :return:
118
+ """
119
+
120
+ data = {"name" : groupname }
121
+
122
+ params = {"username" : username }
123
+
124
+ return self .post (self ._crowd_api_url ("usermanagement" , "user/group/direct" ), params = params , json = data )
125
+
30
126
def group_nested_members (self , group ):
31
127
params = {"groupname" : group }
32
128
return self .get (self ._crowd_api_url ("group" , "nested" ), params = params )
0 commit comments