Files
lspd/cln_plugin/channel_acceptor.go
2023-08-18 17:02:53 +02:00

45 lines
922 B
Go

package cln_plugin
import (
"encoding/json"
"fmt"
sj "go.starlark.net/lib/json"
"go.starlark.net/starlark"
)
func channelAcceptor(acceptScript string, method string, openChannel json.RawMessage) (json.RawMessage, error) {
reject, _ := json.Marshal(struct {
Result string `json:"result"`
}{Result: "reject"})
accept, _ := json.Marshal(struct {
Result string `json:"result"`
}{Result: "continue"})
if acceptScript == "" {
return accept, nil
}
sd := starlark.StringDict{
"method": starlark.String(method),
"openchannel": starlark.String(openChannel),
}
for _, k := range sj.Module.Members.Keys() {
sd[k] = sj.Module.Members[k]
}
value, err := starlark.Eval(
&starlark.Thread{},
"",
acceptScript,
sd,
)
if err != nil {
return reject, err
}
s, ok := value.(starlark.String)
if !ok {
return reject, fmt.Errorf("not a string")
}
return json.RawMessage(s.GoString()), nil
}