Skip to content
This repository has been archived by the owner on Oct 22, 2021. It is now read-only.

Commit

Permalink
fix: Fix unsuitable behaviors (#32)
Browse files Browse the repository at this point in the history
* fix: Fix unsuitable behaviors

* fix: Integration test can't find free port

* fix: Bump go version to 1.17

* refactor: Remove unused packages
  • Loading branch information
npofsi authored Sep 28, 2021
1 parent 8794b8a commit e804387
Show file tree
Hide file tree
Showing 7 changed files with 28 additions and 31 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/beyondstorage/go-service-ftp
go 1.15

require (
github.com/beyondstorage/go-credential v0.0.0-20210804082910-7c63d94f2826
github.com/beyondstorage/go-credential v0.1.0
github.com/beyondstorage/go-endpoint v1.1.0
github.com/beyondstorage/go-integration-test/v4 v4.5.0
github.com/beyondstorage/go-storage/v4 v4.7.0
Expand Down
5 changes: 2 additions & 3 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
github.com/Xuanwo/templateutils v0.1.0 h1:WpkWOqQtIQ2vAIpJLa727DdN8WtxhUkkbDGa6UhntJY=
github.com/Xuanwo/templateutils v0.1.0/go.mod h1:OdE0DJ+CJxDBq6psX5DPV+gOZi8bhuHuVUpPCG++Wb8=
github.com/beyondstorage/go-credential v0.0.0-20210804082910-7c63d94f2826 h1:9cHyxD1JKUHWzWtDgaoLvzsR1JeEwguuL9IYSN7tk3k=
github.com/beyondstorage/go-credential v0.0.0-20210804082910-7c63d94f2826/go.mod h1:A7WYzKKk479gERCs5/5jWi0kNN24bqeMjD8IJik4JBA=
github.com/beyondstorage/go-credential v0.1.0 h1:B03n5H13ms1A8QceTJZe2HQoru+pO+6Dw9q7mN2FIWA=
github.com/beyondstorage/go-credential v0.1.0/go.mod h1:A7WYzKKk479gERCs5/5jWi0kNN24bqeMjD8IJik4JBA=
github.com/beyondstorage/go-endpoint v1.1.0 h1:cpjmQdrAMyaLoT161NIFU/eXcsuMI3xViycid5/mBZg=
github.com/beyondstorage/go-endpoint v1.1.0/go.mod h1:P2hknaGrziOJJKySv/XnAiVw/d3v12/LZu2gSxEx4nM=
github.com/beyondstorage/go-integration-test/v4 v4.5.0 h1:PMrB+aWd6yNwlrJSJOjqNLJtujsKderoSkG9/QOEQr0=
Expand Down Expand Up @@ -66,7 +66,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
Expand Down
6 changes: 4 additions & 2 deletions readdir.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@ func (s *Storage) listDirNext(ctx context.Context, page *types.ObjectPage) (err
return err
}
}
if input.started {
if !input.started {
input.counter, err = strconv.Atoi(input.continuationToken)
if err != nil {
input.counter = 0
}
input.started = true
}
n := len(input.objList)
input.continuationToken = fmt.Sprintf("%x", input.counter)
Expand All @@ -29,14 +30,15 @@ func (s *Storage) listDirNext(ctx context.Context, page *types.ObjectPage) (err
}

v := input.objList[input.counter]

obj, err := s.formatFileObject(v, input.rp)
if err != nil {
return err
}
obj.GetID()

page.Data = append(page.Data, obj)

input.counter++

return
}
39 changes: 17 additions & 22 deletions storage.go
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
package ftp

import (
"bytes"
"context"
"errors"
"io"
"net/textproto"
"path/filepath"

"github.com/jlaffaye/ftp"
mime "github.com/qingstor/go-mime"

"github.com/beyondstorage/go-storage/v4/pkg/iowrap"
"github.com/beyondstorage/go-storage/v4/services"
. "github.com/beyondstorage/go-storage/v4/types"
"github.com/jlaffaye/ftp"
mime "github.com/qingstor/go-mime"
"io"
"net/textproto"
"path/filepath"
)

type listDirInput struct {
rp string
dir string

rp string
dir string
started bool
continuationToken string
objList []*ftp.Entry
Expand All @@ -37,7 +35,7 @@ func (s *Storage) create(path string, opt pairStorageCreate) (o *Object) {
o = s.newObject(false)
o.Mode = ModeRead
}

path = filepath.ToSlash(path)
o.ID = filepath.Join(s.workDir, path)
o.Path = path
return o
Expand All @@ -49,7 +47,6 @@ func (s *Storage) createDir(ctx context.Context, path string) (o *Object, err er
if err != nil {
return nil, err
}

o = s.newObject(true)
o.ID = rp
o.Path = path
Expand Down Expand Up @@ -94,7 +91,6 @@ func (s *Storage) metadata(opt pairStorageMetadata) (meta *StorageMeta) {
meta = NewStorageMeta()
meta.WorkDir = s.workDir
return meta

}

func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairStorageRead) (n int64, err error) {
Expand All @@ -113,7 +109,6 @@ func (s *Storage) read(ctx context.Context, path string, w io.Writer, opt pairSt
err = closeErr
}
}()

if opt.HasSize {
return io.CopyN(w, r, opt.Size)
}
Expand Down Expand Up @@ -145,40 +140,40 @@ func (s *Storage) stat(ctx context.Context, path string, opt pairStorageStat) (o
o = s.newObject(true)
o.ID = rp
o.Path = path

switch fe.Type {
case ftp.EntryTypeFolder:
o.Mode |= ModeDir

return
case ftp.EntryTypeLink:
o.Mode |= ModeLink

target := fe.Target
if err != nil {
return nil, err
}
o.SetLinkTarget(target)
default:
o.Mode |= ModeRead | ModePage | ModeAppend

o.SetContentLength(int64(fe.Size))
o.SetLastModified(fe.Time)

if v := mime.DetectFilePath(path); v != "" {
o.SetContentType(v)
}
}

return o, nil
}

func (s *Storage) write(ctx context.Context, path string, r io.Reader, size int64, opt pairStorageWrite) (n int64, err error) {
lr := io.Reader(r)
rp := s.getAbsPath(path)
if size == 0 {
r = bytes.NewReader([]byte{})
}
if r == nil {
return 0, services.ErrObjectNotExist
}
lr := io.LimitReader(r, size)
if opt.HasIoCallback {
lr = iowrap.CallbackReader(lr, opt.IoCallback)
}
rp := s.getAbsPath(path)
err = s.connection.Stor(rp, lr)
if err != nil {
return
Expand Down
4 changes: 2 additions & 2 deletions tests/ftpserver.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@
],
"passive_transfer_port_range": {
"start": 2122,
"end": 2130
"end": 10000
}
}
}
1 change: 1 addition & 0 deletions tools.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//go:build tools
// +build tools

package ftp
Expand Down
2 changes: 1 addition & 1 deletion utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ func newStorager(pairs ...types.Pair) (store *Storage, err error) {
}

if opt.HasWorkDir {
store.workDir = opt.WorkDir
store.workDir = filepath.ToSlash(opt.WorkDir)
}

if opt.HasCredential {
Expand Down

0 comments on commit e804387

Please sign in to comment.