MCPcopy Create free account
hub / github.com/daodst/chat / StoreLocalDeviceKeys

Method StoreLocalDeviceKeys

keyserver/storage/shared/storage.go:81–104  ·  view source on GitHub ↗
(ctx context.Context, keys []api.DeviceMessage)

Source from the content-addressed store, hash-verified

79}
80
81func (d *Database) StoreLocalDeviceKeys(ctx context.Context, keys []api.DeviceMessage) error {
82 // work out the latest stream IDs for each user
83 userIDToStreamID := make(map[string]int64)
84 for _, k := range keys {
85 userIDToStreamID[k.UserID] = 0
86 }
87 return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error {
88 for userID := range userIDToStreamID {
89 streamID, err := d.DeviceKeysTable.SelectMaxStreamIDForUser(ctx, txn, userID)
90 if err != nil {
91 return err
92 }
93 userIDToStreamID[userID] = streamID
94 }
95 // set the stream IDs for each key
96 for i := range keys {
97 k := keys[i]
98 userIDToStreamID[k.UserID]++ // start stream from 1
99 k.StreamID = userIDToStreamID[k.UserID]
100 keys[i] = k
101 }
102 return d.DeviceKeysTable.InsertDeviceKeys(ctx, txn, keys)
103 })
104}
105
106func (d *Database) DeviceKeysForUser(ctx context.Context, userID string, deviceIDs []string, includeEmpty bool) ([]api.DeviceMessage, error) {
107 return d.DeviceKeysTable.SelectBatchDeviceKeys(ctx, userID, deviceIDs, includeEmpty)

Callers

nothing calls this directly

Calls 3

DoMethod · 0.65
InsertDeviceKeysMethod · 0.65

Tested by

no test coverage detected