update
This commit is contained in:
parent
ac16db5f21
commit
186d5c3aa5
|
@ -268,30 +268,32 @@ Disable given information push to the central API.`,
|
|||
},
|
||||
}
|
||||
|
||||
var key string
|
||||
var values []string
|
||||
var keyToAdd string
|
||||
var valuesToAdd []string
|
||||
cmdLabelAdd := &cobra.Command{
|
||||
Use: "add",
|
||||
Short: "Add label to send with alerts",
|
||||
DisableAutoGenTag: true,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if _, ok := csConfig.Crowdsec.LabelsToSend[key]; !ok {
|
||||
csConfig.Crowdsec.LabelsToSend[key] = make([]string, 0)
|
||||
if _, ok := csConfig.Crowdsec.LabelsToSend[keyToAdd]; !ok {
|
||||
csConfig.Crowdsec.LabelsToSend[keyToAdd] = make([]string, 0)
|
||||
log.Infof("key '%s' added", keyToAdd)
|
||||
}
|
||||
data := csConfig.Crowdsec.LabelsToSend[key]
|
||||
for _, val := range values {
|
||||
data := csConfig.Crowdsec.LabelsToSend[keyToAdd]
|
||||
for _, val := range valuesToAdd {
|
||||
if !inSlice(val, data) {
|
||||
log.Infof("value '%s' added to key '%s'", val, keyToAdd)
|
||||
data = append(data, val)
|
||||
}
|
||||
csConfig.Crowdsec.LabelsToSend[key] = data
|
||||
csConfig.Crowdsec.LabelsToSend[keyToAdd] = data
|
||||
}
|
||||
if err := csConfig.Crowdsec.DumpLabelConfigFile(); err != nil {
|
||||
log.Fatalf(err.Error())
|
||||
}
|
||||
},
|
||||
}
|
||||
cmdLabelAdd.Flags().StringVarP(&key, "key", "k", "", "The key of the different values to send")
|
||||
cmdLabelAdd.Flags().StringSliceVar(&values, "value", []string{}, "The expr fields to associate with the key")
|
||||
cmdLabelAdd.Flags().StringVarP(&keyToAdd, "key", "k", "", "The key of the different values to send")
|
||||
cmdLabelAdd.Flags().StringSliceVar(&valuesToAdd, "value", []string{}, "The expr fields to associate with the key")
|
||||
cmdLabelAdd.MarkFlagRequired("key")
|
||||
cmdLabelAdd.MarkFlagRequired("value")
|
||||
cmdLabel.AddCommand(cmdLabelAdd)
|
||||
|
@ -311,6 +313,53 @@ Disable given information push to the central API.`,
|
|||
}
|
||||
cmdLabel.AddCommand(cmdLabelStatus)
|
||||
|
||||
var keysToDelete []string
|
||||
var valuesToDelete []string
|
||||
cmdLabelDelete := &cobra.Command{
|
||||
Use: "delete",
|
||||
Short: "List label to send with alerts",
|
||||
DisableAutoGenTag: true,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(keysToDelete) == 0 && len(valuesToDelete) == 0 {
|
||||
log.Fatalf("please provide at least a key or a value to delete")
|
||||
}
|
||||
|
||||
for _, key := range keysToDelete {
|
||||
if _, ok := csConfig.Crowdsec.LabelsToSend[key]; ok {
|
||||
delete(csConfig.Crowdsec.LabelsToSend, key)
|
||||
log.Infof("key '%s' has been removed", key)
|
||||
} else {
|
||||
log.Warningf("key '%s' doesn't exist", key)
|
||||
}
|
||||
}
|
||||
|
||||
for _, value := range valuesToDelete {
|
||||
valueFound := false
|
||||
for key, labels := range csConfig.Crowdsec.LabelsToSend {
|
||||
if inSlice(value, labels) {
|
||||
valueFound = true
|
||||
csConfig.Crowdsec.LabelsToSend[key] = removeFromSlice(value, labels)
|
||||
log.Infof("value '%s' has been removed from key '%s'", value, key)
|
||||
}
|
||||
if len(csConfig.Crowdsec.LabelsToSend[key]) == 0 {
|
||||
delete(csConfig.Crowdsec.LabelsToSend, key)
|
||||
}
|
||||
}
|
||||
if !valueFound {
|
||||
log.Warningf("value '%s' not found", value)
|
||||
}
|
||||
}
|
||||
|
||||
if err := csConfig.Crowdsec.DumpLabelConfigFile(); err != nil {
|
||||
log.Fatalf(err.Error())
|
||||
}
|
||||
|
||||
},
|
||||
}
|
||||
cmdLabelDelete.Flags().StringSliceVarP(&keysToDelete, "key", "k", []string{}, "The keys to delete")
|
||||
cmdLabelDelete.Flags().StringSliceVar(&valuesToDelete, "value", []string{}, "The expr fields to delete")
|
||||
cmdLabel.AddCommand(cmdLabelDelete)
|
||||
|
||||
cmdConsole.AddCommand(cmdLabel)
|
||||
|
||||
return cmdConsole
|
||||
|
|
|
@ -42,6 +42,24 @@ func inSlice(s string, slice []string) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func removeFromSlice(val string, slice []string) []string {
|
||||
var i int
|
||||
var value string
|
||||
|
||||
// get the index
|
||||
for i, value = range slice {
|
||||
if value == val {
|
||||
break
|
||||
}
|
||||
}
|
||||
slice[i] = slice[len(slice)-1]
|
||||
slice[len(slice)-1] = ""
|
||||
slice = slice[:len(slice)-1]
|
||||
|
||||
return slice
|
||||
|
||||
}
|
||||
|
||||
func indexOf(s string, slice []string) int {
|
||||
for i, elem := range slice {
|
||||
if s == elem {
|
||||
|
|
Loading…
Reference in a new issue