Skip to content

Commit bc533ef

Browse files
authored
Cleanup RBAC commands (#37)
* Add ingesters privilege to role command * Add set-role command for user
1 parent c5b7cb2 commit bc533ef

File tree

8 files changed

+185
-82
lines changed

8 files changed

+185
-82
lines changed

cmd/profile.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,19 @@ func (item *ProfileListItem) Render(highlight bool) string {
3939
if highlight {
4040
render := fmt.Sprintf(
4141
"%s\n%s\n%s",
42-
selectedStyle.Render(item.title),
43-
selectedStyleAlt.Render(fmt.Sprintf("url: %s", item.url)),
44-
selectedStyleAlt.Render(fmt.Sprintf("user: %s", item.user)),
42+
SelectedStyle.Render(item.title),
43+
SelectedStyleAlt.Render(fmt.Sprintf("url: %s", item.url)),
44+
SelectedStyleAlt.Render(fmt.Sprintf("user: %s", item.user)),
4545
)
46-
return selectedItemOuter.Render(render)
46+
return SelectedItemOuter.Render(render)
4747
}
4848
render := fmt.Sprintf(
4949
"%s\n%s\n%s",
50-
standardStyle.Render(item.title),
51-
standardStyleAlt.Render(fmt.Sprintf("url: %s", item.url)),
52-
standardStyleAlt.Render(fmt.Sprintf("user: %s", item.user)),
50+
StandardStyle.Render(item.title),
51+
StandardStyleAlt.Render(fmt.Sprintf("url: %s", item.url)),
52+
StandardStyleAlt.Render(fmt.Sprintf("user: %s", item.user)),
5353
)
54-
return itemOuter.Render(render)
54+
return ItemOuter.Render(render)
5555
}
5656

5757
var AddProfileCmd = &cobra.Command{
@@ -140,9 +140,9 @@ var RemoveProfileCmd = &cobra.Command{
140140
fileConfig.DefaultProfile = ""
141141
}
142142
config.WriteConfigToFile(fileConfig)
143-
fmt.Printf("Deleted profile %s\n", styleBold.Render(name))
143+
fmt.Printf("Deleted profile %s\n", StyleBold.Render(name))
144144
} else {
145-
fmt.Printf("No profile found with the name: %s", styleBold.Render(name))
145+
fmt.Printf("No profile found with the name: %s", StyleBold.Render(name))
146146
}
147147

148148
return nil
@@ -185,12 +185,12 @@ var DefaultProfileCmd = &cobra.Command{
185185
fileConfig.DefaultProfile = name
186186
} else {
187187
name = lipgloss.NewStyle().Bold(true).Render(name)
188-
err := fmt.Sprintf("profile %s does not exist", styleBold.Render(name))
188+
err := fmt.Sprintf("profile %s does not exist", StyleBold.Render(name))
189189
return errors.New(err)
190190
}
191191

192192
config.WriteConfigToFile(fileConfig)
193-
fmt.Printf("%s is now set as default profile\n", styleBold.Render(name))
193+
fmt.Printf("%s is now set as default profile\n", StyleBold.Render(name))
194194
return nil
195195
},
196196
}

