diff options
| author | mo khan <mo@mokhan.ca> | 2025-05-01 16:04:48 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-05-07 09:21:28 -0700 |
| commit | be652dd283d8c42adddedc66d6ba9210d5bdb511 (patch) | |
| tree | 78c0c86beb06d6fb30e3fb065749422aad55ffb6 | |
| parent | 524bb0c49649f5ed1d4bed693274ebe041ba1dcf (diff) | |
refactor: extract helper to log errors consistently
| -rw-r--r-- | app/cfg/cfg.go | 5 | ||||
| -rw-r--r-- | app/controllers/dashboard/controller.go | 6 | ||||
| -rw-r--r-- | app/controllers/sessions/controller.go | 6 | ||||
| -rw-r--r-- | app/controllers/sparkles/controller.go | 9 | ||||
| -rw-r--r-- | app/controllers/sparkles/init.go | 4 | ||||
| -rw-r--r-- | app/init.go | 13 | ||||
| -rw-r--r-- | app/middleware/id_token.go | 3 | ||||
| -rw-r--r-- | app/middleware/is_logged_in.go | 2 | ||||
| -rw-r--r-- | app/middleware/token_parser.go | 4 | ||||
| -rw-r--r-- | app/middleware/user.go | 4 | ||||
| -rw-r--r-- | pkg/pls/log.go | 11 |
11 files changed, 43 insertions, 24 deletions
diff --git a/app/cfg/cfg.go b/app/cfg/cfg.go index 2dbadc4..ee6fffe 100644 --- a/app/cfg/cfg.go +++ b/app/cfg/cfg.go @@ -2,9 +2,14 @@ package cfg import ( "github.com/xlgmokha/x/pkg/context" + "github.com/xlgmokha/x/pkg/env" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/domain" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/oidc" ) var CurrentUser context.Key[*domain.User] = context.Key[*domain.User]("current_user") var IDToken context.Key[*oidc.IDToken] = context.Key[*oidc.IDToken]("id_token") +var OIDCIssuer string = env.Fetch("OIDC_ISSUER", "https://gitlab.com") +var OAuthClientID string = env.Fetch("OAUTH_CLIENT_ID", "client_id") +var OAuthClientSecret string = env.Fetch("OAUTH_CLIENT_SECRET", "client_secret") +var OAuthRedirectURL string = env.Fetch("OAUTH_REDIRECT_URL", "http://localhost:8080/session/callback") diff --git a/app/controllers/dashboard/controller.go b/app/controllers/dashboard/controller.go index 0f165ad..097834f 100644 --- a/app/controllers/dashboard/controller.go +++ b/app/controllers/dashboard/controller.go @@ -3,10 +3,10 @@ package dashboard import ( "net/http" - "github.com/xlgmokha/x/pkg/log" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/cfg" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/middleware" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/views" + "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/pls" ) type Controller struct { @@ -31,7 +31,7 @@ func (c *Controller) Show(w http.ResponseWriter, r *http.Request) { dto := &ViewDashboardDTO{CurrentUser: currentUser} if err := views.Render(w, "dashboard/show", dto); err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) w.WriteHeader(http.StatusInternalServerError) return } @@ -48,7 +48,7 @@ func (c *Controller) Navigation(w http.ResponseWriter, r *http.Request) { IsLoggedIn: currentUser != nil, } if err := views.Render(w, "dashboard/nav", dto); err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) w.WriteHeader(http.StatusInternalServerError) return } diff --git a/app/controllers/sessions/controller.go b/app/controllers/sessions/controller.go index 3fb29ec..77a30fd 100644 --- a/app/controllers/sessions/controller.go +++ b/app/controllers/sessions/controller.go @@ -5,9 +5,9 @@ import ( "time" "github.com/xlgmokha/x/pkg/cookie" - "github.com/xlgmokha/x/pkg/log" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/middleware" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/oidc" + "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/pls" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/web" ) @@ -127,14 +127,14 @@ The `id_token` is a JWT that looks like the following body when it is decoded: func (c *Controller) Create(w http.ResponseWriter, r *http.Request) { tokens, err := c.svc.Exchange(r) if err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) w.WriteHeader(http.StatusBadRequest) return } encoded, err := tokens.ToBase64String() if err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) w.WriteHeader(http.StatusBadRequest) return } diff --git a/app/controllers/sparkles/controller.go b/app/controllers/sparkles/controller.go index dbb5f55..4963950 100644 --- a/app/controllers/sparkles/controller.go +++ b/app/controllers/sparkles/controller.go @@ -9,6 +9,7 @@ import ( "github.com/xlgmokha/x/pkg/x" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/domain" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/middleware" + "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/pls" ) type Controller struct { @@ -31,7 +32,7 @@ func (c *Controller) MountTo(mux *http.ServeMux) { func (c *Controller) Index(w http.ResponseWriter, r *http.Request) { if err := serde.ToHTTP(w, r, c.db.All()); err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) w.WriteHeader(http.StatusInternalServerError) } } @@ -45,14 +46,14 @@ func (c *Controller) Create(w http.ResponseWriter, r *http.Request) { } if err := c.db.Save(sparkle); err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) w.WriteHeader(http.StatusBadRequest) return } w.WriteHeader(http.StatusCreated) if err := serde.ToHTTP(w, r, sparkle); err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) w.WriteHeader(http.StatusInternalServerError) return } @@ -66,7 +67,7 @@ func (c *Controller) Restore(w http.ResponseWriter, r *http.Request) { x.Each(sparkles, func(sparkle *domain.Sparkle) { if err := c.db.Save(sparkle); err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) } }) } diff --git a/app/controllers/sparkles/init.go b/app/controllers/sparkles/init.go index 1118a09..c85a49d 100644 --- a/app/controllers/sparkles/init.go +++ b/app/controllers/sparkles/init.go @@ -3,18 +3,18 @@ package sparkles import ( "net/http" - "github.com/xlgmokha/x/pkg/log" "github.com/xlgmokha/x/pkg/mapper" "github.com/xlgmokha/x/pkg/serde" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/cfg" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/domain" + "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/pls" ) func init() { mapper.Register[*http.Request, *domain.Sparkle](func(r *http.Request) *domain.Sparkle { sparkle, err := serde.FromHTTP[*domain.Sparkle](r) if err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) } sparkle.Author = cfg.CurrentUser.From(r.Context()) return sparkle diff --git a/app/init.go b/app/init.go index 74b4bfa..30a6dbb 100644 --- a/app/init.go +++ b/app/init.go @@ -6,9 +6,9 @@ import ( "os" "github.com/rs/zerolog" - "github.com/xlgmokha/x/pkg/env" "github.com/xlgmokha/x/pkg/ioc" "github.com/xlgmokha/x/pkg/log" + "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/cfg" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/controllers/dashboard" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/controllers/health" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/controllers/sessions" @@ -50,12 +50,13 @@ func init() { } }) ioc.RegisterSingleton[*oidc.OpenID](ioc.Default, func() *oidc.OpenID { + ctx := context.WithValue(context.Background(), oauth2.HTTPClient, ioc.MustResolve[*http.Client](ioc.Default)) item, err := oidc.New( - context.WithValue(context.Background(), oauth2.HTTPClient, ioc.MustResolve[*http.Client](ioc.Default)), - env.Fetch("OIDC_ISSUER", "https://gitlab.com"), - env.Fetch("OAUTH_CLIENT_ID", "client_id"), - env.Fetch("OAUTH_CLIENT_SECRET", "client_secret"), - env.Fetch("OAUTH_REDIRECT_URL", "http://localhost:8080/session/callback"), + ctx, + cfg.OIDCIssuer, + cfg.OAuthClientID, + cfg.OAuthClientSecret, + cfg.OAuthRedirectURL, ) if err != nil { ioc.MustResolve[*zerolog.Logger](ioc.Default).Err(err).Send() diff --git a/app/middleware/id_token.go b/app/middleware/id_token.go index bb874e2..5a44f49 100644 --- a/app/middleware/id_token.go +++ b/app/middleware/id_token.go @@ -7,6 +7,7 @@ import ( "github.com/xlgmokha/x/pkg/x" xcfg "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/cfg" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/oidc" + "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/pls" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/web" ) @@ -19,7 +20,7 @@ func IDToken(cfg *oidc.OpenID, parsers ...TokenParser) func(http.Handler) http.H idToken, err := cfg.ValidateIDToken(r.Context(), rawIDToken) if err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) web.ExpireCookie(w, "session") } else { log.WithFields(r.Context(), log.Fields{"id_token": idToken}) diff --git a/app/middleware/is_logged_in.go b/app/middleware/is_logged_in.go index 92b9c8b..e2f0445 100644 --- a/app/middleware/is_logged_in.go +++ b/app/middleware/is_logged_in.go @@ -8,5 +8,5 @@ import ( ) var IsLoggedIn x.Predicate[*http.Request] = x.Predicate[*http.Request](func(r *http.Request) bool { - return !x.IsZero(cfg.CurrentUser.From(r.Context())) + return x.IsPresent(cfg.CurrentUser.From(r.Context())) }) diff --git a/app/middleware/token_parser.go b/app/middleware/token_parser.go index a719b2f..8d81aab 100644 --- a/app/middleware/token_parser.go +++ b/app/middleware/token_parser.go @@ -3,8 +3,8 @@ package middleware import ( "net/http" - "github.com/xlgmokha/x/pkg/log" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/oidc" + "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/pls" ) type TokenParser func(*http.Request) oidc.RawToken @@ -18,7 +18,7 @@ func IDTokenFromSessionCookie(r *http.Request) oidc.RawToken { tokens, err := oidc.TokensFromBase64String(cookies[0].Value) if err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) return "" } diff --git a/app/middleware/user.go b/app/middleware/user.go index 21455ba..03c04d6 100644 --- a/app/middleware/user.go +++ b/app/middleware/user.go @@ -3,12 +3,12 @@ package middleware import ( "net/http" - "github.com/xlgmokha/x/pkg/log" "github.com/xlgmokha/x/pkg/mapper" "github.com/xlgmokha/x/pkg/x" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/cfg" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/domain" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/oidc" + "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/pls" ) func User(db domain.Repository[*domain.User]) func(http.Handler) http.Handler { @@ -24,7 +24,7 @@ func User(db domain.Repository[*domain.User]) func(http.Handler) http.Handler { if !x.IsPresent(user) { user = mapper.MapFrom[*oidc.IDToken, *domain.User](idToken) if err := db.Save(user); err != nil { - log.WithFields(r.Context(), log.Fields{"error": err}) + pls.LogError(r.Context(), err) next.ServeHTTP(w, r) return } diff --git a/pkg/pls/log.go b/pkg/pls/log.go new file mode 100644 index 0000000..2e90a0c --- /dev/null +++ b/pkg/pls/log.go @@ -0,0 +1,11 @@ +package pls + +import ( + "context" + + "github.com/xlgmokha/x/pkg/log" +) + +func LogError(ctx context.Context, err error) { + log.WithFields(ctx, log.Fields{"error": err}) +} |
