Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 28 additions & 5 deletions internal/middleware/context_middleware.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package middleware

import (
"slices"
"strings"
"time"

Expand All @@ -13,7 +12,24 @@ import (
"github.com/gin-gonic/gin"
)

var OIDCIgnorePaths = []string{"/api/oidc/token", "/api/oidc/userinfo"}
// Gin won't let us set a middleware on a specific route (at least it doesn't work,
// see https://github.com/gin-gonic/gin/issues/531) so we have to do some hackery
var (
contextSkipPathsPrefix = []string{
"GET /api/context/app",
"GET /api/healthz",
"HEAD /api/healthz",
"GET /api/oauth/url",
"GET /api/oauth/callback",
"GET /api/oidc/clients",
"POST /api/oidc/token",
"GET /api/oidc/userinfo",
"GET /resources",
"POST /api/user/login",
"GET /.well-known/openid-configuration",
"GET /.well-known/jwks.json",
}
)

type ContextMiddlewareConfig struct {
CookieDomain string
Expand All @@ -39,9 +55,7 @@ func (m *ContextMiddleware) Init() error {

func (m *ContextMiddleware) Middleware() gin.HandlerFunc {
return func(c *gin.Context) {
// There is no point in trying to get credentials if it's an OIDC endpoint
path := c.Request.URL.Path
if slices.Contains(OIDCIgnorePaths, strings.TrimSuffix(path, "/")) {
if m.isIgnorePath(c.Request.Method + " " + c.Request.URL.Path) {
c.Next()
return
}
Expand Down Expand Up @@ -224,3 +238,12 @@ func (m *ContextMiddleware) Middleware() gin.HandlerFunc {
c.Next()
}
}

func (m *ContextMiddleware) isIgnorePath(path string) bool {
for _, prefix := range contextSkipPathsPrefix {
if strings.HasPrefix(path, prefix) {
return true
}
}
return false
}
5 changes: 3 additions & 2 deletions internal/middleware/zerolog_middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import (
"github.com/steveiliop56/tinyauth/internal/utils/tlog"
)

// See context middleware for explanation of why we have to do this
var (
loggerSkipPathsPrefix = []string{
"GET /api/health",
"HEAD /api/health",
"GET /api/healthz",
"HEAD /api/healthz",
"GET /favicon.ico",
}
)
Expand Down
Loading