Skip to content

Commit 5a0d8ee

Browse files
SenkjMj2rong4cn
andauthored
feat(proxy): add disable proxy sign (#764)
* feat(proxy): add disable proxy sign * Update driver.go * GenerateDownProxyUrl * . * Update internal/op/driver.go Signed-off-by: j2rong4cn <[email protected]> * . --------- Signed-off-by: j2rong4cn <[email protected]> Co-authored-by: j2rong4cn <[email protected]> Co-authored-by: j2rong4cn <[email protected]>
1 parent 012e51c commit 5a0d8ee

File tree

7 files changed

+64
-55
lines changed

7 files changed

+64
-55
lines changed

drivers/quark_uc/driver.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func (d *QuarkOrUC) Init(ctx context.Context) error {
3939
if err == nil {
4040
if d.AdditionVersion != 2 {
4141
d.AdditionVersion = 2
42-
if !d.UseTransCodingAddress && len(d.DownProxyUrl) == 0 {
42+
if !d.UseTransCodingAddress && len(d.DownProxyURL) == 0 {
4343
d.WebProxy = true
4444
d.WebdavPolicy = "native_proxy"
4545
}

internal/model/storage.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ type Proxy struct {
3131
WebProxy bool `json:"web_proxy"`
3232
WebdavPolicy string `json:"webdav_policy"`
3333
ProxyRange bool `json:"proxy_range"`
34-
DownProxyUrl string `json:"down_proxy_url"`
34+
DownProxyURL string `json:"down_proxy_url"`
35+
//Disable sign for DownProxyURL
36+
DisableProxySign bool `json:"disable_proxy_sign"`
3537
}
3638

3739
func (s *Storage) GetStorage() *Storage {
@@ -50,10 +52,6 @@ func (p Proxy) Webdav302() bool {
5052
return p.WebdavPolicy == "302_redirect"
5153
}
5254

53-
func (p Proxy) WebdavProxy() bool {
55+
func (p Proxy) WebdavProxyURL() bool {
5456
return p.WebdavPolicy == "use_proxy_url"
5557
}
56-
57-
func (p Proxy) WebdavNative() bool {
58-
return !p.Webdav302() && !p.WebdavProxy()
59-
}

internal/op/driver.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@ func getMainItems(config driver.Config) []driver.Item {
117117
Name: "down_proxy_url",
118118
Type: conf.TypeText,
119119
})
120+
items = append(items, driver.Item{
121+
Name: "disable_proxy_sign",
122+
Type: conf.TypeBool,
123+
Default: "false",
124+
Help: "Disable sign for Download proxy URL",
125+
})
120126
if config.LocalSort {
121127
items = append(items, []driver.Item{{
122128
Name: "order_by",

server/common/proxy.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/OpenListTeam/OpenList/v4/internal/conf"
1313
"github.com/OpenListTeam/OpenList/v4/internal/model"
1414
"github.com/OpenListTeam/OpenList/v4/internal/net"
15+
"github.com/OpenListTeam/OpenList/v4/internal/sign"
1516
"github.com/OpenListTeam/OpenList/v4/internal/stream"
1617
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
1718
)
@@ -140,3 +141,18 @@ func (ww *WrittenResponseWriter) Write(p []byte) (int, error) {
140141
func (ww *WrittenResponseWriter) IsWritten() bool {
141142
return ww.written
142143
}
144+
145+
func GenerateDownProxyURL(storage *model.Storage, reqPath string) string {
146+
if storage.DownProxyURL == "" {
147+
return ""
148+
}
149+
query := ""
150+
if !storage.DisableProxySign {
151+
query = "?sign=" + sign.Sign(reqPath)
152+
}
153+
return fmt.Sprintf("%s%s%s",
154+
strings.Split(storage.DownProxyURL, "\n")[0],
155+
utils.EncodePath(reqPath, true),
156+
query,
157+
)
158+
}

server/handles/down.go

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ import (
66
"fmt"
77
stdpath "path"
88
"strconv"
9-
"strings"
109

1110
"github.com/OpenListTeam/OpenList/v4/internal/conf"
1211
"github.com/OpenListTeam/OpenList/v4/internal/driver"
1312
"github.com/OpenListTeam/OpenList/v4/internal/fs"
1413
"github.com/OpenListTeam/OpenList/v4/internal/model"
1514
"github.com/OpenListTeam/OpenList/v4/internal/net"
1615
"github.com/OpenListTeam/OpenList/v4/internal/setting"
17-
"github.com/OpenListTeam/OpenList/v4/internal/sign"
1816
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
1917
"github.com/OpenListTeam/OpenList/v4/server/common"
2018
"github.com/gin-gonic/gin"
@@ -58,15 +56,9 @@ func Proxy(c *gin.Context) {
5856
return
5957
}
6058
if canProxy(storage, filename) {
61-
downProxyUrl := storage.GetStorage().DownProxyUrl
62-
if downProxyUrl != "" {
63-
_, ok := c.GetQuery("d")
64-
if !ok {
65-
URL := fmt.Sprintf("%s%s?sign=%s",
66-
strings.Split(downProxyUrl, "\n")[0],
67-
utils.EncodePath(rawPath, true),
68-
sign.Sign(rawPath))
69-
c.Redirect(302, URL)
59+
if _, ok := c.GetQuery("d"); !ok {
60+
if url := common.GenerateDownProxyURL(storage.GetStorage(), rawPath); url != "" {
61+
c.Redirect(302, url)
7062
return
7163
}
7264
}
@@ -172,7 +164,7 @@ func proxy(c *gin.Context, link *model.Link, file model.Obj, proxyRange bool) {
172164
// 4. proxy_types
173165
// solution: text_file + shouldProxy()
174166
func canProxy(storage driver.Driver, filename string) bool {
175-
if storage.Config().MustProxy() || storage.GetStorage().WebProxy || storage.GetStorage().WebdavProxy() {
167+
if storage.Config().MustProxy() || storage.GetStorage().WebProxy || storage.GetStorage().WebdavProxyURL() {
176168
return true
177169
}
178170
if utils.SliceContains(conf.SlicesMap[conf.ProxyTypes], utils.Ext(filename)) {

server/handles/fsread.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -285,16 +285,12 @@ func FsGet(c *gin.Context) {
285285
return
286286
}
287287
if storage.Config().MustProxy() || storage.GetStorage().WebProxy {
288-
query := ""
289-
if isEncrypt(meta, reqPath) || setting.GetBool(conf.SignAll) {
290-
query = "?sign=" + sign.Sign(reqPath)
291-
}
292-
if storage.GetStorage().DownProxyUrl != "" {
293-
rawURL = fmt.Sprintf("%s%s?sign=%s",
294-
strings.Split(storage.GetStorage().DownProxyUrl, "\n")[0],
295-
utils.EncodePath(reqPath, true),
296-
sign.Sign(reqPath))
297-
} else {
288+
rawURL = common.GenerateDownProxyURL(storage.GetStorage(), reqPath)
289+
if rawURL == "" {
290+
query := ""
291+
if isEncrypt(meta, reqPath) || setting.GetBool(conf.SignAll) {
292+
query = "?sign=" + sign.Sign(reqPath)
293+
}
298294
rawURL = fmt.Sprintf("%s/p%s%s",
299295
common.GetApiUrl(c),
300296
utils.EncodePath(reqPath, true),

server/webdav/webdav.go

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"github.com/OpenListTeam/OpenList/v4/internal/errs"
2525
"github.com/OpenListTeam/OpenList/v4/internal/fs"
2626
"github.com/OpenListTeam/OpenList/v4/internal/model"
27-
"github.com/OpenListTeam/OpenList/v4/internal/sign"
2827
"github.com/OpenListTeam/OpenList/v4/pkg/utils"
2928
"github.com/OpenListTeam/OpenList/v4/server/common"
3029
)
@@ -238,37 +237,39 @@ func (h *Handler) handleGetHeadPost(w http.ResponseWriter, r *http.Request) (sta
238237
}
239238
// Let ServeContent determine the Content-Type header.
240239
storage, _ := fs.GetStorage(reqPath, &fs.GetStoragesArgs{})
241-
downProxyUrl := storage.GetStorage().DownProxyUrl
242-
if storage.GetStorage().WebdavNative() || (storage.GetStorage().WebdavProxy() && downProxyUrl == "") {
243-
link, _, err := fs.Link(ctx, reqPath, model.LinkArgs{Header: r.Header})
244-
if err != nil {
245-
return http.StatusInternalServerError, err
246-
}
247-
defer link.Close()
248-
if storage.GetStorage().ProxyRange {
249-
link = common.ProxyRange(ctx, link, fi.GetSize())
250-
}
251-
err = common.Proxy(w, r, link, fi)
252-
if err != nil {
253-
if statusCode, ok := errors.Unwrap(err).(net.ErrorHttpStatusCode); ok {
254-
return int(statusCode), err
255-
}
256-
return http.StatusInternalServerError, fmt.Errorf("webdav proxy error: %+v", err)
257-
}
258-
} else if storage.GetStorage().WebdavProxy() && downProxyUrl != "" {
259-
u := fmt.Sprintf("%s%s?sign=%s",
260-
strings.Split(downProxyUrl, "\n")[0],
261-
utils.EncodePath(reqPath, true),
262-
sign.Sign(reqPath))
263-
w.Header().Set("Cache-Control", "max-age=0, no-cache, no-store, must-revalidate")
264-
http.Redirect(w, r, u, http.StatusFound)
265-
} else {
240+
if storage.GetStorage().Webdav302() {
266241
link, _, err := fs.Link(ctx, reqPath, model.LinkArgs{IP: utils.ClientIP(r), Header: r.Header, Redirect: true})
267242
if err != nil {
268243
return http.StatusInternalServerError, err
269244
}
270245
defer link.Close()
271246
http.Redirect(w, r, link.URL, http.StatusFound)
247+
return 0, nil
248+
}
249+
250+
if storage.GetStorage().WebdavProxyURL() {
251+
if url := common.GenerateDownProxyURL(storage.GetStorage(), reqPath); url != "" {
252+
w.Header().Set("Cache-Control", "max-age=0, no-cache, no-store, must-revalidate")
253+
http.Redirect(w, r, url, http.StatusFound)
254+
return 0, nil
255+
}
256+
}
257+
258+
link, _, err := fs.Link(ctx, reqPath, model.LinkArgs{Header: r.Header})
259+
if err != nil {
260+
return http.StatusInternalServerError, err
261+
}
262+
defer link.Close()
263+
264+
if storage.GetStorage().ProxyRange {
265+
link = common.ProxyRange(ctx, link, fi.GetSize())
266+
}
267+
err = common.Proxy(w, r, link, fi)
268+
if err != nil {
269+
if statusCode, ok := errors.Unwrap(err).(net.ErrorHttpStatusCode); ok {
270+
return int(statusCode), err
271+
}
272+
return http.StatusInternalServerError, fmt.Errorf("webdav proxy error: %+v", err)
272273
}
273274
return 0, nil
274275
}

0 commit comments

Comments
 (0)