diff --git a/internal/daemon/controller/handlers/credentials/credential_service.go b/internal/daemon/controller/handlers/credentials/credential_service.go index 2ff9b4581..6e2ece318 100644 --- a/internal/daemon/controller/handlers/credentials/credential_service.go +++ b/internal/daemon/controller/handlers/credentials/credential_service.go @@ -782,14 +782,10 @@ func validateCreateRequest(req *pbs.CreateCredentialRequest) error { case credential.JsonSubtype.String(): object := req.GetItem().GetJsonAttributes().GetObject() - if object == nil && len(object.AsMap()) <= 0 { - badFields[objectField] = "Field required for creating a json credential." - } - objectBytes, err := json.Marshal(object) - if err != nil { + if object == nil || len(object.AsMap()) <= 0 { + badFields[objectField] = "This is a required field and cannot be set to empty." + } else if _, err := json.Marshal(object); err != nil { badFields[objectField] = "Unable to parse given json value" - } else if len(objectBytes) <= 0 { - badFields[objectField] = "Field required for creating a json credential." } default: @@ -846,21 +842,13 @@ func validateUpdateRequest(req *pbs.UpdateCredentialRequest) error { } case credential.JsonSubtype: - object := req.GetItem().GetJsonAttributes().GetObject() - if object != nil { - _, err := json.Marshal(object.AsMap()) - if err != nil { + if handlers.MaskContainsPrefix(req.GetUpdateMask().GetPaths(), objectField) { + object := req.GetItem().GetJsonAttributes().GetObject() + if object == nil || len(object.AsMap()) <= 0 { + badFields[objectField] = "This is a required field and cannot be set to empty" + } else if _, err := json.Marshal(object); err != nil { badFields[objectField] = "Unable to parse given json value" } - if !handlers.MaskContainsPrefix(req.GetUpdateMask().GetPaths(), objectField) { - badFields[objectField] = "This is a required field and cannot be set to empty." - } - if len(object.AsMap()) == 0 { - badFields[objectField] = "This is a required field and cannot be set to empty." - } - } - if handlers.MaskContainsPrefix(req.GetUpdateMask().GetPaths(), objectField) && object == nil { - badFields[objectField] = "This is a required field and cannot be set to empty." } default: diff --git a/internal/daemon/controller/handlers/credentials/credential_service_test.go b/internal/daemon/controller/handlers/credentials/credential_service_test.go index e632de40a..e0bddcdb1 100644 --- a/internal/daemon/controller/handlers/credentials/credential_service_test.go +++ b/internal/daemon/controller/handlers/credentials/credential_service_test.go @@ -1150,20 +1150,6 @@ func TestUpdate(t *testing.T) { return out }, }, - { - name: "update-empty-json", - req: &pbs.UpdateCredentialRequest{ - UpdateMask: fieldmask(), - Item: &pb.Credential{ - Attrs: &pb.Credential_JsonAttributes{ - JsonAttributes: &pb.JsonAttributes{ - Object: &structpb.Struct{}, - }, - }, - }, - }, - expErrorContains: "This is a required field and cannot be set to empty", - }, { name: "update-empty-object-json", req: &pbs.UpdateCredentialRequest{ @@ -1179,14 +1165,12 @@ func TestUpdate(t *testing.T) { expErrorContains: "This is a required field and cannot be set to empty", }, { - name: "update-empty-mask-json", + name: "update-nil-object-json", req: &pbs.UpdateCredentialRequest{ - UpdateMask: fieldmask(), + UpdateMask: fieldmask("attributes.object.password"), Item: &pb.Credential{ Attrs: &pb.Credential_JsonAttributes{ - JsonAttributes: &pb.JsonAttributes{ - Object: secondSecret, - }, + JsonAttributes: &pb.JsonAttributes{}, }, }, },