ghorg/vendor/github.com/ktrysmt/go-bitbucket/deploykeys.go
dependabot[bot] fe846062e4
Bump github.com/ktrysmt/go-bitbucket from 0.9.80 to 0.9.81 (#469)
Bumps [github.com/ktrysmt/go-bitbucket](https://github.com/ktrysmt/go-bitbucket) from 0.9.80 to 0.9.81.
- [Release notes](https://github.com/ktrysmt/go-bitbucket/releases)
- [Commits](https://github.com/ktrysmt/go-bitbucket/compare/v0.9.80...v0.9.81)

---
updated-dependencies:
- dependency-name: github.com/ktrysmt/go-bitbucket
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: gabrie30 <gabrie30@users.noreply.github.com>
2024-11-01 08:34:02 -07:00

140 lines
3.1 KiB
Go

package bitbucket
import (
"encoding/json"
"errors"
"github.com/mitchellh/mapstructure"
)
type DeployKeys struct {
c *Client
}
type DeployKey struct {
Id int `json:"id"`
Label string `json:"label"`
Key string `json:"key"`
Comment string `json:"comment"`
}
type DeployKeysRes struct {
Page int32
Pagelen int32
MaxDepth int32
Size int32
Items []DeployKey
}
func decodeDeployKey(response interface{}) (*DeployKey, error) {
respMap := response.(map[string]interface{})
if respMap["type"] == "error" {
return nil, DecodeError(respMap)
}
var deployKey = new(DeployKey)
err := mapstructure.Decode(respMap, deployKey)
if err != nil {
return nil, err
}
return deployKey, nil
}
func decodeDeployKeys(deployKeysResponse interface{}) (*DeployKeysRes, error) {
deployKeysResponseMap, ok := deployKeysResponse.(map[string]interface{})
if !ok {
return nil, errors.New("not a valid format")
}
repoArray := deployKeysResponseMap["values"].([]interface{})
var deployKeys []DeployKey
for _, deployKeyEntry := range repoArray {
var deployKey DeployKey
err := mapstructure.Decode(deployKeyEntry, &deployKey)
if err == nil {
deployKeys = append(deployKeys, deployKey)
}
}
page, ok := deployKeysResponseMap["page"].(float64)
if !ok {
page = 0
}
pagelen, ok := deployKeysResponseMap["pagelen"].(float64)
if !ok {
pagelen = 0
}
maxDepth, ok := deployKeysResponseMap["max_width"].(float64)
if !ok {
maxDepth = 0
}
size, ok := deployKeysResponseMap["size"].(float64)
if !ok {
size = 0
}
repositories := DeployKeysRes{
Page: int32(page),
Pagelen: int32(pagelen),
MaxDepth: int32(maxDepth),
Size: int32(size),
Items: deployKeys,
}
return &repositories, nil
}
func buildDeployKeysBody(opt *DeployKeyOptions) (string, error) {
body := map[string]interface{}{}
body["label"] = opt.Label
body["key"] = opt.Key
data, err := json.Marshal(body)
if err != nil {
return "", err
}
return string(data), nil
}
func (dk *DeployKeys) Create(opt *DeployKeyOptions) (*DeployKey, error) {
data, err := buildDeployKeysBody(opt)
if err != nil {
return nil, err
}
urlStr := dk.c.requestUrl("/repositories/%s/%s/deploy-keys", opt.Owner, opt.RepoSlug)
response, err := dk.c.executeWithContext("POST", urlStr, data, opt.ctx)
if err != nil {
return nil, err
}
return decodeDeployKey(response)
}
func (dk *DeployKeys) Get(opt *DeployKeyOptions) (*DeployKey, error) {
urlStr := dk.c.requestUrl("/repositories/%s/%s/deploy-keys/%d", opt.Owner, opt.RepoSlug, opt.Id)
response, err := dk.c.execute("GET", urlStr, "")
if err != nil {
return nil, err
}
return decodeDeployKey(response)
}
func (dk *DeployKeys) Delete(opt *DeployKeyOptions) (interface{}, error) {
urlStr := dk.c.requestUrl("/repositories/%s/%s/deploy-keys/%d", opt.Owner, opt.RepoSlug, opt.Id)
return dk.c.execute("DELETE", urlStr, "")
}
func (dk *DeployKeys) List(opt *DeployKeyOptions) (*DeployKeysRes, error) {
urlStr := dk.c.requestUrl("/repositories/%s/%s/deploy-keys", opt.Owner, opt.RepoSlug)
response, err := dk.c.execute("GET", urlStr, "")
if err != nil {
return nil, err
}
return decodeDeployKeys(response)
}