@@ -97,7 +97,8 @@ func (client *Client) UpdateAPIKey(key *ApiKey) error {
9797 return nil
9898}
9999
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 ) {
101102
102103 // Check collaborataros
103104 account , err := client .GetAccountByID (accountId )
@@ -108,34 +109,18 @@ func (client *Client) CreateApiKey(accountId string, apiKey *ApiKey) (string, er
108109 log .Fatal ("[ERROR] Collaborators are not set" )
109110 }
110111
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+ }
134119 // login as user
135- xAccessToken , err : = client .GetXAccessToken (userID )
120+ xAccessToken , err = client .GetXAccessToken (userID , accountId )
136121 if err != nil {
137122 return "" , err
138- }
123+ }
139124
140125 // generate token
141126 apiToken , err := client .GenerateToken (xAccessToken , apiKey )
@@ -144,10 +129,10 @@ func (client *Client) CreateApiKey(accountId string, apiKey *ApiKey) (string, er
144129 }
145130
146131 return apiToken , nil
147-
148132}
149133
150- func (client * Client ) GetXAccessToken (userID string ) (string , error ) {
134+ // GetXAccessToken
135+ func (client * Client ) GetXAccessToken (userID string , accountId string ) (string , error ) {
151136
152137 url := fmt .Sprintf ("%s/admin/user/loginAsUser?userId=%s" , client .Host , userID )
153138 request , err := http .NewRequest ("GET" , url , nil )
@@ -165,13 +150,44 @@ func (client *Client) GetXAccessToken(userID string) (string, error) {
165150
166151 defer resp .Body .Close ()
167152
153+ var userCfAccessToken string
168154 for _ , cookie := range resp .Cookies () {
169155 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
171184 }
172185 }
186+ if accCfAccessToken == "" {
187+ return "" , fmt .Errorf ("Failed to GetXAccessToken for userId = %s after ChangeAcocunt to %s" , userID , accountId )
188+ }
173189
174- return "" , nil
190+ return accCfAccessToken , nil
175191}
176192
177193func (client * Client ) GenerateToken (xToken string , apiKey * ApiKey ) (string , error ) {
@@ -219,3 +235,30 @@ func (client *Client) GetApiKeysList() ([]ApiKey, error) {
219235
220236 return apiKeys , nil
221237}
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