aboutsummaryrefslogtreecommitdiff
path: root/userapi/storage/accounts/postgres/storage.go
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-06-30 13:34:59 +0100
committerGitHub <noreply@github.com>2020-06-30 13:34:59 +0100
commit6f49758b90d655d9c2bb9170da2ea1d0a2bdd664 (patch)
treef434cc48f27c3915fffdb39c5b907fd021d4ff61 /userapi/storage/accounts/postgres/storage.go
parentca5bbffd8d987b220c8f8eb888a2fc9b9cef104c (diff)
Remove membership table from account DB (#1172)
* Remove membership table from account DB And make code which needs that data use the currentstate server * Unbreak tests; use a membership enum for space
Diffstat (limited to 'userapi/storage/accounts/postgres/storage.go')
-rw-r--r--userapi/storage/accounts/postgres/storage.go113
1 files changed, 1 insertions, 112 deletions
diff --git a/userapi/storage/accounts/postgres/storage.go b/userapi/storage/accounts/postgres/storage.go
index f0b11bfd..c76b92f1 100644
--- a/userapi/storage/accounts/postgres/storage.go
+++ b/userapi/storage/accounts/postgres/storage.go
@@ -37,7 +37,6 @@ type Database struct {
sqlutil.PartitionOffsetStatements
accounts accountsStatements
profiles profilesStatements
- memberships membershipStatements
accountDatas accountDataStatements
threepids threepidStatements
serverName gomatrixserverlib.ServerName
@@ -62,10 +61,6 @@ func NewDatabase(dataSourceName string, dbProperties sqlutil.DbProperties, serve
if err = p.prepare(db); err != nil {
return nil, err
}
- m := membershipStatements{}
- if err = m.prepare(db); err != nil {
- return nil, err
- }
ac := accountDataStatements{}
if err = ac.prepare(db); err != nil {
return nil, err
@@ -74,7 +69,7 @@ func NewDatabase(dataSourceName string, dbProperties sqlutil.DbProperties, serve
if err = t.prepare(db); err != nil {
return nil, err
}
- return &Database{db, partitions, a, p, m, ac, t, serverName}, nil
+ return &Database{db, partitions, a, p, ac, t, serverName}, nil
}
// GetAccountByPassword returns the account associated with the given localpart and password.
@@ -179,112 +174,6 @@ func (d *Database) createAccount(
return d.accounts.insertAccount(ctx, txn, localpart, hash, appserviceID)
}
-// SaveMembership saves the user matching a given localpart as a member of a given
-// room. It also stores the ID of the membership event.
-// If a membership already exists between the user and the room, or if the
-// insert fails, returns the SQL error
-func (d *Database) saveMembership(
- ctx context.Context, txn *sql.Tx, localpart, roomID, eventID string,
-) error {
- return d.memberships.insertMembership(ctx, txn, localpart, roomID, eventID)
-}
-
-// removeMembershipsByEventIDs removes the memberships corresponding to the
-// `join` membership events IDs in the eventIDs slice.
-// If the removal fails, or if there is no membership to remove, returns an error
-func (d *Database) removeMembershipsByEventIDs(
- ctx context.Context, txn *sql.Tx, eventIDs []string,
-) error {
- return d.memberships.deleteMembershipsByEventIDs(ctx, txn, eventIDs)
-}
-
-// UpdateMemberships adds the "join" membership events included in a given state
-// events array, and removes those which ID is included in a given array of events
-// IDs. All of the process is run in a transaction, which commits only once/if every
-// insertion and deletion has been successfully processed.
-// Returns a SQL error if there was an issue with any part of the process
-func (d *Database) UpdateMemberships(
- ctx context.Context, eventsToAdd []gomatrixserverlib.Event, idsToRemove []string,
-) error {
- return sqlutil.WithTransaction(d.db, func(txn *sql.Tx) error {
- if err := d.removeMembershipsByEventIDs(ctx, txn, idsToRemove); err != nil {
- return err
- }
-
- for _, event := range eventsToAdd {
- if err := d.newMembership(ctx, txn, event); err != nil {
- return err
- }
- }
-
- return nil
- })
-}
-
-// GetMembershipInRoomByLocalpart returns the membership for an user
-// matching the given localpart if he is a member of the room matching roomID,
-// if not sql.ErrNoRows is returned.
-// If there was an issue during the retrieval, returns the SQL error
-func (d *Database) GetMembershipInRoomByLocalpart(
- ctx context.Context, localpart, roomID string,
-) (authtypes.Membership, error) {
- return d.memberships.selectMembershipInRoomByLocalpart(ctx, localpart, roomID)
-}
-
-// GetRoomIDsByLocalPart returns an array containing the room ids of all
-// the rooms a user matching a given localpart is a member of
-// If no membership match the given localpart, returns an empty array
-// If there was an issue during the retrieval, returns the SQL error
-func (d *Database) GetRoomIDsByLocalPart(
- ctx context.Context, localpart string,
-) ([]string, error) {
- return d.memberships.selectRoomIDsByLocalPart(ctx, localpart)
-}
-
-// GetMembershipsByLocalpart returns an array containing the memberships for all
-// the rooms a user matching a given localpart is a member of
-// If no membership match the given localpart, returns an empty array
-// If there was an issue during the retrieval, returns the SQL error
-func (d *Database) GetMembershipsByLocalpart(
- ctx context.Context, localpart string,
-) (memberships []authtypes.Membership, err error) {
- return d.memberships.selectMembershipsByLocalpart(ctx, localpart)
-}
-
-// newMembership saves a new membership in the database.
-// If the event isn't a valid m.room.member event with type `join`, does nothing.
-// If an error occurred, returns the SQL error
-func (d *Database) newMembership(
- ctx context.Context, txn *sql.Tx, ev gomatrixserverlib.Event,
-) error {
- if ev.Type() == "m.room.member" && ev.StateKey() != nil {
- localpart, serverName, err := gomatrixserverlib.SplitID('@', *ev.StateKey())
- if err != nil {
- return err
- }
-
- // We only want state events from local users
- if string(serverName) != string(d.serverName) {
- return nil
- }
-
- eventID := ev.EventID()
- roomID := ev.RoomID()
- membership, err := ev.Membership()
- if err != nil {
- return err
- }
-
- // Only "join" membership events can be considered as new memberships
- if membership == gomatrixserverlib.Join {
- if err := d.saveMembership(ctx, txn, localpart, roomID, eventID); err != nil {
- return err
- }
- }
- }
- return nil
-}
-
// SaveAccountData saves new account data for a given user and a given room.
// If the account data is not specific to a room, the room ID should be an empty string
// If an account data already exists for a given set (user, room, data type), it will