diff --git a/asset.go b/asset.go index d82b503..97a8672 100644 --- a/asset.go +++ b/asset.go @@ -1,6 +1,8 @@ package pobj import ( + "fmt" + "github.com/charmbracelet/ssh" "github.com/picosh/send/send/utils" ) @@ -8,6 +10,7 @@ import ( type AssetNames interface { BucketName(sesh ssh.Session) (string, error) ObjectName(sesh ssh.Session, entry *utils.FileEntry) (string, error) + PrintObjectName(sesh ssh.Session, entry *utils.FileEntry, bucketName string) (string, error) } type AssetNamesBasic struct{} @@ -21,6 +24,13 @@ func (an *AssetNamesBasic) BucketName(sesh ssh.Session) (string, error) { func (an *AssetNamesBasic) ObjectName(sesh ssh.Session, entry *utils.FileEntry) (string, error) { return entry.Filepath, nil } +func (an *AssetNamesBasic) PrintObjectName(sesh ssh.Session, entry *utils.FileEntry, bucketName string) (string, error) { + objectName, err := an.ObjectName(sesh, entry) + if err != nil { + return "", err + } + return fmt.Sprintf("%s%s", bucketName, objectName), nil +} type AssetNamesForceBucket struct { *AssetNamesBasic diff --git a/handler.go b/handler.go index 3de1e6c..772dd54 100644 --- a/handler.go +++ b/handler.go @@ -135,8 +135,13 @@ func (h *UploadAssetHandler) List(s ssh.Session, fpath string, isDir bool, recur return fileList, err } - if cleanFilename == "" || cleanFilename == "." { - name := cleanFilename + fname, err := h.Cfg.AssetNames.ObjectName(s, &utils.FileEntry{Filepath: cleanFilename}) + if err != nil { + return fileList, err + } + + if fname == "" || fname == "." { + name := fname if name == "" { name = "/" } @@ -148,11 +153,12 @@ func (h *UploadAssetHandler) List(s ssh.Session, fpath string, isDir bool, recur fileList = append(fileList, info) } else { - if cleanFilename != "/" && isDir { - cleanFilename += "/" + name := fname + if name != "/" && isDir { + name += "/" } - foundList, err := h.Cfg.Storage.ListObjects(bucket, cleanFilename, recursive) + foundList, err := h.Cfg.Storage.ListObjects(bucket, name, recursive) if err != nil { return fileList, err } @@ -216,12 +222,10 @@ func (h *UploadAssetHandler) Write(s ssh.Session, entry *utils.FileEntry) (strin return "", err } - fpath, err := h.Cfg.AssetNames.ObjectName(s, entry) + url, err := h.Cfg.AssetNames.PrintObjectName(s, entry, bucket.Name) if err != nil { return "", err } - // TODO: make it the object store URL - url := fmt.Sprintf("%s%s", bucket.Name, fpath) return url, nil }