bridge

package
v0.0.0-...-3dbc48c Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2022 License: MPL-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CheckpointTypes = map[event.Type]struct{}{
	event.EventRedaction: {},
	event.EventMessage:   {},
	event.EventEncrypted: {},
	event.EventSticker:   {},
	event.EventReaction:  {},
}
View Source
var MinSpecVersion = mautrix.SpecV11
View Source
var NoSessionFound = crypto.NoSessionFound
View Source
var StateHumanErrors = make(StateErrorMap)

Functions

func SendMessageCheckpoints

func SendMessageCheckpoints(br *Bridge, checkpoints []*MessageCheckpoint) error

Types

type Bridge

type Bridge struct {
	Name         string
	URL          string
	Description  string
	Version      string
	ProtocolName string

	AdditionalShortFlags string
	AdditionalLongFlags  string

	VersionDesc      string
	LinkifiedVersion string
	BuildTime        string

	AS               *appservice.AppService
	EventProcessor   *appservice.EventProcessor
	CommandProcessor CommandProcessor
	MatrixHandler    *MatrixHandler
	Bot              *appservice.IntentAPI
	Config           bridgeconfig.BaseConfig
	ConfigPath       string
	RegistrationPath string
	SaveConfig       bool
	ConfigUpgrader   configupgrade.BaseUpgrader
	Log              log.Logger
	DB               *dbutil.Database
	StateStore       *sqlstatestore.SQLStateStore
	Crypto           Crypto
	CryptoPickleKey  string

	Child ChildOverride
}

func (*Bridge) GenerateRegistration

func (br *Bridge) GenerateRegistration()

func (*Bridge) InitVersion

func (br *Bridge) InitVersion(tag, commit, buildTime string)

func (*Bridge) LogDBUpgradeErrorAndExit

func (br *Bridge) LogDBUpgradeErrorAndExit(name string, err error)

func (*Bridge) Main

func (br *Bridge) Main()

func (*Bridge) NewBridgeStateQueue

func (br *Bridge) NewBridgeStateQueue(user StateFiller, log log.Logger) *BridgeStateQueue

func (*Bridge) ResendBridgeInfo

func (br *Bridge) ResendBridgeInfo()

func (*Bridge) SendBridgeState

func (br *Bridge) SendBridgeState(ctx context.Context, state *State) error

func (*Bridge) SendGlobalBridgeState

func (br *Bridge) SendGlobalBridgeState(state State)

func (*Bridge) SendMessageCheckpoint

func (br *Bridge) SendMessageCheckpoint(evt *event.Event, step MessageCheckpointStep, err error, status MessageCheckpointStatus, retryNum int)

func (*Bridge) SendMessageErrorCheckpoint

func (br *Bridge) SendMessageErrorCheckpoint(evt *event.Event, step MessageCheckpointStep, err error, permanent bool, retryNum int)

func (*Bridge) SendMessageSuccessCheckpoint

func (br *Bridge) SendMessageSuccessCheckpoint(evt *event.Event, step MessageCheckpointStep, retryNum int)

func (*Bridge) UpdateBotProfile

func (br *Bridge) UpdateBotProfile()

type BridgeStateQueue

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

func (*BridgeStateQueue) GetPrev

func (bsq *BridgeStateQueue) GetPrev() State

func (*BridgeStateQueue) Send

func (bsq *BridgeStateQueue) Send(state State)

func (*BridgeStateQueue) SetPrev

func (bsq *BridgeStateQueue) SetPrev(prev State)

type CSFeatureRequirer

type CSFeatureRequirer interface {
	CheckFeatures(versions *mautrix.RespVersions) (string, bool)
}

type CheckpointsJSON

type CheckpointsJSON struct {
	Checkpoints []*MessageCheckpoint `json:"checkpoints"`
}

type ChildOverride

type ChildOverride interface {
	GetExampleConfig() string
	GetConfigPtr() interface{}

	Init()
	Start()
	Stop()

	GetIPortal(id.RoomID) Portal
	GetAllIPortals() []Portal
	GetIUser(id id.UserID, create bool) User
	IsGhost(id.UserID) bool
	GetIGhost(id.UserID) Ghost
	CreatePrivatePortal(id.RoomID, User, Ghost)
}

type CommandProcessor

type CommandProcessor interface {
	Handle(roomID id.RoomID, eventID id.EventID, user User, message string, replyTo id.EventID)
}

type Crypto

type Crypto interface {
	HandleMemberEvent(*event.Event)
	Decrypt(*event.Event) (*event.Event, error)
	Encrypt(id.RoomID, event.Type, *event.Content) error
	WaitForSession(id.RoomID, id.SenderKey, id.SessionID, time.Duration) bool
	RequestSession(id.RoomID, id.SenderKey, id.SessionID, id.UserID, id.DeviceID)
	ResetSession(id.RoomID)
	Init() error
	Start()
	RegisterAppserviceListener()
	Stop()
	Reset()
	Client() *mautrix.Client
}

func NewCryptoHelper

func NewCryptoHelper(bridge *Bridge) Crypto

type CryptoHelper

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

func (*CryptoHelper) Client

