add option for credentials file for NATS; more info: https://docs.nat… (#3415)

Not 100% on how you would want to test this; you would need a NATS
server configured with NKey:

https://docs.nats.io/using-nats/developer/connecting/creds

This was tested with Synadia's free NATS SaaS and it does appear to be
working, however there's an issue with how NATS is used in general:

```
time="2024-09-10T14:40:05.105105731Z" level=fatal msg="Unable to add in-memory stream" error="nats: account requires a stream config to have max bytes set" stream=DendriteInputRoomEvent subjects="[DendriteInputRoomEvent DendriteInputRoomEvent.>]"
```

I tried creating the topic manually, however dendrite insists on
deleting/recreating the topic, so getting this to work is an issue I'm
going ot have to deal with later unless somebody gets to it before then.

If you feel more competent than me and wanna draw from this PR as an
example (if you have another way you'd prefer to see this done) go ahead
feel free I just wanna see it get done and I'm not particularly good at
working with golang.

Signed-off-by: `Paige Thompson <paige@paige.bio>`
This commit is contained in:
Paige Thompson 2024-09-10 12:28:04 -07:00 committed by GitHub
parent 117ed66037
commit 1e0e935699
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 7 additions and 0 deletions

View File

@ -21,6 +21,9 @@ type JetStream struct {
NoLog bool `yaml:"-"` NoLog bool `yaml:"-"`
// Disables TLS validation. This should NOT be used in production // Disables TLS validation. This should NOT be used in production
DisableTLSValidation bool `yaml:"disable_tls_validation"` DisableTLSValidation bool `yaml:"disable_tls_validation"`
// A credentials file to be used for authentication, example:
// https://docs.nats.io/using-nats/developer/connecting/creds
Credentials Path `yaml:"credentials_path"`
} }
func (c *JetStream) Prefixed(name string) string { func (c *JetStream) Prefixed(name string) string {
@ -38,6 +41,7 @@ func (c *JetStream) Defaults(opts DefaultOpts) {
c.StoragePath = Path("./") c.StoragePath = Path("./")
c.NoLog = true c.NoLog = true
c.DisableTLSValidation = true c.DisableTLSValidation = true
c.Credentials = Path("")
} }
} }

View File

@ -103,6 +103,9 @@ func setupNATS(process *process.ProcessContext, cfg *config.JetStream, nc *natsc
InsecureSkipVerify: true, InsecureSkipVerify: true,
})) }))
} }
if string(cfg.Credentials) != "" {
opts = append(opts, natsclient.UserCredentials(string(cfg.Credentials)))
}
nc, err = natsclient.Connect(strings.Join(cfg.Addresses, ","), opts...) nc, err = natsclient.Connect(strings.Join(cfg.Addresses, ","), opts...)
if err != nil { if err != nil {
logrus.WithError(err).Panic("Unable to connect to NATS") logrus.WithError(err).Panic("Unable to connect to NATS")