From 86d36cc02e3a821d7fa8db13d872ac6a53bd2049 Mon Sep 17 00:00:00 2001 From: Martin/Geno Date: Fri, 30 Aug 2019 17:28:21 +0200 Subject: [PATCH] threema refactory --- .gitmodules | 4 -- component/threema/receive.go | 107 ++++++++++++++++++----------------- component/threema/send.go | 25 +++++--- vendor/github.com/o3ma/o3 | 2 +- vendor/gosrc.io/xmpp | 1 - 5 files changed, 73 insertions(+), 66 deletions(-) delete mode 160000 vendor/gosrc.io/xmpp diff --git a/.gitmodules b/.gitmodules index 90bec11..13f1061 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,3 @@ [submodule "vendor/github.com/o3ma/o3"] path = vendor/github.com/o3ma/o3 url = https://github.com/genofire/o3.git -[submodule "vendor/gosrc.io/xmpp"] - path = vendor/gosrc.io/xmpp - url = https://github.com/genofire/go-xmpp.git - branch = patch-1 diff --git a/component/threema/receive.go b/component/threema/receive.go index a6ef42b..64b38c5 100644 --- a/component/threema/receive.go +++ b/component/threema/receive.go @@ -19,13 +19,14 @@ func (a *Account) receiver(out chan<- stanza.Packet) { out <- xMSG continue } - sender := receivedMessage.Msg.Sender().String() + header := receivedMessage.Msg.Header() + sender := header.Sender.String() if string(a.TID) == sender { continue } if p, err := a.receiving(receivedMessage.Msg); err != nil { xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String()}) - xMSG.Body = fmt.Sprintf("error on decoding message: %s\n%v", err, receivedMessage.Msg.Serialize()) + xMSG.Body = fmt.Sprintf("error on decoding message: %s\n%v", err, receivedMessage.Msg) out <- xMSG } else if p != nil { out <- p @@ -40,77 +41,77 @@ func requestExtensions(xMSG *stanza.Message) { } func (a *Account) receiving(receivedMessage o3.Message) (stanza.Packet, error) { + header := receivedMessage.Header() + sender := header.Sender.String() logger := log.WithFields(map[string]interface{}{ - "from": receivedMessage.Sender().String(), + "from": header.Sender.String(), "to": a.XMPP.String(), }) switch msg := receivedMessage.(type) { case o3.TextMessage: - sender := msg.Sender().String() - xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String(), Id: strconv.FormatUint(msg.ID(), 10)}) - xMSG.Body = msg.Text() + xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String(), Id: strconv.FormatUint(header.ID, 10)}) + xMSG.Body = msg.Body requestExtensions(&xMSG) logger.WithField("text", xMSG.Body).Debug("send text") return xMSG, nil + /* + case o3.AudioMessage: + if a.threema.httpUploadPath == "" { + return nil, errors.New("no place to store files at transport configurated") + } + data, err := msg.GetAudioData(a.Session) + if err != nil { + logger.Warnf("unable to read data from message: %s", err) + return nil, err + } + xMSG, err := a.FileToXMPP(sender.String(), header.ID, "mp3", data) + if err != nil { + logger.Warnf("unable to create data from message: %s", err) + return nil, err + } + xMSG.Type = "chat" + requestExtensions(&xMSG) + logger.WithField("url", xMSG.Body).Debug("send audio") + return xMSG, nil - case o3.AudioMessage: - if a.threema.httpUploadPath == "" { - return nil, errors.New("no place to store files at transport configurated") - } - data, err := msg.GetAudioData(a.Session) - if err != nil { - logger.Warnf("unable to read data from message: %s", err) - return nil, err - } - xMSG, err := a.FileToXMPP(msg.Sender().String(), msg.ID(), "mp3", data) - if err != nil { - logger.Warnf("unable to create data from message: %s", err) - return nil, err - } - xMSG.Type = "chat" - requestExtensions(&xMSG) - logger.WithField("url", xMSG.Body).Debug("send audio") - return xMSG, nil - - case o3.ImageMessage: - if a.threema.httpUploadPath == "" { - return nil, errors.New("no place to store files at transport configurated") - } - data, err := msg.GetImageData(a.Session) - if err != nil { - logger.Warnf("unable to read data from message: %s", err) - return nil, err - } - xMSG, err := a.FileToXMPP(msg.Sender().String(), msg.ID(), "jpg", data) - if err != nil { - logger.Warnf("unable to create data from message: %s", err) - return nil, err - } - xMSG.Type = "chat" - requestExtensions(&xMSG) - logger.WithField("url", xMSG.Body).Debug("send image") - return xMSG, nil - + case o3.ImageMessage: + if a.threema.httpUploadPath == "" { + return nil, errors.New("no place to store files at transport configurated") + } + data, err := msg.GetImageData(a.Session) + if err != nil { + logger.Warnf("unable to read data from message: %s", err) + return nil, err + } + xMSG, err := a.FileToXMPP(sender.String(), header.ID, "jpg", data) + if err != nil { + logger.Warnf("unable to create data from message: %s", err) + return nil, err + } + xMSG.Type = "chat" + requestExtensions(&xMSG) + logger.WithField("url", xMSG.Body).Debug("send image") + return xMSG, nil + */ case o3.DeliveryReceiptMessage: - msgID := msg.MsgID() - xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: msg.Sender().String(), To: a.XMPP.String()}) + xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String()}) state := "" - if msg.Status() == o3.MSGDELIVERED { + if msg.Status == o3.MSGDELIVERED { state = "delivered" - if id, ok := a.deliveredMSG[msgID]; ok { + if id, ok := a.deliveredMSG[msg.MessageID]; ok { xMSG.Extensions = append(xMSG.Extensions, stanza.ReceiptReceived{ID: id}) xMSG.Extensions = append(xMSG.Extensions, stanza.MarkReceived{ID: id}) - delete(a.deliveredMSG, msgID) + delete(a.deliveredMSG, msg.MessageID) } else { logger.Warnf("found not id in cache to announce received on xmpp side") } } - if msg.Status() == o3.MSGREAD { + if msg.Status == o3.MSGREAD { state = "displayed" - if id, ok := a.readedMSG[msgID]; ok { + if id, ok := a.readedMSG[msg.MessageID]; ok { xMSG.Extensions = append(xMSG.Extensions, stanza.MarkDisplayed{ID: id}) - delete(a.readedMSG, msgID) + delete(a.readedMSG, msg.MessageID) } else { logger.Warnf("found not id in cache to announce readed on xmpp side") } @@ -122,7 +123,7 @@ func (a *Account) receiving(receivedMessage o3.Message) (stanza.Packet, error) { } return nil, nil case o3.TypingNotificationMessage: - xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: msg.Sender().String(), To: a.XMPP.String(), Id: strconv.FormatUint(msg.ID(), 10)}) + xMSG := stanza.NewMessage(stanza.Attrs{Type: stanza.MessageTypeChat, From: sender, To: a.XMPP.String(), Id: strconv.FormatUint(header.ID, 10)}) if msg.OnOff != 0 { logger.Debug("composing") xMSG.Extensions = append(xMSG.Extensions, stanza.StateComposing{}) diff --git a/component/threema/send.go b/component/threema/send.go index efcaf22..be61f45 100644 --- a/component/threema/send.go +++ b/component/threema/send.go @@ -23,6 +23,7 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) { "from": a.XMPP.String(), "to": to, }) + msg3To := o3.NewIDString(to) chatState := false chatStateComposing := false @@ -65,7 +66,13 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) { if msgStateRead { msgType = o3.MSGREAD } - drm, err := o3.NewDeliveryReceiptMessage(&a.Session, to, id, msgType) + drm := o3.DeliveryReceiptMessage{ + MessageHeader: &o3.MessageHeader{ + ID: id, + Recipient: msg3To, + }, + Status: msgType, + } if err != nil { return nil, err } @@ -86,17 +93,21 @@ func (a *Account) sending(to string, msg stanza.Message) (o3.Message, error) { return nil, nil } } + msg3ID := o3.NewMsgID() // send text message - msg3, err := o3.NewTextMessage(&a.Session, to, msg.Body) - if err != nil { - return nil, err + msg3 := o3.TextMessage{ + MessageHeader: &o3.MessageHeader{ + ID: msg3ID, + Recipient: msg3To, + }, + Body: msg.Body, } - a.deliveredMSG[msg3.ID()] = msg.Id - a.readedMSG[msg3.ID()] = msg.Id + a.deliveredMSG[msg3ID] = msg.Id + a.readedMSG[msg3ID] = msg.Id logger.WithFields(map[string]interface{}{ "x_id": msg.Id, - "t_id": msg3.ID(), + "t_id": msg3ID, "text": msg.Body, }).Debug("send text") return msg3, nil diff --git a/vendor/github.com/o3ma/o3 b/vendor/github.com/o3ma/o3 index 6f04471..66f2754 160000 --- a/vendor/github.com/o3ma/o3 +++ b/vendor/github.com/o3ma/o3 @@ -1 +1 @@ -Subproject commit 6f04471a270e0b968bfa499b4d5d6d640141afb9 +Subproject commit 66f27545d5a9da225445ffe22ce5291349b86235 diff --git a/vendor/gosrc.io/xmpp b/vendor/gosrc.io/xmpp deleted file mode 160000 index ca13581..0000000 --- a/vendor/gosrc.io/xmpp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ca13581329dd9a42961025a6b8e935b7a59a08de