@@ -43,18 +43,19 @@ var (
43
43
)
44
44
45
45
var (
46
- ErrWorkspaceNotFound = NewSSHError ("WS_NOTFOUND" , "not found workspace" )
47
- ErrWorkspaceIDInvalid = NewSSHError ("WS_ID_INVALID" , "workspace id invalid" )
46
+ ErrWorkspaceNotFound = NewSSHErrorWithError ("WS_NOTFOUND" , "not found workspace" , ssh . ErrDenied )
47
+ ErrWorkspaceIDInvalid = NewSSHErrorWithError ("WS_ID_INVALID" , "workspace id invalid" , ssh . ErrDenied )
48
48
ErrAuthFailed = NewSSHError ("AUTH_FAILED" , "auth failed" )
49
- ErrUsernameFormat = NewSSHError ("USER_FORMAT" , "username format is not correct" )
50
- ErrMissPrivateKey = NewSSHError ("MISS_KEY" , "missing privateKey" )
49
+ ErrUsernameFormat = NewSSHErrorWithError ("USER_FORMAT" , "username format is not correct" , ssh . ErrDenied )
50
+ ErrMissPrivateKey = NewSSHErrorWithError ("MISS_KEY" , "missing privateKey" , ssh . ErrDenied )
51
51
ErrConnFailed = NewSSHError ("CONN_FAILED" , "cannot to connect with workspace" )
52
52
ErrCreateSSHKey = NewSSHError ("CREATE_KEY_FAILED" , "cannot create private pair in workspace" )
53
53
)
54
54
55
55
type SSHError struct {
56
56
shortName string
57
57
description string
58
+ err error
58
59
}
59
60
60
61
func (e SSHError ) Error () string {
@@ -64,11 +65,18 @@ func (e SSHError) Error() string {
64
65
func (e SSHError ) ShortName () string {
65
66
return e .shortName
66
67
}
68
+ func (e SSHError ) Unwrap () error {
69
+ return e .err
70
+ }
67
71
68
72
func NewSSHError (shortName string , description string ) SSHError {
69
73
return SSHError {shortName : shortName , description : description }
70
74
}
71
75
76
+ func NewSSHErrorWithError (shortName string , description string , err error ) SSHError {
77
+ return SSHError {shortName : shortName , description : description , err : err }
78
+ }
79
+
72
80
type Session struct {
73
81
Conn * ssh.ServerConn
74
82
@@ -110,15 +118,15 @@ func New(signers []ssh.Signer, workspaceInfoProvider p.WorkspaceInfoProvider, he
110
118
NoClientAuth : true ,
111
119
NoClientAuthCallback : func (conn ssh.ConnMetadata ) (* ssh.Permissions , error ) {
112
120
args := strings .Split (conn .User (), "#" )
113
- // NoClientAuthCallback only support workspaceId#ownerToken
114
- if len (args ) != 2 {
115
- return nil , ssh .ErrNoAuth
116
- }
117
121
workspaceId := args [0 ]
118
122
wsInfo , err := server .GetWorkspaceInfo (workspaceId )
119
123
if err != nil {
120
124
return nil , err
121
125
}
126
+ // NoClientAuthCallback only support workspaceId#ownerToken
127
+ if len (args ) != 2 {
128
+ return nil , ssh .ErrNoAuth
129
+ }
122
130
if wsInfo .Auth .OwnerToken != args [1 ] {
123
131
return nil , ssh .ErrNoAuth
124
132
}
0 commit comments