shared

package
v0.12.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 13, 2023 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Database

type Database struct {
	DB *sql.DB
	EventDatabase
	Cache              caching.RoomServerCaches
	Writer             sqlutil.Writer
	RoomsTable         tables.Rooms
	StateSnapshotTable tables.StateSnapshot
	StateBlockTable    tables.StateBlock
	RoomAliasesTable   tables.RoomAliases
	InvitesTable       tables.Invites
	MembershipTable    tables.Membership
	PublishedTable     tables.Published
	Purge              tables.Purge
	GetRoomUpdaterFn   func(ctx context.Context, roomInfo *types.RoomInfo) (*RoomUpdater, error)
}

func (*Database) AddState

func (d *Database) AddState(
	ctx context.Context,
	roomNID types.RoomNID,
	stateBlockNIDs []types.StateBlockNID,
	state []types.StateEntry,
) (stateNID types.StateSnapshotNID, err error)

func (*Database) BulkSelectSnapshotsFromEventIDs added in v0.10.6

func (d *Database) BulkSelectSnapshotsFromEventIDs(
	ctx context.Context, eventIDs []string,
) (map[types.StateSnapshotNID][]string, error)

func (*Database) ForgetRoom added in v0.3.0

func (d *Database) ForgetRoom(ctx context.Context, userID, roomID string, forget bool) error

ForgetRoom sets a users room to forgotten

func (*Database) GetAliasesForRoomID

func (d *Database) GetAliasesForRoomID(ctx context.Context, roomID string) ([]string, error)

func (*Database) GetBulkStateContent

func (d *Database) GetBulkStateContent(ctx context.Context, roomIDs []string, tuples []gomatrixserverlib.StateKeyTuple, allowWildcards bool) ([]tables.StrippedEvent, error)

GetBulkStateContent returns all state events which match a given room ID and a given state key tuple. Both must be satisfied for a match. If a tuple has the StateKey of '*' and allowWildcards=true then all state events with the EventType should be returned.

func (*Database) GetCreatorIDForAlias

func (d *Database) GetCreatorIDForAlias(
	ctx context.Context, alias string,
) (string, error)

func (*Database) GetHistoryVisibilityState added in v0.9.0

func (d *Database) GetHistoryVisibilityState(ctx context.Context, roomInfo *types.RoomInfo, eventID string, domain string) ([]*gomatrixserverlib.Event, error)

func (*Database) GetInvitesForUser

func (d *Database) GetInvitesForUser(
	ctx context.Context,
	roomNID types.RoomNID,
	targetUserNID types.EventStateKeyNID,
) (senderUserIDs []types.EventStateKeyNID, eventIDs []string, inviteEventJSON []byte, err error)

func (*Database) GetKnownRooms

func (d *Database) GetKnownRooms(ctx context.Context) ([]string, error)

GetKnownRooms returns a list of all rooms we know about.

func (*Database) GetKnownUsers

func (d *Database) GetKnownUsers(ctx context.Context, userID, searchString string, limit int) ([]string, error)

GetKnownUsers searches all users that userID knows about.

func (*Database) GetLeftUsers added in v0.10.9

func (d *Database) GetLeftUsers(ctx context.Context, userIDs []string) ([]string, error)

GetLeftUsers calculates users we (the server) don't share a room with anymore.

func (*Database) GetLocalServerInRoom added in v0.4.0

func (d *Database) GetLocalServerInRoom(ctx context.Context, roomNID types.RoomNID) (bool, error)

GetLocalServerInRoom returns true if we think we're in a given room or false otherwise.

func (*Database) GetMembership

func (d *Database) GetMembership(ctx context.Context, roomNID types.RoomNID, requestSenderUserID string) (membershipEventNID types.EventNID, stillInRoom, isRoomforgotten bool, err error)

func (*Database) GetMembershipEventNIDsForRoom

