mirror of
https://github.com/balzack/databag.git
synced 2025-02-11 19:19:16 +00:00
62 lines
1.6 KiB
Go
62 lines
1.6 KiB
Go
package repeater
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"runtime"
|
|
"strings"
|
|
"fmt"
|
|
"firebase.google.com/go/v4/messaging"
|
|
)
|
|
|
|
func ParseRequest(r *http.Request, w http.ResponseWriter, obj interface{}) error {
|
|
r.Body = http.MaxBytesReader(w, r.Body, 1024)
|
|
dec := json.NewDecoder(r.Body)
|
|
return dec.Decode(&obj)
|
|
}
|
|
|
|
func WriteResponse(w http.ResponseWriter, v interface{}) {
|
|
body, err := json.Marshal(v)
|
|
if err != nil {
|
|
_, file, line, _ := runtime.Caller(1)
|
|
p, _ := os.Getwd()
|
|
log.Printf("%s:%d %s", strings.TrimPrefix(file, p), line, err.Error())
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
} else {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
w.Write(body)
|
|
}
|
|
}
|
|
|
|
//Notify proxies push notification to device
|
|
func Notify(w http.ResponseWriter, r *http.Request) {
|
|
|
|
var msg PushMessage
|
|
if err := ParseRequest(r, w, &msg); err != nil {
|
|
ErrResponse(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
// See documentation on defining a message payload.
|
|
notification := &messaging.Notification{ Title: msg.Title, Body: msg.Body }
|
|
message := &messaging.Message{
|
|
Notification : notification,
|
|
Token: msg.Token,
|
|
}
|
|
|
|
// Send a message to the device corresponding to the provided
|
|
// registration token.
|
|
response, err := FCMClient.Send(FCMContext, message)
|
|
if err != nil {
|
|
ErrResponse(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
// Response is a message ID string.
|
|
fmt.Println("Successfully sent message:", response)
|
|
|
|
res := &PushResponse{ Message: response }
|
|
WriteResponse(w, res);
|
|
}
|