Use PrepareAs

This commit is contained in:
Neil Alexander 2020-03-11 11:04:38 +00:00
parent e2803ab4a6
commit ba7f0c44a0
10 changed files with 28 additions and 67 deletions

View file

@ -94,16 +94,7 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
return nil return nil
} }
// TODO: Is this trusted here? ev := output.NewRoomEvent.Event
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(output.NewRoomEvent.Event, false, output.NewRoomEvent.RoomVersion)
if err != nil {
log.WithError(err).WithField("roomversion", output.NewRoomEvent.RoomVersion).Errorf(
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(output.NewRoomEvent.Event),
)
return err
}
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"event_id": ev.EventID(), "event_id": ev.EventID(),
"room_id": ev.RoomID(), "room_id": ev.RoomID(),

View file

@ -84,16 +84,7 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
return nil return nil
} }
// TODO: Is this trusted here? ev := output.NewRoomEvent.Event
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(output.NewRoomEvent.Event, false, output.NewRoomEvent.RoomVersion)
if err != nil {
log.WithError(err).WithField("roomversion", output.NewRoomEvent.RoomVersion).Errorf(
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(output.NewRoomEvent.Event),
)
return err
}
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"event_id": ev.EventID(), "event_id": ev.EventID(),
"room_id": ev.RoomID(), "room_id": ev.RoomID(),

View file