func (d *Database) GetMembershipEventNIDsForRoom(
	ctx context.Context, roomNID types.RoomNID, joinOnly bool, localOnly bool,
) ([]types.EventNID, error)

func (*Database) GetMembershipForHistoryVisibility added in v0.11.1

func (d *Database) GetMembershipForHistoryVisibility(
	ctx context.Context, userNID types.EventStateKeyNID, roomInfo *types.RoomInfo, eventIDs ...string,
) (map[string]*gomatrixserverlib.HeaderedEvent, error)

func (*Database) GetOrCreateEventStateKeyNID added in v0.12.0

func (d *Database) GetOrCreateEventStateKeyNID(ctx context.Context, eventStateKey *string) (eventStateKeyNID types.EventStateKeyNID, err error)

func (*Database) GetOrCreateEventTypeNID added in v0.12.0

func (d *Database) GetOrCreateEventTypeNID(ctx context.Context, eventType string) (eventTypeNID types.EventTypeNID, err error)

func (*Database) GetOrCreateRoomInfo added in v0.12.0

func (d *Database) GetOrCreateRoomInfo(ctx context.Context, event *gomatrixserverlib.Event) (roomInfo *types.RoomInfo, err error)

GetOrCreateRoomInfo gets or creates a new RoomInfo, which is only safe to use with functions only needing a roomVersion or roomNID.

func (*Database) GetPublishedRoom added in v0.7.0

func (d *Database) GetPublishedRoom(ctx context.Context, roomID string) (bool, error)

func (*Database) GetPublishedRooms

func (d *Database) GetPublishedRooms(ctx context.Context, networkID string, includeAllNetworks bool) ([]string, error)

func (*Database) GetRoomIDForAlias

func (d *Database) GetRoomIDForAlias(ctx context.Context, alias string) (string, error)

func (*Database) GetRoomUpdater added in v0.6.1

func (d *Database) GetRoomUpdater(
	ctx context.Context, roomInfo *types.RoomInfo,
) (*RoomUpdater, error)

func (*Database) GetRoomsByMembership

func (d *Database) GetRoomsByMembership(ctx context.Context, userID, membership string) ([]string, error)

GetRoomsByMembership returns a list of room IDs matching the provided membership and user ID (as state_key).

func (*Database) GetServerInRoom added in v0.4.1

func (d *Database) GetServerInRoom(ctx context.Context, roomNID types.RoomNID, serverName gomatrixserverlib.ServerName) (bool, error)

GetServerInRoom returns true if we think a server is in a given room or false otherwise.

func (*Database) GetStateEvent

func (d *Database) GetStateEvent(ctx context.Context, roomID, evType, stateKey string) (*gomatrixserverlib.HeaderedEvent, error)

GetStateEvent returns the current state event of a given type for a given room with a given state key If no event could be found, returns nil If there was an issue during the retrieval, returns an error

func (*Database) GetStateEventsWithEventType added in v0.6.5

func (d *Database) GetStateEventsWithEventType(ctx context.Context, roomID, evType string) ([]*gomatrixserverlib.HeaderedEvent, error)

Same as GetStateEvent but returns all matching state events with this event type. Returns no error if there are no events with this event type.

func (*Database) IsEventRejected added in v0.9.4

func (d *Database) IsEventRejected(ctx context.Context, roomNID types.RoomNID, eventID string) (bool, error)

func (*Database) JoinedUsersSetInRooms

func (d *Database) JoinedUsersSetInRooms(ctx context.Context, roomIDs, userIDs []string, localOnly bool) (map[string]int, error)

JoinedUsersSetInRooms returns a map of how many times the given users appear in the specified rooms.

func (*Database) LatestEventIDs

func (d *Database) LatestEventIDs(
	ctx context.Context, roomNID types.RoomNID,
) (references []gomatrixserverlib.EventReference, currentStateSnapshotNID types.StateSnapshotNID, depth int64, err error)

func (*Database) MembershipUpdater

