client/ssh_key.go (62 lines of code) (raw):
package client
import (
"encoding/json"
"fmt"
"net/http"
"strings"
)
type SshKeys struct {
Key []SshKey `json:"sshKey"`
}
type SshKey struct {
Name string `json:"name"`
}
func (c *Client) NewSshKey(project, name, key string) error {
req, err := http.NewRequest(
"POST",
fmt.Sprintf("%s/projects/id:%s/sshKeys?fileName=%s", c.RestURL, project, name),
strings.NewReader(key),
)
if err != nil {
return err
}
_, err = c.doRequestWithType(req, "text/plain")
if err != nil {
return err
}
return nil
}
func (c *Client) GetSshKeys(projectId string) ([]string, error) {
req, err := http.NewRequest("GET", fmt.Sprintf("%s/projects/id:%s/sshKeys", c.RestURL, projectId), 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 := SshKeys{}
err = json.Unmarshal(resp.Body, &actual)
if err != nil {
return nil, err
}
var names []string
for _, i := range actual.Key {
names = append(names, i.Name)
}
return names, nil
}
func (c *Client) DeleteSshKey(projectId, keyName string) error {
req, err := http.NewRequest("DELETE", fmt.Sprintf("%s/projects/id:%s/sshKeys/%s", c.RestURL, projectId, keyName), nil)
if err != nil {
return err
}
_, err = c.doRequest(req)
if err != nil {
return err
}
return nil
}