@@ -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
7777func (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
106106func (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
228241func (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