Skip to content

Commit b2a7e54

Browse files
committed
api-ket no extra-user
1 parent 80321de commit b2a7e54

File tree

4 files changed

+117
-31
lines changed

4 files changed

+117
-31
lines changed

client/account.go

+37
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,43 @@ func (client *Client) GetAccountByID(id string) (*Account, error) {
174174
return &account, nil
175175
}
176176

177+
// GetAccountByName - returns account
178+
func (client *Client) GetAccountByName(name string) (*Account, error) {
179+
180+
if name == "" {
181+
return nil, fmt.Errorf("GetAccountByName - must specify name param")
182+
}
183+
opts := RequestOptions{
184+
Path: "/admin/accounts",
185+
Method: "GET",
186+
QS: map[string]string{"filter[name]": name},
187+
}
188+
189+
resp, err := client.RequestAPI(&opts)
190+
191+
if err != nil {
192+
return nil, err
193+
}
194+
195+
var accounts []Account
196+
197+
err = DecodeResponseInto(resp, &accounts)
198+
if err != nil {
199+
return nil, err
200+
}
201+
202+
var account *Account
203+
for _, acc := range(accounts) {
204+
if acc.Name == name {
205+
account = &acc
206+
}
207+
}
208+
if account == nil {
209+
return nil, fmt.Errorf("GetAccountByName - cannot find account by name %s", name)
210+
}
211+
return account, nil
212+
}
213+
177214
func (client *Client) GetAllAccounts() (*[]Account, error) {
178215

179216
opts := RequestOptions{

client/api_key.go

+73-30
Original file line numberDiff line numberDiff line change
@@ -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

177193
func (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+
}

codefresh/provider.go

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ func Provider() *schema.Provider {
2929
"codefresh_users": dataSourceUsers(),
3030
"codefresh_user": dataSourceUser(),
3131
"codefresh_idps": dataSourceIdps(),
32+
"codefresh_account": dataSourceAccount(),
3233
},
3334
ResourcesMap: map[string]*schema.Resource{
3435
"codefresh_project": resourceProject(),

codefresh/resource_api_key.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ func resourceApiKey() *schema.Resource {
2525
Type: schema.TypeString,
2626
Required: true,
2727
},
28+
"user_id": {
29+
Type: schema.TypeString,
30+
Required: true,
31+
},
2832
"token": {
2933
Type: schema.TypeString,
3034
Computed: true,
@@ -45,8 +49,9 @@ func resourceApiKeyCreate(d *schema.ResourceData, meta interface{}) error {
4549

4650
apiKey := *mapResourceToApiKey(d)
4751
accountID := d.Get("account_id").(string)
52+
userID := d.Get("user_id").(string)
4853

49-
resp, err := client.CreateApiKey(accountID, &apiKey)
54+
resp, err := client.CreateApiKey(userID, accountID, &apiKey)
5055
if err != nil {
5156
fmt.Println(string(resp))
5257
return err

0 commit comments

Comments
 (0)