56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
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 ""
|
|
}
|