cmd/role.go

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,18 @@ type RoleData struct {
4242

4343
func (user *RoleData) Render() string {
4444
var s strings.Builder
45-
s.WriteString(standardStyle.Render("Privilege: "))
46-
s.WriteString(standardStyleAlt.Render(user.Privilege))
45+
s.WriteString(StandardStyle.Render("Privilege: "))
46+
s.WriteString(StandardStyleAlt.Render(user.Privilege))
4747
s.WriteString("\n")
4848
if user.Resource != nil {
4949
if user.Resource.Stream != "" {
50-
s.WriteString(standardStyle.Render("Stream: "))
51-
s.WriteString(standardStyleAlt.Render(user.Resource.Stream))
50+
s.WriteString(StandardStyle.Render("Stream: "))
51+
s.WriteString(StandardStyleAlt.Render(user.Resource.Stream))
5252
s.WriteString("\n")
5353
}
5454
if user.Resource.Tag != "" {
55-
s.WriteString(standardStyle.Render("Tag: "))
56-
s.WriteString(standardStyleAlt.Render(user.Resource.Tag))
55+
s.WriteString(StandardStyle.Render("Tag: "))
56+
s.WriteString(StandardStyleAlt.Render(user.Resource.Tag))
5757
s.WriteString("\n")
5858
}
5959
}
@@ -69,9 +69,20 @@ var AddRoleCmd = &cobra.Command{
6969
RunE: func(cmd *cobra.Command, args []string) error {
7070
name := args[0]
7171

72+
// check if the role already exists
73+
var roles []string
74+
client := DefaultClient()
75+
if err := fetchRoles(&client, &roles); err != nil {
76+
return err
77+
}
78+
if strings.Contains(strings.Join(roles, " "), name) {
79+
fmt.Println("role already exists, please use a different name")
80+
return nil
81+
}
82+
7283
_m, err := tea.NewProgram(role.New()).Run()
7384
if err != nil {
74-
fmt.Printf("Alas, there's been an error: %v", err)
85+
fmt.Printf("there's been an error: %v", err)
7586
os.Exit(1)
7687
}
7788
m := _m.(role.Model)
@@ -104,12 +115,15 @@ var AddRoleCmd = &cobra.Command{
104115
if tag != "" {
105116
roleData.Resource.Tag = tag
106117
}
118+
case "ingester":
119+
roleData.Resource = &RoleResource{
120+
Stream: stream,
121+
}
107122
}
108123
roleDataJSON, _ := json.Marshal([]RoleData{roleData})
109124
putBody = bytes.NewBuffer(roleDataJSON)
110125
}
111126

112-
client := DefaultClient()
113127
req, err := client.NewRequest("PUT", "role/"+name, putBody)
114128
if err != nil {
115129
return err
@@ -157,7 +171,7 @@ var RemoveRoleCmd = &cobra.Command{
157171
}
158172

159173
if resp.StatusCode == 200 {
160-
fmt.Printf("Removed role %s\n", styleBold.Render(name))
174+
fmt.Printf("Removed role %s\n", StyleBold.Render(name))
161175
} else {
162176
bytes, err := io.ReadAll(resp.Body)
163177
if err != nil {
@@ -207,7 +221,7 @@ var ListRoleCmd = &cobra.Command{
207221
for idx, roleName := range roles {
208222
fetchRes := roleResponses[idx]
209223
fmt.Print("• ")
210-
fmt.Println(standardStyleBold.Bold(true).Render(roleName))
224+
fmt.Println(StandardStyleBold.Bold(true).Render(roleName))
211225
if fetchRes.err == nil {
212226
for _, role := range fetchRes.data {
213227
fmt.Println(lipgloss.NewStyle().PaddingLeft(3).Render(role.Render()))

cmd/stream.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ type StreamListItem struct {
4848
}
4949

5050
func (item *StreamListItem) Render() string {
51-
render := standardStyle.Render(item.name)
52-
return itemOuter.Render(render)
51+
render := StandardStyle.Render(item.name)
52+
return ItemOuter.Render(render)
5353
}
5454

5555
// StreamRetentionData is the data structure for stream retention
@@ -111,7 +111,7 @@ var AddStreamCmd = &cobra.Command{
111111
}
112112

113113
if resp.StatusCode == 200 {
114-
fmt.Printf("Created stream %s\n", styleBold.Render(name))
114+
fmt.Printf("Created stream %s\n", StyleBold.Render(name))
115115
} else {
116116
bytes, err := io.ReadAll(resp.Body)
117117
if err != nil {
@@ -152,7 +152,7 @@ var StatStreamCmd = &cobra.Command{
152152

153153
isRetentionSet := len(retention) > 0
154154

155-
fmt.Println(styleBold.Render("\nInfo:"))
155+
fmt.Println(StyleBold.Render("\nInfo:"))
156156
fmt.Printf(" Event Count: %d\n", ingestionCount)
157157
fmt.Printf(" Ingestion Size: %s\n", humanize.Bytes(uint64(ingestionSize)))
158158
fmt.Printf(" Storage Size: %s\n", humanize.Bytes(uint64(storageSize)))
@@ -162,14 +162,14 @@ var StatStreamCmd = &cobra.Command{
162162
fmt.Println()
163163

164164
if isRetentionSet {
165-
fmt.Println(styleBold.Render("Retention:"))
165+
fmt.Println(StyleBold.Render("Retention:"))
166166
for _, item := range retention {
167-
fmt.Printf(" Action: %s\n", styleBold.Render(item.Action))
168-
fmt.Printf(" Duration: %s\n", styleBold.Render(item.Duration))
167+
fmt.Printf(" Action: %s\n", StyleBold.Render(item.Action))
168+
fmt.Printf(" Duration: %s\n", StyleBold.Render(item.Duration))
169169
fmt.Println()
170170
}
171171
} else {
172-
fmt.Println(styleBold.Render("No retention period set on stream\n"))
172+
fmt.Println(StyleBold.Render("No retention period set on stream\n"))
173173
}
174174

175175
alertsData, err := fetchAlerts(&client, name)
@@ -181,9 +181,9 @@ var StatStreamCmd = &cobra.Command{
181181
isAlertsSet := len(alerts) > 0
182182

183183
if isAlertsSet {
184-
fmt.Println(styleBold.Render("Alerts:"))
184+
fmt.Println(StyleBold.Render("Alerts:"))
185185
for _, alert := range alerts {
186-
fmt.Printf(" Alert: %s\n", styleBold.Render(alert.Name))
186+
fmt.Printf(" Alert: %s\n", StyleBold.Render(alert.Name))
187187
ruleFmt := fmt.Sprintf(
188188
"%s %s %s repeated %d times",
189189
alert.Rule.Config.Column,
@@ -199,7 +199,7 @@ var StatStreamCmd = &cobra.Command{
199199
fmt.Print("\n\n")
200200
}
201201
} else {
202-
fmt.Println(styleBold.Render("No alerts set on stream\n"))
202+
fmt.Println(StyleBold.Render("No alerts set on stream\n"))
203203
}
204204

205205
return nil
@@ -226,7 +226,7 @@ var RemoveStreamCmd = &cobra.Command{
226226
}
227227

228228
if resp.StatusCode == 200 {
229-
fmt.Printf("Removed stream %s\n", styleBold.Render(name))
229+
fmt.Printf("Removed stream %s\n", StyleBold.Render(name))
230230
} else {
231231
bytes, err := io.ReadAll(resp.Body)
232232
if err != nil {

cmd/style.go

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,18 @@ import (
2222

2323
// styling for cli outputs
2424
var (
25-
FocusPrimary = lipgloss.AdaptiveColor{Light: "16", Dark: "226"}
26-
FocusSecondry = lipgloss.AdaptiveColor{Light: "18", Dark: "220"}
27-
28-
standardPrimary = lipgloss.AdaptiveColor{Light: "235", Dark: "255"}
29-
standardSecondry = lipgloss.AdaptiveColor{Light: "238", Dark: "254"}
30-
31-
standardStyle = lipgloss.NewStyle().Foreground(standardPrimary)
32-
standardStyleBold = lipgloss.NewStyle().Foreground(standardPrimary).Bold(true)
33-
standardStyleAlt = lipgloss.NewStyle().Foreground(standardSecondry)
34-
35-
selectedStyle = lipgloss.NewStyle().Foreground(FocusPrimary).Bold(true)
36-
selectedStyleAlt = lipgloss.NewStyle().Foreground(FocusSecondry)
37-
38-
selectedItemOuter = lipgloss.NewStyle().BorderStyle(lipgloss.NormalBorder()).BorderLeft(true).PaddingLeft(1).BorderForeground(FocusPrimary)
39-
itemOuter = lipgloss.NewStyle().PaddingLeft(1)
40-
41-
styleBold = lipgloss.NewStyle().Bold(true)
25+
FocusPrimary = lipgloss.AdaptiveColor{Light: "16", Dark: "226"}
26+
FocusSecondary = lipgloss.AdaptiveColor{Light: "18", Dark: "220"}
27+
28+
StandardPrimary = lipgloss.AdaptiveColor{Light: "235", Dark: "255"}
29+
StandardSecondary = lipgloss.AdaptiveColor{Light: "238", Dark: "254"}
30+
StandardStyle = lipgloss.NewStyle().Foreground(StandardPrimary)
31+
StandardStyleBold = lipgloss.NewStyle().Foreground(StandardPrimary).Bold(true)
32+
StandardStyleAlt = lipgloss.NewStyle().Foreground(StandardSecondary)
33+
SelectedStyle = lipgloss.NewStyle().Foreground(FocusPrimary).Bold(true)
34+
SelectedStyleAlt = lipgloss.NewStyle().Foreground(FocusSecondary)
35+
SelectedItemOuter = lipgloss.NewStyle().BorderStyle(lipgloss.NormalBorder()).BorderLeft(true).PaddingLeft(1).BorderForeground(FocusPrimary)
36+
ItemOuter = lipgloss.NewStyle().PaddingLeft(1)
37+
38+
StyleBold = lipgloss.NewStyle().Bold(true)
4239
)

0 commit comments

Comments
 (0)