57 lines
1.1 KiB
Go
57 lines
1.1 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"cloud.o-forge.io/core/oc-lib/tools"
|
|
"github.com/libp2p/go-libp2p/core/crypto"
|
|
)
|
|
|
|
type Event struct {
|
|
Type string `json:"type"`
|
|
From string `json:"from"` // peerID
|
|
|
|
User string
|
|
|
|
DataType int64 `json:"datatype"`
|
|
Timestamp int64 `json:"ts"`
|
|
Payload []byte `json:"payload"`
|
|
Signature []byte `json:"sig"`
|
|
}
|
|
|
|
func NewEvent(name string, from string, dt *tools.DataType, user string, payload []byte, priv crypto.PrivKey) *Event {
|
|
evt := &Event{
|
|
Type: name,
|
|
From: from,
|
|
User: user,
|
|
Timestamp: time.Now().Unix(),
|
|
Payload: payload,
|
|
}
|
|
if dt != nil {
|
|
evt.DataType = int64(dt.EnumIndex())
|
|
} else {
|
|
evt.DataType = -1
|
|
}
|
|
|
|
body, _ := json.Marshal(evt)
|
|
sig, _ := priv.Sign(body)
|
|
evt.Signature = sig
|
|
return evt
|
|
}
|
|
|
|
func (e *Event) RawEvent() *Event {
|
|
return &Event{
|
|
Type: e.Type,
|
|
From: e.From,
|
|
User: e.User,
|
|
DataType: e.DataType,
|
|
Timestamp: e.Timestamp,
|
|
Payload: e.Payload,
|
|
}
|
|
}
|
|
|
|
func (e *Event) ToRawByte() ([]byte, error) {
|
|
return json.Marshal(e.RawEvent())
|
|
}
|