This repository has been archived on 2024-03-03. You can view files and clone it, but cannot push or open issues or pull requests.
adlin/pkg/minichecker/cmd/encode.go

84 lines
1.5 KiB
Go

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
}