client/secure_token.go (90 lines of code) (raw):

package client import ( "bytes" "encoding/json" "fmt" "github.com/google/uuid" "net/http" "terraform-provider-teamcity/models" ) type SecureTokens struct { Tokens []models.Property `json:"versionedSettingsToken"` } func (c *Client) AddSecureToken(project, value string) (*string, error) { id := "credentialsJSON:" + uuid.New().String() body := SecureTokens{ Tokens: []models.Property{ { Name: id, Value: value, }, }, } rb, err := json.Marshal(body) if err != nil { return nil, err } req, err := http.NewRequest( "POST", fmt.Sprintf("%s/projects/id:%s/versionedSettings/tokens", c.RestURL, project), bytes.NewReader(rb), ) if err != nil { return nil, err } _, err = c.doRequest(req) if err != nil { return nil, err } return &id, nil } func (c *Client) GetSecureTokens(project string) ([]string, error) { req, err := http.NewRequest( "GET", fmt.Sprintf("%s/projects/id:%s/versionedSettings/tokens", c.RestURL, project), nil, ) if err != nil { return nil, err } resp, err := c.doRequest(req) if err != nil { return nil, err } actual := SecureTokens{} err = json.Unmarshal(resp, &actual) if err != nil { return nil, err } var names []string for _, i := range actual.Tokens { names = append(names, i.Name) } return names, nil } func (c *Client) DeleteSecureToken(project, id string) error { body := SecureTokens{ Tokens: []models.Property{ { Name: id, }, }, } rb, err := json.Marshal(body) if err != nil { return err } req, err := http.NewRequest( "DELETE", fmt.Sprintf("%s/projects/id:%s/versionedSettings/tokens", c.RestURL, project), bytes.NewReader(rb), ) if err != nil { return err } _, err = c.doRequest(req) if err != nil { return err } return nil }