github.com/saucelabs/saucectl@v0.175.1/internal/http/userservice.go (about) 1 package http 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "io" 8 "net/http" 9 "time" 10 11 "github.com/saucelabs/saucectl/internal/iam" 12 ) 13 14 type UserService struct { 15 HTTPClient *http.Client 16 URL string 17 Credentials iam.Credentials 18 } 19 20 func NewUserService(url string, creds iam.Credentials, timeout time.Duration) UserService { 21 return UserService{ 22 HTTPClient: &http.Client{ 23 Timeout: timeout, 24 Transport: &http.Transport{Proxy: http.ProxyFromEnvironment}, 25 }, 26 URL: url, 27 Credentials: creds, 28 } 29 } 30 31 // Concurrency returns the concurrency settings for the current account. 32 func (c *UserService) Concurrency(ctx context.Context) (iam.Concurrency, error) { 33 req, err := NewRequestWithContext(ctx, http.MethodGet, 34 fmt.Sprintf("%s/rest/v1.2/users/%s/concurrency", c.URL, c.Credentials.Username), nil) 35 if err != nil { 36 return iam.Concurrency{}, err 37 } 38 req.SetBasicAuth(c.Credentials.Username, c.Credentials.AccessKey) 39 40 resp, err := c.HTTPClient.Do(req) 41 if err != nil { 42 return iam.Concurrency{}, err 43 } 44 defer resp.Body.Close() 45 46 if resp.StatusCode != http.StatusOK { 47 b, _ := io.ReadAll(resp.Body) 48 return iam.Concurrency{}, fmt.Errorf("unexpected server response (%d): %s", resp.StatusCode, b) 49 } 50 51 var body struct { 52 Concurrency iam.Concurrency `json:"concurrency"` 53 } 54 55 return body.Concurrency, json.NewDecoder(resp.Body).Decode(&body) 56 } 57 58 func (c *UserService) User(ctx context.Context) (iam.User, error) { 59 url := fmt.Sprintf("%s/team-management/v1/users/me", c.URL) 60 61 var user iam.User 62 req, err := NewRequestWithContext(ctx, http.MethodGet, url, nil) 63 if err != nil { 64 return user, err 65 } 66 67 req.SetBasicAuth(c.Credentials.Username, c.Credentials.AccessKey) 68 resp, err := c.HTTPClient.Do(req) 69 if err != nil { 70 return user, err 71 } 72 defer resp.Body.Close() 73 body, err := io.ReadAll(resp.Body) 74 if err != nil { 75 return user, err 76 } 77 err = json.Unmarshal(body, &user) 78 if err != nil { 79 return user, err 80 } 81 return user, nil 82 }