validate tags

This commit is contained in:
Anton Kaliaev 2017-11-15 14:10:54 -06:00
parent a52cdbfe43
commit acae38ab9e
No known key found for this signature in database
GPG Key ID: 7B6881D965918214
3 changed files with 30 additions and 22 deletions

View File

@ -69,16 +69,32 @@ func execBlockOnProxyApp(txEventPublisher types.TxEventPublisher, proxyAppConn p
// NOTE: if we count we can access the tx from the block instead of
// pulling it from the req
event := types.EventDataTx{
tx := types.Tx(req.GetDeliverTx().Tx)
tags := make(map[string]interface{})
for _, t := range txResult.Tags {
// basic validation
if t.Key == "" {
logger.Info("Got tag with an empty key (skipping)", "tag", t, "tx", tx)
continue
}
if t.ValueString != "" {
tags[t.Key] = t.ValueString
} else {
tags[t.Key] = t.ValueInt
}
}
txEventPublisher.PublishEventTx(types.EventDataTx{
Height: block.Height,
Tx: types.Tx(req.GetDeliverTx().Tx),
Tx: tx,
Data: txResult.Data,
Code: txResult.Code,
Log: txResult.Log,
Tags: txResult.Tags,
Tags: tags,
Error: txError,
}
txEventPublisher.PublishEventTx(event)
})
}
}
proxyAppConn.SetResponseCallback(proxyCb)

View File

@ -82,16 +82,8 @@ func (b *EventBus) PublishEventVote(vote EventDataVote) error {
func (b *EventBus) PublishEventTx(tx EventDataTx) error {
// no explicit deadline for publishing events
ctx := context.Background()
tags := make(map[string]interface{})
for _, t := range tx.Tags {
// TODO [@melekes]: validate, but where?
if t.ValueString != "" {
tags[t.Key] = t.ValueString
} else {
tags[t.Key] = t.ValueInt
}
}
// predefined tags should come last
tags := tx.Tags
// add predefined tags (they should overwrite any existing tags)
tags[EventTypeKey] = EventTx
tags[TxHashKey] = fmt.Sprintf("%X", tx.Tx.Hash())
b.pubsub.PublishWithTags(ctx, TMEventData{tx}, tags)

View File

@ -110,13 +110,13 @@ type EventDataNewBlockHeader struct {
// All txs fire EventDataTx
type EventDataTx struct {
Height int `json:"height"`
Tx Tx `json:"tx"`
Data data.Bytes `json:"data"`
Log string `json:"log"`
Code abci.CodeType `json:"code"`
Tags []*abci.KVPair `json:"tags"`
Error string `json:"error"` // this is redundant information for now
Height int `json:"height"`
Tx Tx `json:"tx"`
Data data.Bytes `json:"data"`
Log string `json:"log"`
Code abci.CodeType `json:"code"`
Tags map[string]interface{} `json:"tags"`
Error string `json:"error"` // this is redundant information for now
}
type EventDataProposalHeartbeat struct {