diff --git a/client.go b/client.go index 04399465..7428cdf6 100644 --- a/client.go +++ b/client.go @@ -22,8 +22,6 @@ import ( "github.com/pkg/sftp/v2/encoding/ssh/filexfer/openssh" "github.com/pkg/sftp/v2/internal/pragma" "github.com/pkg/sftp/v2/internal/sync" - - "golang.org/x/crypto/ssh" ) type result struct { @@ -579,9 +577,24 @@ func (cl *Client) getDataBuf(size int) []byte { return hint[:size] // trim our buffer to length, it might be longer than chunkSize. } +type SSHSession interface { + StdinPipe() (io.WriteCloser, error) + StdoutPipe() (io.Reader, error) + StderrPipe() (io.Reader, error) + + RequestSubsystem(subsystem string) error + + Close() error + Wait() error +} + +type SSHClient[Session SSHSession] interface { + NewSession() (Session, error) +} + // NewClient creates a new SFTP client on conn. // The context is only used during initialization, and handshake. -func NewClient(ctx context.Context, conn *ssh.Client, opts ...ClientOption) (*Client, error) { +func NewClient[CL SSHClient[SESS], SESS SSHSession](ctx context.Context, conn CL, opts ...ClientOption) (*Client, error) { s, err := conn.NewSession() if err != nil { return nil, err diff --git a/examples/go.mod b/examples/go.mod new file mode 100644 index 00000000..4de3f46e --- /dev/null +++ b/examples/go.mod @@ -0,0 +1,12 @@ +module github.com/pkg/sftp/v2/examples + +go 1.25 + +require ( + github.com/pkg/sftp/v2 v2.0.0-alpha + golang.org/x/crypto v0.36.0 +) + +require golang.org/x/sys v0.31.0 // indirect + +replace github.com/pkg/sftp/v2 => .. diff --git a/examples/go.sum b/examples/go.sum new file mode 100644 index 00000000..8a64a716 --- /dev/null +++ b/examples/go.sum @@ -0,0 +1,8 @@ +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= diff --git a/go.mod b/go.mod index 2f7fdbd2..c2aad17d 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,5 @@ go 1.25 require ( github.com/google/go-cmp v0.6.0 - golang.org/x/crypto v0.36.0 golang.org/x/sys v0.31.0 ) diff --git a/go.sum b/go.sum index 8a64a716..c578409b 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,4 @@ github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=