diff --git a/internal/bootstrap/app_bootstrap.go b/internal/bootstrap/app_bootstrap.go index dffe3c21..9daee135 100644 --- a/internal/bootstrap/app_bootstrap.go +++ b/internal/bootstrap/app_bootstrap.go @@ -229,7 +229,7 @@ func (app *BootstrapApp) Setup() error { Queries repository.Store } - app.dig.Provide(func() utilityProvider { + err = app.dig.Provide(func() utilityProvider { return utilityProvider{ Log: app.log, Config: &app.config, @@ -240,6 +240,10 @@ func (app *BootstrapApp) Setup() error { } }) + if err != nil { + return fmt.Errorf("failed to provide utilities to container: %w", err) + } + // services err = app.setupServices() diff --git a/internal/bootstrap/router_bootstrap.go b/internal/bootstrap/router_bootstrap.go index 5244ab20..cbb9bdf0 100644 --- a/internal/bootstrap/router_bootstrap.go +++ b/internal/bootstrap/router_bootstrap.go @@ -13,6 +13,7 @@ import ( "github.com/tinyauthapp/tinyauth/internal/controller" "github.com/tinyauthapp/tinyauth/internal/middleware" "github.com/tinyauthapp/tinyauth/internal/model" + "go.uber.org/dig" "github.com/gin-gonic/gin" ) @@ -40,31 +41,119 @@ func (app *BootstrapApp) setupRouter() error { } } - contextMiddleware := middleware.NewContextMiddleware(app.log, app.runtime, app.services.authService, app.services.oauthBrokerService, app.services.tailscaleService) - engine.Use(contextMiddleware.Middleware()) - - uiMiddleware, err := middleware.NewUIMiddleware() + err := app.dig.Provide(middleware.NewContextMiddleware) if err != nil { - return fmt.Errorf("failed to initialize UI middleware: %w", err) + return fmt.Errorf("failed to provide context middleware: %w", err) } - engine.Use(uiMiddleware.Middleware()) + err = app.dig.Provide(middleware.NewUIMiddleware) - zerologMiddleware := middleware.NewZerologMiddleware(app.log) + if err != nil { + return fmt.Errorf("failed to provide ui middleware: %w", err) + } - engine.Use(zerologMiddleware.Middleware()) + err = app.dig.Provide(middleware.NewZerologMiddleware) - apiRouter := engine.Group("/api") + if err != nil { + return fmt.Errorf("failed to provide zerolog middleware: %w", err) + } - controller.NewContextController(app.log, app.config, app.runtime, apiRouter) - controller.NewOAuthController(app.log, app.config, app.runtime, apiRouter, app.services.authService) - controller.NewOIDCController(app.log, app.services.oidcService, app.runtime, apiRouter, &engine.RouterGroup) - controller.NewProxyController(app.log, app.runtime, apiRouter, app.services.accessControlService, app.services.authService, app.services.policyEngine) - controller.NewUserController(app.log, app.runtime, apiRouter, app.services.authService) - controller.NewResourcesController(app.config, &engine.RouterGroup) - controller.NewHealthController(apiRouter) - controller.NewWellKnownController(app.services.oidcService, &engine.RouterGroup) + type middlewareInput struct { + dig.In + + ContextMiddleware *middleware.ContextMiddleware + UIMiddleware *middleware.UIMiddleware + ZerologMiddleware *middleware.ZerologMiddleware + } + + err = app.dig.Invoke(func(mi middlewareInput) { + engine.Use(mi.ContextMiddleware.Middleware()) + engine.Use(mi.UIMiddleware.Middleware()) + engine.Use(mi.ZerologMiddleware.Middleware()) + }) + + if err != nil { + return fmt.Errorf("failed to invoke middleware: %w", err) + } + + err = app.dig.Provide(func() *gin.RouterGroup { + return &engine.RouterGroup + }, dig.Name("mainRouterGroup")) + + if err != nil { + return fmt.Errorf("failed to provide main router group: %w", err) + } + + err = app.dig.Provide(func() *gin.RouterGroup { + return engine.Group("/api") + }, dig.Name("apiRouterGroup")) + + if err != nil { + return fmt.Errorf("failed to provide api router group: %w", err) + } + + err = app.dig.Provide(controller.NewContextController) + if err != nil { + return fmt.Errorf("failed to provide context controller: %w", err) + } + + err = app.dig.Provide(controller.NewOAuthController) + if err != nil { + return fmt.Errorf("failed to provide oauth controller: %w", err) + } + + err = app.dig.Provide(controller.NewOIDCController) + if err != nil { + return fmt.Errorf("failed to provide oidc controller: %w", err) + } + + err = app.dig.Provide(controller.NewProxyController) + if err != nil { + return fmt.Errorf("failed to provide proxy controller: %w", err) + } + + err = app.dig.Provide(controller.NewUserController) + if err != nil { + return fmt.Errorf("failed to provide user controller: %w", err) + } + + err = app.dig.Provide(controller.NewResourcesController) + if err != nil { + return fmt.Errorf("failed to provide resources controller: %w", err) + } + + err = app.dig.Provide(controller.NewHealthController) + if err != nil { + return fmt.Errorf("failed to provide health controller: %w", err) + } + + err = app.dig.Provide(controller.NewWellKnownController) + if err != nil { + return fmt.Errorf("failed to provide well-known controller: %w", err) + } + + type controllerInput struct { + dig.In + + ContextController *controller.ContextController + OAuthController *controller.OAuthController + OIDCController *controller.OIDCController + ProxyController *controller.ProxyController + UserController *controller.UserController + ResourcesController *controller.ResourcesController + HealthController *controller.HealthController + WellKnownController *controller.WellKnownController + } + + // force dig to build all controllers and register their routes + err = app.dig.Invoke(func(ci controllerInput) error { + return nil + }) + + if err != nil { + return fmt.Errorf("failed to invoke controllers: %w", err) + } app.router = engine return nil diff --git a/internal/bootstrap/service_bootstrap.go b/internal/bootstrap/service_bootstrap.go index 52a84f8f..04a3210a 100644 --- a/internal/bootstrap/service_bootstrap.go +++ b/internal/bootstrap/service_bootstrap.go @@ -9,19 +9,46 @@ import ( ) func (app *BootstrapApp) setupServices() error { - app.setupPolicyEngine() + err := app.setupPolicyEngine() - app.dig.Provide(func() *service.PolicyEngine { - return app.services.policyEngine - }) + if err != nil { + return fmt.Errorf("failed to setup policy engine: %w", err) + } - app.dig.Provide(app.getLabelProvider) - app.dig.Provide(service.NewLdapService) - app.dig.Provide(service.NewTailscaleService) - app.dig.Provide(service.NewAccessControlsService) - app.dig.Provide(service.NewOAuthBrokerService) - app.dig.Provide(service.NewAuthService) - app.dig.Provide(service.NewOIDCService) + err = app.dig.Provide(app.getLabelProvider) + if err != nil { + return fmt.Errorf("failed to provide label provider: %w", err) + } + + err = app.dig.Provide(service.NewLdapService) + if err != nil { + return fmt.Errorf("failed to provide ldap service: %w", err) + } + + err = app.dig.Provide(service.NewTailscaleService) + if err != nil { + return fmt.Errorf("failed to provide tailscale service: %w", err) + } + + err = app.dig.Provide(service.NewAccessControlsService) + if err != nil { + return fmt.Errorf("failed to provide access controls service: %w", err) + } + + err = app.dig.Provide(service.NewOAuthBrokerService) + if err != nil { + return fmt.Errorf("failed to provide oauth broker service: %w", err) + } + + err = app.dig.Provide(service.NewAuthService) + if err != nil { + return fmt.Errorf("failed to provide auth service: %w", err) + } + + err = app.dig.Provide(service.NewOIDCService) + if err != nil { + return fmt.Errorf("failed to provide oidc service: %w", err) + } type svcInput struct { dig.In @@ -34,7 +61,7 @@ func (app *BootstrapApp) setupServices() error { TailscaleService *service.TailscaleService } - err := app.dig.Invoke(func(i svcInput) error { + err = app.dig.Invoke(func(i svcInput) error { app.services = Services{ accessControlService: i.AccessControlService, authService: i.AuthService, @@ -45,7 +72,11 @@ func (app *BootstrapApp) setupServices() error { return nil }) - return err + if err != nil { + return fmt.Errorf("failed to invoke services: %w", err) + } + + return nil } func (app *BootstrapApp) getLabelProvider() (service.LabelProvider, error) { @@ -61,25 +92,41 @@ func (app *BootstrapApp) getLabelProvider() (service.LabelProvider, error) { if useKubernetes { app.log.App.Debug().Msg("Using Kubernetes label provider") - app.dig.Provide(service.NewKubernetesService) + err := app.dig.Provide(service.NewKubernetesService) - app.dig.Invoke(func(k *service.KubernetesService) error { + if err != nil { + return nil, fmt.Errorf("failed to provide kubernetes service: %w", err) + } + + err = app.dig.Invoke(func(k *service.KubernetesService) error { app.services.kubernetesService = k return nil }) + if err != nil { + return nil, fmt.Errorf("failed to invoke kubernetes service: %w", err) + } + return app.services.kubernetesService, nil } app.log.App.Debug().Msg("Using Docker label provider") - app.dig.Provide(service.NewDockerService) + err := app.dig.Provide(service.NewDockerService) - app.dig.Invoke(func(d *service.DockerService) error { + if err != nil { + return nil, fmt.Errorf("failed to provide docker service: %w", err) + } + + err = app.dig.Invoke(func(d *service.DockerService) error { app.services.dockerService = d return nil }) + if err != nil { + return nil, fmt.Errorf("failed to invoke docker service: %w", err) + } + if app.services.dockerService == nil { if app.config.LabelProvider == "docker" { app.log.App.Warn().Msg("Docker label provider selected but Docker is not available, will continue without it") @@ -93,10 +140,14 @@ func (app *BootstrapApp) getLabelProvider() (service.LabelProvider, error) { } } -func (app *BootstrapApp) setupPolicyEngine() { - app.dig.Provide(service.NewPolicyEngine) +func (app *BootstrapApp) setupPolicyEngine() error { + err := app.dig.Provide(service.NewPolicyEngine) - app.dig.Invoke(func(policyEngine *service.PolicyEngine) error { + if err != nil { + return fmt.Errorf("failed to create policy engine: %w", err) + } + + err = app.dig.Invoke(func(policyEngine *service.PolicyEngine) error { policyEngine.RegisterRule(service.RuleUserAllowed, &service.UserAllowedRule{ Log: app.log, }) @@ -119,4 +170,6 @@ func (app *BootstrapApp) setupPolicyEngine() { }) return nil }) + + return err } diff --git a/internal/controller/context_controller.go b/internal/controller/context_controller.go index 487dd94d..32574c99 100644 --- a/internal/controller/context_controller.go +++ b/internal/controller/context_controller.go @@ -3,6 +3,7 @@ package controller import ( "github.com/tinyauthapp/tinyauth/internal/model" "github.com/tinyauthapp/tinyauth/internal/utils/logger" + "go.uber.org/dig" "github.com/gin-gonic/gin" ) @@ -71,29 +72,33 @@ type AppContextResponse struct { App ACRApp `json:"app"` } -type ContextController struct { - log *logger.Logger - config model.Config - runtime model.RuntimeConfig +type ContextControllerInput struct { + dig.In + + Log *logger.Logger + Config *model.Config + Runtime *model.RuntimeConfig + RouterGroup *gin.RouterGroup `name:"apiRouterGroup"` } -func NewContextController( - log *logger.Logger, - config model.Config, - runtimeConfig model.RuntimeConfig, - router *gin.RouterGroup, -) *ContextController { +type ContextController struct { + log *logger.Logger + config *model.Config + runtime *model.RuntimeConfig +} + +func NewContextController(i ContextControllerInput) *ContextController { controller := &ContextController{ - log: log, - config: config, - runtime: runtimeConfig, + log: i.Log, + config: i.Config, + runtime: i.Runtime, } - if !config.UI.WarningsEnabled { - log.App.Warn().Msg("UI warnings are disabled. This may lead to security issues if you are not careful. Make sure to enable warnings in production environments.") + if !i.Config.UI.WarningsEnabled { + i.Log.App.Warn().Msg("UI warnings are disabled. This may lead to security issues if you are not careful. Make sure to enable warnings in production environments.") } - contextGroup := router.Group("/context") + contextGroup := i.RouterGroup.Group("/context") contextGroup.GET("/user", controller.userContextHandler) contextGroup.GET("/app", controller.appContextHandler) diff --git a/internal/controller/health_controller.go b/internal/controller/health_controller.go index 8e84e62b..2b578978 100644 --- a/internal/controller/health_controller.go +++ b/internal/controller/health_controller.go @@ -1,15 +1,24 @@ package controller -import "github.com/gin-gonic/gin" +import ( + "github.com/gin-gonic/gin" + "go.uber.org/dig" +) type HealthController struct { } -func NewHealthController(router *gin.RouterGroup) *HealthController { +type HealthControllerInput struct { + dig.In + + RouterGroup *gin.RouterGroup `name:"apiRouterGroup"` +} + +func NewHealthController(i HealthControllerInput) *HealthController { controller := &HealthController{} - router.GET("/healthz", controller.healthHandler) - router.HEAD("/healthz", controller.healthHandler) + i.RouterGroup.GET("/healthz", controller.healthHandler) + i.RouterGroup.HEAD("/healthz", controller.healthHandler) return controller } diff --git a/internal/controller/oauth_controller.go b/internal/controller/oauth_controller.go index 788fedfa..21877705 100644 --- a/internal/controller/oauth_controller.go +++ b/internal/controller/oauth_controller.go @@ -11,6 +11,7 @@ import ( "github.com/tinyauthapp/tinyauth/internal/service" "github.com/tinyauthapp/tinyauth/internal/utils" "github.com/tinyauthapp/tinyauth/internal/utils/logger" + "go.uber.org/dig" "github.com/gin-gonic/gin" "github.com/google/go-querystring/query" @@ -22,26 +23,30 @@ type OAuthRequest struct { type OAuthController struct { log *logger.Logger - config model.Config - runtime model.RuntimeConfig + config *model.Config + runtime *model.RuntimeConfig auth *service.AuthService } -func NewOAuthController( - log *logger.Logger, - config model.Config, - runtimeConfig model.RuntimeConfig, - router *gin.RouterGroup, - auth *service.AuthService, -) *OAuthController { +type OAuthControllerInput struct { + dig.In + + Log *logger.Logger + Config *model.Config + RuntimeConfig *model.RuntimeConfig + RouterGroup *gin.RouterGroup `name:"apiRouterGroup"` + AuthService *service.AuthService +} + +func NewOAuthController(i OAuthControllerInput) *OAuthController { controller := &OAuthController{ - log: log, - config: config, - runtime: runtimeConfig, - auth: auth, + log: i.Log, + config: i.Config, + runtime: i.RuntimeConfig, + auth: i.AuthService, } - oauthGroup := router.Group("/oauth") + oauthGroup := i.RouterGroup.Group("/oauth") oauthGroup.GET("/url/:provider", controller.oauthURLHandler) oauthGroup.GET("/callback/:provider", controller.oauthCallbackHandler) diff --git a/internal/controller/oidc_controller.go b/internal/controller/oidc_controller.go index 5105f7d7..a8aef39e 100644 --- a/internal/controller/oidc_controller.go +++ b/internal/controller/oidc_controller.go @@ -11,6 +11,7 @@ import ( "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "github.com/google/go-querystring/query" + "go.uber.org/dig" "github.com/tinyauthapp/tinyauth/internal/model" "github.com/tinyauthapp/tinyauth/internal/service" @@ -30,7 +31,7 @@ type authorizeErrorParams struct { type OIDCController struct { log *logger.Logger oidc *service.OIDCService - runtime model.RuntimeConfig + runtime *model.RuntimeConfig } type AuthorizeCallback struct { @@ -78,22 +79,27 @@ type AuthorizeCompleteRequest struct { Ticket string `json:"ticket" binding:"required"` } -func NewOIDCController( - log *logger.Logger, - oidcService *service.OIDCService, - runtimeConfig model.RuntimeConfig, - router *gin.RouterGroup, - mainRouter *gin.RouterGroup) *OIDCController { +type OIDCControllerInput struct { + dig.In + + Log *logger.Logger + OIDCService *service.OIDCService + RuntimeConfig *model.RuntimeConfig + RouterGroup *gin.RouterGroup `name:"apiRouterGroup"` + MainRouter *gin.RouterGroup `name:"mainRouterGroup"` +} + +func NewOIDCController(i OIDCControllerInput) *OIDCController { controller := &OIDCController{ - log: log, - oidc: oidcService, - runtime: runtimeConfig, + log: i.Log, + oidc: i.OIDCService, + runtime: i.RuntimeConfig, } - mainRouter.POST("/authorize", controller.authorize) - mainRouter.GET("/authorize", controller.authorize) + i.MainRouter.POST("/authorize", controller.authorize) + i.MainRouter.GET("/authorize", controller.authorize) - oidcGroup := router.Group("/oidc") + oidcGroup := i.RouterGroup.Group("/oidc") oidcGroup.POST("/authorize-complete", controller.authorizeComplete) oidcGroup.POST("/token", controller.Token) oidcGroup.GET("/userinfo", controller.Userinfo) diff --git a/internal/controller/proxy_controller.go b/internal/controller/proxy_controller.go index 169391fc..891ff59b 100644 --- a/internal/controller/proxy_controller.go +++ b/internal/controller/proxy_controller.go @@ -13,6 +13,7 @@ import ( "github.com/tinyauthapp/tinyauth/internal/service" "github.com/tinyauthapp/tinyauth/internal/utils" "github.com/tinyauthapp/tinyauth/internal/utils/logger" + "go.uber.org/dig" "github.com/gin-gonic/gin" "github.com/google/go-querystring/query" @@ -53,29 +54,33 @@ type ProxyContext struct { type ProxyController struct { log *logger.Logger - runtime model.RuntimeConfig + runtime *model.RuntimeConfig acls *service.AccessControlsService auth *service.AuthService policyEngine *service.PolicyEngine } -func NewProxyController( - log *logger.Logger, - runtime model.RuntimeConfig, - router *gin.RouterGroup, - acls *service.AccessControlsService, - auth *service.AuthService, - policyEngine *service.PolicyEngine, -) *ProxyController { +type ProxyControllerInput struct { + dig.In + + Log *logger.Logger + RuntimeConfig *model.RuntimeConfig + RouterGroup *gin.RouterGroup `name:"apiRouterGroup"` + ACLsService *service.AccessControlsService + AuthService *service.AuthService + PolicyEngine *service.PolicyEngine +} + +func NewProxyController(i ProxyControllerInput) *ProxyController { controller := &ProxyController{ - log: log, - runtime: runtime, - acls: acls, - auth: auth, - policyEngine: policyEngine, + log: i.Log, + runtime: i.RuntimeConfig, + acls: i.ACLsService, + auth: i.AuthService, + policyEngine: i.PolicyEngine, } - proxyGroup := router.Group("/auth") + proxyGroup := i.RouterGroup.Group("/auth") proxyGroup.Any("/:proxy", controller.proxyHandler) return controller diff --git a/internal/controller/resources_controller.go b/internal/controller/resources_controller.go index 1849810d..f4b720ed 100644 --- a/internal/controller/resources_controller.go +++ b/internal/controller/resources_controller.go @@ -5,25 +5,30 @@ import ( "github.com/gin-gonic/gin" "github.com/tinyauthapp/tinyauth/internal/model" + "go.uber.org/dig" ) type ResourcesController struct { - config model.Config + config *model.Config fileServer http.Handler } -func NewResourcesController( - config model.Config, - router *gin.RouterGroup, -) *ResourcesController { - fileServer := http.StripPrefix("/resources", http.FileServer(http.Dir(config.Resources.Path))) +type ResourcesControllerInput struct { + dig.In + + RouterGroup *gin.RouterGroup `name:"mainRouterGroup"` + Config *model.Config +} + +func NewResourcesController(i ResourcesControllerInput) *ResourcesController { + fileServer := http.StripPrefix("/resources", http.FileServer(http.Dir(i.Config.Resources.Path))) controller := &ResourcesController{ - config: config, + config: i.Config, fileServer: fileServer, } - router.GET("/resources/*resource", controller.resourcesHandler) + i.RouterGroup.GET("/resources/*resource", controller.resourcesHandler) return controller } diff --git a/internal/controller/user_controller.go b/internal/controller/user_controller.go index fd3159f7..f17b7d79 100644 --- a/internal/controller/user_controller.go +++ b/internal/controller/user_controller.go @@ -11,6 +11,7 @@ import ( "github.com/tinyauthapp/tinyauth/internal/service" "github.com/tinyauthapp/tinyauth/internal/utils" "github.com/tinyauthapp/tinyauth/internal/utils/logger" + "go.uber.org/dig" "github.com/gin-gonic/gin" "github.com/pquerna/otp/totp" @@ -27,23 +28,27 @@ type TotpRequest struct { type UserController struct { log *logger.Logger - runtime model.RuntimeConfig + runtime *model.RuntimeConfig auth *service.AuthService } -func NewUserController( - log *logger.Logger, - runtimeConfig model.RuntimeConfig, - router *gin.RouterGroup, - auth *service.AuthService, -) *UserController { +type UserControllerInput struct { + dig.In + + Log *logger.Logger + RuntimeConfig *model.RuntimeConfig + RouterGroup *gin.RouterGroup `name:"apiRouterGroup"` + AuthService *service.AuthService +} + +func NewUserController(i UserControllerInput) *UserController { controller := &UserController{ - log: log, - runtime: runtimeConfig, - auth: auth, + log: i.Log, + runtime: i.RuntimeConfig, + auth: i.AuthService, } - userGroup := router.Group("/user") + userGroup := i.RouterGroup.Group("/user") userGroup.POST("/login", controller.loginHandler) userGroup.POST("/logout", controller.logoutHandler) userGroup.POST("/totp", controller.totpHandler) diff --git a/internal/controller/well_known_controller.go b/internal/controller/well_known_controller.go index 8c71d890..46406dc4 100644 --- a/internal/controller/well_known_controller.go +++ b/internal/controller/well_known_controller.go @@ -6,6 +6,7 @@ import ( "github.com/gin-gonic/gin" "github.com/tinyauthapp/tinyauth/internal/service" + "go.uber.org/dig" ) type OpenIDConnectConfiguration struct { @@ -30,13 +31,20 @@ type WellKnownController struct { oidc *service.OIDCService } -func NewWellKnownController(oidc *service.OIDCService, router *gin.RouterGroup) *WellKnownController { +type WellKnownControllerInput struct { + dig.In + + OIDCService *service.OIDCService + RouterGroup *gin.RouterGroup `name:"apiRouterGroup"` +} + +func NewWellKnownController(i WellKnownControllerInput) *WellKnownController { controller := &WellKnownController{ - oidc: oidc, + oidc: i.OIDCService, } - router.GET("/.well-known/openid-configuration", controller.OpenIDConnectConfiguration) - router.GET("/.well-known/jwks.json", controller.JWKS) + i.RouterGroup.GET("/.well-known/openid-configuration", controller.OpenIDConnectConfiguration) + i.RouterGroup.GET("/.well-known/jwks.json", controller.JWKS) return controller } diff --git a/internal/middleware/context_middleware.go b/internal/middleware/context_middleware.go index fc694ddf..62c64b90 100644 --- a/internal/middleware/context_middleware.go +++ b/internal/middleware/context_middleware.go @@ -11,6 +11,7 @@ import ( "github.com/tinyauthapp/tinyauth/internal/service" "github.com/tinyauthapp/tinyauth/internal/utils" "github.com/tinyauthapp/tinyauth/internal/utils/logger" + "go.uber.org/dig" "github.com/gin-gonic/gin" ) @@ -37,25 +38,29 @@ var ( type ContextMiddleware struct { log *logger.Logger - runtime model.RuntimeConfig + runtime *model.RuntimeConfig auth *service.AuthService broker *service.OAuthBrokerService tailscale *service.TailscaleService } -func NewContextMiddleware( - log *logger.Logger, - runtime model.RuntimeConfig, - auth *service.AuthService, - broker *service.OAuthBrokerService, - tailscale *service.TailscaleService, -) *ContextMiddleware { +type ContextMiddlewareInput struct { + dig.In + + Log *logger.Logger + RuntimeConfig *model.RuntimeConfig + AuthService *service.AuthService + BrokerService *service.OAuthBrokerService + TailscaleService *service.TailscaleService +} + +func NewContextMiddleware(i ContextMiddlewareInput) *ContextMiddleware { return &ContextMiddleware{ - log: log, - runtime: runtime, - auth: auth, - broker: broker, - tailscale: tailscale, + log: i.Log, + runtime: i.RuntimeConfig, + auth: i.AuthService, + broker: i.BrokerService, + tailscale: i.TailscaleService, } } diff --git a/internal/middleware/ui_middleware.go b/internal/middleware/ui_middleware.go index 9f2bd297..3b706ecd 100644 --- a/internal/middleware/ui_middleware.go +++ b/internal/middleware/ui_middleware.go @@ -9,6 +9,7 @@ import ( "time" "github.com/tinyauthapp/tinyauth/internal/assets" + "go.uber.org/dig" "github.com/gin-gonic/gin" ) @@ -18,7 +19,12 @@ type UIMiddleware struct { uiFileServer http.Handler } -func NewUIMiddleware() (*UIMiddleware, error) { +// for future use if we need to inject dependencies into the middleware +type UIMiddlewareInput struct { + dig.In +} + +func NewUIMiddleware(_ UIMiddlewareInput) (*UIMiddleware, error) { m := &UIMiddleware{} ui, err := fs.Sub(assets.FrontendAssets, "dist") diff --git a/internal/middleware/zerolog_middleware.go b/internal/middleware/zerolog_middleware.go index 9870a70a..9822c2aa 100644 --- a/internal/middleware/zerolog_middleware.go +++ b/internal/middleware/zerolog_middleware.go @@ -6,6 +6,7 @@ import ( "github.com/gin-gonic/gin" "github.com/tinyauthapp/tinyauth/internal/utils/logger" + "go.uber.org/dig" ) // See context middleware for explanation of why we have to do this @@ -21,9 +22,15 @@ type ZerologMiddleware struct { log *logger.Logger } -func NewZerologMiddleware(log *logger.Logger) *ZerologMiddleware { +type ZerologMiddlewareInput struct { + dig.In + + Log *logger.Logger +} + +func NewZerologMiddleware(i ZerologMiddlewareInput) *ZerologMiddleware { return &ZerologMiddleware{ - log: log, + log: i.Log, } }