11package cmd
22
33import (
4- "errors "
4+ "fmt "
55
66 "github.com/evertras/bubble-table/table"
77 "github.com/opentdf/otdfctl/pkg/cli"
88 "github.com/opentdf/otdfctl/pkg/man"
9+ "github.com/opentdf/otdfctl/pkg/utils"
910 "github.com/opentdf/platform/protocol/go/policy/kasregistry"
1011 "github.com/spf13/cobra"
1112)
@@ -27,34 +28,24 @@ const (
2728var policyKasRegistryBaseKeysCmd * cobra.Command
2829
2930func getKasKeyIdentifier (c * cli.Cli ) (* kasregistry.KasKeyIdentifier , error ) {
30- keyID := c .Flags .GetOptionalString ("keyId" )
31- kasID := c .Flags .GetOptionalString ("kasId" )
32- kasName := c .Flags .GetOptionalString ("kasName" )
33- kasURI := c .Flags .GetOptionalString ("kasUri" )
31+ keyIdentifier := c .Flags .GetRequiredString ("key" )
32+ kasIdentifier := c .Flags .GetRequiredString ("kas" )
3433
35- var identifier * kasregistry.KasKeyIdentifier
36- if keyID != "" {
37- identifier = & kasregistry.KasKeyIdentifier {
38- Kid : keyID ,
39- }
40- switch {
41- case kasID != "" :
42- identifier .Identifier = & kasregistry.KasKeyIdentifier_KasId {
43- KasId : kasID ,
44- }
45- case kasName != "" :
46- identifier .Identifier = & kasregistry.KasKeyIdentifier_Name {
47- Name : kasName ,
48- }
49- case kasURI != "" :
50- identifier .Identifier = & kasregistry.KasKeyIdentifier_Uri {
51- Uri : kasURI ,
52- }
53- default :
54- return nil , errors .New ("at least one of 'kasId', 'kasName', or 'kasUri' must be provided with 'keyId'" )
55- }
34+ identifier := & kasregistry.KasKeyIdentifier {
35+ Kid : keyIdentifier ,
5636 }
5737
38+ kasInputType := utils .ClassifyString (kasIdentifier )
39+ switch kasInputType { //nolint:exhaustive // default catches unknown
40+ case utils .StringTypeUUID :
41+ identifier .Identifier = & kasregistry.KasKeyIdentifier_KasId {KasId : kasIdentifier }
42+ case utils .StringTypeURI :
43+ identifier .Identifier = & kasregistry.KasKeyIdentifier_Uri {Uri : kasIdentifier }
44+ case utils .StringTypeGeneric :
45+ identifier .Identifier = & kasregistry.KasKeyIdentifier_Name {Name : kasIdentifier }
46+ default : // Catches StringTypeUnknown and any other unexpected types
47+ return nil , fmt .Errorf ("invalid KAS identifier: '%s'. Must be a KAS UUID, URI, or Name" , kasIdentifier )
48+ }
5849 return identifier , nil
5950}
6051
@@ -113,11 +104,15 @@ func setBaseKey(cmd *cobra.Command, args []string) {
113104 h := NewHandler (c )
114105 defer h .Close ()
115106
116- id := c .Flags .GetOptionalID ("id" )
107+ var identifier * kasregistry.KasKeyIdentifier
108+ var err error
117109
118- identifier , err := getKasKeyIdentifier (c )
119- if err != nil {
120- c .ExitWithError ("Invalid key identifier" , err )
110+ id := c .Flags .GetOptionalString ("key" )
111+ if utils .ClassifyString (id ) != utils .StringTypeUUID {
112+ identifier , err = getKasKeyIdentifier (c )
113+ if err != nil {
114+ c .ExitWithError ("Invalid key identifier" , err )
115+ }
121116 }
122117 baseKey , err := h .SetBaseKey (c .Context (), id , identifier )
123118 if err != nil {
@@ -152,38 +147,17 @@ func init() {
152147 man .WithRun (setBaseKey ),
153148 )
154149 setDoc .Flags ().StringP (
155- setDoc .GetDocFlag ("id" ).Name ,
156- setDoc .GetDocFlag ("id" ).Shorthand ,
157- setDoc .GetDocFlag ("id" ).Default ,
158- setDoc .GetDocFlag ("id" ).Description ,
159- )
160- setDoc .Flags ().StringP (
161- setDoc .GetDocFlag ("keyId" ).Name ,
162- setDoc .GetDocFlag ("keyId" ).Shorthand ,
163- setDoc .GetDocFlag ("keyId" ).Default ,
164- setDoc .GetDocFlag ("keyId" ).Description ,
165- )
166- setDoc .Flags ().StringP (
167- setDoc .GetDocFlag ("kasUri" ).Name ,
168- setDoc .GetDocFlag ("kasUri" ).Shorthand ,
169- setDoc .GetDocFlag ("kasUri" ).Default ,
170- setDoc .GetDocFlag ("kasUri" ).Description ,
171- )
172- setDoc .Flags ().StringP (
173- setDoc .GetDocFlag ("kasId" ).Name ,
174- setDoc .GetDocFlag ("kasId" ).Shorthand ,
175- setDoc .GetDocFlag ("kasId" ).Default ,
176- setDoc .GetDocFlag ("kasId" ).Description ,
150+ setDoc .GetDocFlag ("key" ).Name ,
151+ setDoc .GetDocFlag ("key" ).Shorthand ,
152+ setDoc .GetDocFlag ("key" ).Default ,
153+ setDoc .GetDocFlag ("key" ).Description ,
177154 )
178155 setDoc .Flags ().StringP (
179- setDoc .GetDocFlag ("kasName " ).Name ,
180- setDoc .GetDocFlag ("kasName " ).Shorthand ,
181- setDoc .GetDocFlag ("kasName " ).Default ,
182- setDoc .GetDocFlag ("kasName " ).Description ,
156+ setDoc .GetDocFlag ("kas " ).Name ,
157+ setDoc .GetDocFlag ("kas " ).Shorthand ,
158+ setDoc .GetDocFlag ("kas " ).Default ,
159+ setDoc .GetDocFlag ("kas " ).Description ,
183160 )
184- setDoc .MarkFlagsMutuallyExclusive ("id" , "keyId" )
185- setDoc .MarkFlagsOneRequired ("id" , "keyId" )
186- setDoc .MarkFlagsMutuallyExclusive ("kasUri" , "kasId" , "kasName" )
187161
188162 doc := man .Docs .GetCommand ("policy/kas-registry/key/base" ,
189163 man .WithSubcommands (getDoc , setDoc ))
0 commit comments