@@ -97,7 +97,8 @@ func (client *Client) UpdateAPIKey(key *ApiKey) error {
97
97
return nil
98
98
}
99
99
100
- func (client * Client ) CreateApiKey (accountId string , apiKey * ApiKey ) (string , error ) {
100
+ // CreateApiKey - creates api key for account by switch to the user and call /api/auth/keys
101
+ func (client * Client ) CreateApiKey (userID string , accountId string , apiKey * ApiKey ) (string , error ) {
101
102
102
103
// Check collaborataros
103
104
account , err := client .GetAccountByID (accountId )
@@ -108,34 +109,18 @@ func (client *Client) CreateApiKey(accountId string, apiKey *ApiKey) (string, er
108
109
log .Fatal ("[ERROR] Collaborators are not set" )
109
110
}
110
111
111
- // add user
112
- userPrefix := acctest .RandString (10 )
113
- userName := "tfuser" + userPrefix
114
- userEmail := userName + "@codefresh.io"
115
-
116
- user , err := client .AddNewUserToAccount (accountId , userName , userEmail )
117
- if err != nil {
118
- return "" , err
119
- }
120
- userID := user .ID
121
-
122
- // activate
123
- _ , err = client .ActivateUser (userID )
124
- if err != nil {
125
- return "" , err
126
- }
127
-
128
- // set user as account admin
129
- err = client .SetUserAsAccountAdmin (accountId , userID )
130
- if err != nil {
131
- return "" , nil
132
- }
133
-
112
+ var xAccessToken string
113
+ if userID == "" {
114
+ userID , err = client .createRandomUser (accountId )
115
+ if err != nil {
116
+ return "" , err
117
+ }
118
+ }
134
119
// login as user
135
- xAccessToken , err : = client .GetXAccessToken (userID )
120
+ xAccessToken , err = client .GetXAccessToken (userID , accountId )
136
121
if err != nil {
137
122
return "" , err
138
- }
123
+ }
139
124
140
125
// generate token
141
126
apiToken , err := client .GenerateToken (xAccessToken , apiKey )
@@ -144,10 +129,10 @@ func (client *Client) CreateApiKey(accountId string, apiKey *ApiKey) (string, er
144
129
}
145
130
146
131
return apiToken , nil
147
-
148
132
}
149
133
150
- func (client * Client ) GetXAccessToken (userID string ) (string , error ) {
134
+ // GetXAccessToken
135
+ func (client * Client ) GetXAccessToken (userID string , accountId string ) (string , error ) {
151
136
152
137
url := fmt .Sprintf ("%s/admin/user/loginAsUser?userId=%s" , client .Host , userID )
153
138
request , err := http .NewRequest ("GET" , url , nil )
@@ -165,13 +150,44 @@ func (client *Client) GetXAccessToken(userID string) (string, error) {
165
150
166
151
defer resp .Body .Close ()
167
152
153
+ var userCfAccessToken string
168
154
for _ , cookie := range resp .Cookies () {
169
155
if cookie .Name == "cf-access-token" {
170
- return cookie .Value , nil
156
+ userCfAccessToken = cookie .Value
157
+ break
158
+ }
159
+ }
160
+ if userCfAccessToken == "" {
161
+ return "" , fmt .Errorf ("Failed to GetXAccessToken for userId = %s" , userID )
162
+ }
163
+
164
+ // change account
165
+ changeAccURL := fmt .Sprintf ("%s/user/changeaccount/%s" , client .Host , accountId )
166
+ changeAccRequest , err := http .NewRequest ("POST" , changeAccURL , nil )
167
+ if err != nil {
168
+ return "" , err
169
+ }
170
+
171
+ changeAccRequest .Header .Set ("x-access-token" , userCfAccessToken )
172
+ changeAccRequest .Header .Set ("Content-Type" , "application/json; charset=utf-8" )
173
+
174
+ changeAccResp , err := client .Client .Do (changeAccRequest )
175
+ if err != nil {
176
+ return "" , err
177
+ }
178
+
179
+ var accCfAccessToken string
180
+ for _ , cookie := range changeAccResp .Cookies () {
181
+ if cookie .Name == "cf-access-token" {
182
+ accCfAccessToken = cookie .Value
183
+ break
171
184
}
172
185
}
186
+ if accCfAccessToken == "" {
187
+ return "" , fmt .Errorf ("Failed to GetXAccessToken for userId = %s after ChangeAcocunt to %s" , userID , accountId )
188
+ }
173
189
174
- return "" , nil
190
+ return accCfAccessToken , nil
175
191
}
176
192
177
193
func (client * Client ) GenerateToken (xToken string , apiKey * ApiKey ) (string , error ) {
@@ -219,3 +235,30 @@ func (client *Client) GetApiKeysList() ([]ApiKey, error) {
219
235
220
236
return apiKeys , nil
221
237
}
238
+
239
+ func (client * Client ) createRandomUser (accountId string ) (string , error ) {
240
+ // add user
241
+ userPrefix := acctest .RandString (10 )
242
+ userName := "tfuser" + userPrefix
243
+ userEmail := userName + "@codefresh.io"
244
+
245
+ user , err := client .AddNewUserToAccount (accountId , userName , userEmail )
246
+ if err != nil {
247
+ return "" , err
248
+ }
249
+ userID := user .ID
250
+
251
+ // activate
252
+ _ , err = client .ActivateUser (userID )
253
+ if err != nil {
254
+ return "" , err
255
+ }
256
+
257
+ // set user as account admin
258
+ err = client .SetUserAsAccountAdmin (accountId , userID )
259
+ if err != nil {
260
+ return "" , nil
261
+ }
262
+ return userID , nil
263
+
264
+ }
0 commit comments