Skip to content

Commit f23c750

Browse files
committed
Adapts member flow for API changes
1 parent fcc3951 commit f23c750

File tree

1 file changed

+111
-107
lines changed

1 file changed

+111
-107
lines changed

setup/pkg/fieldlabs/members.go

Lines changed: 111 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -60,30 +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)
63+
membersJson, _ := json.Marshal(members)
64+
fmt.Sprintf("members: %s", membersJson)
6565

6666
membersMap := make(map[string]MemberList)
6767
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)
68+
memberJson, _ := json.Marshal(members)
69+
fmt.Sprintf("member: %s", memberJson)
70+
fmt.Sprintf("member: %s", members[i].Email)
7171
membersMap[members[i].Email] = members[i]
7272
}
7373
return membersMap, nil
7474
}
7575

7676
// Delete team members created with multi-player mode
7777
func (e *EnvironmentManager) DeleteMember(id string) error {
78-
url := fmt.Sprintf("%s/v1/team/member/%s", e.Params.IDOrigin, id)
78+
requestUrl := fmt.Sprintf("%s/v1/team/member?id=%s", e.Params.IDOrigin, id)
7979
req, err := http.NewRequest(
8080
"DELETE",
81-
url,
81+
requestUrl,
8282
nil,
8383
)
8484

8585
if err != nil {
86-
return errors.Wrap(err, fmt.Sprintf("DELETE %s/v1/team/member?user_id=%s", e.Params.IDOrigin, id))
86+
return errors.Wrap(err, fmt.Sprintf("DELETE %s", requestUrl))
8787
}
8888
req.Header.Set("Authorization", e.Params.SessionToken)
8989
req.Header.Set("Accept", "application/json")
@@ -98,13 +98,13 @@ func (e *EnvironmentManager) DeleteMember(id string) error {
9898
panic(err.Error())
9999
}
100100
if resp.StatusCode != 204 {
101-
return fmt.Errorf("DELETE /v1/team/member/%s %d: %s", id, resp.StatusCode, body)
101+
return fmt.Errorf("DELETE %s %d: %s", requestUrl, resp.StatusCode, body)
102102
}
103103
return nil
104104
}
105105

