package router import ( "net/http" "net/url" "strings" "chatapp3-golang/internal/service/hostcenter" "github.com/gin-gonic/gin" ) func registerHostCenterRoutes(engine *gin.Engine, service *hostcenter.Service) { if service == nil { return } group := engine.Group("/app/h5/host-center") group.GET("/policy", func(c *gin.Context) { token := strings.TrimSpace(queryValuePreservePlus(c.Request.URL.RawQuery, "token")) if token == "" { writeError(c, hostcenter.NewAppError(http.StatusUnauthorized, "missing_token", "token is required")) return } resp, err := service.GetAnchorPolicy(c.Request.Context(), hostcenter.AnchorPolicyRequest{ Token: token, PolicyType: c.Query("policyType"), }) if err != nil { writeError(c, err) return } writeOK(c, resp) }) } func queryValuePreservePlus(rawQuery, name string) string { for _, part := range strings.Split(rawQuery, "&") { if part == "" { continue } key, value, _ := strings.Cut(part, "=") decodedKey, err := url.QueryUnescape(key) if err != nil || decodedKey != name { continue } decodedValue, err := url.QueryUnescape(strings.ReplaceAll(value, "+", "%2B")) if err != nil { return value } return decodedValue } return "" }