diff --git a/bootstrap/setting.go b/bootstrap/setting.go index 434240f8..bd8171c5 100644 --- a/bootstrap/setting.go +++ b/bootstrap/setting.go @@ -65,13 +65,14 @@ func InitSettings() { Description: "text type extensions", Group: model.FRONT, }, - //{ - // Key: "hide readme file", - // Value: "true", - // Type: "bool", - // Description: "hide readme file? ", - // Group: model.FRONT, - //}, + { + Key: "d_proxy types", + Value: strings.Join(conf.DProxyTypes, ","), + Type: "string", + Description: "/d but proxy", + Access: model.PRIVATE, + Group: model.BACK, + }, { Key: "hide files", Value: "/\\/README.md/i", diff --git a/conf/var.go b/conf/var.go index 2c564baa..3f3490e9 100644 --- a/conf/var.go +++ b/conf/var.go @@ -34,6 +34,7 @@ var ( TextTypes = []string{"txt", "htm", "html", "xml", "java", "properties", "sql", "js", "md", "json", "conf", "ini", "vue", "php", "py", "bat", "gitignore", "yml", "go", "sh", "c", "cpp", "h", "hpp", "tsx", "vtt", "srt", "ass"} + DProxyTypes = []string{"m3u8"} OfficeTypes = []string{"doc", "docx", "xls", "xlsx", "ppt", "pptx", "pdf"} VideoTypes = []string{"mp4", "mkv", "avi", "mov", "rmvb", "webm", "flv"} AudioTypes = []string{"mp3", "flac", "ogg", "m4a", "wav"} diff --git a/model/setting.go b/model/setting.go index 5571bc94..8c9fe892 100644 --- a/model/setting.go +++ b/model/setting.go @@ -93,6 +93,10 @@ func LoadSettings() { if err == nil { conf.TextTypes = strings.Split(textTypes.Value, ",") } + dProxyTypes, err := GetSettingByKey("d_proxy types") + if err == nil { + conf.DProxyTypes = strings.Split(dProxyTypes.Value, ",") + } // html favicon, err := GetSettingByKey("favicon") if err == nil { diff --git a/server/controllers/down.go b/server/controllers/down.go index 26010b2c..2797ad46 100644 --- a/server/controllers/down.go +++ b/server/controllers/down.go @@ -1,27 +1,29 @@ package controllers import ( + "github.com/Xhofe/alist/conf" "github.com/Xhofe/alist/drivers/base" "github.com/Xhofe/alist/server/common" "github.com/Xhofe/alist/utils" "github.com/gin-gonic/gin" log "github.com/sirupsen/logrus" + "path" ) func Down(c *gin.Context) { rawPath := c.Param("path") rawPath = utils.ParsePath(rawPath) log.Debugf("down: %s", rawPath) - account, path, driver, err := common.ParsePath(rawPath) + account, path_, driver, err := common.ParsePath(rawPath) if err != nil { common.ErrorResp(c, err, 500) return } - if driver.Config().OnlyProxy || account.Proxy { + if driver.Config().OnlyProxy || account.Proxy || utils.IsContain(conf.DProxyTypes, path.Ext(rawPath)) { Proxy(c) return } - link, err := driver.Link(base.Args{Path: path, IP: c.ClientIP()}, account) + link, err := driver.Link(base.Args{Path: path_, IP: c.ClientIP()}, account) if err != nil { common.ErrorResp(c, err, 500) return diff --git a/server/controllers/proxy.go b/server/controllers/proxy.go index 6dc41ce8..892bcf37 100644 --- a/server/controllers/proxy.go +++ b/server/controllers/proxy.go @@ -27,7 +27,9 @@ func Proxy(c *gin.Context) { // 2. driver只能中转 // 3. 是文本类型文件 // 4. 开启webdav中转(需要验证sign) - if !account.Proxy && !driver.Config().OnlyProxy && utils.GetFileType(filepath.Ext(rawPath)) != conf.TEXT { + if !account.Proxy && !driver.Config().OnlyProxy && + utils.GetFileType(filepath.Ext(rawPath)) != conf.TEXT && + !utils.IsContain(conf.DProxyTypes, filepath.Ext(rawPath)) { // 只开启了webdav中转,验证sign ok := false if account.WebdavProxy {