forked from jshiffer/matterbridge
Add MxId/Token login option for Matrix (#1438)
* Add possibility for using MxId/Token with Matrix Makes it possible to configure a Matrix bot to use Matrix ID + Access token instead of username/password. This makes it possible to use the bot in environments where password login is disabled (for example SSO environments). Matrix user ID's are commonly referred to as "MXID's". I thought about (ab)using "Login" here but it felt like a bad idea given it's used as "username" for the password login. None of the other configuration items felt fitting. Closes #1429 * MxId -> MxID * Add err != nil to matrix.NewClient
This commit is contained in:
parent
fa8b96dfa1
commit
714a2ad730
@ -120,6 +120,7 @@ type Protocol struct {
|
|||||||
MessageQueue int // IRC, size of message queue for flood control
|
MessageQueue int // IRC, size of message queue for flood control
|
||||||
MessageSplit bool // IRC, split long messages with newlines on MessageLength instead of clipping
|
MessageSplit bool // IRC, split long messages with newlines on MessageLength instead of clipping
|
||||||
Muc string // xmpp
|
Muc string // xmpp
|
||||||
|
MxID string // matrix
|
||||||
Name string // all protocols
|
Name string // all protocols
|
||||||
Nick string // all protocols
|
Nick string // all protocols
|
||||||
NickFormatter string // mattermost, slack
|
NickFormatter string // mattermost, slack
|
||||||
@ -142,7 +143,7 @@ type Protocol struct {
|
|||||||
ReplaceNicks [][]string // all protocols
|
ReplaceNicks [][]string // all protocols
|
||||||
RemoteNickFormat string // all protocols
|
RemoteNickFormat string // all protocols
|
||||||
RunCommands []string // IRC
|
RunCommands []string // IRC
|
||||||
Server string // IRC,mattermost,XMPP,discord
|
Server string // IRC,mattermost,XMPP,discord,matrix
|
||||||
SessionFile string // msteams,whatsapp
|
SessionFile string // msteams,whatsapp
|
||||||
ShowJoinPart bool // all protocols
|
ShowJoinPart bool // all protocols
|
||||||
ShowTopicChange bool // slack
|
ShowTopicChange bool // slack
|
||||||
@ -157,7 +158,7 @@ type Protocol struct {
|
|||||||
Team string // mattermost, keybase
|
Team string // mattermost, keybase
|
||||||
TeamID string // msteams
|
TeamID string // msteams
|
||||||
TenantID string // msteams
|
TenantID string // msteams
|
||||||
Token string // gitter, slack, discord, api
|
Token string // gitter, slack, discord, api, matrix
|
||||||
Topic string // zulip
|
Topic string // zulip
|
||||||
URL string // mattermost, slack // DEPRECATED
|
URL string // mattermost, slack // DEPRECATED
|
||||||
UseAPI bool // mattermost, slack
|
UseAPI bool // mattermost, slack
|
||||||
|
@ -75,22 +75,33 @@ func New(cfg *bridge.Config) bridge.Bridger {
|
|||||||
func (b *Bmatrix) Connect() error {
|
func (b *Bmatrix) Connect() error {
|
||||||
var err error
|
var err error
|
||||||
b.Log.Infof("Connecting %s", b.GetString("Server"))
|
b.Log.Infof("Connecting %s", b.GetString("Server"))
|
||||||
b.mc, err = matrix.NewClient(b.GetString("Server"), "", "")
|
if b.GetString("MxID") != "" && b.GetString("Token") != "" {
|
||||||
if err != nil {
|
b.mc, err = matrix.NewClient(
|
||||||
return err
|
b.GetString("Server"), b.GetString("MxID"), b.GetString("Token"),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
b.UserID = b.GetString("MxID")
|
||||||
|
b.Log.Info("Using existing Matrix credentials")
|
||||||
|
} else {
|
||||||
|
b.mc, err = matrix.NewClient(b.GetString("Server"), "", "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
resp, err := b.mc.Login(&matrix.ReqLogin{
|
||||||
|
Type: "m.login.password",
|
||||||
|
User: b.GetString("Login"),
|
||||||
|
Password: b.GetString("Password"),
|
||||||
|
Identifier: matrix.NewUserIdentifier(b.GetString("Login")),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
b.mc.SetCredentials(resp.UserID, resp.AccessToken)
|
||||||
|
b.UserID = resp.UserID
|
||||||
|
b.Log.Info("Connection succeeded")
|
||||||
}
|
}
|
||||||
resp, err := b.mc.Login(&matrix.ReqLogin{
|
|
||||||
Type: "m.login.password",
|
|
||||||
User: b.GetString("Login"),
|
|
||||||
Password: b.GetString("Password"),
|
|
||||||
Identifier: matrix.NewUserIdentifier(b.GetString("Login")),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
b.mc.SetCredentials(resp.UserID, resp.AccessToken)
|
|
||||||
b.UserID = resp.UserID
|
|
||||||
b.Log.Info("Connection succeeded")
|
|
||||||
go b.handlematrix()
|
go b.handlematrix()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -1245,12 +1245,16 @@ ShowTopicChange=false
|
|||||||
#REQUIRED
|
#REQUIRED
|
||||||
Server="https://matrix.org"
|
Server="https://matrix.org"
|
||||||
|
|
||||||
#login/pass of your bot.
|
#Authentication for your bot.
|
||||||
|
#You can use either login/password OR mxid/token. The latter will be preferred if found.
|
||||||
#Use a dedicated user for this and not your own!
|
#Use a dedicated user for this and not your own!
|
||||||
#Messages sent from this user will not be relayed to avoid loops.
|
#Messages sent from this user will not be relayed to avoid loops.
|
||||||
#REQUIRED
|
#REQUIRED
|
||||||
Login="yourlogin"
|
Login="yourlogin"
|
||||||
Password="yourpass"
|
Password="yourpass"
|
||||||
|
#OR
|
||||||
|
MxID="@yourlogin:domain.tld"
|
||||||
|
Token="tokenforthebotuser"
|
||||||
|
|
||||||
#Whether to send the homeserver suffix. eg ":matrix.org" in @username:matrix.org
|
#Whether to send the homeserver suffix. eg ":matrix.org" in @username:matrix.org
|
||||||
#to other bridges, or only send "username".(true only sends username)
|
#to other bridges, or only send "username".(true only sends username)
|
||||||
|
Loading…
Reference in New Issue
Block a user