Skip to content

Commit ed6355d

Browse files
authored
Merge pull request #122 from spiffe/feature/policy
documentation updates and refactoring
2 parents 33eb4c5 + bc868d6 commit ed6355d

File tree

23 files changed

+934
-654
lines changed

23 files changed

+934
-654
lines changed

app/spike/internal/cmd/policy/README.md

-160
This file was deleted.

app/spike/internal/cmd/policy/create.go

+83-78
Original file line numberDiff line numberDiff line change
@@ -63,86 +63,91 @@ import (
6363
// - Policy creation failure
6464

6565
func newPolicyCreateCommand(
66-
source *workloadapi.X509Source, spiffeId string,
66+
source *workloadapi.X509Source, spiffeId string,
6767
) *cobra.Command {
68-
var (
69-
name string
70-
pathPattern string
71-
spiffeIdPattern string
72-
permsStr string
73-
)
74-
75-
cmd := &cobra.Command{
76-
Use: "create",
77-
Short: "Create a new policy",
78-
Long: `Create a new policy that grants specific permissions to workloads.
68+
var (
69+
name string
70+
pathPattern string
71+
spiffeIdPattern string
72+
permsStr string
73+
)
74+
75+
cmd := &cobra.Command{
76+
Use: "create",
77+
Short: "Create a new policy",
78+
Long: `Create a new policy that grants specific permissions to workloads.
7979
8080
Example:
81-
spike policy create --name=db-access --path="/db/*" --spiffeid="spiffe://example.org/service/*" --permissions="read,write"
81+
spike policy create --name=db-access
82+
--path="db/*" --spiffeid="spiffe://example.org/service/*"
83+
--permissions="read,write"
8284
8385
Valid permissions: read, write, list, super`,
84-
Args: cobra.NoArgs,
85-
Run: func(cmd *cobra.Command, args []string) {
86-
87-
// Check if all required flags are provided
88-
missingFlags := []string{}
89-
if name == "" {
90-
missingFlags = append(missingFlags, "name")
91-
}
92-
if pathPattern == "" {
93-
missingFlags = append(missingFlags, "path")
94-
}
95-
if spiffeIdPattern == "" {
96-
missingFlags = append(missingFlags, "spiffeid")
97-
}
98-
if permsStr == "" {
99-
missingFlags = append(missingFlags, "permissions")
100-
}
101-
102-
if len(missingFlags) > 0 {
103-
fmt.Println("Error: all flags are required")
104-
for _, flag := range missingFlags {
105-
fmt.Printf(" --%s is missing\n", flag)
106-
}
107-
return
108-
}
109-
110-
trust.Authenticate(spiffeId)
111-
api := spike.NewWithSource(source)
112-
113-
// Validate permissions
114-
permissions, err := validatePermissions(permsStr)
115-
if err != nil {
116-
fmt.Printf("Error: %v\n", err)
117-
return
118-
}
119-
120-
// Check if a policy with this name already exists
121-
exists, err := checkPolicyNameExists(api, name)
122-
if handleAPIError(err) {
123-
return
124-
}
125-
126-
if exists {
127-
fmt.Printf("Error: A policy with name '%s' already exists\n", name)
128-
return
129-
}
130-
131-
// Create policy
132-
err = api.CreatePolicy(name, spiffeIdPattern, pathPattern, permissions)
133-
if handleAPIError(err) {
134-
return
135-
}
136-
137-
fmt.Println("Policy created successfully")
138-
},
139-
}
140-
141-
// Define flags
142-
cmd.Flags().StringVar(&name, "name", "", "Policy name (required)")
143-
cmd.Flags().StringVar(&pathPattern, "path", "", "Resource path pattern, e.g., '/secrets/*' (required)")
144-
cmd.Flags().StringVar(&spiffeIdPattern, "spiffeid", "", "SPIFFE ID pattern, e.g., 'spiffe://example.org/service/*' (required)")
145-
cmd.Flags().StringVar(&permsStr, "permissions", "", "Comma-separated permissions: read, write, list, super (required)")
146-
147-
return cmd
148-
}
86+
Args: cobra.NoArgs,
87+
Run: func(cmd *cobra.Command, args []string) {
88+
89+
// Check if all required flags are provided
90+
missingFlags := []string{}
91+
if name == "" {
92+
missingFlags = append(missingFlags, "name")
93+
}
94+
if pathPattern == "" {
95+
missingFlags = append(missingFlags, "path")
96+
}
97+
if spiffeIdPattern == "" {
98+
missingFlags = append(missingFlags, "spiffeid")
99+
}
100+
if permsStr == "" {
101+
missingFlags = append(missingFlags, "permissions")
102+
}
103+
104+
if len(missingFlags) > 0 {
105+
fmt.Println("Error: all flags are required")
106+
for _, flag := range missingFlags {
107+
fmt.Printf(" --%s is missing\n", flag)
108+
}
109+
return
110+
}
111+
112+
trust.Authenticate(spiffeId)
113+
api := spike.NewWithSource(source)
114+
115+
// Validate permissions
116+
permissions, err := validatePermissions(permsStr)
117+
if err != nil {
118+
fmt.Printf("Error: %v\n", err)
119+
return
120+
}
121+
122+
// Check if a policy with this name already exists
123+
exists, err := checkPolicyNameExists(api, name)
124+
if handleAPIError(err) {
125+
return
126+
}
127+
128+
if exists {
129+
fmt.Printf("Error: A policy with name '%s' already exists\n", name)
130+
return
131+
}
132+
133+
// Create policy
134+
err = api.CreatePolicy(name, spiffeIdPattern, pathPattern, permissions)
135+
if handleAPIError(err) {
136+
return
137+
}
138+
139+
fmt.Println("Policy created successfully")
140+
},
141+
}
142+
143+
// Define flags
144+
cmd.Flags().StringVar(&name, "name", "", "Policy name (required)")
145+
cmd.Flags().StringVar(&pathPattern, "path", "",
146+
"Resource path pattern, e.g., '/secrets/*' (required)")
147+
cmd.Flags().StringVar(&spiffeIdPattern, "spiffeid", "",
148+
"SPIFFE ID pattern, e.g., 'spiffe://example.org/service/*' (required)")
149+
cmd.Flags().StringVar(&permsStr, "permissions", "",
150+
"Comma-separated permissions: read, write, list, super (required)")
151+
152+
return cmd
153+
}

0 commit comments

Comments
 (0)