package web import ( "net/http" "strings" "github.com/gin-gonic/gin" ) func routeOrQuery(c *gin.Context, routeName, queryName string) string { if c == nil { return "" } if value := strings.TrimSpace(c.Param(routeName)); value != "" { return value } return strings.TrimSpace(c.Query(queryName)) } func hasQuery(c *gin.Context, names ...string) bool { if c == nil || c.Request == nil || c.Request.URL == nil { return false } values := c.Request.URL.Query() for _, name := range names { if _, ok := values[name]; ok { return true } } return false } func redirectCanonical(c *gin.Context, target string) bool { target = strings.TrimSpace(target) if c == nil || target == "" || c.Request == nil || c.Request.URL == nil { return false } if c.Request.URL.RequestURI() == target { return false } c.Redirect(http.StatusMovedPermanently, target) return true }