mirror of https://github.com/Xhofe/alist
fix: local relative path
parent
7c0b86a9cd
commit
74973bc5b5
|
@ -34,6 +34,12 @@ func (d *Driver) Init(ctx context.Context, account model.Account) error {
|
|||
err = errors.Errorf("root folder %s not exists", d.RootFolder)
|
||||
d.SetStatus(err.Error())
|
||||
} else {
|
||||
if !filepath.IsAbs(d.RootFolder) {
|
||||
d.RootFolder, err = filepath.Abs(d.RootFolder)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error while get abs path")
|
||||
}
|
||||
}
|
||||
d.SetStatus("OK")
|
||||
}
|
||||
operations.MustSaveDriverAccount(d)
|
||||
|
|
|
@ -2,6 +2,7 @@ package data
|
|||
|
||||
import (
|
||||
"context"
|
||||
"github.com/alist-org/alist/v3/internal/db"
|
||||
"github.com/alist-org/alist/v3/internal/model"
|
||||
"github.com/alist-org/alist/v3/internal/operations"
|
||||
log "github.com/sirupsen/logrus"
|
||||
|
@ -18,4 +19,17 @@ func initDevData() {
|
|||
if err != nil {
|
||||
log.Fatalf("failed to create account: %+v", err)
|
||||
}
|
||||
err = db.CreateUser(&model.User{
|
||||
Username: "Noah",
|
||||
Password: "hsu",
|
||||
BasePath: "/data",
|
||||
ReadOnly: false,
|
||||
Webdav: false,
|
||||
Role: 0,
|
||||
IgnoreHide: false,
|
||||
IgnorePassword: false,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("failed to create user: %+v", err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ import (
|
|||
)
|
||||
|
||||
// List files
|
||||
// TODO: sort
|
||||
func list(ctx context.Context, path string) ([]model.Obj, error) {
|
||||
meta := ctx.Value("meta").(*model.Meta)
|
||||
user := ctx.Value("user").(*model.User)
|
||||
|
|
|
@ -87,7 +87,7 @@ func Get(ctx context.Context, account driver.Driver, path string) (model.Obj, er
|
|||
}
|
||||
// not root folder
|
||||
dir, name := stdpath.Split(path)
|
||||
files, err := List(ctx, account, dir)
|
||||
files, err := List(ctx, account, utils.StandardizePath(dir))
|
||||
if err != nil {
|
||||
return nil, errors.WithMessage(err, "failed get parent list")
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package utils
|
|||
|
||||
import (
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
)
|
||||
|
||||
|
@ -10,11 +9,11 @@ import (
|
|||
func StandardizePath(path string) string {
|
||||
path = strings.TrimSuffix(path, "/")
|
||||
// windows abs path
|
||||
if filepath.IsAbs(path) && runtime.GOOS == "windows" {
|
||||
if filepath.IsAbs(path) {
|
||||
return path
|
||||
}
|
||||
// relative path with prefix '..'
|
||||
if strings.HasPrefix(path, "..") {
|
||||
if strings.HasPrefix(path, ".") {
|
||||
return path
|
||||
}
|
||||
if !strings.HasPrefix(path, "/") {
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"github.com/alist-org/alist/v3/pkg/utils"
|
||||
"github.com/alist-org/alist/v3/server/common"
|
||||
"github.com/gin-gonic/gin"
|
||||
stdpath "path"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
@ -36,6 +37,7 @@ func List(c *gin.Context) {
|
|||
}
|
||||
req.Validate()
|
||||
user := c.MustGet("user").(*model.User)
|
||||
req.Path = stdpath.Join(user.BasePath, req.Path)
|
||||
meta, _ := db.GetNearestMeta(req.Path)
|
||||
c.Set("meta", meta)
|
||||
if !canAccess(user, meta, req.Path, req.Password) {
|
||||
|
|
Loading…
Reference in New Issue