automatic refresh of access token
This commit is contained in:
parent
9a39b69dce
commit
9d7d8224c4
6
main.go
6
main.go
|
@ -244,8 +244,8 @@ func (bridge *Bridge) Start() {
|
|||
bridge.Log.Fatalln("Failed to initialize database:", err)
|
||||
os.Exit(15)
|
||||
}
|
||||
bridge.Log.Debugln("Checking connection to homeserver")
|
||||
bridge.ensureConnection()
|
||||
//bridge.Log.Debugln("Checking connection to homeserver")
|
||||
//bridge.ensureConnection()
|
||||
if bridge.Crypto != nil {
|
||||
err := bridge.Crypto.Init()
|
||||
if err != nil {
|
||||
|
@ -377,7 +377,7 @@ func (bridge *Bridge) Main() {
|
|||
|
||||
func main() {
|
||||
flag.SetHelpTitles(
|
||||
"matrix-skype - A Matrix-WhatsApp puppeting bridge.",
|
||||
"matrix-skype - A Matrix-Skype puppeting bridge.",
|
||||
"matrix-skype [-h] [-c <path>] [-r <path>] [-g] [--migrate-db <source type> <source uri>]")
|
||||
err := flag.Parse()
|
||||
if err != nil {
|
||||
|
|
77
portal.go
77
portal.go
|
@ -1476,18 +1476,33 @@ func (portal *Portal) HandleTextMessage(source *User, message skype.Resource) {
|
|||
}
|
||||
}
|
||||
}
|
||||
// portal.SetReplySkype(content, message)
|
||||
fmt.Printf("\nportal HandleTextMessage2: %+v", content)
|
||||
_, _ = intent.UserTyping(portal.MXID, false, 0)
|
||||
resp, err := portal.sendMessage(intent, event.EventMessage, content, message.Timestamp * 1000)
|
||||
if err != nil {
|
||||
portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
||||
return
|
||||
}
|
||||
fmt.Printf("\nportal HandleTextMessage3: %+v", content)
|
||||
resp, err := portal.trySendMessage(intent, event.EventMessage, content, source, message)
|
||||
if err == nil {
|
||||
portal.finishHandlingSkype(source, &message, resp.EventID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (portal *Portal) trySendMessage(intent *appservice.IntentAPI, eventType event.Type, content interface{}, source *User, message skype.Resource) (resp *mautrix.RespSendEvent, err error) {
|
||||
resp, err = portal.sendMessage(intent, eventType, content, message.Timestamp * 1000)
|
||||
if err != nil {
|
||||
portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
||||
if strings.Index(err.Error(), "M_UNKNOWN_TOKEN (HTTP 401)") > -1 {
|
||||
puppet := source.bridge.GetPuppetByJID(source.JID)
|
||||
err, accessToken := source.UpdateAccessToken(puppet)
|
||||
if err == nil && accessToken != "" {
|
||||
intent.AccessToken = accessToken
|
||||
resp, err = portal.sendMessage(intent, eventType, content, message.Timestamp * 1000)
|
||||
if err != nil {
|
||||
portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (portal *Portal) HandleLocationMessageSkype(source *User, message skype.Resource) {
|
||||
intent, endHandlePrivateChatFromMe := portal.startHandlingSkype(source, message)
|
||||
|
@ -1517,13 +1532,18 @@ func (portal *Portal) HandleLocationMessageSkype(source *User, message skype.Res
|
|||
// portal.SetReplySkype(content, message)
|
||||
|
||||
_, _ = intent.UserTyping(portal.MXID, false, 0)
|
||||
resp, err := portal.sendMessage(intent, event.EventMessage, content, message.Timestamp * 1000)
|
||||
if err != nil {
|
||||
portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := portal.trySendMessage(intent, event.EventMessage, content, source, message)
|
||||
if err == nil {
|
||||
portal.finishHandlingSkype(source, &message, resp.EventID)
|
||||
}
|
||||
//resp, err := portal.sendMessage(intent, event.EventMessage, content, message.Timestamp * 1000)
|
||||
//if err != nil {
|
||||
// portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
||||
// return
|
||||
//}
|
||||
//portal.finishHandlingSkype(source, &message, resp.EventID)
|
||||
}
|
||||
|
||||
func (portal *Portal) HandleContactMessageSkype(source *User, message skype.Resource) {
|
||||
intent, endHandlePrivateChatFromMe := portal.startHandlingSkype(source, message)
|
||||
|
@ -1547,24 +1567,28 @@ func (portal *Portal) HandleContactMessageSkype(source *User, message skype.Reso
|
|||
// portal.SetReplySkype(content, message)
|
||||
|
||||
_, _ = intent.UserTyping(portal.MXID, false, 0)
|
||||
resp, err := portal.sendMessage(intent, event.EventMessage, content, message.Timestamp * 1000)
|
||||
if err != nil {
|
||||
portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
||||
return
|
||||
}
|
||||
resp, err := portal.trySendMessage(intent, event.EventMessage, content, source, message)
|
||||
if err == nil {
|
||||
portal.finishHandlingSkype(source, &message, resp.EventID)
|
||||
}
|
||||
//resp, err := portal.sendMessage(intent, event.EventMessage, content, message.Timestamp * 1000)
|
||||
//if err != nil {
|
||||
// portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
||||
// return
|
||||
//}
|
||||
//portal.finishHandlingSkype(source, &message, resp.EventID)
|
||||
}
|
||||
|
||||
func (portal *Portal) sendMediaBridgeFailureSkype(source *User, intent *appservice.IntentAPI, info skype.Resource, downloadErr error) {
|
||||
portal.log.Errorfln("Failed to download media for %s: %v", info.Id, downloadErr)
|
||||
resp, err := portal.sendMessage(intent, event.EventMessage, &event.MessageEventContent{
|
||||
resp, err := portal.trySendMessage(intent, event.EventMessage, &event.MessageEventContent{
|
||||
MsgType: event.MsgNotice,
|
||||
Body: "Failed to bridge media",
|
||||
}, int64(info.Timestamp*1000))
|
||||
if err != nil {
|
||||
portal.log.Errorfln("Failed to send media download error message for %s: %v", info.Id, err)
|
||||
} else {
|
||||
}, source, info)
|
||||
if err == nil {
|
||||
portal.finishHandlingSkype(source, &info, resp.EventID)
|
||||
} else {
|
||||
portal.log.Errorfln("Failed to send media download error message for %s: %v", info.Id, err)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1747,10 +1771,10 @@ func (portal *Portal) HandleMediaMessageSkype(source *User, download func(conn *
|
|||
if sendAsSticker {
|
||||
eventType = event.EventSticker
|
||||
}
|
||||
resp, err := portal.sendMessage(intent, eventType, content, info.Timestamp * 1000)
|
||||
if err != nil {
|
||||
portal.log.Errorfln("Failed to handle message %s: %v", info.Id, err)
|
||||
return
|
||||
|
||||
resp, err := portal.trySendMessage(intent, eventType, content, source, info)
|
||||
if err == nil {
|
||||
portal.finishHandlingSkype(source, &info, resp.EventID)
|
||||
}
|
||||
|
||||
//if len(caption) > 0 {
|
||||
|
@ -1767,7 +1791,6 @@ func (portal *Portal) HandleMediaMessageSkype(source *User, download func(conn *
|
|||
// }
|
||||
// // TODO store caption mxid?
|
||||
//}
|
||||
portal.finishHandlingSkype(source, &info, resp.EventID)
|
||||
}
|
||||
|
||||
func makeMessageID() *string {
|
||||
|
|
14
user.go
14
user.go
|
@ -3,6 +3,7 @@ package main
|
|||
import (
|
||||
"encoding/json"
|
||||
"encoding/xml"
|
||||
"errors"
|
||||
"fmt"
|
||||
skype "github.com/kelaresg/go-skypeapi"
|
||||
skypeExt "github.com/kelaresg/matrix-skype/skype-ext"
|
||||
|
@ -461,7 +462,17 @@ func (user *User) tryAutomaticDoublePuppeting() {
|
|||
return
|
||||
}
|
||||
fmt.Println("tryAutomaticDoublePuppeting2", user.MXID)
|
||||
accessToken, err := puppet.loginWithSharedSecret(user.MXID)
|
||||
_,_ = user.UpdateAccessToken(puppet)
|
||||
}
|
||||
|
||||
func (user *User) UpdateAccessToken(puppet *Puppet) (err error, accessToken string) {
|
||||
if len(user.bridge.Config.Bridge.LoginSharedSecret) == 0 {
|
||||
return errors.New("you didn't set LoginSharedSecret"), ""
|
||||
} else if _, homeserver, _ := user.MXID.Parse(); homeserver != user.bridge.Config.Homeserver.Domain {
|
||||
// user is on another homeserver
|
||||
return errors.New("user is on another homeServer"), ""
|
||||
}
|
||||
accessToken, err = puppet.loginWithSharedSecret(user.MXID)
|
||||
if err != nil {
|
||||
user.log.Warnln("Failed to login with shared secret:", err)
|
||||
return
|
||||
|
@ -472,6 +483,7 @@ func (user *User) tryAutomaticDoublePuppeting() {
|
|||
return
|
||||
}
|
||||
user.log.Infoln("Successfully automatically enabled custom puppet")
|
||||
return
|
||||
}
|
||||
|
||||
func (user *User) intPostLogin() {
|
||||
|
|
Loading…
Reference in New Issue