Skip to content

Commit f8ddd5a

Browse files
committed
Makes some progress toward replacing ID endpoint
1 parent 3a69618 commit f8ddd5a

File tree

5 files changed

+77
-39
lines changed

5 files changed

+77
-39
lines changed

setup/cmd/kots-field-labs/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func HandleRequest(event fieldlabs.LambdaEvent) error {
4040
APIOrigin: "https://api.replicated.com/vendor",
4141
GraphQLOrigin: "https://g.replicated.com/graphql",
4242
KURLSHOrigin: "https://kurl.sh",
43-
IDOrigin: "https://api.replicated.com/vendor",
43+
IDOrigin: "https://api.replicated.com",
4444
}
4545

4646
action, ok := actions[event.Action]

setup/cmd/kots-field-labs/param.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func GetParams() (*fieldlabs.Params, error) {
6060
params.KURLSHOrigin = "https://kurl.sh"
6161
}
6262
if params.IDOrigin == "" {
63-
params.IDOrigin = "https://api.replicated.com/vendor"
63+
params.IDOrigin = "https://api.replicated.com"
6464
}
6565

6666
actionString := os.Getenv("REPLICATED_ACTION")
@@ -119,7 +119,7 @@ func getLoginResponse(params *fieldlabs.Params) (*string, error) {
119119
return nil, errors.Wrap(err, "marshal login params")
120120
}
121121

122-
loginReq, err := http.NewRequest("POST", fmt.Sprintf("%s/v1/login", params.IDOrigin), bytes.NewBuffer(loginBody))
122+
loginReq, err := http.NewRequest("POST", fmt.Sprintf("%s/vendor/v1/login", params.IDOrigin), bytes.NewBuffer(loginBody))
123123
if err != nil {
124124
return nil, errors.Wrap(err, "build login request")
125125
}
@@ -131,9 +131,9 @@ func getLoginResponse(params *fieldlabs.Params) (*string, error) {
131131
}
132132

