package crypt | |
import ( | |
stdpath "path" | |
"path/filepath" | |
"strings" | |
"github.com/alist-org/alist/v3/internal/op" | |
) | |
// will give the best guessing based on the path | |
func guessPath(path string) (isFolder, secondTry bool) { | |
if strings.HasSuffix(path, "/") { | |
//confirmed a folder | |
return true, false | |
} | |
lastSlash := strings.LastIndex(path, "/") | |
if strings.Index(path[lastSlash:], ".") < 0 { | |
//no dot, try folder then try file | |
return true, true | |
} | |
return false, true | |
} | |
func (d *Crypt) getPathForRemote(path string, isFolder bool) (remoteFullPath string) { | |
if isFolder && !strings.HasSuffix(path, "/") { | |
path = path + "/" | |
} | |
dir, fileName := filepath.Split(path) | |
remoteDir := d.cipher.EncryptDirName(dir) | |
remoteFileName := "" | |
if len(strings.TrimSpace(fileName)) > 0 { | |
remoteFileName = d.cipher.EncryptFileName(fileName) | |
} | |
return stdpath.Join(d.RemotePath, remoteDir, remoteFileName) | |
} | |
// actual path is used for internal only. any link for user should come from remoteFullPath | |
func (d *Crypt) getActualPathForRemote(path string, isFolder bool) (string, error) { | |
_, remoteActualPath, err := op.GetStorageAndActualPath(d.getPathForRemote(path, isFolder)) | |
return remoteActualPath, err | |
} | |