Skip to content

Commit

Permalink
Merge pull request #1 from picosh/am/sshfs
Browse files Browse the repository at this point in the history
Added support for sshfs
  • Loading branch information
antoniomika authored May 29, 2024
2 parents 2071618 + aaa43c2 commit 7b5398c
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 38 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/picosh/pobj

go 1.21.9
go 1.22

require (
github.com/charmbracelet/ssh v0.0.0-20230822194956-1a051f898e09
Expand Down
59 changes: 32 additions & 27 deletions handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,18 @@ func (h *UploadAssetHandler) GetLogger() *slog.Logger {
return h.Cfg.Logger
}

func (h *UploadAssetHandler) Delete(s ssh.Session, entry *utils.FileEntry) error {
bucket, err := getBucket(s.Context())
if err != nil {
h.Cfg.Logger.Error(err.Error())
return err
}

objectFileName := h.Cfg.AssetNames.ObjectName(entry)

return h.Cfg.Storage.DeleteObject(bucket, objectFileName)
}

func (h *UploadAssetHandler) Read(s ssh.Session, entry *utils.FileEntry) (os.FileInfo, utils.ReaderAtCloser, error) {
fileInfo := &utils.VirtualFile{
FName: filepath.Base(entry.Filepath),
Expand Down Expand Up @@ -196,33 +208,26 @@ func (h *UploadAssetHandler) writeAsset(data *FileData) error {
}

objectFileName := h.Cfg.AssetNames.ObjectName(data.FileEntry)
if data.Size == 0 {
err = h.Cfg.Storage.DeleteObject(data.Bucket, objectFileName)
if err != nil {
return err
}
} else {
reader := bytes.NewReader(data.Text)

h.Cfg.Logger.Info(
"uploading file to bucket",
"user",
data.User,
"bucket",
data.Bucket.Name,
"object",
objectFileName,
)

_, err = h.Cfg.Storage.PutObject(
data.Bucket,
objectFileName,
utils.NopReaderAtCloser(reader),
data.FileEntry,
)
if err != nil {
return err
}
reader := bytes.NewReader(data.Text)

h.Cfg.Logger.Info(
"uploading file to bucket",
"user",
data.User,
"bucket",
data.Bucket.Name,
"object",
objectFileName,
)

_, err = h.Cfg.Storage.PutObject(
data.Bucket,
objectFileName,
utils.NopReaderAtCloser(reader),
data.FileEntry,
)
if err != nil {
return err
}

return nil
Expand Down
22 changes: 12 additions & 10 deletions storage/minio.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,17 +118,15 @@ func (s *StorageMinio) ListObjects(bucket Bucket, dir string, recursive bool) ([

resolved := strings.TrimPrefix(dir, "/")

opts := minio.ListObjectsOptions{Prefix: resolved, Recursive: recursive}
opts := minio.ListObjectsOptions{Prefix: resolved, Recursive: recursive, WithMetadata: true}
for obj := range s.Client.ListObjects(context.Background(), bucket.Name, opts) {
if obj.Err != nil {
return fileList, obj.Err
}
isDir := false
if obj.Size == 0 {
isDir = true
}

modTime := time.Time{}
isDir := strings.HasSuffix(obj.Key, string(os.PathSeparator))

modTime := obj.LastModified

if mtime, ok := obj.UserMetadata["Mtime"]; ok {
mtimeUnix, err := strconv.Atoi(mtime)
Expand Down Expand Up @@ -161,6 +159,8 @@ func (s *StorageMinio) GetObject(bucket Bucket, fpath string) (utils.ReaderAtClo
return nil, 0, modTime, err
}

modTime = info.LastModified

obj, err := s.Client.GetObject(context.Background(), bucket.Name, fpath, minio.GetObjectOptions{})
if err != nil {
return nil, 0, modTime, err
Expand All @@ -177,12 +177,14 @@ func (s *StorageMinio) GetObject(bucket Bucket, fpath string) (utils.ReaderAtClo
}

func (s *StorageMinio) PutObject(bucket Bucket, fpath string, contents utils.ReaderAtCloser, entry *utils.FileEntry) (string, error) {
opts := minio.PutObjectOptions{}
opts := minio.PutObjectOptions{
UserMetadata: map[string]string{
"Mtime": fmt.Sprint(time.Now().Unix()),
},
}

if entry.Mtime > 0 {
opts.UserMetadata = map[string]string{
"Mtime": fmt.Sprint(entry.Mtime),
}
opts.UserMetadata["Mtime"] = fmt.Sprint(entry.Mtime)
}

info, err := s.Client.PutObject(context.TODO(), bucket.Name, fpath, contents, -1, opts)
Expand Down

0 comments on commit 7b5398c

Please sign in to comment.