8000 feat: add `proxy_range` option for `139Yun` `Alias` `AList V3` (#6496) · anwen-anyi/alist@5f60b51 · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Commit 5f60b51

Browse files
authored
feat: add proxy_range option for 139Yun Alias AList V3 (AlistGo#6496)
1 parent 7013d1b commit 5f60b51

File tree

10 files changed

+62
-14
lines changed

10 files changed

+62
-14
lines changed

drivers/139/meta.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@ type Addition struct {
1414
}
1515

1616
var config = driver.Config{
17-
Name: "139Yun",
18-
LocalSort: true,
17+
Name: "139Yun",
18+
LocalSort: true,
19+
ProxyRangeOption: true,
1920
}
2021

2122
func init() {
2223
op.RegisterDriver(func() driver.Driver {
23-
return &Yun139{}
24+
d := &Yun139{}
25+
d.ProxyRange = true
26+
return d
2427
})
2528
}

drivers/alias/meta.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ type Addition struct {
1414
}
1515

1616
var config = driver.Config{
17-
Name: "Alias",
18-
LocalSort: true,
19-
NoCache: true,
20-
NoUpload: true,
21-
DefaultRoot: "/",
17+
Name: "Alias",
18+
LocalSort: true,
19+
NoCache: true,
20+
NoUpload: true,
21+
DefaultRoot: "/",
22+
ProxyRangeOption: true,
2223
}
2324

2425
func init() {

drivers/alias/util.go

Lines changed: 6 additions & 2 deletions
< 8000 tr class="diff-line-row">
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,16 @@ func (d *Alias) link(ctx context.Context, dst, sub string, args model.LinkArgs)
103103
return nil, err
104104
}
105105
if common.ShouldProxy(storage, stdpath.Base(sub)) {
106-
return &model.Link{
106+
link := &model.Link{
107107
URL: fmt.Sprintf("%s/p%s?sign=%s",
108108
common.GetApiUrl(args.HttpReq),
109109
utils.EncodePath(reqPath, true),
110110
sign.Sign(reqPath)),
111-
}, nil
111+
}
112+
if args.HttpReq != nil && d.ProxyRange {
113+
link.RangeReadCloser = common.NoProxyRange
114+
}
115+
return link, nil
112116
}
113117
link, _, err := fs.Link(ctx, reqPath, args)
114118
return link, err

drivers/alist_v3/meta.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ type Addition struct {
1616
}
1717

1818
var config = driver.Config{
19-
Name: "AList V3",
20-
LocalSort: true,
21-
DefaultRoot: "/",
22-
CheckStatus: true,
19+
Name: "AList V3",
20+
LocalSort: true,
21+
DefaultRoot: "/",
22+
CheckStatus: true,
23+
ProxyRangeOption: true,
2324
}
2425

2526
func init() {

internal/driver/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ type Config struct {
1212
CheckStatus bool `json:"-"`
1313
Alert string `json:"alert"` //info,success,warning,danger
1414
NoOverwriteUpload bool `json:"-"` // whether to support overwrite upload
15+
ProxyRangeOption bool `json:"-"`
1516
}
1617

1718
func (c Config) MustProxy() bool {

internal/model/storage.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ type Sort struct {
2727
type Proxy struct {
2828
WebProxy bool `json:"web_proxy"`
2929
WebdavPolicy string `json:"webdav_policy"`
30+
ProxyRange bool `json:"proxy_range"`
3031
DownProxyUrl string `json:"down_proxy_url"`
3132
}
3233

internal/op/driver.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,17 @@ func getMainItems(config driver.Config) []driver.Item {
9393
Required: true,
9494
},
9595
}...)
96+
if config.ProxyRangeOption {
97+
item := driver.Item{
98+
Name: "proxy_range",
99+
Type: conf.TypeBool,
100+
Help: "Need to enable proxy",
101+
}
102+
if config.Name == "139Yun" {
103+
item.Default = "true"
104+
}
105+
items = append(items, item)
106+
}
96107
} else {
97108
items = append(items, driver.Item{
98109
Name: "webdav_policy",

server/common/proxy.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import (
99

1010
"github.com/alist-org/alist/v3/internal/model"
1111
"github.com/alist-org/alist/v3/internal/net"
12+
"github.com/alist-org/alist/v3/internal/stream"
1213
"github.com/alist-org/alist/v3/pkg/http_range"
1314
"github.com/alist-org/alist/v3/pkg/utils"
15+
log "github.com/sirupsen/logrus"
1416
)
1517

1618
func Proxy(w http.ResponseWriter, r *http.Request, link *model.Link, file model.Obj) error {
@@ -82,3 +84,21 @@ func attachFileName(w http.ResponseWriter, file model.Obj) {
8284
w.Header().Set("Content-Disposition", fmt.Sprintf(`attachment; filename="%s"; filename*=UTF-8''%s`, fileName, url.PathEscape(fileName)))
8385
w.Header().Set("Content-Type", utils.GetMimeType(fileName))
8486
}
87+
88+
var NoProxyRange = &model.RangeReadCloser{}
89+
90+
func ProxyRange(link *model.Link, size int64) {
91+
if link.MFile != nil {
92+
return
93+
}
94+
if link.RangeReadCloser == nil {
95+
var rrc, err = stream.GetRangeReadCloserFromLink(size, link)
96+
if err != nil {
97+
log.Warnf("ProxyRange error: %s", err)
98+
return
99+
}
100+
link.RangeReadCloser = rrc
101+
} else if link.RangeReadCloser == NoProxyRange {
102+
link.RangeReadCloser = nil
103+
}
104+
}

server/handles/down.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ func Proxy(c *gin.Context) {
106106
return
107107
}
108108
}
109+
if storage.GetStorage().ProxyRange {
110+
common.ProxyRange(link, file.GetSize())
111+
}
109112
err = common.Proxy(c.Writer, c.Request, link, file)
110113
if err != nil {
111114
common.ErrorResp(c, err, 500, true)

server/webdav/webdav.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@ func (h *Handler) handleGetHeadPost(w http.ResponseWriter, r *http.Request) (sta
247247
if err != nil {
248248
return http.StatusInternalServerError, err
249249
}
250+
if storage.GetStorage().ProxyRange {
251+
common.ProxyRange(link, fi.GetSize())
252+
}
250253
err = common.Proxy(w, r, link, fi)
251254
if err != nil {
252255
log.Errorf("webdav proxy error: %+v", err)

0 commit comments

Comments
 (0)
0