aboutsummaryrefslogtreecommitdiff
path: root/roomserver/storage
diff options
context:
space:
mode:
authordevonh <devon.dmytro@gmail.com>2023-06-06 20:55:18 +0000
committerGitHub <noreply@github.com>2023-06-06 20:55:18 +0000
commit7a1fd7f512ce06a472a2051ee63eae4a270eb71a (patch)
tree20128b0d3f7c69dd776aa7b2b9bc3194dda7dd75 /roomserver/storage
parent725ff5567d2a3bc9992b065e72ccabefb595ec1c (diff)
PDU Sender split (#3100)
Initial cut of splitting PDU Sender into SenderID & looking up UserID where required.
Diffstat (limited to 'roomserver/storage')
-rw-r--r--roomserver/storage/interface.go5
-rw-r--r--roomserver/storage/shared/membership_updater.go2
-rw-r--r--roomserver/storage/shared/room_updater.go5
-rw-r--r--roomserver/storage/shared/storage.go28
4 files changed, 35 insertions, 5 deletions
diff --git a/roomserver/storage/interface.go b/roomserver/storage/interface.go
index 7d22df00..2d007bed 100644
--- a/roomserver/storage/interface.go
+++ b/roomserver/storage/interface.go
@@ -166,6 +166,10 @@ type Database interface {
GetServerInRoom(ctx context.Context, roomNID types.RoomNID, serverName spec.ServerName) (bool, error)
// GetKnownUsers searches all users that userID knows about.
GetKnownUsers(ctx context.Context, userID, searchString string, limit int) ([]string, error)
+ // GetKnownUsers tries to obtain the current mxid for a given user.
+ GetUserIDForSender(ctx context.Context, roomID string, senderID string) (*spec.UserID, error)
+ // GetKnownUsers tries to obtain the current senderID for a given user.
+ GetSenderIDForUser(ctx context.Context, roomID string, userID spec.UserID) (string, error)
// GetKnownRooms returns a list of all rooms we know about.
GetKnownRooms(ctx context.Context) ([]string, error)
// ForgetRoom sets a flag in the membership table, that the user wishes to forget a specific room
@@ -211,6 +215,7 @@ type RoomDatabase interface {
GetOrCreateEventTypeNID(ctx context.Context, eventType string) (eventTypeNID types.EventTypeNID, err error)
GetOrCreateEventStateKeyNID(ctx context.Context, eventStateKey *string) (types.EventStateKeyNID, error)
GetStateEvent(ctx context.Context, roomID, evType, stateKey string) (*types.HeaderedEvent, error)
+ GetUserIDForSender(ctx context.Context, roomID string, senderID string) (*spec.UserID, error)
}
type EventDatabase interface {
diff --git a/roomserver/storage/shared/membership_updater.go b/roomserver/storage/shared/membership_updater.go
index f9c889cb..105e61df 100644
--- a/roomserver/storage/shared/membership_updater.go
+++ b/roomserver/storage/shared/membership_updater.go
@@ -101,7 +101,7 @@ func (u *MembershipUpdater) Update(newMembership tables.MembershipState, event *
var inserted bool // Did the query result in a membership change?
var retired []string // Did we retire any updates in the process?
return inserted, retired, u.d.Writer.Do(u.d.DB, u.txn, func(txn *sql.Tx) error {
- senderUserNID, err := u.d.assignStateKeyNID(u.ctx, u.txn, event.Sender())
+ senderUserNID, err := u.d.assignStateKeyNID(u.ctx, u.txn, event.SenderID())
if err != nil {
return fmt.Errorf("u.d.AssignStateKeyNID: %w", err)
}
diff --git a/roomserver/storage/shared/room_updater.go b/roomserver/storage/shared/room_updater.go
index 70672a33..73500138 100644
--- a/roomserver/storage/shared/room_updater.go
+++ b/roomserver/storage/shared/room_updater.go
@@ -6,6 +6,7 @@ import (
"fmt"
"github.com/matrix-org/gomatrixserverlib"
+ "github.com/matrix-org/gomatrixserverlib/spec"
"github.com/matrix-org/dendrite/roomserver/types"
)
@@ -250,3 +251,7 @@ func (u *RoomUpdater) MarkEventAsSent(eventNID types.EventNID) error {
func (u *RoomUpdater) MembershipUpdater(targetUserNID types.EventStateKeyNID, targetLocal bool) (*MembershipUpdater, error) {
return u.d.membershipUpdaterTxn(u.ctx, u.txn, u.roomInfo.RoomNID, targetUserNID, targetLocal)
}
+
+func (u *RoomUpdater) GetUserIDForSender(ctx context.Context, roomID string, senderID string) (*spec.UserID, error) {
+ return u.d.GetUserIDForSender(ctx, roomID, senderID)
+}
diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go
index cefa58a3..406d7cf1 100644
--- a/roomserver/storage/shared/storage.go
+++ b/roomserver/storage/shared/storage.go
@@ -988,8 +988,18 @@ func (d *EventDatabase) MaybeRedactEvent(
return nil
}
- _, sender1, _ := gomatrixserverlib.SplitID('@', redactedEvent.Sender())
- _, sender2, _ := gomatrixserverlib.SplitID('@', redactionEvent.Sender())
+ // TODO: Don't hack senderID into userID here (pseudoIDs)
+ sender1Domain := ""
+ sender1, err1 := spec.NewUserID(redactedEvent.SenderID(), true)
+ if err1 == nil {
+ sender1Domain = string(sender1.Domain())
+ }
+ // TODO: Don't hack senderID into userID here (pseudoIDs)
+ sender2Domain := ""
+ sender2, err2 := spec.NewUserID(redactionEvent.SenderID(), true)
+ if err2 == nil {
+ sender2Domain = string(sender2.Domain())
+ }
var powerlevels *gomatrixserverlib.PowerLevelContent
powerlevels, err = plResolver.Resolve(ctx, redactionEvent.EventID())
if err != nil {
@@ -997,9 +1007,9 @@ func (d *EventDatabase) MaybeRedactEvent(
}
switch {
- case powerlevels.UserLevel(redactionEvent.Sender()) >= powerlevels.Redact:
+ case powerlevels.UserLevel(redactionEvent.SenderID()) >= powerlevels.Redact:
// 1. The power level of the redaction event’s sender is greater than or equal to the redact level.
- case sender1 == sender2:
+ case sender1Domain == sender2Domain:
// 2. The domain of the redaction event’s sender matches that of the original event’s sender.
default:
ignoreRedaction = true
@@ -1514,6 +1524,16 @@ func (d *Database) GetKnownUsers(ctx context.Context, userID, searchString strin
return d.MembershipTable.SelectKnownUsers(ctx, nil, stateKeyNID, searchString, limit)
}
+func (d *Database) GetUserIDForSender(ctx context.Context, roomID string, senderID string) (*spec.UserID, error) {
+ // TODO: Use real logic once DB for pseudoIDs is in place
+ return spec.NewUserID(senderID, true)
+}
+
+func (d *Database) GetSenderIDForUser(ctx context.Context, roomID string, userID spec.UserID) (string, error) {
+ // TODO: Use real logic once DB for pseudoIDs is in place
+ return userID.String(), nil
+}
+
// GetKnownRooms returns a list of all rooms we know about.
func (d *Database) GetKnownRooms(ctx context.Context) ([]string, error) {
return d.RoomsTable.SelectRoomIDsWithEvents(ctx, nil)