forked from sanultari/gollum
-
Notifications
You must be signed in to change notification settings - Fork 0
/
stream.go
74 lines (66 loc) · 2.31 KB
/
stream.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Copyright 2015-2016 trivago GmbH
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package filter
import (
"github.com/trivago/gollum/core"
"github.com/trivago/gollum/shared"
)
// Stream filter plugin
// This plugin filters messages by stream based on a black and a whitelist.
// The blacklist is checked first.
// Configuration example
//
// - "stream.Broadcast":
// Filter: "filter.Stream"
// FilterBlockStreams:
// - "foo"
// FilterOnlyStreams:
// - "test1"
// - "test2"
//
// FilterBlockStreams sets a list of streams that are blocked. If a message's
// stream is not in that list, the OnlyStreams list is tested. This list ist
// empty by default.
//
// FilterOnlyStreams sets a list of streams that may pass. Messages from streams
// that are not in this list are blocked unless the list is empty. By default
// this list is empty.
type Stream struct {
blacklist []core.MessageStreamID
whitelist []core.MessageStreamID
}
func init() {
shared.TypeRegistry.Register(Stream{})
}
// Configure initializes this filter with values from a plugin config.
func (filter *Stream) Configure(conf core.PluginConfig) error {
filter.blacklist = conf.GetStreamArray("FilterBlockStreams", []core.MessageStreamID{})
filter.whitelist = conf.GetStreamArray("FilterOnlyStreams", []core.MessageStreamID{})
return nil
}
// Accepts filters by streamId using a black and whitelist
func (filter *Stream) Accepts(msg core.Message) bool {
for _, blockedID := range filter.blacklist {
if msg.StreamID == blockedID {
return false // ### return, explicitly blocked ###
}
}
for _, allowedID := range filter.whitelist {
if msg.StreamID == allowedID {
return true // ### return, explicitly allowed ###
}
}
// Return true if no whitlist is given, false otherwise (must fulfill whitelist)
return len(filter.whitelist) == 0
}