@ -86,12 +86,7 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
return nil return nil
} }
// TODO: Is this trusted here? ev := output.NewRoomEvent.Event
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(output.NewRoomEvent.Event, false, output.NewRoomEvent.RoomVersion)
if err != nil {
return err
}
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"event_id": ev.EventID(), "event_id": ev.EventID(),
"room_id": ev.RoomID(), "room_id": ev.RoomID(),
@ -115,12 +110,7 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
// processMessage updates the list of currently joined hosts in the room // processMessage updates the list of currently joined hosts in the room
// and then sends the event to the hosts that were joined before the event. // and then sends the event to the hosts that were joined before the event.
func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent) error { func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent) error {
// TODO: Is this trusted here? ev := ore.Event
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(ore.Event, false, ore.RoomVersion)
if err != nil {
return err
}
addsStateEvents, err := s.lookupStateEvents(ore.AddsStateEventIDs, ev) addsStateEvents, err := s.lookupStateEvents(ore.AddsStateEventIDs, ev)
if err != nil { if err != nil {
return err return err
@ -183,15 +173,7 @@ func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent) err
func (s *OutputRoomEventConsumer) joinedHostsAtEvent( func (s *OutputRoomEventConsumer) joinedHostsAtEvent(
ore api.OutputNewRoomEvent, oldJoinedHosts []types.JoinedHost, ore api.OutputNewRoomEvent, oldJoinedHosts []types.JoinedHost,
) ([]gomatrixserverlib.ServerName, error) { ) ([]gomatrixserverlib.ServerName, error) {
// TODO: Is this trusted here? ev := ore.Event
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(ore.Event, false, ore.RoomVersion)
if err != nil {
log.WithError(err).WithField("roomversion", ore.RoomVersion).Errorf(
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(ore.Event),
)
return nil, err
}
// Combine the delta into a single delta so that the adds and removes can // Combine the delta into a single delta so that the adds and removes can
// cancel each other out. This should reduce the number of times we need // cancel each other out. This should reduce the number of times we need

2
go.mod
View file

@ -8,7 +8,7 @@ require (
github.com/matrix-org/go-http-js-libp2p v0.0.0-20200304160008-4ec1129a00c4 github.com/matrix-org/go-http-js-libp2p v0.0.0-20200304160008-4ec1129a00c4
github.com/matrix-org/go-sqlite3-js v0.0.0-20200304164012-aa524245b658 github.com/matrix-org/go-sqlite3-js v0.0.0-20200304164012-aa524245b658
github.com/matrix-org/gomatrix v0.0.0-20190528120928-7df988a63f26 github.com/matrix-org/gomatrix v0.0.0-20190528120928-7df988a63f26
github.com/matrix-org/gomatrixserverlib v0.0.0-20200310154032-5ca7e25c30ed github.com/matrix-org/gomatrixserverlib v0.0.0-20200311110021-ac84b78b81be
github.com/matrix-org/naffka v0.0.0-20200127221512-0716baaabaf1 github.com/matrix-org/naffka v0.0.0-20200127221512-0716baaabaf1
github.com/matrix-org/util v0.0.0-20190711121626-527ce5ddefc7 github.com/matrix-org/util v0.0.0-20190711121626-527ce5ddefc7
github.com/mattn/go-sqlite3 v2.0.2+incompatible github.com/mattn/go-sqlite3 v2.0.2+incompatible

2
go.sum
View file

@ -94,6 +94,8 @@ github.com/matrix-org/gomatrixserverlib v0.0.0-20200310151755-d60e4e8147d2 h1:1k
github.com/matrix-org/gomatrixserverlib v0.0.0-20200310151755-d60e4e8147d2/go.mod h1:FsKa2pWE/bpQql9H7U4boOPXFoJX/QcqaZZ6ijLkaZI= github.com/matrix-org/gomatrixserverlib v0.0.0-20200310151755-d60e4e8147d2/go.mod h1:FsKa2pWE/bpQql9H7U4boOPXFoJX/QcqaZZ6ijLkaZI=
github.com/matrix-org/gomatrixserverlib v0.0.0-20200310154032-5ca7e25c30ed h1:USEw1Rw391AzQBo/QgNyEY1nSAkwkuMoQ9LNTwGaKC0= github.com/matrix-org/gomatrixserverlib v0.0.0-20200310154032-5ca7e25c30ed h1:USEw1Rw391AzQBo/QgNyEY1nSAkwkuMoQ9LNTwGaKC0=
github.com/matrix-org/gomatrixserverlib v0.0.0-20200310154032-5ca7e25c30ed/go.mod h1:FsKa2pWE/bpQql9H7U4boOPXFoJX/QcqaZZ6ijLkaZI= github.com/matrix-org/gomatrixserverlib v0.0.0-20200310154032-5ca7e25c30ed/go.mod h1:FsKa2pWE/bpQql9H7U4boOPXFoJX/QcqaZZ6ijLkaZI=
github.com/matrix-org/gomatrixserverlib v0.0.0-20200311110021-ac84b78b81be h1:4ZM5Ps50b7Ku75VzML6+3fCyuw0NSuDJi/kYjB+UScI=
github.com/matrix-org/gomatrixserverlib v0.0.0-20200311110021-ac84b78b81be/go.mod h1:FsKa2pWE/bpQql9H7U4boOPXFoJX/QcqaZZ6ijLkaZI=
github.com/matrix-org/naffka v0.0.0-20200127221512-0716baaabaf1 h1:osLoFdOy+ChQqVUn2PeTDETFftVkl4w9t/OW18g3lnk= github.com/matrix-org/naffka v0.0.0-20200127221512-0716baaabaf1 h1:osLoFdOy+ChQqVUn2PeTDETFftVkl4w9t/OW18g3lnk=
github.com/matrix-org/naffka v0.0.0-20200127221512-0716baaabaf1/go.mod h1:cXoYQIENbdWIQHt1SyCo6Bl3C3raHwJ0wgVrXHSqf+A= github.com/matrix-org/naffka v0.0.0-20200127221512-0716baaabaf1/go.mod h1:cXoYQIENbdWIQHt1SyCo6Bl3C3raHwJ0wgVrXHSqf+A=
github.com/matrix-org/util v0.0.0-20171127121716-2e2df66af2f5 h1:W7l5CP4V7wPyPb4tYE11dbmeAOwtFQBTW0rf4OonOS8= github.com/matrix-org/util v0.0.0-20171127121716-2e2df66af2f5 h1:W7l5CP4V7wPyPb4tYE11dbmeAOwtFQBTW0rf4OonOS8=

View file

@ -22,7 +22,6 @@ import (
"github.com/matrix-org/dendrite/common/config" "github.com/matrix-org/dendrite/common/config"
"github.com/matrix-org/dendrite/publicroomsapi/storage" "github.com/matrix-org/dendrite/publicroomsapi/storage"
"github.com/matrix-org/dendrite/roomserver/api" "github.com/matrix-org/dendrite/roomserver/api"
"github.com/matrix-org/gomatrixserverlib"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
sarama "gopkg.in/Shopify/sarama.v1" sarama "gopkg.in/Shopify/sarama.v1"
) )
@ -78,16 +77,20 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
return nil return nil
} }
// TODO: Is this trusted here? // Get the room version of the room
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(output.NewRoomEvent.Event, false, output.NewRoomEvent.RoomVersion) vQueryReq := api.QueryRoomVersionForRoomIDRequest{RoomID: output.NewRoomEvent.Event.RoomID()}
if err != nil { vQueryRes := api.QueryRoomVersionForRoomIDResponse{}
log.WithError(err).WithField("roomversion", output.NewRoomEvent.RoomVersion).Errorf( if err := s.query.QueryRoomVersionForRoomID(context.Background(), &vQueryReq, &vQueryRes); err != nil {
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(output.NewRoomEvent.Event),
)
return err return err
} }
if err := output.NewRoomEvent.Event.PrepareAs(vQueryRes.RoomVersion); err != nil {
log.WithFields(log.Fields{
"room_version": vQueryRes.RoomVersion,
}).WithError(err).Errorf("can't prepare event to version")
}
ev := output.NewRoomEvent.Event
log.WithFields(log.Fields{ log.WithFields(log.Fields{
"event_id": ev.EventID(), "event_id": ev.EventID(),
"room_id": ev.RoomID(), "room_id": ev.RoomID(),

View file

@ -54,7 +54,7 @@ type OutputEvent struct {
// prev_events. // prev_events.
type OutputNewRoomEvent struct { type OutputNewRoomEvent struct {
// The event. // The event.
Event []byte `json:"event"` Event gomatrixserverlib.Event `json:"event"`
// The event version. // The event version.
RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"` RoomVersion gomatrixserverlib.RoomVersion `json:"room_version"`
// The latest events in the room after this event. // The latest events in the room after this event.

View file

@ -262,18 +262,13 @@ func (u *latestEventsUpdater) makeOutputNewRoomEvent() (*api.OutputEvent, error)
latestEventIDs[i] = u.latest[i].EventID latestEventIDs[i] = u.latest[i].EventID
} }
eventJSON, err := u.event.MarshalJSON()
if err != nil {
return nil, err
}
roomVersion, err := u.db.GetRoomVersionForRoom(context.Background(), u.roomNID) roomVersion, err := u.db.GetRoomVersionForRoom(context.Background(), u.roomNID)
if err != nil { if err != nil {
return nil, err return nil, err
} }
ore := api.OutputNewRoomEvent{ ore := api.OutputNewRoomEvent{
Event: eventJSON, Event: u.event,
RoomVersion: roomVersion, RoomVersion: roomVersion,
LastSentEventID: u.lastEventIDSent, LastSentEventID: u.lastEventIDSent,
LatestEventIDs: latestEventIDs, LatestEventIDs: latestEventIDs,

View file

@ -99,19 +99,16 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
func (s *OutputRoomEventConsumer) onNewRoomEvent( func (s *OutputRoomEventConsumer) onNewRoomEvent(
ctx context.Context, msg api.OutputNewRoomEvent, ctx context.Context, msg api.OutputNewRoomEvent,
) error { ) error {
ev := msg.Event
roomVersion := gomatrixserverlib.RoomVersionV1 roomVersion := gomatrixserverlib.RoomVersionV1
if rv := gjson.Get(string(msg.Event), "content.room_version"); rv.Exists() { if rv := gjson.Get(string(ev.Content()), "room_version"); rv.Exists() {
roomVersion = gomatrixserverlib.RoomVersion(rv.String()) roomVersion = gomatrixserverlib.RoomVersion(rv.String())
} }
// TODO: Is this trusted here? if err := msg.Event.PrepareAs(roomVersion); err != nil {
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(msg.Event, false, roomVersion) log.WithFields(log.Fields{
if err != nil { "room_version": roomVersion,
log.WithError(err).WithField("roomversion", msg.RoomVersion).Errorf( }).WithError(err).Errorf("can't prepare event to version")
"roomserver output log: couldn't create event from trusted JSON (%d bytes)",
len(msg.Event),
)
return err
} }
log.WithFields(log.Fields{ log.WithFields(log.Fields{

View file

@ -28,7 +28,7 @@ func (s *roomVersionStatements) prepare(db *sql.DB) (err error) {
func (s *roomVersionStatements) selectRoomVersion( func (s *roomVersionStatements) selectRoomVersion(
ctx context.Context, txn *sql.Tx, roomID string, ctx context.Context, txn *sql.Tx, roomID string,
) (roomVersion gomatrixserverlib.RoomVersion, err error) { ) (roomVersion gomatrixserverlib.RoomVersion, err error) {
stmt := common.TxStmt(txn, s.selectStateEventStmt) stmt := common.TxStmt(nil, s.selectStateEventStmt)
var res []byte var res []byte
err = stmt.QueryRowContext(ctx, roomID, "m.room.create", "").Scan(&res) err = stmt.QueryRowContext(ctx, roomID, "m.room.create", "").Scan(&res)
if err != nil { if err != nil {