feat(alias): support proxy and direct together

This commit is contained in:
Andy Hsu
2023-03-14 13:38:41 +08:00
parent c4108007cd
commit d9795ff22f
6 changed files with 68 additions and 20 deletions

View File

@ -2,12 +2,15 @@ package alias
import (
"context"
"fmt"
stdpath "path"
"strings"
"github.com/alist-org/alist/v3/internal/fs"
"github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/internal/sign"
"github.com/alist-org/alist/v3/pkg/utils"
"github.com/alist-org/alist/v3/server/common"
)
func (d *Alias) listRoot() []model.Obj {
@ -76,6 +79,18 @@ func (d *Alias) list(ctx context.Context, dst, sub string) ([]model.Obj, error)
}
func (d *Alias) link(ctx context.Context, dst, sub string, args model.LinkArgs) (*model.Link, error) {
link, _, err := fs.Link(ctx, stdpath.Join(dst, sub), args)
reqPath := stdpath.Join(dst, sub)
storage, err := fs.GetStorage(reqPath)
if err != nil {
return nil, err
}
if common.ShouldProxy(storage, stdpath.Base(sub)) {
return &model.Link{
URL: fmt.Sprintf("/p%s?sign=%s",
utils.EncodePath(reqPath, true),
sign.Sign(reqPath)),
}, nil
}
link, _, err := fs.Link(ctx, reqPath, args)
return link, err
}