func (helper *CryptoHelper) Client() *mautrix.Client

func (*CryptoHelper) Decrypt

func (helper *CryptoHelper) Decrypt(evt *event.Event) (*event.Event, error)

func (*CryptoHelper) Encrypt

func (helper *CryptoHelper) Encrypt(roomID id.RoomID, evtType event.Type, content *event.Content) (err error)

func (*CryptoHelper) HandleMemberEvent

func (helper *CryptoHelper) HandleMemberEvent(evt *event.Event)

func (*CryptoHelper) Init

func (helper *CryptoHelper) Init() error

func (*CryptoHelper) RegisterAppserviceListener

func (helper *CryptoHelper) RegisterAppserviceListener()

func (*CryptoHelper) RequestSession

func (helper *CryptoHelper) RequestSession(roomID id.RoomID, senderKey id.SenderKey, sessionID id.SessionID, userID id.UserID, deviceID id.DeviceID)

func (*CryptoHelper) Reset

func (helper *CryptoHelper) Reset()

func (*CryptoHelper) ResetSession

func (helper *CryptoHelper) ResetSession(roomID id.RoomID)

func (*CryptoHelper) Start

func (helper *CryptoHelper) Start()

func (*CryptoHelper) Stop

func (helper *CryptoHelper) Stop()

func (*CryptoHelper) WaitForSession

func (helper *CryptoHelper) WaitForSession(roomID id.RoomID, senderKey id.SenderKey, sessionID id.SessionID, timeout time.Duration) bool

type DisappearingPortal

type DisappearingPortal interface {
	Portal
	ScheduleDisappearing()
}

type DoublePuppet

type DoublePuppet interface {
	CustomIntent() *appservice.IntentAPI
	SwitchCustomMXID(accessToken string, userID id.UserID) error
}

type FlagHandlingBridge

type FlagHandlingBridge interface {
	ChildOverride
	HandleFlags() bool
}

type Ghost

type Ghost interface {
	DoublePuppet
	DefaultIntent() *appservice.IntentAPI
	GetMXID() id.UserID
}

type GhostWithProfile

type GhostWithProfile interface {
	Ghost
	GetDisplayname() string
	GetAvatarURL() id.ContentURI
}

type GlobalState

type GlobalState struct {
	RemoteStates map[string]State `json:"remoteState"`
	BridgeState  State            `json:"bridgeState"`
}

type MatrixHandler

type MatrixHandler struct {
	TrackEventDuration func(event.Type) func()
	// contains filtered or unexported fields
}

func NewMatrixHandler

func NewMatrixHandler(br *Bridge) *MatrixHandler

func (*MatrixHandler) HandleBotInvite

func (mx *MatrixHandler) HandleBotInvite(evt *event.Event)

func (*MatrixHandler) HandleEncrypted

func (mx *MatrixHandler) HandleEncrypted(evt *event.Event)

func (*MatrixHandler) HandleEncryption

func (mx *MatrixHandler) HandleEncryption(evt *event.Event)

func (*MatrixHandler) HandleGhostInvite

func (mx *MatrixHandler) HandleGhostInvite(evt *event.Event, inviter User, ghost Ghost)

func (*MatrixHandler) HandleMembership

func (mx *MatrixHandler) HandleMembership(evt *event.Event)

func (*MatrixHandler) HandleMessage

func (mx *MatrixHandler) HandleMessage(evt *event.Event)

func (*MatrixHandler) HandleReaction

func (mx *MatrixHandler) HandleReaction(evt *event.Event)

func (*MatrixHandler) HandleReceipt

func (mx *MatrixHandler) HandleReceipt(evt *event.Event)

func (*MatrixHandler) HandleRedaction

func (mx *MatrixHandler) HandleRedaction(evt *event.Event)

func (*MatrixHandler) HandleRoomMetadata

func (mx *MatrixHandler) HandleRoomMetadata(evt *event.Event)

func (*MatrixHandler) HandleTyping

func (mx *MatrixHandler) HandleTyping(evt *event.Event)

type MembershipHandlingPortal

type MembershipHandlingPortal interface {
	Portal
	HandleMatrixLeave(sender User)
	HandleMatrixKick(sender User, ghost Ghost)
	HandleMatrixInvite(sender User, ghost Ghost)
}

type MessageCheckpoint

type MessageCheckpoint struct {
	EventID     id.EventID                  `json:"event_id"`
	RoomID      id.RoomID                   `json:"room_id"`
	Step        MessageCheckpointStep       `json:"step"`
	Timestamp   int64                       `json:"timestamp"`
	Status      MessageCheckpointStatus     `json:"status"`
	EventType   event.Type                  `json:"event_type"`
	ReportedBy  MessageCheckpointReportedBy `json:"reported_by"`
	RetryNum    int                         `json:"retry_num"`
	MessageType event.MessageType           `json:"message_type,omitempty"`
	Info        string                      `json:"info,omitempty"`

	OriginalEventID  id.EventID `json:"original_event_id"`
	ManualRetryCount int        `json:"manual_retry_count"`
}

func NewMessageCheckpoint

