diff --git a/internal/bootstrap/data/setting.go b/internal/bootstrap/data/setting.go index b0892a0f..17ff0d27 100644 --- a/internal/bootstrap/data/setting.go +++ b/internal/bootstrap/data/setting.go @@ -97,6 +97,7 @@ func InitialSettings() []model.SettingItem { {Key: conf.ImageTypes, Value: "jpg,tiff,jpeg,png,gif,bmp,svg,ico,swf,webp", Type: conf.TypeText, Group: model.PREVIEW, Flag: model.PRIVATE}, //{Key: conf.OfficeTypes, Value: "doc,docx,xls,xlsx,ppt,pptx", Type: conf.TypeText, Group: model.PREVIEW, Flag: model.PRIVATE}, {Key: conf.ProxyTypes, Value: "m3u8", Type: conf.TypeText, Group: model.PREVIEW, Flag: model.PRIVATE}, + {Key: conf.ProxyIgnoreHeaders, Value: "authorization,referer", Type: conf.TypeText, Group: model.PRIVATE, Flag: model.PRIVATE}, {Key: "external_previews", Value: `{}`, Type: conf.TypeText, Group: model.PREVIEW}, {Key: "iframe_previews", Value: `{ "doc,docx,xls,xlsx,ppt,pptx": { diff --git a/internal/conf/const.go b/internal/conf/const.go index d23fbb45..5c50bfec 100644 --- a/internal/conf/const.go +++ b/internal/conf/const.go @@ -15,23 +15,21 @@ const ( BasePath = "base_path" SiteTitle = "site_title" Announcement = "announcement" - AllowIndexed = "allow_indexed" + AllowIndexed = "allow_indexed" Logo = "logo" Favicon = "favicon" MainColor = "main_color" // preview - TextTypes = "text_types" - AudioTypes = "audio_types" - VideoTypes = "video_types" - ImageTypes = "image_types" - // OfficeTypes = "office_types" - ProxyTypes = "proxy_types" - OfficeViewers = "office_viewers" - PdfViewers = "pdf_viewers" - AudioAutoplay = "audio_autoplay" - VideoAutoplay = "video_autoplay" + TextTypes = "text_types" + AudioTypes = "audio_types" + VideoTypes = "video_types" + ImageTypes = "image_types" + ProxyTypes = "proxy_types" + ProxyIgnoreHeaders = "proxy_ignore_headers" + AudioAutoplay = "audio_autoplay" + VideoAutoplay = "video_autoplay" // global HideFiles = "hide_files" diff --git a/internal/conf/var.go b/internal/conf/var.go index cfe80d5b..a91547d1 100644 --- a/internal/conf/var.go +++ b/internal/conf/var.go @@ -15,7 +15,7 @@ var ( Conf *Config ) -var TypesMap = make(map[string][]string) +var SlicesMap = make(map[string][]string) var FilenameCharMap = make(map[string]string) var PrivacyReg []*regexp.Regexp diff --git a/internal/op/hook.go b/internal/op/hook.go index bf0e0df3..1dd4a3c1 100644 --- a/internal/op/hook.go +++ b/internal/op/hook.go @@ -33,26 +33,29 @@ type SettingItemHook func(item *model.SettingItem) error var settingItemHooks = map[string]SettingItemHook{ conf.VideoTypes: func(item *model.SettingItem) error { - conf.TypesMap[conf.VideoTypes] = strings.Split(item.Value, ",") + conf.SlicesMap[conf.VideoTypes] = strings.Split(item.Value, ",") return nil }, conf.AudioTypes: func(item *model.SettingItem) error { - conf.TypesMap[conf.AudioTypes] = strings.Split(item.Value, ",") + conf.SlicesMap[conf.AudioTypes] = strings.Split(item.Value, ",") return nil }, conf.ImageTypes: func(item *model.SettingItem) error { - conf.TypesMap[conf.ImageTypes] = strings.Split(item.Value, ",") + conf.SlicesMap[conf.ImageTypes] = strings.Split(item.Value, ",") return nil }, conf.TextTypes: func(item *model.SettingItem) error { - conf.TypesMap[conf.TextTypes] = strings.Split(item.Value, ",") + conf.SlicesMap[conf.TextTypes] = strings.Split(item.Value, ",") return nil }, conf.ProxyTypes: func(item *model.SettingItem) error { - conf.TypesMap[conf.ProxyTypes] = strings.Split(item.Value, ",") + conf.SlicesMap[conf.ProxyTypes] = strings.Split(item.Value, ",") + return nil + }, + conf.ProxyIgnoreHeaders: func(item *model.SettingItem) error { + conf.SlicesMap[conf.ProxyIgnoreHeaders] = strings.Split(item.Value, ",") return nil }, - conf.PrivacyRegs: func(item *model.SettingItem) error { regStrs := strings.Split(item.Value, "\n") regs := make([]*regexp.Regexp, 0, len(regStrs)) diff --git a/pkg/utils/file.go b/pkg/utils/file.go index 6bfe3527..a0cf619a 100644 --- a/pkg/utils/file.go +++ b/pkg/utils/file.go @@ -119,19 +119,16 @@ func CreateTempFile(r io.ReadCloser) (*os.File, error) { // GetFileType get file type func GetFileType(filename string) int { ext := strings.ToLower(Ext(filename)) - //if SliceContains(conf.TypesMap[conf.OfficeTypes], ext) { - // return conf.OFFICE - //} - if SliceContains(conf.TypesMap[conf.AudioTypes], ext) { + if SliceContains(conf.SlicesMap[conf.AudioTypes], ext) { return conf.AUDIO } - if SliceContains(conf.TypesMap[conf.VideoTypes], ext) { + if SliceContains(conf.SlicesMap[conf.VideoTypes], ext) { return conf.VIDEO } - if SliceContains(conf.TypesMap[conf.ImageTypes], ext) { + if SliceContains(conf.SlicesMap[conf.ImageTypes], ext) { return conf.IMAGE } - if SliceContains(conf.TypesMap[conf.TextTypes], ext) { + if SliceContains(conf.SlicesMap[conf.TextTypes], ext) { return conf.TEXT } return conf.UNKNOWN diff --git a/server/common/proxy.go b/server/common/proxy.go index 21e4cb71..142301ab 100644 --- a/server/common/proxy.go +++ b/server/common/proxy.go @@ -10,7 +10,9 @@ import ( "strconv" "strings" + "github.com/alist-org/alist/v3/internal/conf" "github.com/alist-org/alist/v3/internal/model" + "github.com/alist-org/alist/v3/pkg/utils" "github.com/pkg/errors" log "github.com/sirupsen/logrus" ) @@ -67,7 +69,7 @@ func Proxy(w http.ResponseWriter, r *http.Request, link *model.Link, file model. return err } for h, val := range r.Header { - if strings.ToLower(h) == "authorization" { + if utils.SliceContains(conf.SlicesMap[conf.ProxyIgnoreHeaders], strings.ToLower(h)) { continue } req.Header[h] = val diff --git a/server/handles/down.go b/server/handles/down.go index fbb20906..373c52cb 100644 --- a/server/handles/down.go +++ b/server/handles/down.go @@ -91,7 +91,7 @@ func shouldProxy(storage driver.Driver, filename string) bool { if storage.Config().MustProxy() || storage.GetStorage().WebProxy { return true } - if utils.SliceContains(conf.TypesMap[conf.ProxyTypes], utils.Ext(filename)) { + if utils.SliceContains(conf.SlicesMap[conf.ProxyTypes], utils.Ext(filename)) { return true } return false @@ -108,10 +108,10 @@ func canProxy(storage driver.Driver, filename string) bool { if storage.Config().MustProxy() || storage.GetStorage().WebProxy || storage.GetStorage().WebdavProxy() { return true } - if utils.SliceContains(conf.TypesMap[conf.ProxyTypes], utils.Ext(filename)) { + if utils.SliceContains(conf.SlicesMap[conf.ProxyTypes], utils.Ext(filename)) { return true } - if utils.SliceContains(conf.TypesMap[conf.TextTypes], utils.Ext(filename)) { + if utils.SliceContains(conf.SlicesMap[conf.TextTypes], utils.Ext(filename)) { return true } return false