@@ -100,26 +100,62 @@ const (
100100
101101// NewAPIHandler creates the Management service HTTP API handler registering all the available endpoints.
102102func NewAPIHandler (ctx context.Context , deps APIHandlerDeps ) (http.Handler , error ) {
103+ if err := registerBypassPaths (apiPrefix ); err != nil {
104+ return nil , err
105+ }
106+
107+ rootRouter := mux .NewRouter ()
108+ prefix := apiPrefix
109+ router := rootRouter .PathPrefix (prefix ).Subrouter ()
110+
111+ setupMiddleware (router , deps )
112+
113+ if err := registerIntegrations (ctx , router , deps ); err != nil {
114+ return nil , err
115+ }
116+
117+ embeddedIdP , embeddedIdpEnabled := deps .IdpManager .(* idpmanager.EmbeddedIdPManager )
118+ instanceManager , err := nbinstance .NewManager (ctx , deps .AccountManager .GetStore (), embeddedIdP )
119+ if err != nil {
120+ return nil , fmt .Errorf ("failed to create instance manager: %w" , err )
121+ }
122+
123+ registerCoreEndpoints (router , deps , instanceManager )
124+ registerReverseProxyAndOAuth (router , deps )
103125
104- // Register bypass paths for unauthenticated endpoints
105- if err := bypass . AddBypassPath ( "/api/instance" ); err != nil {
106- return nil , fmt . Errorf ( "failed to add bypass path: %w" , err )
126+ if embeddedIdpEnabled {
127+ corsMiddleware := cors . AllowAll ()
128+ rootRouter . PathPrefix ( "/oauth2" ). Handler ( corsMiddleware . Handler ( embeddedIdP . Handler ()) )
107129 }
108- if err := bypass .AddBypassPath ("/api/setup" ); err != nil {
109- return nil , fmt .Errorf ("failed to add bypass path: %w" , err )
130+
131+ return rootRouter , nil
132+ }
133+
134+ func registerBypassPaths (prefix string ) error {
135+ if err := bypass .AddBypassPath (prefix + "/instance" ); err != nil {
136+ return fmt .Errorf ("failed to add bypass path: %w" , err )
137+ }
138+
139+ if err := bypass .AddBypassPath (prefix + "/setup" ); err != nil {
140+ return fmt .Errorf ("failed to add bypass path: %w" , err )
110141 }
111- // Public invite endpoints (tokens start with nbi_)
112- if err := bypass .AddBypassPath ("/api /users/invites/nbi_*" ); err != nil {
113- return nil , fmt .Errorf ("failed to add bypass path: %w" , err )
142+
143+ if err := bypass .AddBypassPath (prefix + " /users/invites/nbi_*" ); err != nil {
144+ return fmt .Errorf ("failed to add bypass path: %w" , err )
114145 }
115- if err := bypass .AddBypassPath ("/api/users/invites/nbi_*/accept" ); err != nil {
116- return nil , fmt .Errorf ("failed to add bypass path: %w" , err )
146+
147+ if err := bypass .AddBypassPath (prefix + "/users/invites/nbi_*/accept" ); err != nil {
148+ return fmt .Errorf ("failed to add bypass path: %w" , err )
117149 }
118- // OAuth callback for proxy authentication
150+
119151 if err := bypass .AddBypassPath (types .ProxyCallbackEndpointFull ); err != nil {
120- return nil , fmt .Errorf ("failed to add bypass path: %w" , err )
152+ return fmt .Errorf ("failed to add bypass path: %w" , err )
121153 }
122154
155+ return nil
156+ }
157+
158+ func setupMiddleware (router * mux.Router , deps APIHandlerDeps ) {
123159 var rateLimitingConfig * middleware.RateLimiterConfig
124160 if os .Getenv (rateLimitingEnabledKey ) == "true" {
125161 rpm := 6
@@ -160,26 +196,32 @@ func NewAPIHandler(ctx context.Context, deps APIHandlerDeps) (http.Handler, erro
160196 )
161197
162198 corsMiddleware := cors .AllowAll ()
163-
164- rootRouter := mux .NewRouter ()
165199 metricsMiddleware := deps .AppMetrics .HTTPMiddleware ()
166200
167- prefix := apiPrefix
168- router := rootRouter .PathPrefix (prefix ).Subrouter ()
169-
170201 router .Use (metricsMiddleware .Handler , corsMiddleware .Handler , authMiddleware .Handler )
202+ }
171203
172- if _ , err := integrations .RegisterHandlers (ctx , prefix , router , deps .AccountManager , deps .IntegratedValidator , deps .AppMetrics .GetMeter (), deps .PermissionsManager , deps .PeersManager , deps .ProxyController , deps .SettingsManager ); err != nil {
173- return nil , fmt .Errorf ("register integrations endpoints: %w" , err )
204+ func registerIntegrations (ctx context.Context , router * mux.Router , deps APIHandlerDeps ) error {
205+ prefix := apiPrefix
206+ if _ , err := integrations .RegisterHandlers (
207+ ctx ,
208+ prefix ,
209+ router ,
210+ deps .AccountManager ,
211+ deps .IntegratedValidator ,
212+ deps .AppMetrics .GetMeter (),
213+ deps .PermissionsManager ,
214+ deps .PeersManager ,
215+ deps .ProxyController ,
216+ deps .SettingsManager ,
217+ ); err != nil {
218+ return fmt .Errorf ("register integrations endpoints: %w" , err )
174219 }
175220
176- // Check if embedded IdP is enabled for instance manager
177- embeddedIdP , embeddedIdpEnabled := deps .IdpManager .(* idpmanager.EmbeddedIdPManager )
178- instanceManager , err := nbinstance .NewManager (ctx , deps .AccountManager .GetStore (), embeddedIdP )
179- if err != nil {
180- return nil , fmt .Errorf ("failed to create instance manager: %w" , err )
181- }
221+ return nil
222+ }
182223
224+ func registerCoreEndpoints (router * mux.Router , deps APIHandlerDeps , instanceManager nbinstance.Manager ) {
183225 accounts .AddEndpoints (deps .AccountManager , deps .SettingsManager , router , deps .EnableDeploymentMaturity )
184226 peers .AddEndpoints (deps .AccountManager , router , deps .NetworkMapController , deps .PermissionsManager )
185227 users .AddEndpoints (deps .AccountManager , router )
@@ -193,26 +235,33 @@ func NewAPIHandler(ctx context.Context, deps APIHandlerDeps) (http.Handler, erro
193235 routes .AddEndpoints (deps .AccountManager , router )
194236 dns .AddEndpoints (deps .AccountManager , router )
195237 events .AddEndpoints (deps .AccountManager , router )
196- networks .AddEndpoints (deps .NetworksManager , deps .ResourceManager , deps .RouterManager , deps .GroupsManager , deps .AccountManager , router )
238+ networks .AddEndpoints (
239+ deps .NetworksManager ,
240+ deps .ResourceManager ,
241+ deps .RouterManager ,
242+ deps .GroupsManager ,
243+ deps .AccountManager ,
244+ router ,
245+ )
197246 zonesManager .RegisterEndpoints (router , deps .ZonesManager )
198247 recordsManager .RegisterEndpoints (router , deps .RecordsManager )
199248 idp .AddEndpoints (deps .AccountManager , router )
200249 instance .AddEndpoints (instanceManager , router )
201250 instance .AddVersionEndpoint (instanceManager , router )
251+ }
252+
253+ func registerReverseProxyAndOAuth (router * mux.Router , deps APIHandlerDeps ) {
202254 if deps .ReverseProxyManager != nil && deps .ReverseProxyDomainManager != nil {
203- reverseproxymanager .RegisterEndpoints (deps .ReverseProxyManager , * deps .ReverseProxyDomainManager , deps .ReverseProxyAccessLogs , router )
255+ reverseproxymanager .RegisterEndpoints (
256+ deps .ReverseProxyManager ,
257+ * deps .ReverseProxyDomainManager ,
258+ deps .ReverseProxyAccessLogs ,
259+ router ,
260+ )
204261 }
205262
206- // Register OAuth callback handler for proxy authentication
207263 if deps .ProxyGRPCServer != nil {
208264 oauthHandler := proxy .NewAuthCallbackHandler (deps .ProxyGRPCServer , deps .TrustedHTTPProxies )
209265 oauthHandler .RegisterEndpoints (router )
210266 }
211-
212- // Mount embedded IdP handler at /oauth2 path if configured
213- if embeddedIdpEnabled {
214- rootRouter .PathPrefix ("/oauth2" ).Handler (corsMiddleware .Handler (embeddedIdP .Handler ()))
215- }
216-
217- return rootRouter , nil
218267}
0 commit comments