106106
func (e *EnvironmentManager) addMember(members map[string]MemberList, policies map[string]string) error {
107-
inviteEmail := e.Params.ParticipantId + "@replicated-labs.com"
107+
inviteEmail := e.Params.ParticipantId + "@replicated-labs.com"
108108
err := e.inviteMember(inviteEmail, members, policies)
109109
if err != nil {
110110
return err
@@ -136,93 +136,106 @@ func (e *EnvironmentManager) addMember(members map[string]MemberList, policies m
136136
return nil
137137
}
138138

139-
type AcceptBody struct {
140-
InviteId string `json:"invite_id"`
141-
FirstName string `json:"first_name"`
142-
LastName string `json:"last_name"`
143-
Password string `json:"password"`
144-
ReplaceAccount bool `json:"replace_account"`
145-
FromTeamSelection bool `json:"from_team_selection"`
139+
140+
type VerifyResponse struct {
141+
Token string `json:"token"`
146142
}
147143

148-
func (e *EnvironmentManager) acceptInvite(inviteId string, participantId string, vr *VerifyResponse) error {
149-
h := sha256.Sum256([]byte(participantId))
150-
sum := fmt.Sprintf("%x", h)
144+
type SignupResponse struct {
145+
Token string `json:"token"`
146+
}
151147

152-
ab := AcceptBody{InviteId: inviteId, FirstName: "Repl", LastName: "Replicated", Password: string(sum[0:20]), ReplaceAccount: false, FromTeamSelection: true}
153-
acceptBodyBytes, err := json.Marshal(ab)
148+
func (e *EnvironmentManager) signupMember(inviteEmail string) (*SignupResponse, error) {
149+
signupBody := map[string]string{
150+
"email": inviteEmail,
151+
}
152+
signupBodyBytes, err := json.Marshal(signupBody)
154153
if err != nil {
155-
return errors.Wrap(err, "marshal accept body")
154+
return nil, errors.Wrap(err, "marshal signup body")
156155
}
156+
requestUrl := fmt.Sprintf("%s/vendor/v1/signup", e.Params.IDOrigin)
157157
req, err := http.NewRequest(
158158
"POST",
159-
fmt.Sprintf("%s/vendor/v1/signup/accept-invite", e.Params.IDOrigin),
160-
bytes.NewReader(acceptBodyBytes),
159+
requestUrl,
160+
bytes.NewReader(signupBodyBytes),
161161
)
162162
if err != nil {
163-
return errors.Wrap(err, "build accept request")
163+
return nil, errors.Wrap(err, "build signup request")
164164
}
165165
req.Header.Set("Accept", "application/json")
166166
req.Header.Set("Content-Type", "application/json")
167167

168168
resp, err := http.DefaultClient.Do(req)
169169
if err != nil {
170-
return errors.Wrap(err, "send accept request")
170+
return nil, errors.Wrap(err, "send signup request")
171171
}
172172
defer resp.Body.Close()
173173

174174
if resp.StatusCode != 201 {
175175
body, _ := ioutil.ReadAll(resp.Body)
176-
return fmt.Errorf("POST /v1/signup/accept-invite %d: %s", resp.StatusCode, body)
176+
return nil, fmt.Errorf("POST %s %d: %s", requestUrl, resp.StatusCode, body)
177177
}
178-
return nil
179-
}
178+
bodyBytes, err := ioutil.ReadAll(resp.Body)
179+
if err != nil {
180+
return nil, errors.Wrap(err, "read body")
181+
}
182+
var body SignupResponse
183+
if err := json.NewDecoder(bytes.NewReader(bodyBytes)).Decode(&body); err != nil {
184+
return nil, errors.Wrap(err, "decode body")
185+
}
186+
return &body, nil
180187

181-
type InvitedTeams struct {
182-
Teams []struct {
183-
Id string `json:"id"`
184-
Name string `json:"name"`
185-
InviteId string `json:"invite_id"`
186-
} `json:"invited_teams"`
187188
}
188189

189-
func (e *EnvironmentManager) captureInvite(vr *VerifyResponse) (*Invite, error) {
190-
e.Log.Verbose()
190+
func (e *EnvironmentManager) inviteMember(inviteEmail string, members map[string]MemberList, policies map[string]string) error {
191+
if _, memberExists := members[inviteEmail]; memberExists {
192+
// This should never happen?
193+
return nil
194+
}
195+
inviteBody := map[string]string{
196+
"email": inviteEmail,
197+
"policy_id": policies[e.Params.ParticipantId],
198+
}
199+
inviteBodyBytes, err := json.Marshal(inviteBody)
200+
if err != nil {
201+
return errors.Wrap(err, "marshal invite body")
202+
}
203+
requestUrl := fmt.Sprintf("%s/vendor/v1/team/invite", e.Params.IDOrigin)
191204
req, err := http.NewRequest(
192-
"GET",
193-
fmt.Sprintf("%s/vendor/v1/signup/teams", e.Params.IDOrigin, inviteId),
194-
nil,
205+
"POST",
206+
requestUrl,
207+
bytes.NewReader(inviteBodyBytes),
195208
)
196209
if err != nil {
197-
return nil, errors.Wrap(err, "build signup teams request")
210+
return errors.Wrap(err, "build invite request")
198211
}
212+
req.Header.Set("Authorization", e.Params.SessionToken)
199213
req.Header.Set("Accept", "application/json")
200-
req.Header.Set("Authorization", vr.Token)
214+
req.Header.Set("Content-Type", "application/json")
201215

202216
resp, err := http.DefaultClient.Do(req)
203217
if err != nil {
204-
return nil, errors.Wrap(err, "getting the invite")
218+
return errors.Wrap(err, fmt.Sprintf("send invite request: %s", requestUrl))
205219
}
206220
defer resp.Body.Close()
207-
208-
if resp.StatusCode != 200 {
209-
body, _ := ioutil.ReadAll(resp.Body)
210-
return nil, fmt.Errorf("GET /v1/invite/%s %d: %s", inviteId, resp.StatusCode, body)
211-
}
212-
bodyBytes, err := ioutil.ReadAll(resp.Body)
213-
e.Log.Debug(fmt.Sprintf("GET /v1/invite/%s %d: %s", inviteId, resp.StatusCode, bodyBytes))
214-
if err != nil {
215-
return nil, errors.Wrap(err, "read body")
221+
// rate limit returned when already invited
222+
if resp.StatusCode == 429 {
223+
e.Log.ActionWithoutSpinner("Skipping invite %q due to 429 error", inviteEmail)
224+
return nil
216225
}
217-
var body Invite
218-
if err := json.NewDecoder(bytes.NewReader(bodyBytes)).Decode(&body); err != nil {
219-
return nil, errors.Wrap(err, "decode body")
226+
if resp.StatusCode != 204 {
227+
body, _ := ioutil.ReadAll(resp.Body)
228+
return fmt.Errorf("POST %s %d: %s", requestUrl, resp.StatusCode, body)
220229
}
221-
return &body, nil
230+
return nil
222231
}
223232

224-
type VerifyResponse struct {
225-
Token string `json:"token"`
233+
type InvitedTeams struct {
234+
Teams []struct {
235+
Id string `json:"id"`
236+
Name string `json:"name"`
237+
InviteId string `json:"invite_id"`
238+
} `json:"invited_teams"`
226239
}
227240

228241
func (e *EnvironmentManager) verifyMember(sr *SignupResponse) (*VerifyResponse, error) {
@@ -233,13 +246,14 @@ func (e *EnvironmentManager) verifyMember(sr *SignupResponse) (*VerifyResponse,
233246
if err != nil {
234247
return nil, errors.Wrap(err, "marshal verify body")
235248
}
249+
requestUrl := fmt.Sprintf("%s/vendor/v1/signup/verify", e.Params.IDOrigin)
236250
req, err := http.NewRequest(
237251
"POST",
238-
fmt.Sprintf("%s/vendor/v1/signup/verify", e.Params.IDOrigin),
252+
requestUrl,
239253
bytes.NewReader(verifyBodyBytes),
240254
)
241255
if err != nil {
242-
return nil, errors.Wrap(err, "build verify request")
256+
return nil, errors.Wrap(err, fmt.Sprintf("build verify request: %s", requestUrl))
243257
}
244258
req.Header.Set("Accept", "application/json")
245259
req.Header.Set("Content-Type", "application/json")
@@ -252,7 +266,7 @@ func (e *EnvironmentManager) verifyMember(sr *SignupResponse) (*VerifyResponse,
252266

253267
if resp.StatusCode != 201 {
254268
body, _ := ioutil.ReadAll(resp.Body)
255-
return nil, fmt.Errorf("POST /vendor/v1/signup/verify %d: %s", resp.StatusCode, body)
269+
return nil, fmt.Errorf("POST %s %d: %s", requestUrl, resp.StatusCode, body)
256270
}
257271
bodyBytes, err := ioutil.ReadAll(resp.Body)
258272
if err != nil {
@@ -262,93 +276,83 @@ func (e *EnvironmentManager) verifyMember(sr *SignupResponse) (*VerifyResponse,
262276
if err := json.NewDecoder(bytes.NewReader(bodyBytes)).Decode(&body); err != nil {
263277
return nil, errors.Wrap(err, "decode body")
264278
}
265-
e.Log.Debug(fmt.Sprintf("POST /vendor/v1/signup/verify %d: %s", resp.StatusCode, body))
266279
return &body, nil
267280
}
268281

269-
type SignupResponse struct {
270-
Token string `json:"token"`
271-
}
272-
273-
func (e *EnvironmentManager) signupMember(inviteEmail string) (*SignupResponse, error) {
274-
signupBody := map[string]string{
275-
"email": inviteEmail,
276-
}
277-
signupBodyBytes, err := json.Marshal(signupBody)
278-
if err != nil {
279-
return nil, errors.Wrap(err, "marshal signup body")
280-
}
282+
func (e *EnvironmentManager) captureInvite(vr *VerifyResponse) (*InvitedTeams, error) {
283+
e.Log.Verbose()
284+
requestUrl := fmt.Sprintf("%s/vendor/v1/signup/teams", e.Params.IDOrigin)
281285
req, err := http.NewRequest(
282-
"POST",
283-
fmt.Sprintf("%s/vendor/v1/signup", e.Params.IDOrigin),
284-
bytes.NewReader(signupBodyBytes),
286+
"GET",
287+
requestUrl,
288+
nil,
285289
)
286290
if err != nil {
287-
return nil, errors.Wrap(err, "build signup request")
291+
return nil, errors.Wrap(err, "build signup teams request")
288292
}
289293
req.Header.Set("Accept", "application/json")
290-
req.Header.Set("Content-Type", "application/json")
294+
req.Header.Set("Authorization", vr.Token)
291295

292296
resp, err := http.DefaultClient.Do(req)
293297
if err != nil {
294-
return nil, errors.Wrap(err, "send signup request")
298+
return nil, errors.Wrap(err, "getting the invite")
295299
}
296300
defer resp.Body.Close()
297301

298-
if resp.StatusCode != 201 {
302+
if resp.StatusCode != 200 {
299303
body, _ := ioutil.ReadAll(resp.Body)
300-
return nil, fmt.Errorf("POST /v1/signup %d: %s", resp.StatusCode, body)
304+
return nil, fmt.Errorf("GET %s %d: %s", requestUrl, resp.StatusCode, body)
301305
}
302306
bodyBytes, err := ioutil.ReadAll(resp.Body)
303307
if err != nil {
304308
return nil, errors.Wrap(err, "read body")
305309
}
306-
var body SignupResponse
310+
var body InvitedTeams
307311
if err := json.NewDecoder(bytes.NewReader(bodyBytes)).Decode(&body); err != nil {
308312
return nil, errors.Wrap(err, "decode body")
309313
}
310314
return &body, nil
315+
}
311316

317+
type AcceptBody struct {
318+
InviteId string `json:"invite_id"`
319+
FirstName string `json:"first_name"`
320+
LastName string `json:"last_name"`
321+
Password string `json:"password"`
322+
ReplaceAccount bool `json:"replace_account"`
323+
FromTeamSelection bool `json:"from_team_selection"`
312324
}
313325

314-
func (e *EnvironmentManager) inviteMember(inviteEmail string, members map[string]MemberList, policies map[string]string) error {
315-
if _, memberExists := members[inviteEmail]; memberExists {
316-
// This should never happen?
317-
return nil
318-
}
319-
inviteBody := map[string]string{
320-
"email": inviteEmail,
321-
"policy_id": policies[e.Params.ParticipantId],
322-
}
323-
inviteBodyBytes, err := json.Marshal(inviteBody)
326+
func (e *EnvironmentManager) acceptInvite(invite *InvitedTeams, participantId string, vr *VerifyResponse) error {
327+
h := sha256.Sum256([]byte(participantId))
328+
sum := fmt.Sprintf("%x", h)
329+
ab := AcceptBody{InviteId: (*invite).Teams[0].InviteId, FirstName: "Instruqt", LastName: "Participant", Password: string(sum[0:20]), ReplaceAccount: false, FromTeamSelection: true}
330+
acceptBodyBytes, err := json.Marshal(ab)
324331
if err != nil {
325-
return errors.Wrap(err, "marshal invite body")
332+
return errors.Wrap(err, "marshal accept body")
326333
}
334+
335+
requestUrl := fmt.Sprintf("%s/vendor/v1/signup/accept-invite", e.Params.IDOrigin)
327336
req, err := http.NewRequest(
328337
"POST",
329-
fmt.Sprintf("%s/vendor/v1/team/invite", e.Params.IDOrigin),
330-
bytes.NewReader(inviteBodyBytes),
338+
requestUrl,
339+
bytes.NewReader(acceptBodyBytes),
331340
)
332341
if err != nil {
333-
return errors.Wrap(err, "build invite request")
342+
return errors.Wrap(err, "build accept request")
334343
}
335-
req.Header.Set("Authorization", e.Params.SessionToken)
336344
req.Header.Set("Accept", "application/json")
337345
req.Header.Set("Content-Type", "application/json")
338346

339347
resp, err := http.DefaultClient.Do(req)
340348
if err != nil {
341-
return errors.Wrap(err, "send invite request")
349+
return errors.Wrap(err, fmt.Sprintf("send accept request: %s", requestUrl))
342350
}
343351
defer resp.Body.Close()
344-
// rate limit returned when already invited
345-
if resp.StatusCode == 429 {
346-
e.Log.ActionWithoutSpinner("Skipping invite %q due to 429 error", inviteEmail)
347-
return nil
348-
}
349-
if resp.StatusCode != 204 {
352+
353+
if resp.StatusCode != 201 {
350354
body, _ := ioutil.ReadAll(resp.Body)
351-
return fmt.Errorf("POST /team/invite %d: %s", resp.StatusCode, body)
355+
return fmt.Errorf("POST %s %d: %s", requestUrl, resp.StatusCode, body)
352356
}
353357
return nil
354358
}

0 commit comments

Comments
 (0)