client/user.go (111 lines of code) (raw):

package client import ( "bytes" "encoding/json" "fmt" "net/http" "terraform-provider-teamcity/models" ) type User struct { Id *int64 `json:"id,omitempty"` Username string `json:"username"` Password *string `json:"password,omitempty"` Roles *RoleAssignments `json:"roles,omitempty"` Properties *models.Properties `json:"properties,omitempty"` } type RoleAssignments struct { RoleAssignment []RoleAssignment `json:"role"` } type RoleAssignment struct { Id string `json:"roleId"` Scope string `json:"scope"` } func (c *Client) NewUser(user User) (*User, error) { body, err := json.Marshal(user) if err != nil { return nil, err } req, err := http.NewRequest("POST", fmt.Sprintf("%s/users", c.RestURL), bytes.NewReader(body)) if err != nil { return nil, err } result, err := c.doRequest(req) if err != nil { return nil, err } actual := User{} err = json.Unmarshal(result, &actual) if err != nil { return nil, err } return &actual, nil } func (c *Client) GetUser(id string) (*User, error) { req, err := http.NewRequest("GET", fmt.Sprintf("%s/users/id:%s", c.RestURL, id), nil) if err != nil { return nil, err } resp, err := c.request(req) if err != nil { return nil, err } if resp.StatusCode == http.StatusNotFound { return nil, nil } actual := User{} err = json.Unmarshal(resp.Body, &actual) if err != nil { return nil, err } return &actual, nil } func (c *Client) GetUserByName(username string) (*User, error) { req, err := http.NewRequest("GET", fmt.Sprintf("%s/users/username:%s", c.RestURL, username), nil) if err != nil { return nil, err } resp, err := c.request(req) if err != nil { return nil, err } if resp.StatusCode == http.StatusNotFound { return nil, nil } actual := User{} err = json.Unmarshal(resp.Body, &actual) if err != nil { return nil, err } return &actual, nil } func (c *Client) SetUser(user User) (*User, error) { rb, err := json.Marshal(user) if err != nil { return nil, err } req, err := http.NewRequest("PUT", fmt.Sprintf("%s/users/id:%d", c.RestURL, *user.Id), bytes.NewReader(rb)) if err != nil { return nil, err } body, err := c.doRequest(req) if err != nil { return nil, err } actual := User{} err = json.Unmarshal(body, &actual) if err != nil { return nil, err } return &actual, nil } func (c *Client) DeleteUser(id string) error { req, err := http.NewRequest("DELETE", fmt.Sprintf("%s/users/id:%s", c.RestURL, id), nil) if err != nil { return err } _, err = c.doRequest(req) if err != nil { return err } return nil }