refactor: use better ignore paths in context middleware (#743)

This commit is contained in:
Stavros
2026-04-01 17:07:14 +03:00
committed by GitHub
parent 08e6b84615
commit fc1d4f2082
2 changed files with 31 additions and 7 deletions

View File

@@ -1,7 +1,6 @@
package middleware package middleware
import ( import (
"slices"
"strings" "strings"
"time" "time"
@@ -13,7 +12,24 @@ import (
"github.com/gin-gonic/gin" "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 { type ContextMiddlewareConfig struct {
CookieDomain string CookieDomain string
@@ -39,9 +55,7 @@ func (m *ContextMiddleware) Init() error {
func (m *ContextMiddleware) Middleware() gin.HandlerFunc { func (m *ContextMiddleware) Middleware() gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
// There is no point in trying to get credentials if it's an OIDC endpoint if m.isIgnorePath(c.Request.Method + " " + c.Request.URL.Path) {
path := c.Request.URL.Path
if slices.Contains(OIDCIgnorePaths, strings.TrimSuffix(path, "/")) {
c.Next() c.Next()
return return
} }
@@ -224,3 +238,12 @@ func (m *ContextMiddleware) Middleware() gin.HandlerFunc {
c.Next() c.Next()
} }
} }
func (m *ContextMiddleware) isIgnorePath(path string) bool {
for _, prefix := range contextSkipPathsPrefix {
if strings.HasPrefix(path, prefix) {
return true
}
}
return false
}

View File

@@ -8,10 +8,11 @@ import (
"github.com/steveiliop56/tinyauth/internal/utils/tlog" "github.com/steveiliop56/tinyauth/internal/utils/tlog"
) )
// See context middleware for explanation of why we have to do this
var ( var (
loggerSkipPathsPrefix = []string{ loggerSkipPathsPrefix = []string{
"GET /api/health", "GET /api/healthz",
"HEAD /api/health", "HEAD /api/healthz",
"GET /favicon.ico", "GET /favicon.ico",
} }
) )