mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-18 12:20:24 +00:00
87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
|
package kmip
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
"github.com/ansel1/merry"
|
||
|
"github.com/gemalto/kmip-go/kmip14"
|
||
|
)
|
||
|
|
||
|
// 4.3
|
||
|
|
||
|
// Table 169
|
||
|
|
||
|
type RegisterRequestPayload struct {
|
||
|
ObjectType kmip14.ObjectType
|
||
|
TemplateAttribute TemplateAttribute
|
||
|
Certificate *Certificate
|
||
|
SymmetricKey *SymmetricKey
|
||
|
PrivateKey *PrivateKey
|
||
|
PublicKey *PublicKey
|
||
|
SplitKey *SplitKey
|
||
|
Template *Template
|
||
|
SecretData *SecretData
|
||
|
OpaqueObject *OpaqueObject
|
||
|
}
|
||
|
|
||
|
// Table 170
|
||
|
|
||
|
type RegisterResponsePayload struct {
|
||
|
UniqueIdentifier string
|
||
|
TemplateAttribute TemplateAttribute
|
||
|
}
|
||
|
|
||
|
type RegisterHandler struct {
|
||
|
SkipValidation bool
|
||
|
RegisterFunc func(context.Context, *RegisterRequestPayload) (*RegisterResponsePayload, error)
|
||
|
}
|
||
|
|
||
|
func (h *RegisterHandler) HandleItem(ctx context.Context, req *Request) (item *ResponseBatchItem, err error) {
|
||
|
var payload RegisterRequestPayload
|
||
|
|
||
|
err = req.DecodePayload(&payload)
|
||
|
if err != nil {
|
||
|
return nil, merry.Prepend(err, "decoding request")
|
||
|
}
|
||
|
|
||
|
if !h.SkipValidation {
|
||
|
var payloadPresent bool
|
||
|
|
||
|
switch payload.ObjectType {
|
||
|
default:
|
||
|
return nil, WithResultReason(merry.UserError("Object Type is not recognized"), kmip14.ResultReasonInvalidField)
|
||
|
case kmip14.ObjectTypeCertificate:
|
||
|
payloadPresent = payload.Certificate != nil
|
||
|
case kmip14.ObjectTypeSymmetricKey:
|
||
|
payloadPresent = payload.SymmetricKey != nil
|
||
|
case kmip14.ObjectTypePrivateKey:
|
||
|
payloadPresent = payload.PrivateKey != nil
|
||
|
case kmip14.ObjectTypePublicKey:
|
||
|
payloadPresent = payload.PublicKey != nil
|
||
|
case kmip14.ObjectTypeSplitKey:
|
||
|
payloadPresent = payload.SplitKey != nil
|
||
|
case kmip14.ObjectTypeTemplate:
|
||
|
payloadPresent = payload.Template != nil
|
||
|
case kmip14.ObjectTypeSecretData:
|
||
|
payloadPresent = payload.SecretData != nil
|
||
|
case kmip14.ObjectTypeOpaqueObject:
|
||
|
payloadPresent = payload.OpaqueObject != nil
|
||
|
}
|
||
|
|
||
|
if !payloadPresent {
|
||
|
return nil, WithResultReason(merry.UserErrorf("Object Type %s does not match type of cryptographic object provided", payload.ObjectType.String()), kmip14.ResultReasonInvalidField)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
respPayload, err := h.RegisterFunc(ctx, &payload)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
req.IDPlaceholder = respPayload.UniqueIdentifier
|
||
|
|
||
|
return &ResponseBatchItem{
|
||
|
ResponsePayload: respPayload,
|
||
|
}, nil
|
||
|
}
|