|
package handles |
|
|
|
import ( |
|
"fmt" |
|
"net/url" |
|
"strings" |
|
|
|
"github.com/alist-org/alist/v3/internal/conf" |
|
"github.com/alist-org/alist/v3/internal/setting" |
|
"github.com/alist-org/alist/v3/pkg/utils" |
|
"github.com/alist-org/alist/v3/server/common" |
|
"github.com/gin-gonic/gin" |
|
) |
|
|
|
func Favicon(c *gin.Context) { |
|
c.Redirect(302, setting.GetStr(conf.Favicon)) |
|
} |
|
|
|
func Robots(c *gin.Context) { |
|
c.String(200, setting.GetStr(conf.RobotsTxt)) |
|
} |
|
|
|
func Plist(c *gin.Context) { |
|
linkNameB64 := strings.TrimSuffix(c.Param("link_name"), ".plist") |
|
linkName, err := utils.SafeAtob(linkNameB64) |
|
if err != nil { |
|
common.ErrorResp(c, err, 400) |
|
return |
|
} |
|
linkNameSplit := strings.Split(linkName, "/") |
|
if len(linkNameSplit) != 2 { |
|
common.ErrorStrResp(c, "malformed link", 400) |
|
return |
|
} |
|
linkEncode := linkNameSplit[0] |
|
linkStr, err := url.PathUnescape(linkEncode) |
|
if err != nil { |
|
common.ErrorResp(c, err, 400) |
|
return |
|
} |
|
link, err := url.Parse(linkStr) |
|
if err != nil { |
|
common.ErrorResp(c, err, 400) |
|
return |
|
} |
|
fullName := c.Param("name") |
|
Url := link.String() |
|
Url = strings.ReplaceAll(Url, "<", "[") |
|
Url = strings.ReplaceAll(Url, ">", "]") |
|
nameEncode := linkNameSplit[1] |
|
fullName, err = url.PathUnescape(nameEncode) |
|
if err != nil { |
|
common.ErrorResp(c, err, 400) |
|
return |
|
} |
|
name := fullName |
|
identifier := fmt.Sprintf("ci.nn.%s", url.PathEscape(fullName)) |
|
sep := "@" |
|
if strings.Contains(fullName, sep) { |
|
ss := strings.Split(fullName, sep) |
|
name = strings.Join(ss[:len(ss)-1], sep) |
|
identifier = ss[len(ss)-1] |
|
} |
|
|
|
name = strings.ReplaceAll(name, "<", "[") |
|
name = strings.ReplaceAll(name, ">", "]") |
|
plist := fmt.Sprintf(`<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
<plist version="1.0"> |
|
<dict> |
|
<key>items</key> |
|
<array> |
|
<dict> |
|
<key>assets</key> |
|
<array> |
|
<dict> |
|
<key>kind</key> |
|
<string>software-package</string> |
|
<key>url</key> |
|
<string><![CDATA[%s]]></string> |
|
</dict> |
|
</array> |
|
<key>metadata</key> |
|
<dict> |
|
<key>bundle-identifier</key> |
|
<string>%s</string> |
|
<key>bundle-version</key> |
|
<string>4.4</string> |
|
<key>kind</key> |
|
<string>software</string> |
|
<key>title</key> |
|
<string>%s</string> |
|
</dict> |
|
</dict> |
|
</array> |
|
</dict> |
|
</plist>`, Url, identifier, name) |
|
c.Header("Content-Type", "application/xml;charset=utf-8") |
|
c.Status(200) |
|
_, _ = c.Writer.WriteString(plist) |
|
} |
|
|