Documentation ¶
Index ¶
- Constants
- func Assert(msg string, expr bool)
- func CalculateRoomName(heroInfo *RoomMetadata, maxNumNamesPerRoom int) string
- func DecorateLogger(ctx context.Context, l *zerolog.Event) *zerolog.Event
- func DeviceListChangesArrays(m map[string]int) (changed, left []string)
- func HashedTokenFromRequest(req *http.Request) (hashAccessToken string, accessToken string, err error)
- func IsMembershipChange(eventJSON gjson.Result) bool
- func RequestContext(ctx context.Context) context.Context
- func SetRequestContextResponseInfo(ctx context.Context, since, next int64, numRooms int, txnID string, ...)
- func SetRequestContextUserID(ctx context.Context, userID string)
- func ToDeviceListChangesMap(changed, left []string) map[string]int
- type DeviceData
- type DeviceDataMap
- type DeviceLists
- type HandlerError
- type Hero
- type Receipt
- type RequiredStateMap
- type RoomMetadata
- type UserDeviceKey
Constants ¶
const ( DeviceListChanged = 1 DeviceListLeft = 2 )
const StateKeyLazy = "$LAZY"
Variables ¶
This section is empty.
Functions ¶
func Assert ¶
Assert that the expression is true, similar to assert() in C. If expr is false, print or panic.
If expr is false and SYNCV3_DEBUG=1 then the program panics. If expr is false and SYNCV3_DEBUG is unset or not '1' then the program logs an error along with a field which contains the file/line number of the caller/assertion of Assert. Assert should be used to verify invariants which should never be broken during normal functioning of the program, and shouldn't be used to log a normal error e.g network errors. Developers can make use of this function by setting SYNCV3_DEBUG=1 when running the server, which will fail-fast whenever a programming or logic error occurs.
The msg provided should be the expectation of the assert e.g:
Assert("list is not empty", len(list) > 0)
Which then produces:
assertion failed: list is not empty
func CalculateRoomName ¶
func CalculateRoomName(heroInfo *RoomMetadata, maxNumNamesPerRoom int) string
func DeviceListChangesArrays ¶
func HashedTokenFromRequest ¶
func IsMembershipChange ¶
func RequestContext ¶
prepare a request context so it can contain syncv3 info
func SetRequestContextUserID ¶
add the user ID to this request context. Need to have called RequestContext first.
func ToDeviceListChangesMap ¶
Types ¶
type DeviceData ¶
type DeviceData struct { // Contains the latest device_one_time_keys_count values. // Set whenever this field arrives down the v2 poller, and it replaces what was previously there. OTKCounts map[string]int `json:"otk"` // Contains the latest device_unused_fallback_key_types value // Set whenever this field arrives down the v2 poller, and it replaces what was previously there. FallbackKeyTypes []string `json:"fallback"` DeviceLists DeviceLists `json:"dl"` // bitset for which device data changes are present. They accumulate until they get swapped over // when they get reset ChangedBits int `json:"c"` UserID string DeviceID string }
DeviceData contains useful data for this user's device. This list can be expanded without prompting schema changes. These values are upserted into the database and persisted forever.
func (*DeviceData) FallbackKeysChanged ¶ added in v0.98.1
func (dd *DeviceData) FallbackKeysChanged() bool
func (*DeviceData) OTKCountChanged ¶ added in v0.98.1
func (dd *DeviceData) OTKCountChanged() bool
func (*DeviceData) SetFallbackKeysChanged ¶ added in v0.98.1
func (dd *DeviceData) SetFallbackKeysChanged()
func (*DeviceData) SetOTKCountChanged ¶ added in v0.98.1
func (dd *DeviceData) SetOTKCountChanged()
type DeviceDataMap ¶
type DeviceDataMap struct { Pos int64 // contains filtered or unexported fields }
func NewDeviceDataMap ¶
func NewDeviceDataMap(startPos int64, devices []DeviceData) *DeviceDataMap
func (*DeviceDataMap) Get ¶
func (d *DeviceDataMap) Get(userID, deviceID string) *DeviceData
func (*DeviceDataMap) Update ¶
func (d *DeviceDataMap) Update(dd DeviceData) DeviceData
type DeviceLists ¶
type DeviceLists struct { // map user_id -> DeviceList enum New map[string]int `json:"n"` Sent map[string]int `json:"s"` }
func (DeviceLists) Combine ¶
func (dl DeviceLists) Combine(newer DeviceLists) DeviceLists
type HandlerError ¶
func ExpiredSessionError ¶
func ExpiredSessionError() *HandlerError
func (*HandlerError) Error ¶
func (e *HandlerError) Error() string
func (HandlerError) JSON ¶
func (e HandlerError) JSON() []byte
type RequiredStateMap ¶
type RequiredStateMap struct {
// contains filtered or unexported fields
}
func NewRequiredStateMap ¶
func (*RequiredStateMap) Include ¶
func (rsm *RequiredStateMap) Include(evType, stateKey string) bool
func (*RequiredStateMap) IsLazyLoading ¶
func (rsm *RequiredStateMap) IsLazyLoading() bool
func (*RequiredStateMap) QueryStateMap ¶
func (rsm *RequiredStateMap) QueryStateMap() map[string][]string
work out what to ask the storage layer: if we have wildcard event types we need to pull all room state and cannot only pull out certain event types. If we have wildcard state keys we need to use an empty list for state keys.
type RoomMetadata ¶
type RoomMetadata struct { RoomID string Heroes []Hero NameEvent string // the content of m.room.name, NOT the calculated name CanonicalAlias string JoinCount int InviteCount int LastMessageTimestamp uint64 Encrypted bool PredecessorRoomID *string UpgradedRoomID *string RoomType *string // if this room is a space, which rooms are m.space.child state events. This is the same for all users hence is global. ChildSpaceRooms map[string]struct{} // The latest m.typing ephemeral event for this room. TypingEvent json.RawMessage }
Metadata about a room that is consistent between all users in the room.
func (*RoomMetadata) IsSpace ¶
func (m *RoomMetadata) IsSpace() bool
func (*RoomMetadata) RemoveHero ¶
func (m *RoomMetadata) RemoveHero(userID string)
func (*RoomMetadata) SameInviteCount ¶
func (m *RoomMetadata) SameInviteCount(other *RoomMetadata) bool
func (*RoomMetadata) SameJoinCount ¶
func (m *RoomMetadata) SameJoinCount(other *RoomMetadata) bool
func (*RoomMetadata) SameRoomName ¶
func (m *RoomMetadata) SameRoomName(other *RoomMetadata) bool
SameRoomName checks if the fields relevant for room names have changed between the two metadatas. Returns true if there are no changes.