@@ -13,6 +13,7 @@ import (
1313 "github.com/tinyauthapp/tinyauth/internal/controller"
1414 "github.com/tinyauthapp/tinyauth/internal/middleware"
1515 "github.com/tinyauthapp/tinyauth/internal/model"
16+ "go.uber.org/dig"
1617
1718 "github.com/gin-gonic/gin"
1819)
@@ -40,31 +41,94 @@ func (app *BootstrapApp) setupRouter() error {
4041 }
4142 }
4243
43- contextMiddleware := middleware .NewContextMiddleware (app .log , app .runtime , app .services .authService , app .services .oauthBrokerService , app .services .tailscaleService )
44- engine .Use (contextMiddleware .Middleware ())
44+ middlewareProvideFor := []any {
45+ middleware .NewContextMiddleware ,
46+ middleware .NewUIMiddleware ,
47+ middleware .NewZerologMiddleware ,
48+ }
4549
46- uiMiddleware , err := middleware .NewUIMiddleware ()
50+ for _ , provider := range middlewareProvideFor {
51+ err := app .dig .Provide (provider )
52+
53+ if err != nil {
54+ return fmt .Errorf ("failed to provide middleware: %w" , err )
55+ }
56+ }
57+
58+ type middlewareInput struct {
59+ dig.In
60+
61+ ContextMiddleware * middleware.ContextMiddleware
62+ UIMiddleware * middleware.UIMiddleware
63+ ZerologMiddleware * middleware.ZerologMiddleware
64+ }
65+
66+ err := app .dig .Invoke (func (mi middlewareInput ) {
67+ engine .Use (mi .ContextMiddleware .Middleware ())
68+ engine .Use (mi .UIMiddleware .Middleware ())
69+ engine .Use (mi .ZerologMiddleware .Middleware ())
70+ })
4771
4872 if err != nil {
49- return fmt .Errorf ("failed to initialize UI middleware: %w" , err )
73+ return fmt .Errorf ("failed to invoke middleware: %w" , err )
5074 }
5175
52- engine .Use (uiMiddleware .Middleware ())
76+ err = app .dig .Provide (func () * gin.RouterGroup {
77+ return & engine .RouterGroup
78+ }, dig .Name ("mainRouterGroup" ))
5379
54- zerologMiddleware := middleware .NewZerologMiddleware (app .log )
80+ if err != nil {
81+ return fmt .Errorf ("failed to provide main router group: %w" , err )
82+ }
5583
56- engine .Use (zerologMiddleware .Middleware ())
84+ err = app .dig .Provide (func () * gin.RouterGroup {
85+ return engine .Group ("/api" )
86+ }, dig .Name ("apiRouterGroup" ))
5787
58- apiRouter := engine .Group ("/api" )
88+ if err != nil {
89+ return fmt .Errorf ("failed to provide api router group: %w" , err )
90+ }
5991
60- controller .NewContextController (app .log , app .config , app .runtime , apiRouter )
61- controller .NewOAuthController (app .log , app .config , app .runtime , apiRouter , app .services .authService )
62- controller .NewOIDCController (app .log , app .services .oidcService , app .runtime , apiRouter , & engine .RouterGroup )
63- controller .NewProxyController (app .log , app .runtime , apiRouter , app .services .accessControlService , app .services .authService , app .services .policyEngine )
64- controller .NewUserController (app .log , app .runtime , apiRouter , app .services .authService )
65- controller .NewResourcesController (app .config , & engine .RouterGroup )
66- controller .NewHealthController (apiRouter )
67- controller .NewWellKnownController (app .services .oidcService , & engine .RouterGroup )
92+ controllerProvideFor := []any {
93+ controller .NewContextController ,
94+ controller .NewOAuthController ,
95+ controller .NewOIDCController ,
96+ controller .NewProxyController ,
97+ controller .NewUserController ,
98+ controller .NewResourcesController ,
99+ controller .NewHealthController ,
100+ controller .NewWellKnownController ,
101+ }
102+
103+ for _ , provider := range controllerProvideFor {
104+ err := app .dig .Provide (provider )
105+
106+ if err != nil {
107+ return fmt .Errorf ("failed to provide controller: %w" , err )
108+ }
109+ }
110+
111+ type controllerInput struct {
112+ dig.In
113+
114+ ContextController * controller.ContextController
115+ OAuthController * controller.OAuthController
116+ OIDCController * controller.OIDCController
117+ ProxyController * controller.ProxyController
118+ UserController * controller.UserController
119+ ResourcesController * controller.ResourcesController
120+ HealthController * controller.HealthController
121+ WellKnownController * controller.WellKnownController
122+ }
123+
124+ // force dig to build all controllers and register their routes
125+ err = app .dig .Invoke (func (ci controllerInput ) error {
126+ return nil
127+ })
128+
129+ if err != nil {
130+ return fmt .Errorf ("failed to invoke controllers: %w" , err )
131+ }
68132
69133 app .router = engine
70134 return nil
0 commit comments