133133
defer loginResp.Body.Close()
134-
if loginResp.StatusCode != 201 {
134+
if loginResp.StatusCode != 201 && loginResp.StatusCode != 200 {
135135
body, _ := ioutil.ReadAll(loginResp.Body)
136-
return nil, fmt.Errorf("GET /policies %d: %s", loginResp.StatusCode, body)
136+
return nil, fmt.Errorf("Parsing login response `/vendor/v1/login` %d: %s", loginResp.StatusCode, body)
137137
}
138138
bodyBytes, err := ioutil.ReadAll(loginResp.Body)
139139
if err != nil {

setup/pkg/fieldlabs/environment_create.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"io/ioutil"
77
"strings"
88
"time"
9+
"encoding/json"
910

1011
"github.com/pkg/errors"
1112
"github.com/replicatedhq/replicated/pkg/kotsclient"
@@ -103,6 +104,9 @@ func (e *EnvironmentManager) Ensure(track *TrackSpec) error {
103104
if err != nil {
104105
return errors.Wrap(err, "add member")
105106
}
107+
memberJson, _ := json.Marshal(members)
108+
policyJson, _ := json.Marshal(policies)
109+
e.Log.ActionWithSpinner("Added member: %s %s", memberJson, policyJson)
106110

107111
err = e.createVendorTrack(*app, *track)
108112
if err != nil {
@@ -120,13 +124,16 @@ func (e *EnvironmentManager) createVendorTrack(app types.App, trackSpec TrackSpe
120124
e.Log.ActionWithSpinner("Provision track %s", appTrackSlug)
121125

122126
// get the stable channel to assign for customer
127+
e.Log.ActionWithSpinner("Get stable channel")
123128
channel, err := e.getChannel(track)
124129
if err != nil {
125130
return errors.Wrapf(err, "get Stable channel")
126131
}
127132
track.Status.Channel = channel
133+
e.Log.ActionWithSpinner("Got channel: %s", channel)
128134

129135
// Create customer
136+
e.Log.ActionWithSpinner("Create customer")
130137
if trackSpec.Customer != "" {
131138
customer, err := e.getOrCreateCustomer(track)
132139
if err != nil {
@@ -162,6 +169,7 @@ func (e *EnvironmentManager) createVendorTrack(app types.App, trackSpec TrackSpe
162169

163170
track.Status.Release = release
164171

172+
e.Log.ActionWithSpinner("Promote release")
165173
err = e.Client.PromoteRelease(app.ID, release.Sequence, "0.1.0", trackSpec.Slug, false, channel.ID)
166174
if err != nil {
167175
return errors.Wrapf(err, "promote release %d to channel %q", release.Sequence, channel.Slug)
@@ -198,6 +206,7 @@ func (e *EnvironmentManager) createVendorTrack(app types.App, trackSpec TrackSpe
198206
}
199207
}
200208
}
209+
e.Log.ActionWithSpinner("Provisioned")
201210
return nil
202211
}
203212

setup/pkg/fieldlabs/members.go

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -60,24 +60,30 @@ func (e *EnvironmentManager) getMembersMap() (map[string]MemberList, error) {
6060
return nil, errors.Wrap(err, "get members")
6161
}
6262

63+
membersJson, _ := json.Marshal(members)
64+
fmt.Sprintf("members: %s", membersJson)
65+
6366
membersMap := make(map[string]MemberList)
6467
for i := 0; i < len(members); i += 1 {
68+
memberJson, _ := json.Marshal(members)
69+
fmt.Sprintf("member: %s", memberJson)
70+
fmt.Sprintf("member: %s", members[i].Email)
6571
membersMap[members[i].Email] = members[i]
6672
}
6773
return membersMap, nil
6874
}
6975

7076
// Delete team members created with multi-player mode
7177
func (e *EnvironmentManager) DeleteMember(id string) error {
72-
url := fmt.Sprintf("%s/v1/team/member?user_id=%s", e.Params.IDOrigin, id)
78+
url := fmt.Sprintf("%s/v1/team/member/%s", e.Params.IDOrigin, id)
7379
req, err := http.NewRequest(
7480
"DELETE",
7581
url,
7682
nil,
7783
)
7884

7985
if err != nil {
80-
return err
86+
return errors.Wrap(err, fmt.Sprintf("DELETE %s/v1/team/member?user_id=%s", e.Params.IDOrigin, id))
8187
}
8288
req.Header.Set("Authorization", e.Params.SessionToken)
8389
req.Header.Set("Accept", "application/json")
@@ -92,38 +98,48 @@ func (e *EnvironmentManager) DeleteMember(id string) error {
9298
panic(err.Error())
9399
}
94100
if resp.StatusCode != 204 {
95-
return fmt.Errorf("GET /v1/team/member %d: %s", resp.StatusCode, body)
101+
return fmt.Errorf("DELETE /v1/team/member/%s %d: %s", id, resp.StatusCode, body)
96102
}
97103
return nil
98104
}
99105

100106
func (e *EnvironmentManager) addMember(members map[string]MemberList, policies map[string]string) error {
101107
inviteEmail := e.Params.ParticipantId + "@replicated-labs.com"
108+
109+
e.Log.Verbose()
110+
e.Log.Debug("Inviting %s", inviteEmail)
102111
err := e.inviteMember(inviteEmail, members, policies)
103112
if err != nil {
104113
return err
105114
}
106115

107116
// Signup
117+
e.Log.Debug("Signing up %s", inviteEmail)
108118
sr, err := e.signupMember(inviteEmail)
109119
if err != nil {
110120
return err
111121
}
122+
inviteId := sr.Token
112123

113124
// Verify
125+
signupResponseJson, _ := json.Marshal(sr)
126+
e.Log.Debug("Verfiying %s", signupResponseJson)
114127
vr, err := e.verifyMember(sr)
115128
if err != nil {
116129
return err
117130
}
118131

119132
// Capture Invite Id
120-
invite, err := e.captureInvite(vr)
133+
verifyResponseJson, _ := json.Marshal(vr)
134+
e.Log.Debug("Capturing %s with %s", inviteId, verifyResponseJson)
135+
invite, err := e.captureInvite(inviteId, vr)
121136
if err != nil {
122137
return err
123138
}
124139

125140
// Accept Invite
126-
err = e.acceptInvite(invite, e.Params.ParticipantId, vr)
141+
e.Log.Debug("Accepting invite %s for participant %s", inviteId, e.Params.ParticipantId)
142+
err = e.acceptInvite(invite.Invite.Id, e.Params.ParticipantId, vr)
127143
if err != nil {
128144
return err
129145
}
@@ -140,17 +156,18 @@ type AcceptBody struct {
140156
FromTeamSelection bool `json:"from_team_selection"`
141157
}
142158

143-
func (e *EnvironmentManager) acceptInvite(invite *InvitedTeams, participantId string, vr *VerifyResponse) error {
159+
func (e *EnvironmentManager) acceptInvite(inviteId string, participantId string, vr *VerifyResponse) error {
144160
h := sha256.Sum256([]byte(participantId))
145161
sum := fmt.Sprintf("%x", h)
146-
ab := AcceptBody{InviteId: (*invite).Teams[0].InviteId, FirstName: "Repl", LastName: "Replicated", Password: string(sum[0:20]), ReplaceAccount: false, FromTeamSelection: true}
162+
163+
ab := AcceptBody{InviteId: inviteId, FirstName: "Repl", LastName: "Replicated", Password: string(sum[0:20]), ReplaceAccount: false, FromTeamSelection: true}
147164
acceptBodyBytes, err := json.Marshal(ab)
148165
if err != nil {
149166
return errors.Wrap(err, "marshal accept body")
150167
}
151168
req, err := http.NewRequest(
152169
"POST",
153-
fmt.Sprintf("%s/v1/signup/accept-invite", e.Params.IDOrigin),
170+
fmt.Sprintf("%s/vendor/v1/signup/accept-invite", e.Params.IDOrigin),
154171
bytes.NewReader(acceptBodyBytes),
155172
)
156173
if err != nil {
@@ -172,18 +189,24 @@ func (e *EnvironmentManager) acceptInvite(invite *InvitedTeams, participantId st
172189
return nil
173190
}
174191

175-
type InvitedTeams struct {
176-
Teams []struct {
177-
Id string `json:"id"`
178-
Name string `json:"name"`
179-
InviteId string `json:"invite_id"`
180-
} `json:"invited_teams"`
192+
type Invite struct {
193+
Invite struct {
194+
Id string `json:"id"`
195+
Email string `json:"email"`
196+
HasConflict string `json:"has_conflict"`
197+
} `json:"invite"`
198+
Team struct {
199+
Id string `json:"id"`
200+
Name string `json:"name"`
201+
InviteId string `json:"invite_id"`
202+
} `json:"team"`
181203
}
182204

183-
func (e *EnvironmentManager) captureInvite(vr *VerifyResponse) (*InvitedTeams, error) {
205+
func (e *EnvironmentManager) captureInvite(inviteId string, vr *VerifyResponse) (*Invite, error) {
206+
e.Log.Verbose()
184207
req, err := http.NewRequest(
185208
"GET",
186-
fmt.Sprintf("%s/v1/signup/teams", e.Params.IDOrigin),
209+
fmt.Sprintf("%s/vendor/v1/signup/teams", e.Params.IDOrigin, inviteId),
187210
nil,
188211
)
189212
if err != nil {
@@ -194,19 +217,20 @@ func (e *EnvironmentManager) captureInvite(vr *VerifyResponse) (*InvitedTeams, e
194217

195218
resp, err := http.DefaultClient.Do(req)
196219
if err != nil {
197-
return nil, errors.Wrap(err, "send signup teams request")
220+
return nil, errors.Wrap(err, "getting the invite")
198221
}
199222
defer resp.Body.Close()
200223

201224
if resp.StatusCode != 200 {
202225
body, _ := ioutil.ReadAll(resp.Body)
203-
return nil, fmt.Errorf("POST /v1/signup/teams %d: %s", resp.StatusCode, body)
226+
return nil, fmt.Errorf("GET /v1/invite/%s %d: %s", inviteId, resp.StatusCode, body)
204227
}
205228
bodyBytes, err := ioutil.ReadAll(resp.Body)
229+
e.Log.Debug(fmt.Sprintf("GET /v1/invite/%s %d: %s", inviteId, resp.StatusCode, bodyBytes))
206230
if err != nil {
207231
return nil, errors.Wrap(err, "read body")
208232
}
209-
var body InvitedTeams
233+
var body Invite
210234
if err := json.NewDecoder(bytes.NewReader(bodyBytes)).Decode(&body); err != nil {
211235
return nil, errors.Wrap(err, "decode body")
212236
}
@@ -227,7 +251,7 @@ func (e *EnvironmentManager) verifyMember(sr *SignupResponse) (*VerifyResponse,
227251
}
228252
req, err := http.NewRequest(
229253
"POST",
230-
fmt.Sprintf("%s/v1/signup/verify", e.Params.IDOrigin),
254+
fmt.Sprintf("%s/vendor/v1/signup/verify", e.Params.IDOrigin),
231255
bytes.NewReader(verifyBodyBytes),
232256
)
233257
if err != nil {
@@ -244,7 +268,7 @@ func (e *EnvironmentManager) verifyMember(sr *SignupResponse) (*VerifyResponse,
244268

245269
if resp.StatusCode != 201 {
246270
body, _ := ioutil.ReadAll(resp.Body)
247-
return nil, fmt.Errorf("POST /v1/signup/verify %d: %s", resp.StatusCode, body)
271+
return nil, fmt.Errorf("POST /vendor/v1/signup/verify %d: %s", resp.StatusCode, body)
248272
}
249273
bodyBytes, err := ioutil.ReadAll(resp.Body)
250274
if err != nil {
@@ -254,6 +278,7 @@ func (e *EnvironmentManager) verifyMember(sr *SignupResponse) (*VerifyResponse,
254278
if err := json.NewDecoder(bytes.NewReader(bodyBytes)).Decode(&body); err != nil {
255279
return nil, errors.Wrap(err, "decode body")
256280
}
281+
e.Log.Debug(fmt.Sprintf("POST /vendor/v1/signup/verify %d: %s", resp.StatusCode, body))
257282
return &body, nil
258283
}
259284

@@ -271,7 +296,7 @@ func (e *EnvironmentManager) signupMember(inviteEmail string) (*SignupResponse,
271296
}
272297
req, err := http.NewRequest(
273298
"POST",
274-
fmt.Sprintf("%s/v1/signup", e.Params.IDOrigin),
299+
fmt.Sprintf("%s/vendor/v1/signup", e.Params.IDOrigin),
275300
bytes.NewReader(signupBodyBytes),
276301
)
277302
if err != nil {
@@ -317,7 +342,7 @@ func (e *EnvironmentManager) inviteMember(inviteEmail string, members map[string
317342
}
318343
req, err := http.NewRequest(
319344
"POST",
320-
fmt.Sprintf("%s/v1/team/invite", e.Params.IDOrigin),
345+
fmt.Sprintf("%s/vendor/v1/team/invite", e.Params.IDOrigin),
321346
bytes.NewReader(inviteBodyBytes),
322347
)
323348
if err != nil {

setup/pkg/fieldlabs/policy.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ type PolicyResourcesV1 struct {
3737
Denied []string `json:"denied"`
3838
}
3939

40+
type PolicyListResponse struct {
41+
Policies []PolicyListItem `json:"policies"`
42+
}
43+
4044
type PolicyListItem struct {
4145
Id string `json:"id"`
4246
Name string `json:"name"`
@@ -49,7 +53,7 @@ type PolicyUpdate struct {
4953
func (e *EnvironmentManager) getPolicies() (map[string]string, error) {
5054
req, err := http.NewRequest(
5155
"GET",
52-
fmt.Sprintf("%s/v1/policies", e.Params.IDOrigin),
56+
fmt.Sprintf("%s/vendor/v1/policies", e.Params.IDOrigin),
5357
nil,
5458
)
5559
if err != nil {
@@ -67,17 +71,17 @@ func (e *EnvironmentManager) getPolicies() (map[string]string, error) {
6771
panic(err.Error())
6872
}
6973
if resp.StatusCode != 200 {
70-
return nil, fmt.Errorf("GET /v1/policies %d: %s", resp.StatusCode, body)
74+
return nil, fmt.Errorf("GET /vendor/v1/policies %d: %s", resp.StatusCode, body)
7175
}
72-
var policies []PolicyListItem
76+
var policies PolicyListResponse
7377
err = json.Unmarshal([]byte(body), &policies)
7478
if err != nil {
75-
return nil, errors.Wrap(err, "list policies unmarshal")
79+
return nil, errors.Wrap(err, fmt.Sprintf("list policies unmarshal %s", body))
7680
}
7781

7882
policiesMap := make(map[string]string)
79-
for i := 0; i < len(policies); i += 1 {
80-
policiesMap[policies[i].Name] = policies[i].Id
83+
for i := 0; i < len(policies.Policies); i += 1 {
84+
policiesMap[policies.Policies[i].Name] = policies.Policies[i].Id
8185
}
8286
return policiesMap, nil
8387
}
@@ -113,7 +117,7 @@ func (e *EnvironmentManager) createRBAC(app types.App, policies map[string]strin
113117
}
114118
req, err := http.NewRequest(
115119
"POST",
116-
fmt.Sprintf("%s/v1/policy", e.Params.IDOrigin),
120+
fmt.Sprintf("%s/vendor/v1/policy", e.Params.IDOrigin),
117121
bytes.NewReader(rbacBodyBytes),
118122
)
119123
if err != nil {
@@ -128,17 +132,17 @@ func (e *EnvironmentManager) createRBAC(app types.App, policies map[string]strin
128132
return errors.Wrap(err, "send rbac request")
129133
}
130134
defer resp.Body.Close()
131-
if resp.StatusCode != 201 {
135+
if resp.StatusCode != 201 && resp.StatusCode != 200 {
132136
body, _ := ioutil.ReadAll(resp.Body)
133-
return fmt.Errorf("POST /v1/policy %d: %s", resp.StatusCode, body)
137+
return fmt.Errorf("POST /vendor/v1/policy %d: %s", resp.StatusCode, body)
134138
}
135139
return nil
136140

137141
}
138142

139143
// Delete policies create through multi-player mode
140144
func (e *EnvironmentManager) DeletePolicyId(id string) error {
141-
url := fmt.Sprintf("%s/v1/policy/%s", e.Params.IDOrigin, id)
145+
url := fmt.Sprintf("%s/vendor/v1/policy/%s", e.Params.IDOrigin, id)
142146
req, err := http.NewRequest(
143147
"DELETE",
144148
url,
@@ -161,7 +165,7 @@ func (e *EnvironmentManager) DeletePolicyId(id string) error {
161165
panic(err.Error())
162166
}
163167
if resp.StatusCode != 204 {
164-
return fmt.Errorf("GET /v1/policy %d: %s", resp.StatusCode, body)
168+
return fmt.Errorf("GET /vendor/v1/policy %d: %s", resp.StatusCode, body)
165169
}
166170
return nil
167171
}

0 commit comments

Comments
 (0)