func (d *Database) MembershipUpdater(
	ctx context.Context, roomID, targetUserID string,
	targetLocal bool, roomVersion gomatrixserverlib.RoomVersion,
) (*MembershipUpdater, error)

func (*Database) MissingAuthPrevEvents added in v0.6.5

func (d *Database) MissingAuthPrevEvents(
	ctx context.Context, e *gomatrixserverlib.Event,
) (missingAuth, missingPrev []string, err error)

func (*Database) PublishRoom

func (d *Database) PublishRoom(ctx context.Context, roomID, appserviceID, networkID string, publish bool) error

func (*Database) PurgeRoom added in v0.11.0

func (d *Database) PurgeRoom(ctx context.Context, roomID string) error

PurgeRoom removes all information about a given room from the roomserver. For large rooms this operation may take a considerable amount of time.

func (*Database) RemoveRoomAlias

func (d *Database) RemoveRoomAlias(ctx context.Context, alias string) error

func (*Database) RoomInfo

func (d *Database) RoomInfo(ctx context.Context, roomID string) (*types.RoomInfo, error)

func (*Database) RoomInfoByNID added in v0.12.0

func (d *Database) RoomInfoByNID(ctx context.Context, roomNID types.RoomNID) (*types.RoomInfo, error)

func (*Database) SetRoomAlias

func (d *Database) SetRoomAlias(ctx context.Context, alias string, roomID string, creatorUserID string) error

func (*Database) StateBlockNIDs

func (d *Database) StateBlockNIDs(
	ctx context.Context, stateNIDs []types.StateSnapshotNID,
) ([]types.StateBlockNIDList, error)

func (*Database) StateEntries

func (d *Database) StateEntries(
	ctx context.Context, stateBlockNIDs []types.StateBlockNID,
) ([]types.StateEntryList, error)

func (*Database) StateEntriesForTuples

func (d *Database) StateEntriesForTuples(
	ctx context.Context,
	stateBlockNIDs []types.StateBlockNID,
	stateKeyTuples []types.StateKeyTuple,
) ([]types.StateEntryList, error)

func (*Database) SupportsConcurrentRoomInputs

func (d *Database) SupportsConcurrentRoomInputs() bool

func (*Database) UpgradeRoom added in v0.10.8

func (d *Database) UpgradeRoom(ctx context.Context, oldRoomID, newRoomID, eventSender string) error

type EventDatabase added in v0.12.0

type EventDatabase struct {
	DB                  *sql.DB
	Cache               caching.RoomServerCaches
	Writer              sqlutil.Writer
	EventsTable         tables.Events
	EventJSONTable      tables.EventJSON
	EventTypesTable     tables.EventTypes
	EventStateKeysTable tables.EventStateKeys
	PrevEventsTable     tables.PreviousEvents
	RedactionsTable     tables.Redactions
}

EventDatabase contains all tables needed to work with events

func (*EventDatabase) EventIDs added in v0.12.0

func (d *EventDatabase) EventIDs(
	ctx context.Context, eventNIDs []types.EventNID,
) (map[types.EventNID]string, error)

func (*EventDatabase) EventNIDs added in v0.12.0

func (d *EventDatabase) EventNIDs(
	ctx context.Context, eventIDs []string,
) (map[string]types.EventMetadata, error)

func (*EventDatabase) EventStateKeyNIDs added in v0.12.0

func (d *EventDatabase) EventStateKeyNIDs(
	ctx context.Context, eventStateKeys []string,
) (map[string]types.EventStateKeyNID, error)

func (*EventDatabase) EventStateKeys added in v0.12.0

func (d *EventDatabase) EventStateKeys(
	ctx context.Context, eventStateKeyNIDs []types.EventStateKeyNID,
) (map[types.EventStateKeyNID]string, error)

func (*EventDatabase) EventTypeNIDs added in v0.12.0

func (d *EventDatabase) EventTypeNIDs(
	ctx context.Context, eventTypes []string,
) (map[string]types.EventTypeNID, error)

