diff options
author | Kegsay <kegan@matrix.org> | 2020-06-26 11:07:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-26 11:07:52 +0100 |
commit | 4897beabeed3281f3e45a1426e6f1c9359e3152b (patch) | |
tree | 4746aecb87086d81de065ec30283c8ec48ff9f36 /syncapi/storage/postgres/invites_table.go | |
parent | c1d2382e6d7f459ddf911a16aac7d4e63d50838b (diff) |
Finish implementing retiring invites (#1166)
* Pass retired invites to the syncapi with the event ID of the invite
* Implement retire invite streaming
* Update whitelist
Diffstat (limited to 'syncapi/storage/postgres/invites_table.go')
-rw-r--r-- | syncapi/storage/postgres/invites_table.go | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/syncapi/storage/postgres/invites_table.go b/syncapi/storage/postgres/invites_table.go index 5031d64e..530dc645 100644 --- a/syncapi/storage/postgres/invites_table.go +++ b/syncapi/storage/postgres/invites_table.go @@ -33,7 +33,8 @@ CREATE TABLE IF NOT EXISTS syncapi_invite_events ( event_id TEXT NOT NULL, room_id TEXT NOT NULL, target_user_id TEXT NOT NULL, - headered_event_json TEXT NOT NULL + headered_event_json TEXT NOT NULL, + deleted BOOL NOT NULL ); -- For looking up the invites for a given user. @@ -47,14 +48,14 @@ CREATE INDEX IF NOT EXISTS syncapi_invites_event_id_idx const insertInviteEventSQL = "" + "INSERT INTO syncapi_invite_events (" + - " room_id, event_id, target_user_id, headered_event_json" + - ") VALUES ($1, $2, $3, $4) RETURNING id" + " room_id, event_id, target_user_id, headered_event_json, deleted" + + ") VALUES ($1, $2, $3, $4, FALSE) RETURNING id" const deleteInviteEventSQL = "" + - "DELETE FROM syncapi_invite_events WHERE event_id = $1" + "UPDATE syncapi_invite_events SET deleted=TRUE, id=nextval('syncapi_stream_id') WHERE event_id = $1 RETURNING id" const selectInviteEventsInRangeSQL = "" + - "SELECT room_id, headered_event_json FROM syncapi_invite_events" + + "SELECT room_id, headered_event_json, deleted FROM syncapi_invite_events" + " WHERE target_user_id = $1 AND id > $2 AND id <= $3" + " ORDER BY id DESC" @@ -110,40 +111,46 @@ func (s *inviteEventsStatements) InsertInviteEvent( func (s *inviteEventsStatements) DeleteInviteEvent( ctx context.Context, inviteEventID string, -) error { - _, err := s.deleteInviteEventStmt.ExecContext(ctx, inviteEventID) - return err +) (sp types.StreamPosition, err error) { + err = s.deleteInviteEventStmt.QueryRowContext(ctx, inviteEventID).Scan(&sp) + return } // selectInviteEventsInRange returns a map of room ID to invite event for the // active invites for the target user ID in the supplied range. func (s *inviteEventsStatements) SelectInviteEventsInRange( ctx context.Context, txn *sql.Tx, targetUserID string, r types.Range, -) (map[string]gomatrixserverlib.HeaderedEvent, error) { +) (map[string]gomatrixserverlib.HeaderedEvent, map[string]gomatrixserverlib.HeaderedEvent, error) { stmt := sqlutil.TxStmt(txn, s.selectInviteEventsInRangeStmt) rows, err := stmt.QueryContext(ctx, targetUserID, r.Low(), r.High()) if err != nil { - return nil, err + return nil, nil, err } defer internal.CloseAndLogIfError(ctx, rows, "selectInviteEventsInRange: rows.close() failed") result := map[string]gomatrixserverlib.HeaderedEvent{} + retired := map[string]gomatrixserverlib.HeaderedEvent{} for rows.Next() { var ( roomID string eventJSON []byte + deleted bool ) - if err = rows.Scan(&roomID, &eventJSON); err != nil { - return nil, err + if err = rows.Scan(&roomID, &eventJSON, &deleted); err != nil { + return nil, nil, err } var event gomatrixserverlib.HeaderedEvent if err := json.Unmarshal(eventJSON, &event); err != nil { - return nil, err + return nil, nil, err } - result[roomID] = event + if deleted { + retired[roomID] = event + } else { + result[roomID] = event + } } - return result, rows.Err() + return result, retired, rows.Err() } func (s *inviteEventsStatements) SelectMaxInviteID( |