frostfs-s3-gw/api/notifications/controller.go
Angira Kekteeva 4cbce87eac [#340] Make nats tls and ca params optional
nats.Connect returned error when tls and ca files were not set, what
made these params required, but establishing of unsecured connection
for debug is acceptable.

Signed-off-by: Angira Kekteeva <kira@nspcc.ru>
2022-02-18 16:59:42 +03:00

56 lines
1 KiB
Go

package notifications
import (
"time"
"github.com/nats-io/nats.go"
)
const (
DefaultTimeout = 30 * time.Second
)
type Options struct {
URL string
TLSCertFilepath string
TLSAuthPrivateKeyFilePath string
Timeout time.Duration
RootCAFiles []string
}
type Controller struct {
taskQueueConnection *nats.Conn
jsClient nats.JetStream
}
func NewController(p *Options) (*Controller, error) {
if p == nil {
return nil, nil
}
ncopts := []nats.Option{
nats.Timeout(p.Timeout),
}
if len(p.TLSCertFilepath) != 0 && len(p.TLSAuthPrivateKeyFilePath) != 0 {
ncopts = append(ncopts, nats.ClientCert(p.TLSCertFilepath, p.TLSAuthPrivateKeyFilePath))
}
if len(p.RootCAFiles) != 0 {
ncopts = append(ncopts, nats.RootCAs(p.RootCAFiles...))
}
nc, err := nats.Connect(p.URL, ncopts...)
if err != nil {
return nil, err
}
js, err := nc.JetStream()
if err != nil {
return nil, err
}
return &Controller{
taskQueueConnection: nc,
jsClient: js,
}, nil
}