mirror of https://github.com/Xhofe/alist
				
				
				
			
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
| 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
 | |
| }
 |