func (*EventDatabase) Events added in v0.12.0

func (d *EventDatabase) Events(ctx context.Context, roomInfo *types.RoomInfo, eventNIDs []types.EventNID) ([]types.Event, error)

func (*EventDatabase) EventsFromIDs added in v0.12.0

func (d *EventDatabase) EventsFromIDs(ctx context.Context, roomInfo *types.RoomInfo, eventIDs []string) ([]types.Event, error)

func (*EventDatabase) MaybeRedactEvent added in v0.12.0

func (d *EventDatabase) MaybeRedactEvent(
	ctx context.Context, roomInfo *types.RoomInfo, eventNID types.EventNID, event *gomatrixserverlib.Event, plResolver state.PowerLevelResolver,
) (*gomatrixserverlib.Event, *gomatrixserverlib.Event, error)

MaybeRedactEvent manages the redacted status of events. There's two cases to consider in order to comply with the spec: "servers should not apply or send redactions to clients until both the redaction event and original event have been seen, and are valid." https://matrix.org/docs/spec/rooms/v3#authorization-rules-for-events These cases are:

  • This is a redaction event, redact the event it references if we know about it.
  • This is a normal event which may have been previously redacted.

In the first case, check if we have the referenced event then apply the redaction, else store it in the redactions table with validated=FALSE. In the second case, check if there is a redaction for it: if there is then apply the redactions and set validated=TRUE.

When an event is redacted, the redacted event JSON is modified to add an `unsigned.redacted_because` field. We use this field when loading events to determine whether to apply redactions. This keeps the hot-path of reading events quick as we don't need to cross-reference with other tables when loading.

Returns the redaction event and the redacted event if this call resulted in a redaction.

func (*EventDatabase) SetState added in v0.12.0

func (d *EventDatabase) SetState(
	ctx context.Context, eventNID types.EventNID, stateNID types.StateSnapshotNID,
) error

func (*EventDatabase) SnapshotNIDFromEventID added in v0.12.0

func (d *EventDatabase) SnapshotNIDFromEventID(
	ctx context.Context, eventID string,
) (types.StateSnapshotNID, error)

func (*EventDatabase) StateAtEventIDs added in v0.12.0

func (d *EventDatabase) StateAtEventIDs(
	ctx context.Context, eventIDs []string,
) ([]types.StateAtEvent, error)

func (*EventDatabase) StateEntriesForEventIDs added in v0.12.0

func (d *EventDatabase) StateEntriesForEventIDs(
	ctx context.Context, eventIDs []string, excludeRejected bool,
) ([]types.StateEntry, error)

func (*EventDatabase) StoreEvent added in v0.12.0

func (d *EventDatabase) StoreEvent(
	ctx context.Context, event *gomatrixserverlib.Event,
	roomInfo *types.RoomInfo, eventTypeNID types.EventTypeNID, eventStateKeyNID types.EventStateKeyNID,
	authEventNIDs []types.EventNID, isRejected bool,
) (types.EventNID, types.StateAtEvent, error)

type MembershipUpdater

type MembershipUpdater struct {
	// contains filtered or unexported fields
}

func NewMembershipUpdater

func NewMembershipUpdater(
	ctx context.Context, d *Database, txn *sql.Tx, roomID, targetUserID string,
	targetLocal bool, roomVersion gomatrixserverlib.RoomVersion,
) (*MembershipUpdater, error)

func (*MembershipUpdater) Commit

func (t *MembershipUpdater) Commit() error

Commit implements types.Transaction

func (*MembershipUpdater) Delete added in v0.9.0

func (u *MembershipUpdater) Delete() error

func (*MembershipUpdater) IsInvite

func (u *MembershipUpdater) IsInvite() bool

IsInvite implements types.MembershipUpdater

func (*MembershipUpdater) IsJoin

func (u *MembershipUpdater) IsJoin() bool

