]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/file_path.go
Account for the root
[rbdr/mobius] / hotline / file_path.go
index 97ce417e484550202cfb1b4da284ce57ef7c2ef7..bb6bbd312b62864591b893774930d23da5b19227 100644 (file)
@@ -5,6 +5,7 @@ import (
        "bytes"
        "encoding/binary"
        "errors"
+       "fmt"
        "io"
        "path/filepath"
        "strings"
@@ -97,11 +98,20 @@ func (fp *FilePath) IsUploadDir() bool {
        return strings.Contains(strings.ToLower(string(fp.Items[fp.Len()-1].Name)), "upload")
 }
 
+func (fp *FilePath) IsUserDir() bool {
+    if fp.Len() == 0 {
+        return false
+    }
+
+    return strings.HasPrefix(string(fp.Items[0].Name), "~")
+}
+
+
 func (fp *FilePath) Len() uint16 {
        return binary.BigEndian.Uint16(fp.ItemCount[:])
 }
 
-func readPath(fileRoot string, filePath, fileName []byte) (fullPath string, err error) {
+func ReadPath(fileRoot string, filePath, fileName []byte) (fullPath string, err error) {
        var fp FilePath
        if filePath != nil {
                if _, err = fp.Write(filePath); err != nil {
@@ -119,6 +129,9 @@ func readPath(fileRoot string, filePath, fileName []byte) (fullPath string, err
                subPath,
                filepath.Join("/", string(fileName)),
        )
-
+       fullPath, err = txtDecoder.String(fullPath)
+       if err != nil {
+               return "", fmt.Errorf("invalid filepath encoding: %w", err)
+       }
        return fullPath, nil
 }