mirror of
https://github.com/steveiliop56/tinyauth.git
synced 2026-04-02 20:07:56 +00:00
refactor: use better ignore paths in context middleware (#743)
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
@@ -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",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user