diff options
author | Jason Robinson <mail@jasonrobinson.me> | 2021-05-17 01:10:13 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-17 00:10:13 +0200 |
commit | 714a2ad7303f0d7b51b8b7f6c5f86f02a99c3524 (patch) | |
tree | d86c0a9ed9c3030ac771567cd10b7e8de73c2fca /bridge/matrix | |
parent | fa8b96dfa17caf9f67e496deb2d2363cffaad1eb (diff) | |
download | matterbridge-msglm-714a2ad7303f0d7b51b8b7f6c5f86f02a99c3524.tar.gz matterbridge-msglm-714a2ad7303f0d7b51b8b7f6c5f86f02a99c3524.tar.bz2 matterbridge-msglm-714a2ad7303f0d7b51b8b7f6c5f86f02a99c3524.zip |
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
Diffstat (limited to 'bridge/matrix')
-rw-r--r-- | bridge/matrix/matrix.go | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/bridge/matrix/matrix.go b/bridge/matrix/matrix.go index 69d0264b..9516a4fa 100644 --- a/bridge/matrix/matrix.go +++ b/bridge/matrix/matrix.go @@ -75,22 +75,33 @@ func New(cfg *bridge.Config) bridge.Bridger { func (b *Bmatrix) Connect() error { var err error b.Log.Infof("Connecting %s", b.GetString("Server")) - 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 + if b.GetString("MxID") != "" && b.GetString("Token") != "" { + b.mc, err = matrix.NewClient( + 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") } - b.mc.SetCredentials(resp.UserID, resp.AccessToken) - b.UserID = resp.UserID - b.Log.Info("Connection succeeded") go b.handlematrix() return nil } |