package controllers import ( "encoding/base64" "fmt" "github.com/Xhofe/alist/conf" "github.com/Xhofe/alist/server/common" "github.com/Xhofe/alist/utils" "github.com/gin-gonic/gin" "net/url" "strings" ) func Favicon(c *gin.Context) { c.Redirect(302, conf.GetStr("favicon")) } func Plist(c *gin.Context) { data := c.Param("data") data = strings.ReplaceAll(data, "_", "/") data = strings.ReplaceAll(data, "-", "=") bytes, err := base64.StdEncoding.DecodeString(data) if err != nil { common.ErrorResp(c, err, 500) return } u := string(bytes) uUrl, err := url.Parse(u) if err != nil { common.ErrorResp(c, err, 500) return } name := utils.Base(u) u = uUrl.String() ipaIndex := strings.Index(name, ".ipa") decodeName := name if ipaIndex != -1 { name = name[:ipaIndex] decodeName = name tmp, err := url.PathUnescape(name) if err == nil { decodeName = tmp } } name = strings.ReplaceAll(name, "<", "[") name = strings.ReplaceAll(name, ">", "]") plist := fmt.Sprintf(` items assets kind software-package url %s metadata bundle-identifier ci.nn.%s bundle-version 4.4 kind software title %s `, u, name, decodeName) c.Header("Content-Type", "application/xml;charset=utf-8") c.Status(200) _, _ = c.Writer.WriteString(plist) }