diff --git a/README.md b/README.md index bcdea955..d94a9f44 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Databag is a self-hosted messaging service. Notable features include: - Decentralized (direct communication between app and server node) - Federated (accounts on different nodes can communicate) - Public-Private key based identity (not bound to any blockchain or hosting domain) -- End-to-End encryption (the hosting admin cannot view sealed topics) +- End-to-End encryption (the hosting admin cannot view sealed topics, deafult unsealed) - Audio and Video Calls (nat tranversal requires separate relay server) - Topic based threads (messages organized by topic not contacts) - Lightweight (server can run on a raspberry pi zero v1.3) diff --git a/net/server/internal/api_setPushEvent.go b/net/server/internal/api_setPushEvent.go index d328ad3d..87df7ac0 100644 --- a/net/server/internal/api_setPushEvent.go +++ b/net/server/internal/api_setPushEvent.go @@ -52,36 +52,43 @@ func SendPushEvent(account store.Account, event string) { ErrMsg(err); return } + + tokens := make(map[string]bool) for rows.Next() { var pushToken string var messageTitle string var messageBody string + rows.Scan(&pushToken, &messageTitle, &messageBody) - url := "https://fcm.googleapis.com/fcm/send" - payload := Payload{ Title: messageTitle, Body: messageBody, Sound: "default" }; - message := Message{ Notification: payload, To: pushToken }; + if _, exists := tokens[pushToken]; !exists { + tokens[pushToken] = true; - body, err := json.Marshal(message) - if err != nil { - ErrMsg(err) - continue - } - req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(body)) - if err != nil { - ErrMsg(err) - continue - } - req.Header.Set("Content-Type", "application/json; charset=utf-8") - req.Header.Set("Authorization", "key=AAAAkgDXt8c:APA91bEjH67QpUWU6uAfCIXLqm0kf6AdPNVICZPCcWbmgW9NGYIErAxMDTy4LEbe4ik93Ho4Z-AJNIhr6nXXKC9qKmyKkkYHJWAEVH47_FXBQV6rsoi9ZB_oiuV66XKKAy1V40GmvfaX") - client := &http.Client{} - resp, err := client.Do(req) - if err != nil { - ErrMsg(err) - continue - } - if resp.StatusCode != 200 { - ErrMsg(errors.New("failed to push notification")); + url := "https://fcm.googleapis.com/fcm/send" + payload := Payload{ Title: messageTitle, Body: messageBody, Sound: "default" }; + message := Message{ Notification: payload, To: pushToken }; + + body, err := json.Marshal(message) + if err != nil { + ErrMsg(err) + continue + } + req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(body)) + if err != nil { + ErrMsg(err) + continue + } + req.Header.Set("Content-Type", "application/json; charset=utf-8") + req.Header.Set("Authorization", "key=AAAAkgDXt8c:APA91bEjH67QpUWU6uAfCIXLqm0kf6AdPNVICZPCcWbmgW9NGYIErAxMDTy4LEbe4ik93Ho4Z-AJNIhr6nXXKC9qKmyKkkYHJWAEVH47_FXBQV6rsoi9ZB_oiuV66XKKAy1V40GmvfaX") + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + ErrMsg(err) + continue + } + if resp.StatusCode != 200 { + ErrMsg(errors.New("failed to push notification")); + } } } }