From 0e2a22ec8c017beb54df8a87b7e92d579693a404 Mon Sep 17 00:00:00 2001 From: Season Shi Date: Thu, 23 Mar 2023 03:19:40 +0800 Subject: [PATCH] Add IsStorageSigned func to judge if Signing is enabled in the storage settings. It should be working now. --- internal/sign/storage.go | 19 +++++++++++++++++++ server/handles/fsread.go | 5 ++++- server/middlewares/down.go | 5 +++-- 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 internal/sign/storage.go diff --git a/internal/sign/storage.go b/internal/sign/storage.go new file mode 100644 index 00000000..94e24673 --- /dev/null +++ b/internal/sign/storage.go @@ -0,0 +1,19 @@ +package sign + +import ( + "github.com/alist-org/alist/v3/internal/op" + json "github.com/json-iterator/go" +) + +func IsStorageSigned(rawPath string) bool { + storage := op.GetBalancedStorage(rawPath).GetStorage() + var jsonData = map[string]interface{}{} + err := json.Unmarshal([]byte(storage.Addition), &jsonData) + if err != nil { + return false + } + if jsonData["sign"] == "true" { + return true + } + return false +} diff --git a/server/handles/fsread.go b/server/handles/fsread.go index 8ffeea61..6a171430 100644 --- a/server/handles/fsread.go +++ b/server/handles/fsread.go @@ -264,7 +264,7 @@ func FsGet(c *gin.Context) { if storage.Config().MustProxy() || storage.GetStorage().WebProxy { query := "?" if needSign(meta, reqPath) { - query = query + "sign=" + sign.Sign(reqPath) + "&" + query = query + "sign=" + sign.Sign(reqPath) } if query == "?" { query = "" @@ -374,6 +374,9 @@ func needSign(meta *model.Meta, path string) bool { if setting.GetBool(conf.SignAll) { return true } + if sign.IsStorageSigned(path) { + return true + } if meta == nil || meta.Password == "" { return false } diff --git a/server/middlewares/down.go b/server/middlewares/down.go index 73a0c495..261bd949 100644 --- a/server/middlewares/down.go +++ b/server/middlewares/down.go @@ -36,8 +36,6 @@ func Down(c *gin.Context) { return } } - // verify token - c.Next() } @@ -51,6 +49,9 @@ func needSign(meta *model.Meta, path string) bool { if setting.GetBool(conf.SignAll) { return true } + if sign.IsStorageSigned(path) { + return true + } if meta == nil || meta.Password == "" { return false }