go-passbolt/api/metadatakey.go

86 lines
2.6 KiB
Go

package api
import (
"context"
"encoding/json"
)
type MetadataKeyType string
const (
MetadataKeyTypeUserKey MetadataKeyType = "user_key"
MetadataKeyTypeSharedKey = "shared_key"
)
func (s MetadataKeyType) IsValid() bool {
switch s {
case MetadataKeyTypeUserKey, MetadataKeyTypeSharedKey:
return true
}
return false
}
// MetadataKey is a MetadataKey
type MetadataKey struct {
ID string `json:"id,omitempty"`
Fingerprint string `json:"fingerprint,omitempty"`
ArmoredKey string `json:"armored_key,omitempty"`
Created Time `json:"created,omitempty"`
Modified Time `json:"modified,omitempty"`
// These are always null? Used for Key Rotation?
//"expired": null,
//"deleted": null,
CreatedBy *string `json:"created_by,omitempty"`
ModifiedBy *string `json:"modified_by,omitempty"`
MetadataPrivateKeys []MetadataPrivateKey `json:"metadata_private_keys,omitempty"`
}
// MetadataPrivateKey is a MetadataPrivateKey
type MetadataPrivateKey struct {
ID string `json:"id,omitempty"`
MetadataKeyID string `json:"metadata_key_id,omitempty"`
UserID *string `json:"user_id,omitempty"` // TODO, is this nullable. The Docs says yes and no
Data string `json:"data,omitempty"`
Created Time `json:"created,omitempty"`
Modified Time `json:"modified,omitempty"`
CreatedBy *string `json:"created_by,omitempty"`
ModifiedBy *string `json:"modified_by,omitempty"`
}
// MetadataPrivateKeyData is a MetadataPrivateKeyData
type MetadataPrivateKeyData struct {
// ObjectType Must always be PASSBOLT_METADATA_PRIVATE_KEY
ObjectType string `json:"object_type,omitempty"`
// Domain Must be the Passbolt Server URL
Domain string `json:"domain,omitempty"`
Fingerprint string `json:"fingerprint,omitempty"`
ArmoredKey string `json:"armored_key,omitempty"`
// Passphrase must be Empty for Server Keys
Passphrase string `json:"passphrase,omitempty"`
}
// GetMetadataKeysOptions are all available query parameters
type GetMetadataKeysOptions struct {
FilterDeleted bool `url:"filter[deleted,omitempty"`
FilterExpired bool `url:"filter[expired,omitempty"`
ContainMetadataPrivateKeys bool `url:"contain[metadata_private_keys],omitempty"`
}
// GetMetadataKeys gets all Passbolt GetMetadataKeys
func (c *Client) GetMetadataKeys(ctx context.Context, opts *GetMetadataKeysOptions) ([]MetadataKey, error) {
msg, err := c.DoCustomRequest(ctx, "GET", "/metadata/keys.json", "v2", nil, opts)
if err != nil {
return nil, err
}
var metadataKeys []MetadataKey
err = json.Unmarshal(msg.Body, &metadataKeys)
if err != nil {
return nil, err
}
return metadataKeys, nil
}