New package: minichecker
This commit is contained in:
parent
5d8bcd55ce
commit
ae3b2e6f3b
9 changed files with 852 additions and 0 deletions
83
pkg/minichecker/cmd/encode.go
Normal file
83
pkg/minichecker/cmd/encode.go
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/ed25519"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
Login string
|
||||
KeySign string
|
||||
target string
|
||||
)
|
||||
|
||||
func getCollectorPublicKey() (key []byte, err error) {
|
||||
var resp *http.Response
|
||||
resp, err = http.Get(target + "/api/collector_info")
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
|
||||
rd := base64.NewDecoder(base64.StdEncoding, json.NewDecoder(resp.Body).Buffered())
|
||||
return ioutil.ReadAll(rd)
|
||||
}
|
||||
|
||||
type SendMeta struct {
|
||||
Time time.Time `json:"time"`
|
||||
Login string `json:"login"`
|
||||
Test string `json:"test,omitempty"`
|
||||
}
|
||||
|
||||
type SendContent struct {
|
||||
Meta []byte `json:"meta"`
|
||||
Data []byte `json:"data"`
|
||||
Sign []byte `json:"sign"`
|
||||
Key []byte `json:"key"`
|
||||
KeySign string `json:"keysign"`
|
||||
}
|
||||
|
||||
func encodeData(meta SendMeta, v interface{}) (data SendContent, err error) {
|
||||
if meta.Time.IsZero() {
|
||||
meta.Time = time.Now()
|
||||
}
|
||||
var b []byte
|
||||
b, err = json.Marshal(meta)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data.Meta = []byte(base64.StdEncoding.EncodeToString(b))
|
||||
|
||||
b, err = json.Marshal(v)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
data.Data = []byte(base64.StdEncoding.EncodeToString(b))
|
||||
|
||||
data.Sign = ed25519.Sign(myprivkey, append(data.Meta, data.Data...))
|
||||
data.Key = myprivkey.Public().(ed25519.PublicKey)
|
||||
data.KeySign = KeySign
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func sendData(data SendContent) (err error) {
|
||||
b := new(bytes.Buffer)
|
||||
json.NewEncoder(b).Encode(data)
|
||||
|
||||
var resp *http.Response
|
||||
resp, err = http.Post(target+"/remote", "application/json", b)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
resp.Body.Close()
|
||||
|
||||
return
|
||||
}
|
||||
Reference in a new issue