IsJoin implements types.MembershipUpdater

func (*MembershipUpdater) IsKnock added in v0.4.1

func (u *MembershipUpdater) IsKnock() bool

IsKnock implements types.MembershipUpdater

func (*MembershipUpdater) IsLeave

func (u *MembershipUpdater) IsLeave() bool

IsLeave implements types.MembershipUpdater

func (*MembershipUpdater) Rollback

func (t *MembershipUpdater) Rollback() error

Rollback implements types.Transaction

func (*MembershipUpdater) Update added in v0.9.0

func (u *MembershipUpdater) Update(newMembership tables.MembershipState, event *types.Event) (bool, []string, error)

type RoomUpdater added in v0.6.1

type RoomUpdater struct {
	// contains filtered or unexported fields
}

func NewRoomUpdater added in v0.6.1

func NewRoomUpdater(ctx context.Context, d *Database, txn *sql.Tx, roomInfo *types.RoomInfo) (*RoomUpdater, error)

func (*RoomUpdater) AddState added in v0.6.1

func (u *RoomUpdater) AddState(
	ctx context.Context,
	roomNID types.RoomNID,
	stateBlockNIDs []types.StateBlockNID,
	state []types.StateEntry,
) (stateNID types.StateSnapshotNID, err error)

func (*RoomUpdater) BulkSelectSnapshotsFromEventIDs added in v0.10.6

func (u *RoomUpdater) BulkSelectSnapshotsFromEventIDs(ctx context.Context, eventIDs []string) (map[types.StateSnapshotNID][]string, error)

func (*RoomUpdater) Commit added in v0.6.1

func (u *RoomUpdater) Commit() error

Implements sqlutil.Transaction

func (*RoomUpdater) CurrentStateSnapshotNID added in v0.6.1

func (u *RoomUpdater) CurrentStateSnapshotNID() types.StateSnapshotNID

CurrentStateSnapshotNID implements types.RoomRecentEventsUpdater

func (*RoomUpdater) EventIDs added in v0.6.1

func (u *RoomUpdater) EventIDs(
	ctx context.Context, eventNIDs []types.EventNID,
) (map[types.EventNID]string, error)

func (*RoomUpdater) EventStateKeyNIDs added in v0.6.1

func (u *RoomUpdater) EventStateKeyNIDs(
	ctx context.Context, eventStateKeys []string,
) (map[string]types.EventStateKeyNID, error)

func (*RoomUpdater) EventTypeNIDs added in v0.6.1

func (u *RoomUpdater) EventTypeNIDs(
	ctx context.Context, eventTypes []string,
) (map[string]types.EventTypeNID, error)

func (*RoomUpdater) Events added in v0.6.1

func (u *RoomUpdater) Events(ctx context.Context, _ *types.RoomInfo, eventNIDs []types.EventNID) ([]types.Event, error)

func (*RoomUpdater) EventsFromIDs added in v0.6.1

func (u *RoomUpdater) EventsFromIDs(ctx context.Context, roomInfo *types.RoomInfo, eventIDs []string) ([]types.Event, error)

func (*RoomUpdater) HasEventBeenSent added in v0.6.1

func (u *RoomUpdater) HasEventBeenSent(eventNID types.EventNID) (bool, error)

HasEventBeenSent implements types.RoomRecentEventsUpdater

func (*RoomUpdater) IsReferenced added in v0.6.1

func (u *RoomUpdater) IsReferenced(eventReference gomatrixserverlib.EventReference) (bool, error)

IsReferenced implements types.RoomRecentEventsUpdater

func (*RoomUpdater) LastEventIDSent added in v0.6.1

func (u *RoomUpdater) LastEventIDSent() string

LastEventIDSent implements types.RoomRecentEventsUpdater

func (*RoomUpdater) LatestEvents added in v0.6.1

func (u *RoomUpdater) LatestEvents() []types.StateAtEventAndReference

