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  }