mirror of
https://github.com/zitadel/zitadel.git
synced 2024-12-13 11:34:26 +00:00
e318139b37
* implement notification providers * email provider * notification handler * notify users * implement code sent on user eventstore * send email implementation * send init code * handle codes * fix project member handler * add some logs for debug * send emails * text changes * send sms * notification process * send password code * format phone number * test format phone * remove fmts * remove unused code * rename files * add mocks * merge master * Update internal/notification/providers/email/message.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/repository/eventsourcing/handler/notification.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/repository/eventsourcing/handler/notification.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/providers/email/provider.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * requested changes of mr * move locker to eventstore pkg * Update internal/notification/providers/chat/message.go Co-authored-by: Livio Amstutz <livio.a@gmail.com> * move locker to eventstore pkg * linebreak * Update internal/notification/providers/email/provider.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/repository/eventsourcing/handler/notification.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/repository/eventsourcing/handler/notification.go Co-authored-by: Silvan <silvan.reusser@gmail.com> Co-authored-by: Silvan <silvan.reusser@gmail.com> Co-authored-by: Livio Amstutz <livio.a@gmail.com>
76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package chat
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
caos_errs "github.com/caos/zitadel/internal/errors"
|
|
"github.com/caos/zitadel/internal/notification/providers"
|
|
"net/http"
|
|
"net/url"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
type Chat struct {
|
|
URL *url.URL
|
|
SplitCount int
|
|
}
|
|
|
|
func InitChatProvider(config ChatConfig) (*Chat, error) {
|
|
url, err := url.Parse(config.Url)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &Chat{
|
|
URL: url,
|
|
SplitCount: config.SplitCount,
|
|
}, nil
|
|
}
|
|
|
|
func (chat *Chat) CanHandleMessage(_ providers.Message) bool {
|
|
return true
|
|
}
|
|
|
|
func (chat *Chat) HandleMessage(message providers.Message) error {
|
|
contentText := message.GetContent()
|
|
for _, splittedMsg := range splitMessage(contentText, chat.SplitCount) {
|
|
chatMsg := &ChatMessage{Text: splittedMsg}
|
|
if err := chat.SendMessage(chatMsg); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (chat *Chat) SendMessage(message providers.Message) error {
|
|
chatMsg, ok := message.(*ChatMessage)
|
|
if !ok {
|
|
return caos_errs.ThrowInternal(nil, "EMAIL-s8JLs", "message is not ChatMessage")
|
|
}
|
|
req, err := json.Marshal(chatMsg)
|
|
if err != nil {
|
|
return caos_errs.ThrowInternal(err, "PROVI-s8uie", "Could not unmarshal content")
|
|
}
|
|
|
|
_, err = http.Post(chat.URL.String(), "application/json; charset=UTF-8", bytes.NewReader(req))
|
|
if err != nil {
|
|
return caos_errs.ThrowInternal(err, "PROVI-si93s", "unable to send message")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func splitMessage(message string, count int) []string {
|
|
if count == 0 {
|
|
return []string{message}
|
|
}
|
|
var splits []string
|
|
var l, r int
|
|
for l, r = 0, count; r < len(message); l, r = r, r+count {
|
|
for !utf8.RuneStart(message[r]) {
|
|
r--
|
|
}
|
|
splits = append(splits, message[l:r])
|
|
}
|
|
splits = append(splits, message[l:])
|
|
return splits
|
|
}
|