mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-11-02 11:38:02 +00:00
events: WebSocket subscriptions support go-bexpr expressions (#22835)
Subscribing to events through a WebSocket now support boolean expressions to filter only the events wanted based on the fields * `event_type` * `operation` * `source_plugin_mount` * `data_path` * `namespace` Example expressions: These can be passed to `vault events subscribe`, e.g.,: * `event_type == abc` * `source_plugin_mount == secret/` * `event_type != def and operation != write` ```sh vault events subscribe -filter='source_plugin_mount == secret/' 'kv*' ``` The docs for the `vault events subscribe` command and API endpoint will be coming shortly in a different PR, and will include a better specification for these expressions, similar to (or linking to) https://developer.hashicorp.com/boundary/docs/concepts/filtering
This commit is contained in:
committed by
GitHub
parent
3130e8ba94
commit
022469da45
@@ -67,3 +67,39 @@ func SendEvent(ctx context.Context, sender EventSender, eventType string, metada
|
||||
}
|
||||
return sender.SendEvent(ctx, EventType(eventType), ev)
|
||||
}
|
||||
|
||||
// EventReceivedBexpr is used for evaluating boolean expressions with go-bexpr.
|
||||
type EventReceivedBexpr struct {
|
||||
EventType string `bexpr:"event_type"`
|
||||
Operation string `bexpr:"operation"`
|
||||
SourcePluginMount string `bexpr:"source_plugin_mount"`
|
||||
DataPath string `bexpr:"data_path"`
|
||||
Namespace string `bexpr:"namespace"`
|
||||
}
|
||||
|
||||
// BexprDatum returns a copy of EventReceived formatted for use in evaluating go-bexpr boolean expressions.
|
||||
func (x *EventReceived) BexprDatum() any {
|
||||
operation := ""
|
||||
dataPath := ""
|
||||
|
||||
if x.Event != nil {
|
||||
if x.Event.Metadata != nil {
|
||||
operationValue := x.Event.Metadata.Fields[EventMetadataOperation]
|
||||
if operationValue != nil {
|
||||
operation = operationValue.GetStringValue()
|
||||
}
|
||||
dataPathValue := x.Event.Metadata.Fields[EventMetadataDataPath]
|
||||
if dataPathValue != nil {
|
||||
dataPath = dataPathValue.GetStringValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return &EventReceivedBexpr{
|
||||
EventType: x.EventType,
|
||||
Operation: operation,
|
||||
SourcePluginMount: x.PluginInfo.MountPath,
|
||||
DataPath: dataPath,
|
||||
Namespace: x.Namespace,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user