func NewMessageCheckpoint(evt *event.Event, step MessageCheckpointStep, status MessageCheckpointStatus, retryNum int) *MessageCheckpoint

func (*MessageCheckpoint) Send

func (cp *MessageCheckpoint) Send(br *Bridge)

type MessageCheckpointReportedBy

type MessageCheckpointReportedBy string
const (
	MsgReportedByAsmux  MessageCheckpointReportedBy = "ASMUX"
	MsgReportedByBridge MessageCheckpointReportedBy = "BRIDGE"
)

type MessageCheckpointStatus

type MessageCheckpointStatus string
const (
	MsgStatusSuccess     MessageCheckpointStatus = "SUCCESS"
	MsgStatusWillRetry   MessageCheckpointStatus = "WILL_RETRY"
	MsgStatusPermFailure MessageCheckpointStatus = "PERM_FAILURE"
	MsgStatusUnsupported MessageCheckpointStatus = "UNSUPPORTED"
	MsgStatusTimeout     MessageCheckpointStatus = "TIMEOUT"
)

type MessageCheckpointStep

type MessageCheckpointStep string
const (
	MsgStepClient     MessageCheckpointStep = "CLIENT"
	MsgStepHomeserver MessageCheckpointStep = "HOMESERVER"
	MsgStepBridge     MessageCheckpointStep = "BRIDGE"
	MsgStepDecrypted  MessageCheckpointStep = "DECRYPTED"
	MsgStepRemote     MessageCheckpointStep = "REMOTE"
	MsgStepCommand    MessageCheckpointStep = "COMMAND"
)

type MetaHandlingPortal

type MetaHandlingPortal interface {
	Portal
	HandleMatrixMeta(sender User, evt *event.Event)
}

type Portal

type Portal interface {
	IsEncrypted() bool
	IsPrivateChat() bool
	MarkEncrypted()
	MainIntent() *appservice.IntentAPI

	ReceiveMatrixEvent(user User, evt *event.Event)
	UpdateBridgeInfo()
}

type PreInitableBridge

type PreInitableBridge interface {
	ChildOverride
	PreInit()
}

type ReadReceiptHandlingPortal

type ReadReceiptHandlingPortal interface {
	Portal
	HandleMatrixReadReceipt(sender User, eventID id.EventID, receiptTimestamp time.Time)
}

type SQLCryptoStore

type SQLCryptoStore struct {
	*crypto.SQLCryptoStore
	UserID        id.UserID
	GhostIDFormat string
}

func NewSQLCryptoStore

func NewSQLCryptoStore(db *dbutil.Database, userID id.UserID, ghostIDFormat, pickleKey string) *SQLCryptoStore

func (*SQLCryptoStore) FindDeviceID

func (store *SQLCryptoStore) FindDeviceID() (deviceID id.DeviceID)

func (*SQLCryptoStore) GetRoomMembers

func (store *SQLCryptoStore) GetRoomMembers(roomID id.RoomID) (members []id.UserID, err error)

type State

type State struct {
	StateEvent StateEvent `json:"state_event"`
	Timestamp  int64      `json:"timestamp"`
	TTL        int        `json:"ttl"`

	Source  string         `json:"source,omitempty"`
	Error   StateErrorCode `json:"error,omitempty"`
	Message string         `json:"message,omitempty"`

	UserID     id.UserID `json:"user_id,omitempty"`
	RemoteID   string    `json:"remote_id,omitempty"`
	RemoteName string    `json:"remote_name,omitempty"`

	Reason string                 `json:"reason,omitempty"`
	Info   map[string]interface{} `json:"info,omitempty"`
}

func (State) Fill

func (pong State) Fill(user StateFiller) State

type StateErrorCode

type StateErrorCode string

type StateErrorMap

type StateErrorMap map[StateErrorCode]string

func (StateErrorMap) Update

func (bem StateErrorMap) Update(data StateErrorMap)

type StateEvent

type StateEvent string
const (
	StateUnconfigured        StateEvent = "UNCONFIGURED"
	StateRunning             StateEvent = "RUNNING"
	StateConnecting          StateEvent = "CONNECTING"
	StateBackfilling         StateEvent = "BACKFILLING"
	StateConnected           StateEvent = "CONNECTED"
	StateTransientDisconnect StateEvent = "TRANSIENT_DISCONNECT"
	StateBadCredentials      StateEvent = "BAD_CREDENTIALS"
	StateUnknownError        StateEvent = "UNKNOWN_ERROR"
	StateLoggedOut           StateEvent = "LOGGED_OUT"
)

type StateFiller

type StateFiller interface {
	GetMXID() id.UserID
	GetRemoteID() string
	GetRemoteName() string
}

type TypingPortal

type TypingPortal interface {
	Portal
	HandleMatrixTyping(userIDs []id.UserID)
}

type User

type User interface {
	GetPermissionLevel() bridgeconfig.PermissionLevel
	IsLoggedIn() bool
	GetManagementRoomID() id.RoomID
	SetManagementRoom(id.RoomID)
	GetMXID() id.UserID
	GetIDoublePuppet() DoublePuppet
	GetIGhost() Ghost
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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