@@ -37,11 +37,11 @@ var (
37
37
38
38
type (
39
39
Client interface {
40
- Connect (* domain.AgentInit ) error
40
+ Connect (* domain.AgentInit ) ( * domain. AgentConfig , error )
41
41
ReConn () <- chan struct {}
42
42
43
43
UploadLog (filePath string ) error
44
- ReportProfile (* domain.Resource ) error
44
+ ReportProfile (profile * domain.AgentProfile ) error
45
45
46
46
GetCmdIn () <- chan []byte
47
47
SendCmdOut (out domain.CmdOut ) error
@@ -81,10 +81,10 @@ type (
81
81
}
82
82
)
83
83
84
- func (c * client ) Connect (init * domain.AgentInit ) error {
84
+ func (c * client ) Connect (init * domain.AgentInit ) ( * domain. AgentConfig , error ) {
85
85
u , err := url .Parse (c .server )
86
86
if err != nil {
87
- return err
87
+ return nil , err
88
88
}
89
89
90
90
u .Scheme = "ws"
@@ -103,37 +103,33 @@ func (c *client) Connect(init *domain.AgentInit) error {
103
103
// build connection
104
104
c .conn , _ , err = dialer .Dial (u .String (), header )
105
105
if err != nil {
106
- return err
106
+ return nil , err
107
107
}
108
108
109
109
c .conn .SetReadLimit (bufferSize )
110
110
c .setConnState (connStateConnected )
111
111
112
112
// send init connect event
113
- _ , err = c .sendMessageWithResp (eventConnect , init )
113
+ resp := & domain.AgentConfigResponse {}
114
+ err = c .sendMessageWithResp (eventConnect , init , resp )
114
115
if err != nil {
115
- return err
116
+ return nil , err
116
117
}
117
118
118
119
// start to read message
119
120
go c .readMessage ()
120
121
go c .consumePendingMessage ()
121
122
122
123
util .LogInfo ("Agent is connected to server %s" , c .server )
123
- return nil
124
+ return resp . Data , nil
124
125
}
125
126
126
127
func (c * client ) ReConn () <- chan struct {} {
127
128
return c .reConn
128
129
}
129
130
130
- func (c * client ) ReportProfile (r * domain.Resource ) (err error ) {
131
- body , err := json .Marshal (r )
132
- if err != nil {
133
- return
134
- }
135
-
136
- _ , err = c .send ("POST" , "profile" , util .HttpMimeJson , bytes .NewBuffer (body ))
131
+ func (c * client ) ReportProfile (r * domain.AgentProfile ) (err error ) {
132
+ _ = c .sendMessageWithJson (eventProfile , r )
137
133
return
138
134
}
139
135
@@ -291,25 +287,39 @@ func (c *client) GetSecret(name string) (secret domain.Secret, err error) {
291
287
out , err := ioutil .ReadAll (resp .Body )
292
288
util .PanicIfErr (err )
293
289
294
- base := & domain.SecretBase {}
295
- err = json .Unmarshal (out , base )
290
+ secretResp , err := c .parseResponse (out , & domain.SecretResponse {})
291
+ util .PanicIfErr (err )
292
+
293
+ body := secretResp .(* domain.SecretResponse )
294
+ util .PanicIfNil (body .Data , "secret data" )
295
+
296
+ base := body .Data
297
+ baseRaw := & domain.SecretResponseRaw {}
298
+ err = json .Unmarshal (out , baseRaw )
296
299
util .PanicIfErr (err )
297
300
298
301
if base .Category == domain .SecretCategoryAuth {
299
302
auth := & domain.AuthSecret {}
300
- err = json .Unmarshal (out , auth )
303
+ err = json .Unmarshal (baseRaw . Raw , auth )
301
304
util .PanicIfErr (err )
302
305
return auth , nil
303
306
}
304
307
305
308
if base .Category == domain .SecretCategorySshRsa {
306
309
rsa := & domain.RSASecret {}
307
- err = json .Unmarshal (out , rsa )
310
+ err = json .Unmarshal (baseRaw . Raw , rsa )
308
311
util .PanicIfErr (err )
309
312
return rsa , nil
310
313
}
311
314
312
- return nil , fmt .Errorf ("unsupport secret type" )
315
+ if base .Category == domain .SecretCategoryToken {
316
+ token := & domain.TokenSecret {}
317
+ err = json .Unmarshal (baseRaw .Raw , token )
318
+ util .PanicIfErr (err )
319
+ return token , nil
320
+ }
321
+
322
+ return nil , fmt .Errorf ("secret '%s' category '%s' is unsupported" , base .GetName (), base .GetCategory ())
313
323
}
314
324
315
325
func (c * client ) Close () {
@@ -454,7 +464,7 @@ func (c *client) sendMessageWithBytes(event string, body []byte) error {
454
464
return nil
455
465
}
456
466
457
- func (c * client ) sendMessageWithResp (event string , msg interface {}) ( resp * domain.Response , out error ) {
467
+ func (c * client ) sendMessageWithResp (event string , msg interface {}, resp domain.ResponseMessage ) ( out error ) {
458
468
defer util .RecoverPanic (func (e error ) {
459
469
out = e
460
470
})
@@ -468,10 +478,8 @@ func (c *client) sendMessageWithResp(event string, msg interface{}) (resp *domai
468
478
_ , data , err := c .conn .ReadMessage ()
469
479
util .PanicIfErr (err )
470
480
471
- message , err : = c .parseResponse (data , & domain. Response {} )
481
+ _ , err = c .parseResponse (data , resp )
472
482
util .PanicIfErr (err )
473
-
474
- resp = message .(* domain.Response )
475
483
return
476
484
}
477
485
0 commit comments