Skip to content

Commit 765cb24

Browse files
committed
Ioslate ssh/x/crypto with generics
1 parent 506912e commit 765cb24

5 files changed

Lines changed: 38 additions & 8 deletions

File tree

client.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import (
2222
"github.com/pkg/sftp/v2/encoding/ssh/filexfer/openssh"
2323
"github.com/pkg/sftp/v2/internal/pragma"
2424
"github.com/pkg/sftp/v2/internal/sync"
25-
26-
"golang.org/x/crypto/ssh"
2725
)
2826

2927
type result struct {
@@ -579,9 +577,24 @@ func (cl *Client) getDataBuf(size int) []byte {
579577
return hint[:size] // trim our buffer to length, it might be longer than chunkSize.
580578
}
581579

580+
type SSHSession interface {
581+
StdinPipe() (io.WriteCloser, error)
582+
StdoutPipe() (io.Reader, error)
583+
StderrPipe() (io.Reader, error)
584+
585+
RequestSubsystem(subsystem string) error
586+
587+
Close() error
588+
Wait() error
589+
}
590+
591+
type SSHClient[Session SSHSession] interface {
592+
NewSession() (Session, error)
593+
}
594+
582595
// NewClient creates a new SFTP client on conn.
583596
// The context is only used during initialization, and handshake.
584-
func NewClient(ctx context.Context, conn *ssh.Client, opts ...ClientOption) (*Client, error) {
597+
func NewClient[CL SSHClient[SESS], SESS SSHSession](ctx context.Context, conn CL, opts ...ClientOption) (*Client, error) {
585598
s, err := conn.NewSession()
586599
if err != nil {
587600
return nil, err

examples/go.mod

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module github.com/pkg/sftp/v2/examples
2+
3+
go 1.25
4+
5+
require (
6+
github.com/pkg/sftp/v2 v2.0.0-alpha
7+
golang.org/x/crypto v0.36.0
8+
)
9+
10+
require golang.org/x/sys v0.31.0 // indirect
11+
12+
replace github.com/pkg/sftp/v2/examples => .
13+
14+
replace github.com/pkg/sftp/v2 => ..

examples/go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
2+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
3+
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
4+
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
5+
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
6+
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
7+
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
8+
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,5 @@ go 1.25
44

55
require (
66
github.com/google/go-cmp v0.6.0
7-
golang.org/x/crypto v0.36.0
87
golang.org/x/sys v0.31.0
98
)

go.sum

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
22
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
3-
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
4-
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
53
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
64
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
7-
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
8-
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=

0 commit comments

Comments
 (0)