generated from mattermost/mattermost-plugin-starter-template
/
bindings.go
69 lines (60 loc) · 1.45 KB
/
bindings.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
package goapp
import (
"github.com/mattermost/mattermost-plugin-apps/apps"
)
func (app *App) getBindings(creq CallRequest) apps.CallResponse {
return apps.NewDataResponse(app.Bindings(creq))
}
func (app *App) Bindings(creq CallRequest) []apps.Binding {
var out []apps.Binding
if app.command != nil {
if binding := app.command.Binding(creq); binding != nil {
out = append(out, apps.Binding{
Location: apps.LocationCommand,
Bindings: []apps.Binding{*binding},
})
}
}
if bindings := MakeBindings(creq, app.channelHeader); len(bindings) > 0 {
out = append(out, apps.Binding{
Location: apps.LocationChannelHeader,
Bindings: bindings,
})
}
if bindings := MakeBindings(creq, app.postMenu); len(bindings) > 0 {
out = append(out, apps.Binding{
Location: apps.LocationPostMenu,
Bindings: bindings,
})
}
return out
}
func MakeBindings(creq CallRequest, bindables []Bindable) []apps.Binding {
var out []apps.Binding
for _, b := range bindables {
if r, ok := b.(Requirer); ok {
if r.RequireSystemAdmin() && !creq.IsSystemAdmin() {
continue
}
if r.RequireConnectedUser() && !creq.IsConnectedUser() {
continue
}
}
binding := b.Binding(creq)
if binding == nil {
continue
}
out = append(out, *binding)
}
return out
}
func AppendBindings(orig []apps.Binding, extra ...*apps.Binding) []apps.Binding {
bb := orig
for _, b := range extra {
if b == nil {
continue
}
bb = append(bb, *b)
}
return bb
}