MCPcopy Create free account
hub / github.com/TheThingsNetwork/lorawan-stack / NewServer

Function NewServer

pkg/interop/server.go:92–150  ·  view source on GitHub ↗

NewServer builds a new server.

(c Component, contextFiller fillcontext.Filler, conf config.InteropServer)

Source from the content-addressed store, hash-verified

90
91// NewServer builds a new server.
92func NewServer(c Component, contextFiller fillcontext.Filler, conf config.InteropServer) (*Server, error) {
93 ctx := log.NewContextWithField(c.Context(), "namespace", "interop")
94 logger := log.FromContext(ctx)
95
96 // TODO: Remove (https://github.com/TheThingsNetwork/lorawan-stack/issues/6026)
97 senderClientCAs, err := fetchSenderClientCAs(ctx, conf, c)
98 if err != nil {
99 return nil, err
100 }
101 senderClientCAPool := x509.NewCertPool()
102 for _, certs := range senderClientCAs {
103 for _, cert := range certs {
104 senderClientCAPool.AddCert(cert)
105 }
106 }
107
108 tokenVerifiers := make(map[string]tokenVerifier)
109 if conf.PacketBroker.Enabled {
110 iss := conf.PacketBroker.TokenIssuer
111 // The token audience must match the configured public TLS address. Therefore, a non-empty value must be set.
112 aud := conf.PublicTLSAddress
113 if aud == "" {
114 return nil, errNoPublicTLSAddress.New()
115 }
116 tokenVerifier, err := newPacketBrokerTokenVerifier(ctx, iss, aud, c)
117 if err != nil {
118 return nil, err
119 }
120 tokenVerifiers[iss] = tokenVerifier
121 }
122
123 s := &Server{
124 config: conf,
125 // TODO: Remove (https://github.com/TheThingsNetwork/lorawan-stack/issues/6026)
126 senderClientCAs: senderClientCAs,
127 senderClientCAPool: senderClientCAPool,
128 tokenVerifiers: tokenVerifiers,
129 js: &noopServer{},
130 }
131
132 s.router = mux.NewRouter()
133 s.router.NotFoundHandler = http.HandlerFunc(webhandlers.NotFound)
134 s.router.Use(
135 mux.MiddlewareFunc(webmiddleware.Recover()),
136 mux.MiddlewareFunc(webmiddleware.FillContext(contextFiller)),
137 mux.MiddlewareFunc(webmiddleware.RequestURL()),
138 mux.MiddlewareFunc(webmiddleware.RequestID()),
139 mux.MiddlewareFunc(webmiddleware.MaxBody(1<<15)), // 32 kB.
140 mux.MiddlewareFunc(webmiddleware.Log(logger, nil)),
141 mux.MiddlewareFunc(ratelimit.HTTPMiddleware(c.RateLimiter(), "http:interop")),
142 )
143 s.router.
144 NewRoute().
145 Handler(s.handle()).
146 Headers("Content-Type", "application/json").
147 Methods(http.MethodPost)
148
149 return s, nil

Callers 2

NewFunction · 0.92
TestServerFunction · 0.92

Calls 15

handleMethod · 0.95
NewContextWithFieldFunction · 0.92
FromContextFunction · 0.92
RecoverFunction · 0.92
FillContextFunction · 0.92
RequestURLFunction · 0.92
RequestIDFunction · 0.92
MaxBodyFunction · 0.92
LogFunction · 0.92
HTTPMiddlewareFunction · 0.92
fetchSenderClientCAsFunction · 0.85

Tested by 1

TestServerFunction · 0.74