github.com/simpleiot/simpleiot@v0.18.3/server/nats-server.go (about) 1 package server 2 3 import ( 4 "fmt" 5 "log" 6 "time" 7 8 "github.com/nats-io/nats-server/v2/server" 9 ) 10 11 type natsServerOptions struct { 12 Port int 13 HTTPPort int 14 WSPort int 15 Auth string 16 TLSCert string 17 TLSKey string 18 TLSTimeout float64 19 } 20 21 // newNatsServer creates a new nats server instance 22 func newNatsServer(o natsServerOptions) (*server.Server, error) { 23 opts := server.Options{ 24 Port: o.Port, 25 HTTPPort: o.HTTPPort, 26 Authorization: o.Auth, 27 NoSigs: true, 28 } 29 30 if o.TLSCert != "" && o.TLSKey != "" { 31 log.Println("Setting up NATS TLS ...") 32 opts.TLS = true 33 opts.TLSCert = o.TLSCert 34 opts.TLSKey = o.TLSKey 35 opts.TLSTimeout = o.TLSTimeout 36 tc := server.TLSConfigOpts{} 37 tc.CertFile = opts.TLSCert 38 tc.KeyFile = opts.TLSKey 39 tc.CaFile = opts.TLSCaCert 40 tc.Verify = opts.TLSVerify 41 42 var err error 43 opts.TLSConfig, err = server.GenTLSConfig(&tc) 44 45 if err != nil { 46 return nil, fmt.Errorf("Error setting up TLS: %v", err) 47 } 48 } 49 50 if o.WSPort != 0 { 51 opts.Websocket.Port = o.WSPort 52 opts.Websocket.Token = o.Auth 53 opts.Websocket.AuthTimeout = o.TLSTimeout 54 opts.Websocket.NoTLS = true // will likely be fronted by Caddy anyway 55 opts.Websocket.HandshakeTimeout = time.Second * 20 56 } 57 58 natsServer, err := server.NewServer(&opts) 59 60 if err != nil { 61 return nil, fmt.Errorf("Error create new Nats server: %v", err) 62 } 63 64 authEnabled := "no" 65 66 if o.Auth != "" { 67 authEnabled = "yes" 68 } 69 70 log.Printf("NATS server, port: %v, http port: %v, auth enabled: %v\n", 71 o.Port, o.HTTPPort, authEnabled) 72 73 if o.WSPort != 0 { 74 log.Printf("NATS server WS enabled on port: %v\n", o.WSPort) 75 } 76 77 return natsServer, nil 78 }