LatestEvents implements types.RoomRecentEventsUpdater

func (*RoomUpdater) MarkEventAsSent added in v0.6.1

func (u *RoomUpdater) MarkEventAsSent(eventNID types.EventNID) error

MarkEventAsSent implements types.RoomRecentEventsUpdater

func (*RoomUpdater) MembershipUpdater added in v0.6.1

func (u *RoomUpdater) MembershipUpdater(targetUserNID types.EventStateKeyNID, targetLocal bool) (*MembershipUpdater, error)

func (*RoomUpdater) Rollback added in v0.6.1

func (u *RoomUpdater) Rollback() error

Implements sqlutil.Transaction

func (*RoomUpdater) RoomExists added in v0.6.4

func (u *RoomUpdater) RoomExists() bool

RoomExists returns true if the room exists and false otherwise.

func (*RoomUpdater) RoomInfo added in v0.6.1

func (u *RoomUpdater) RoomInfo(ctx context.Context, roomID string) (*types.RoomInfo, error)

func (*RoomUpdater) RoomVersion added in v0.6.1

func (u *RoomUpdater) RoomVersion() (version gomatrixserverlib.RoomVersion)

RoomVersion implements types.RoomRecentEventsUpdater

func (*RoomUpdater) SetLatestEvents added in v0.6.1

func (u *RoomUpdater) SetLatestEvents(
	roomNID types.RoomNID, latest []types.StateAtEventAndReference, lastEventNIDSent types.EventNID,
	currentStateSnapshotNID types.StateSnapshotNID,
) error

SetLatestEvents implements types.RoomRecentEventsUpdater

func (*RoomUpdater) SetState added in v0.6.1

func (u *RoomUpdater) SetState(
	ctx context.Context, eventNID types.EventNID, stateNID types.StateSnapshotNID,
) error

func (*RoomUpdater) SnapshotNIDFromEventID added in v0.6.1

func (u *RoomUpdater) SnapshotNIDFromEventID(
	ctx context.Context, eventID string,
) (types.StateSnapshotNID, error)

func (*RoomUpdater) StateAtEventIDs added in v0.6.1

func (u *RoomUpdater) StateAtEventIDs(
	ctx context.Context, eventIDs []string,
) ([]types.StateAtEvent, error)

func (*RoomUpdater) StateBlockNIDs added in v0.6.1

func (u *RoomUpdater) StateBlockNIDs(
	ctx context.Context, stateNIDs []types.StateSnapshotNID,
) ([]types.StateBlockNIDList, error)

func (*RoomUpdater) StateEntries added in v0.6.1

func (u *RoomUpdater) StateEntries(
	ctx context.Context, stateBlockNIDs []types.StateBlockNID,
) ([]types.StateEntryList, error)

func (*RoomUpdater) StateEntriesForTuples added in v0.6.1

func (u *RoomUpdater) StateEntriesForTuples(
	ctx context.Context,
	stateBlockNIDs []types.StateBlockNID,
	stateKeyTuples []types.StateKeyTuple,
) ([]types.StateEntryList, error)

func (*RoomUpdater) StorePreviousEvents added in v0.6.1

func (u *RoomUpdater) StorePreviousEvents(eventNID types.EventNID, previousEventReferences []gomatrixserverlib.EventReference) error

StorePreviousEvents implements types.RoomRecentEventsUpdater - This must be called from a Writer

type StatementList

type StatementList []struct {
	Statement **sql.Stmt
	SQL       string
}

StatementList is a list of SQL statements to prepare and a pointer to where to store the resulting prepared statement.

func (StatementList) Prepare

func (s StatementList) Prepare(db *sql.DB) (err error)

Prepare the SQL for each statement in the list and assign the result to the prepared statement.

type UnsentFilter added in v0.6.4

type UnsentFilter bool
const (
	NoFilter         UnsentFilter = false
	FilterUnsentOnly UnsentFilter = true
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL