handle xmpp message
This commit is contained in:
		
							parent
							
								
									3787c86fbf
								
							
						
					
					
						commit
						587e0b1e15
					
				|  | @ -0,0 +1,18 @@ | |||
| package threema | ||||
| 
 | ||||
| import "errors" | ||||
| 
 | ||||
| type ThreemaAccount struct { | ||||
| 	ID string | ||||
| } | ||||
| 
 | ||||
| func (t *Threema) getAccount(jid string) *ThreemaAccount { | ||||
| 	return &ThreemaAccount{} | ||||
| } | ||||
| 
 | ||||
| func (a *ThreemaAccount) Send(to string, msg string) error { | ||||
| 	if a.ID == "" { | ||||
| 		return errors.New("It was not possible to send, becaouse we have no account for you.\nPlease generate one, by sending `generate` to gateway") | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | @ -1,12 +1,17 @@ | |||
| package threema | ||||
| 
 | ||||
| import ( | ||||
| 	"dev.sum7.eu/genofire/thrempp/component" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/bdlm/log" | ||||
| 	"gosrc.io/xmpp" | ||||
| 
 | ||||
| 	"dev.sum7.eu/genofire/thrempp/component" | ||||
| ) | ||||
| 
 | ||||
| type Threema struct { | ||||
| 	component.Component | ||||
| 	out chan xmpp.Packet | ||||
| } | ||||
| 
 | ||||
| func NewThreema(config map[string]interface{}) (component.Component, error) { | ||||
|  | @ -14,8 +19,28 @@ func NewThreema(config map[string]interface{}) (component.Component, error) { | |||
| } | ||||
| 
 | ||||
| func (t *Threema) Connect() (chan xmpp.Packet, error) { | ||||
| 	c := make(chan xmpp.Packet) | ||||
| 	return c, nil | ||||
| 	t.out = make(chan xmpp.Packet) | ||||
| 	return t.out, nil | ||||
| } | ||||
| func (t *Threema) Send(packet xmpp.Packet) { | ||||
| 	switch p := packet.(type) { | ||||
| 	case xmpp.Message: | ||||
| 		attrs := p.PacketAttrs | ||||
| 		account := t.getAccount(attrs.From) | ||||
| 		log.WithFields(map[string]interface{}{ | ||||
| 			"from": attrs.From, | ||||
| 			"to":   attrs.To, | ||||
| 		}).Debug(p.Body) | ||||
| 		threemaID := strings.ToUpper(strings.Split(attrs.To, "@")[0]) | ||||
| 		err := account.Send(threemaID, p.Body) | ||||
| 		if err != nil { | ||||
| 			msg := xmpp.NewMessage("chat", "", attrs.From, "", "en") | ||||
| 			msg.Body = err.Error() | ||||
| 			t.out <- msg | ||||
| 		} | ||||
| 	default: | ||||
| 		log.Warnf("unkown package%v", p) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func init() { | ||||
|  |  | |||
|  | @ -33,26 +33,47 @@ func (c *Config) Start() error { | |||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c *Config) recieve(chan xmpp.Packet) { | ||||
| func (c *Config) recieve(packets chan xmpp.Packet) { | ||||
| 	logger := log.WithField("type", c.Type) | ||||
| 	for packet := range packets { | ||||
| 		switch p := packet.(type) { | ||||
| 		case xmpp.Message: | ||||
| 			if p.PacketAttrs.From == "" { | ||||
| 				p.PacketAttrs.From = c.Host | ||||
| 			} else { | ||||
| 				p.PacketAttrs.From += "@" + c.Host | ||||
| 			} | ||||
| 			loggerMSG := logger.WithFields(map[string]interface{}{ | ||||
| 				"from": p.PacketAttrs.From, | ||||
| 				"to":   p.PacketAttrs.To, | ||||
| 			}) | ||||
| 			loggerMSG.Debug(p.Body) | ||||
| 			c.xmpp.Send(p) | ||||
| 		default: | ||||
| 			log.Warn("ignoring packet:", packet) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| func (c *Config) sender() { | ||||
| 	logger := log.WithField("type", c.Type) | ||||
| 	for { | ||||
| 		logger.Debug("wait fo recieve") | ||||
| 		packet, err := c.xmpp.ReadPacket() | ||||
| 		if err != nil { | ||||
| 			logger.Panicf("connection closed%s", err) | ||||
| 			return | ||||
| 		} | ||||
| 		logger.Debug("recieve") | ||||
| 
 | ||||
| 		switch p := packet.(type) { | ||||
| 		case xmpp.IQ: | ||||
| 			attrs := p.PacketAttrs | ||||
| 			loggerIQ := logger.WithFields(map[string]interface{}{ | ||||
| 				"from": attrs.From, | ||||
| 				"to":   attrs.To, | ||||
| 			}) | ||||
| 
 | ||||
| 			switch inner := p.Payload[0].(type) { | ||||
| 			case *xmpp.DiscoInfo: | ||||
| 				logger.Debug("Disco Info") | ||||
| 				loggerIQ.Debug("Disco Info") | ||||
| 				if p.Type == "get" { | ||||
| 					iq := xmpp.NewIQ("result", attrs.To, attrs.From, attrs.Id, "en") | ||||
| 					var identity xmpp.Identity | ||||
|  | @ -76,7 +97,7 @@ func (c *Config) sender() { | |||
| 					_ = c.xmpp.Send(iq) | ||||
| 				} | ||||
| 			case *xmpp.DiscoItems: | ||||
| 				logger.Debug("DiscoItems") | ||||
| 				loggerIQ.Debug("DiscoItems") | ||||
| 				if p.Type == "get" { | ||||
| 					iq := xmpp.NewIQ("result", attrs.To, attrs.From, attrs.Id, "en") | ||||
| 
 | ||||
|  | @ -103,7 +124,7 @@ func (c *Config) sender() { | |||
| 			} | ||||
| 
 | ||||
| 		case xmpp.Message: | ||||
| 			logger.Info("Received message:", p.Body) | ||||
| 			c.comp.Send(packet) | ||||
| 
 | ||||
| 		case xmpp.Presence: | ||||
| 			logger.Info("Received presence:", p.Type) | ||||
|  |  | |||
		Reference in New Issue