From fc6f8df4d38a4874a443a7b8738eafe35c560aed Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Tue, 12 May 2020 23:33:59 +0300 Subject: [PATCH] Fix replacing outbound group session in db --- database/cryptostore.go | 22 ++++++++++++++++++---- go.mod | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/database/cryptostore.go b/database/cryptostore.go index dbfca25..59cecd3 100644 --- a/database/cryptostore.go +++ b/database/cryptostore.go @@ -249,11 +249,25 @@ func (store *SQLCryptoStore) GetGroupSession(roomID id.RoomID, senderKey id.Send }, nil } -func (store *SQLCryptoStore) AddOutboundGroupSession(session *crypto.OutboundGroupSession) error { +func (store *SQLCryptoStore) AddOutboundGroupSession(session *crypto.OutboundGroupSession) (err error) { sessionBytes := session.Internal.Pickle(store.PickleKey) - _, err := store.db.Exec("INSERT INTO crypto_megolm_outbound_session (room_id, session_id, session, shared, max_messages, message_count, max_age, created_at, last_used) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", - session.RoomID, session.ID(), sessionBytes, session.Shared, session.MaxMessages, session.MessageCount, session.MaxAge, session.CreationTime, session.UseTime) - return err + if store.db.dialect == "postgres" { + _, err = store.db.Exec(` + INSERT INTO crypto_megolm_outbound_session ( + room_id, session_id, session, shared, max_messages, message_count, max_age, created_at, last_used + ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) + ON CONFLICT (room_id) DO UPDATE SET session_id=$2, session=$3, shared=$4, max_messages=$5, message_count=$6, max_age=$7, created_at=$8, last_used=$9`, + session.RoomID, session.ID(), sessionBytes, session.Shared, session.MaxMessages, session.MessageCount, session.MaxAge, session.CreationTime, session.UseTime) + } else if store.db.dialect == "sqlite" { + _, err = store.db.Exec(` + INSERT OR REPLACE INTO crypto_megolm_outbound_session ( + room_id, session_id, session, shared, max_messages, message_count, max_age, created_at, last_used + ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`, + session.RoomID, session.ID(), sessionBytes, session.Shared, session.MaxMessages, session.MessageCount, session.MaxAge, session.CreationTime, session.UseTime) + } else { + err = fmt.Errorf("unsupported dialect %s", store.db.dialect) + } + return } func (store *SQLCryptoStore) UpdateOutboundGroupSession(session *crypto.OutboundGroupSession) error { diff --git a/go.mod b/go.mod index 574c106..4a5cfae 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( gopkg.in/yaml.v2 v2.2.8 maunium.net/go/mauflag v1.0.0 maunium.net/go/maulogger/v2 v2.1.1 - maunium.net/go/mautrix v0.4.4 + maunium.net/go/mautrix v0.4.5 ) replace github.com/Rhymen/go-whatsapp => github.com/tulir/go-whatsapp v0.2.6