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)
|
bridge.Log.Fatalln("Failed to initialize database:", err)
|
||||||
os.Exit(15)
|
os.Exit(15)
|
||||||
}
|
}
|
||||||
bridge.Log.Debugln("Checking connection to homeserver")
|
//bridge.Log.Debugln("Checking connection to homeserver")
|
||||||
bridge.ensureConnection()
|
//bridge.ensureConnection()
|
||||||
if bridge.Crypto != nil {
|
if bridge.Crypto != nil {
|
||||||
err := bridge.Crypto.Init()
|
err := bridge.Crypto.Init()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -377,7 +377,7 @@ func (bridge *Bridge) Main() {
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.SetHelpTitles(
|
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>]")
|
"matrix-skype [-h] [-c <path>] [-r <path>] [-g] [--migrate-db <source type> <source uri>]")
|
||||||
err := flag.Parse()
|
err := flag.Parse()
|
||||||
if err != nil {
|
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)
|
fmt.Printf("\nportal HandleTextMessage2: %+v", content)
|
||||||
_, _ = intent.UserTyping(portal.MXID, false, 0)
|
_, _ = intent.UserTyping(portal.MXID, false, 0)
|
||||||
resp, err := portal.sendMessage(intent, event.EventMessage, content, message.Timestamp * 1000)
|
resp, err := portal.trySendMessage(intent, event.EventMessage, content, source, message)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
fmt.Printf("\nportal HandleTextMessage3: %+v", content)
|
|
||||||
portal.finishHandlingSkype(source, &message, resp.EventID)
|
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) {
|
func (portal *Portal) HandleLocationMessageSkype(source *User, message skype.Resource) {
|
||||||
intent, endHandlePrivateChatFromMe := portal.startHandlingSkype(source, message)
|
intent, endHandlePrivateChatFromMe := portal.startHandlingSkype(source, message)
|
||||||
|
@ -1517,13 +1532,18 @@ func (portal *Portal) HandleLocationMessageSkype(source *User, message skype.Res
|
||||||
// portal.SetReplySkype(content, message)
|
// portal.SetReplySkype(content, message)
|
||||||
|
|
||||||
_, _ = intent.UserTyping(portal.MXID, false, 0)
|
_, _ = intent.UserTyping(portal.MXID, false, 0)
|
||||||
resp, err := portal.sendMessage(intent, event.EventMessage, content, message.Timestamp * 1000)
|
|
||||||
if err != nil {
|
resp, err := portal.trySendMessage(intent, event.EventMessage, content, source, message)
|
||||||
portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
if err == nil {
|
||||||
return
|
|
||||||
}
|
|
||||||
portal.finishHandlingSkype(source, &message, resp.EventID)
|
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) {
|
func (portal *Portal) HandleContactMessageSkype(source *User, message skype.Resource) {
|
||||||
intent, endHandlePrivateChatFromMe := portal.startHandlingSkype(source, message)
|
intent, endHandlePrivateChatFromMe := portal.startHandlingSkype(source, message)
|
||||||
|
@ -1547,24 +1567,28 @@ func (portal *Portal) HandleContactMessageSkype(source *User, message skype.Reso
|
||||||
// portal.SetReplySkype(content, message)
|
// portal.SetReplySkype(content, message)
|
||||||
|
|
||||||
_, _ = intent.UserTyping(portal.MXID, false, 0)
|
_, _ = intent.UserTyping(portal.MXID, false, 0)
|
||||||
resp, err := portal.sendMessage(intent, event.EventMessage, content, message.Timestamp * 1000)
|
resp, err := portal.trySendMessage(intent, event.EventMessage, content, source, message)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
portal.log.Errorfln("Failed to handle message %s: %v", message.Id, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
portal.finishHandlingSkype(source, &message, resp.EventID)
|
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) {
|
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)
|
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,
|
MsgType: event.MsgNotice,
|
||||||
Body: "Failed to bridge media",
|
Body: "Failed to bridge media",
|
||||||
}, int64(info.Timestamp*1000))
|
}, source, info)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
portal.log.Errorfln("Failed to send media download error message for %s: %v", info.Id, err)
|
|
||||||
} else {
|
|
||||||
portal.finishHandlingSkype(source, &info, resp.EventID)
|
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 {
|
if sendAsSticker {
|
||||||
eventType = event.EventSticker
|
eventType = event.EventSticker
|
||||||
}
|
}
|
||||||
resp, err := portal.sendMessage(intent, eventType, content, info.Timestamp * 1000)
|
|
||||||
if err != nil {
|
resp, err := portal.trySendMessage(intent, eventType, content, source, info)
|
||||||
portal.log.Errorfln("Failed to handle message %s: %v", info.Id, err)
|
if err == nil {
|
||||||
return
|
portal.finishHandlingSkype(source, &info, resp.EventID)
|
||||||
}
|
}
|
||||||
|
|
||||||
//if len(caption) > 0 {
|
//if len(caption) > 0 {
|
||||||
|
@ -1767,7 +1791,6 @@ func (portal *Portal) HandleMediaMessageSkype(source *User, download func(conn *
|
||||||
// }
|
// }
|
||||||
// // TODO store caption mxid?
|
// // TODO store caption mxid?
|
||||||
//}
|
//}
|
||||||
portal.finishHandlingSkype(source, &info, resp.EventID)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeMessageID() *string {
|
func makeMessageID() *string {
|
||||||
|
|
14
user.go
14
user.go
|
@ -3,6 +3,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
skype "github.com/kelaresg/go-skypeapi"
|
skype "github.com/kelaresg/go-skypeapi"
|
||||||
skypeExt "github.com/kelaresg/matrix-skype/skype-ext"
|
skypeExt "github.com/kelaresg/matrix-skype/skype-ext"
|
||||||
|
@ -461,7 +462,17 @@ func (user *User) tryAutomaticDoublePuppeting() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Println("tryAutomaticDoublePuppeting2", user.MXID)
|
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 {
|
if err != nil {
|
||||||
user.log.Warnln("Failed to login with shared secret:", err)
|
user.log.Warnln("Failed to login with shared secret:", err)
|
||||||
return
|
return
|
||||||
|
@ -472,6 +483,7 @@ func (user *User) tryAutomaticDoublePuppeting() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
user.log.Infoln("Successfully automatically enabled custom puppet")
|
user.log.Infoln("Successfully automatically enabled custom puppet")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (user *User) intPostLogin() {
|
func (user *User) intPostLogin() {
|
||||||
|
|
Loading…
Reference in New Issue