diff --git a/indexedDb/impl/channels/implementation.go b/indexedDb/impl/channels/implementation.go index 9098fd666e3c19d59a7df58546da1ea0165783bb..a31a49bd6390712a343936af6f57202c20d1b2f6 100644 --- a/indexedDb/impl/channels/implementation.go +++ b/indexedDb/impl/channels/implementation.go @@ -11,7 +11,6 @@ package main import ( "crypto/ed25519" - "encoding/base64" "encoding/json" "strings" "sync" @@ -122,8 +121,7 @@ func (w *wasmModel) deleteMsgByChannel(channelID *id.ID) error { } // Perform the operation - channelIdStr := base64.StdEncoding.EncodeToString(channelID.Marshal()) - keyRange, err := idb.NewKeyRangeOnly(js.ValueOf(channelIdStr)) + keyRange, err := idb.NewKeyRangeOnly(impl.EncodeBytes(channelID.Marshal())) cursorRequest, err := index.OpenCursorRange(keyRange, idb.CursorNext) if err != nil { return errors.WithMessagef(parentErr, "Unable to open Cursor: %+v", err) @@ -303,9 +301,8 @@ func (w *wasmModel) UpdateFromMessageID(messageID message.ID, w.updateMux.Lock() defer w.updateMux.Unlock() - msgIDStr := base64.StdEncoding.EncodeToString(messageID.Marshal()) currentMsgObj, err := impl.GetIndex(w.db, messageStoreName, - messageStoreMessageIndex, js.ValueOf(msgIDStr)) + messageStoreMessageIndex, impl.EncodeBytes(messageID.Marshal())) if err != nil { jww.ERROR.Printf("%+v", errors.WithMessagef(parentErr, "Failed to get message by index: %+v", err)) @@ -489,10 +486,8 @@ func (w *wasmModel) GetMessage( // DeleteMessage removes a message with the given messageID from storage. func (w *wasmModel) DeleteMessage(messageID message.ID) error { - msgId := js.ValueOf(base64.StdEncoding.EncodeToString(messageID.Bytes())) - - err := impl.DeleteIndex( - w.db, messageStoreName, messageStoreMessageIndex, pkeyName, msgId) + err := impl.DeleteIndex(w.db, messageStoreName, + messageStoreMessageIndex, pkeyName, impl.EncodeBytes(messageID.Marshal())) if err != nil { return err } @@ -510,7 +505,7 @@ func (w *wasmModel) MuteUser( // msgIDLookup gets the UUID of the Message with the given messageID. func (w *wasmModel) msgIDLookup(messageID message.ID) (*Message, error) { - msgIDStr := js.ValueOf(base64.StdEncoding.EncodeToString(messageID.Bytes())) + msgIDStr := impl.EncodeBytes(messageID.Marshal()) resultObj, err := impl.GetIndex(w.db, messageStoreName, messageStoreMessageIndex, msgIDStr) if err != nil { diff --git a/indexedDb/impl/dm/implementation.go b/indexedDb/impl/dm/implementation.go index 4ff42219f52c6a9bd01d12a052ae6fe780ad72d7..80b61d938880f15aabec96e7339914db7699beb7 100644 --- a/indexedDb/impl/dm/implementation.go +++ b/indexedDb/impl/dm/implementation.go @@ -223,8 +223,7 @@ func (w *wasmModel) receiveWrapper(messageID message.ID, parentID *message.ID, n timestamp time.Time, round rounds.Round, mType dm.MessageType, status dm.Status) (uint64, error) { // If there is no extant Conversation, create one. - _, err := impl.Get(w.db, conversationStoreName, - utils.CopyBytesToJS(partnerKey[:])) + _, err := impl.Get(w.db, conversationStoreName, impl.EncodeBytes(partnerKey)) if err != nil { if strings.Contains(err.Error(), impl.ErrDoesNotExist) { err = w.joinConversation(nickname, partnerKey, dmToken, @@ -315,7 +314,7 @@ func (w *wasmModel) receiveHelper( // msgIDLookup gets the UUID of the Message with the given messageID. func (w *wasmModel) msgIDLookup(messageID message.ID) (uint64, error) { resultObj, err := impl.GetIndex(w.db, messageStoreName, - messageStoreMessageIndex, utils.CopyBytesToJS(messageID.Marshal())) + messageStoreMessageIndex, impl.EncodeBytes(messageID.Marshal())) if err != nil { return 0, err } diff --git a/indexedDb/impl/utils.go b/indexedDb/impl/utils.go index b68746ebd6eb101d8f077b6179f1f6d41bfb04a6..0fdb2315a1f580a675d7ebb93a257fd153056aae 100644 --- a/indexedDb/impl/utils.go +++ b/indexedDb/impl/utils.go @@ -14,6 +14,7 @@ package impl import ( "context" + "encoding/base64" "github.com/hack-pad/go-indexeddb/idb" "github.com/pkg/errors" jww "github.com/spf13/jwalterweatherman" @@ -36,6 +37,11 @@ func NewContext() (context.Context, context.CancelFunc) { return context.WithTimeout(context.Background(), dbTimeout) } +// EncodeBytes returns the proper IndexedDb encoding for a byte slice into js.Value. +func EncodeBytes(input []byte) js.Value { + return js.ValueOf(base64.StdEncoding.EncodeToString(input)) +} + // Get is a generic helper for getting values from the given [idb.ObjectStore]. // Only usable by primary key. func Get(db *idb.Database, objectStoreName string, key js.Value) (js.Value, error) {