terraform/vendor/github.com/apparentlymart/go-rundeck-api/rundeck/key.go

82 lines
2.9 KiB
Go

package rundeck
// KeyMeta is the metadata associated with a resource in the Rundeck key store.
type KeyMeta struct {
XMLName string `xml:"resource"`
Name string `xml:"name,attr,omitempty"`
Path string `xml:"path,attr,omitempty"`
ResourceType string `xml:"type,attr,omitempty"`
URL string `xml:"url,attr,omitempty"`
ContentType string `xml:"resource-meta>Rundeck-content-type"`
ContentSize string `xml:"resource-meta>Rundeck-content-size"`
ContentMask string `xml:"resource-meta>Rundeck-content-mask"`
KeyType string `xml:"resource-meta>Rundeck-key-type"`
LastModifiedByUserName string `xml:"resource-meta>Rundeck-auth-modified-username"`
CreatedByUserName string `xml:"resource-meta>Rundeck-auth-created-username"`
CreatedTimestamp string `xml:"resource-meta>Rundeck-content-creation-time"`
LastModifiedTimestamp string `xml:"resource-meta>Rundeck-content-modify-time"`
}
type keyMetaListContents struct {
Keys []KeyMeta `xml:"contents>resource"`
}
// GetKeyMeta returns the metadata for the key at the given keystore path.
func (c *Client) GetKeyMeta(path string) (*KeyMeta, error) {
k := &KeyMeta{}
err := c.get([]string{"storage", "keys", path}, nil, k)
return k, err
}
// GetKeysInDirMeta returns the metadata for the keys and subdirectories within
// the directory at the given keystore path.
func (c *Client) GetKeysInDirMeta(path string) ([]KeyMeta, error) {
r := &keyMetaListContents{}
err := c.get([]string{"storage", "keys", path}, nil, r)
if err != nil {
return nil, err
}
return r.Keys, nil
}
// GetKeyContent retrieves and returns the content of the key at the given keystore path.
// Private keys are write-only, so they cannot be retrieved via this interface.
func (c *Client) GetKeyContent(path string) (string, error) {
return c.rawGet([]string{"storage", "keys", path}, nil, "application/pgp-keys")
}
func (c *Client) CreatePublicKey(path string, content string) error {
return c.createOrReplacePublicKey("POST", path, "application/pgp-keys", content)
}
func (c *Client) ReplacePublicKey(path string, content string) error {
return c.createOrReplacePublicKey("PUT", path, "application/pgp-keys", content)
}
func (c *Client) CreatePrivateKey(path string, content string) error {
return c.createOrReplacePublicKey("POST", path, "application/octet-stream", content)
}
func (c *Client) ReplacePrivateKey(path string, content string) error {
return c.createOrReplacePublicKey("PUT", path, "application/octet-stream", content)
}
func (c *Client) createOrReplacePublicKey(method string, path string, contentType string, content string) error {
req := &request{
Method: method,
PathParts: []string{"storage", "keys", path},
Headers: map[string]string{
"Content-Type": contentType,
},
BodyBytes: []byte(content),
}
_, err := c.rawRequest(req)
return err
}
func (c *Client) DeleteKey(path string) error {
return c.delete([]string{"storage", "keys", path})
}