Extract notification into separete package and interface
This commit is contained in:
parent
1c8d32c451
commit
4aaeeb6ebf
|
@ -3,18 +3,12 @@ package api
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/NaySoftware/go-fcm"
|
|
||||||
"github.com/ethereum/go-ethereum/accounts/keystore"
|
"github.com/ethereum/go-ethereum/accounts/keystore"
|
||||||
gethcommon "github.com/ethereum/go-ethereum/common"
|
gethcommon "github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/status-im/status-go/geth/common"
|
"github.com/status-im/status-go/geth/common"
|
||||||
"github.com/status-im/status-go/geth/log"
|
|
||||||
"github.com/status-im/status-go/geth/params"
|
"github.com/status-im/status-go/geth/params"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
serverKey = "AAAAxwa-r08:APA91bFtMIToDVKGAmVCm76iEXtA4dn9MPvLdYKIZqAlNpLJbd12EgdBI9DSDSXKdqvIAgLodepmRhGVaWvhxnXJzVpE6MoIRuKedDV3kfHSVBhWFqsyoLTwXY4xeufL9Sdzb581U-lx"
|
|
||||||
)
|
|
||||||
|
|
||||||
// StatusAPI provides API to access Status related functionality.
|
// StatusAPI provides API to access Status related functionality.
|
||||||
type StatusAPI struct {
|
type StatusAPI struct {
|
||||||
b *StatusBackend
|
b *StatusBackend
|
||||||
|
@ -199,33 +193,10 @@ func (api *StatusAPI) JailBaseJS(js string) {
|
||||||
api.b.jailManager.BaseJS(js)
|
api.b.jailManager.BaseJS(js)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify sends a push notification to the device with the given token.
|
// Notify and send message
|
||||||
// TODO(oskarth): API package this stuff
|
|
||||||
func (api *StatusAPI) Notify(token string) string {
|
func (api *StatusAPI) Notify(token string) string {
|
||||||
log.Debug("Notify", "token", token)
|
api.b.notification.Notify(token)
|
||||||
|
api.b.notification.Send()
|
||||||
var NP fcm.NotificationPayload
|
|
||||||
NP.Title = "Status - new message"
|
|
||||||
NP.Body = "ping"
|
|
||||||
|
|
||||||
// TODO(oskarth): Experiment with this
|
|
||||||
data := map[string]string{
|
|
||||||
"msg": "Hello World1",
|
|
||||||
"sum": "Happy Day",
|
|
||||||
}
|
|
||||||
|
|
||||||
ids := []string{
|
|
||||||
token,
|
|
||||||
}
|
|
||||||
|
|
||||||
c := fcm.NewFcmClient(serverKey)
|
|
||||||
c.NewFcmRegIdsMsg(ids, data)
|
|
||||||
c.SetNotificationPayload(&NP)
|
|
||||||
|
|
||||||
_, err := c.Send()
|
|
||||||
if err != nil {
|
|
||||||
log.Error("Notify failed:", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return token
|
return token
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
"github.com/status-im/status-go/geth/jail"
|
"github.com/status-im/status-go/geth/jail"
|
||||||
"github.com/status-im/status-go/geth/log"
|
"github.com/status-im/status-go/geth/log"
|
||||||
"github.com/status-im/status-go/geth/node"
|
"github.com/status-im/status-go/geth/node"
|
||||||
|
"github.com/status-im/status-go/geth/notification"
|
||||||
"github.com/status-im/status-go/geth/params"
|
"github.com/status-im/status-go/geth/params"
|
||||||
"github.com/status-im/status-go/geth/signal"
|
"github.com/status-im/status-go/geth/signal"
|
||||||
"github.com/status-im/status-go/geth/txqueue"
|
"github.com/status-im/status-go/geth/txqueue"
|
||||||
|
@ -23,7 +24,7 @@ type StatusBackend struct {
|
||||||
accountManager common.AccountManager
|
accountManager common.AccountManager
|
||||||
txQueueManager common.TxQueueManager
|
txQueueManager common.TxQueueManager
|
||||||
jailManager common.JailManager
|
jailManager common.JailManager
|
||||||
// TODO(oskarth): notifer here
|
notification common.Notification
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewStatusBackend create a new NewStatusBackend instance
|
// NewStatusBackend create a new NewStatusBackend instance
|
||||||
|
@ -34,12 +35,14 @@ func NewStatusBackend() *StatusBackend {
|
||||||
accountManager := account.NewManager(nodeManager)
|
accountManager := account.NewManager(nodeManager)
|
||||||
txQueueManager := txqueue.NewManager(nodeManager, accountManager)
|
txQueueManager := txqueue.NewManager(nodeManager, accountManager)
|
||||||
jailManager := jail.New(nodeManager)
|
jailManager := jail.New(nodeManager)
|
||||||
|
notificationManager := notification.New(notification.NewFCMClient())
|
||||||
|
|
||||||
return &StatusBackend{
|
return &StatusBackend{
|
||||||
nodeManager: nodeManager,
|
nodeManager: nodeManager,
|
||||||
accountManager: accountManager,
|
accountManager: accountManager,
|
||||||
jailManager: jailManager,
|
jailManager: jailManager,
|
||||||
txQueueManager: txQueueManager,
|
txQueueManager: txQueueManager,
|
||||||
|
notification: notificationManager,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package common
|
||||||
|
|
||||||
|
import "github.com/NaySoftware/go-fcm"
|
||||||
|
|
||||||
|
// Notification manages Push Notifications and send messages
|
||||||
|
type Notification interface {
|
||||||
|
Notify(token string) string
|
||||||
|
Send() error
|
||||||
|
}
|
||||||
|
|
||||||
|
// Messaging manages send/notification messaging clients
|
||||||
|
type Messaging interface {
|
||||||
|
NewFcmRegIdsMsg(list []string, body interface{}) *fcm.FcmClient
|
||||||
|
Send() (*fcm.FcmResponseStatus, error)
|
||||||
|
SetNotificationPayload(payload *fcm.NotificationPayload) *fcm.FcmClient
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package notification
|
||||||
|
|
||||||
|
import "github.com/NaySoftware/go-fcm"
|
||||||
|
|
||||||
|
const (
|
||||||
|
//todo(jeka): should be removed
|
||||||
|
fcmServerKey = "AAAAxwa-r08:APA91bFtMIToDVKGAmVCm76iEXtA4dn9MPvLdYKIZqAlNpLJbd12EgdBI9DSDSXKdqvIAgLodepmRhGVaWvhxnXJzVpE6MoIRuKedDV3kfHSVBhWFqsyoLTwXY4xeufL9Sdzb581U-lx"
|
||||||
|
)
|
||||||
|
|
||||||
|
// NewFCMClient Firebase Cloud Messaging client constructor
|
||||||
|
func NewFCMClient() *fcm.FcmClient {
|
||||||
|
return fcm.NewFcmClient(fcmServerKey).SetNotificationPayload(getNotificationPayload())
|
||||||
|
}
|
||||||
|
|
||||||
|
// only for feature testing
|
||||||
|
func getNotificationPayload() *fcm.NotificationPayload {
|
||||||
|
return &fcm.NotificationPayload{
|
||||||
|
Title: "Status - new message",
|
||||||
|
Body: "ping",
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
package notification
|
|
@ -0,0 +1,45 @@
|
||||||
|
package notification
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/status-im/status-go/geth/common"
|
||||||
|
"github.com/status-im/status-go/geth/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Manager of push notifications
|
||||||
|
type Manager struct {
|
||||||
|
messaging common.Messaging
|
||||||
|
}
|
||||||
|
|
||||||
|
// New notifications manager
|
||||||
|
func New(messaging common.Messaging) *Manager {
|
||||||
|
return &Manager{
|
||||||
|
messaging,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Notify registers notification
|
||||||
|
func (n *Manager) Notify(token string) string {
|
||||||
|
log.Debug("Notify", "token", token)
|
||||||
|
|
||||||
|
n.messaging.NewFcmRegIdsMsg([]string{token}, n.getMessage)
|
||||||
|
|
||||||
|
return token
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send prepared message
|
||||||
|
func (n *Manager) Send() error {
|
||||||
|
_, err := n.messaging.Send()
|
||||||
|
if err != nil {
|
||||||
|
log.Error("Notify failed:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (n *Manager) getMessage() interface{} {
|
||||||
|
// TODO(oskarth): Experiment with this
|
||||||
|
return map[string]string{
|
||||||
|
"msg": "Hello World1",
|
||||||
|
"sum": "Happy Day",
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
package notification
|
|
@ -518,25 +518,25 @@ func AssetNames() []string {
|
||||||
|
|
||||||
// _bindata is a table, holding each asset generator, mapped to its name.
|
// _bindata is a table, holding each asset generator, mapped to its name.
|
||||||
var _bindata = map[string]func() (*asset, error){
|
var _bindata = map[string]func() (*asset, error){
|
||||||
"scripts/README.md": scriptsReadmeMd,
|
"scripts/README.md": scriptsReadmeMd,
|
||||||
"scripts/web3.js": scriptsWeb3Js,
|
"scripts/web3.js": scriptsWeb3Js,
|
||||||
"config/cht.json": configChtJson,
|
"config/cht.json": configChtJson,
|
||||||
"config/linter_exclude_list.txt": configLinter_exclude_listTxt,
|
"config/linter_exclude_list.txt": configLinter_exclude_listTxt,
|
||||||
"config/status-chain-genesis.json": configStatusChainGenesisJson,
|
"config/status-chain-genesis.json": configStatusChainGenesisJson,
|
||||||
"config/test-data.json": configTestDataJson,
|
"config/test-data.json": configTestDataJson,
|
||||||
"keys/firebaseauthkey": keysFirebaseauthkey,
|
"keys/firebaseauthkey": keysFirebaseauthkey,
|
||||||
"keys/test-account1-before-eip55.pk": keysTestAccount1BeforeEip55Pk,
|
"keys/test-account1-before-eip55.pk": keysTestAccount1BeforeEip55Pk,
|
||||||
"keys/test-account1.pk": keysTestAccount1Pk,
|
"keys/test-account1.pk": keysTestAccount1Pk,
|
||||||
"keys/test-account2.pk": keysTestAccount2Pk,
|
"keys/test-account2.pk": keysTestAccount2Pk,
|
||||||
"keys/wnodekey": keysWnodekey,
|
"keys/wnodekey": keysWnodekey,
|
||||||
"keys/wnodepassword": keysWnodepassword,
|
"keys/wnodepassword": keysWnodepassword,
|
||||||
"testdata/jail/commands.js": testdataJailCommandsJs,
|
"testdata/jail/commands.js": testdataJailCommandsJs,
|
||||||
"testdata/jail/status.js": testdataJailStatusJs,
|
"testdata/jail/status.js": testdataJailStatusJs,
|
||||||
"testdata/jail/tx-send/context-no-message-id.js": testdataJailTxSendContextNoMessageIdJs,
|
"testdata/jail/tx-send/context-no-message-id.js": testdataJailTxSendContextNoMessageIdJs,
|
||||||
"testdata/jail/tx-send/message-id-no-context.js": testdataJailTxSendMessageIdNoContextJs,
|
"testdata/jail/tx-send/message-id-no-context.js": testdataJailTxSendMessageIdNoContextJs,
|
||||||
"testdata/jail/tx-send/no-message-id-or-context.js": testdataJailTxSendNoMessageIdOrContextJs,
|
"testdata/jail/tx-send/no-message-id-or-context.js": testdataJailTxSendNoMessageIdOrContextJs,
|
||||||
"testdata/jail/tx-send/tx-send.js": testdataJailTxSendTxSendJs,
|
"testdata/jail/tx-send/tx-send.js": testdataJailTxSendTxSendJs,
|
||||||
"testdata/node/test.sol": testdataNodeTestSol,
|
"testdata/node/test.sol": testdataNodeTestSol,
|
||||||
}
|
}
|
||||||
|
|
||||||
// AssetDir returns the file names below a certain
|
// AssetDir returns the file names below a certain
|
||||||
|
@ -578,34 +578,35 @@ type bintree struct {
|
||||||
Func func() (*asset, error)
|
Func func() (*asset, error)
|
||||||
Children map[string]*bintree
|
Children map[string]*bintree
|
||||||
}
|
}
|
||||||
|
|
||||||
var _bintree = &bintree{nil, map[string]*bintree{
|
var _bintree = &bintree{nil, map[string]*bintree{
|
||||||
"config": &bintree{nil, map[string]*bintree{
|
"config": &bintree{nil, map[string]*bintree{
|
||||||
"cht.json": &bintree{configChtJson, map[string]*bintree{}},
|
"cht.json": &bintree{configChtJson, map[string]*bintree{}},
|
||||||
"linter_exclude_list.txt": &bintree{configLinter_exclude_listTxt, map[string]*bintree{}},
|
"linter_exclude_list.txt": &bintree{configLinter_exclude_listTxt, map[string]*bintree{}},
|
||||||
"status-chain-genesis.json": &bintree{configStatusChainGenesisJson, map[string]*bintree{}},
|
"status-chain-genesis.json": &bintree{configStatusChainGenesisJson, map[string]*bintree{}},
|
||||||
"test-data.json": &bintree{configTestDataJson, map[string]*bintree{}},
|
"test-data.json": &bintree{configTestDataJson, map[string]*bintree{}},
|
||||||
}},
|
}},
|
||||||
"keys": &bintree{nil, map[string]*bintree{
|
"keys": &bintree{nil, map[string]*bintree{
|
||||||
"firebaseauthkey": &bintree{keysFirebaseauthkey, map[string]*bintree{}},
|
"firebaseauthkey": &bintree{keysFirebaseauthkey, map[string]*bintree{}},
|
||||||
"test-account1-before-eip55.pk": &bintree{keysTestAccount1BeforeEip55Pk, map[string]*bintree{}},
|
"test-account1-before-eip55.pk": &bintree{keysTestAccount1BeforeEip55Pk, map[string]*bintree{}},
|
||||||
"test-account1.pk": &bintree{keysTestAccount1Pk, map[string]*bintree{}},
|
"test-account1.pk": &bintree{keysTestAccount1Pk, map[string]*bintree{}},
|
||||||
"test-account2.pk": &bintree{keysTestAccount2Pk, map[string]*bintree{}},
|
"test-account2.pk": &bintree{keysTestAccount2Pk, map[string]*bintree{}},
|
||||||
"wnodekey": &bintree{keysWnodekey, map[string]*bintree{}},
|
"wnodekey": &bintree{keysWnodekey, map[string]*bintree{}},
|
||||||
"wnodepassword": &bintree{keysWnodepassword, map[string]*bintree{}},
|
"wnodepassword": &bintree{keysWnodepassword, map[string]*bintree{}},
|
||||||
}},
|
}},
|
||||||
"scripts": &bintree{nil, map[string]*bintree{
|
"scripts": &bintree{nil, map[string]*bintree{
|
||||||
"README.md": &bintree{scriptsReadmeMd, map[string]*bintree{}},
|
"README.md": &bintree{scriptsReadmeMd, map[string]*bintree{}},
|
||||||
"web3.js": &bintree{scriptsWeb3Js, map[string]*bintree{}},
|
"web3.js": &bintree{scriptsWeb3Js, map[string]*bintree{}},
|
||||||
}},
|
}},
|
||||||
"testdata": &bintree{nil, map[string]*bintree{
|
"testdata": &bintree{nil, map[string]*bintree{
|
||||||
"jail": &bintree{nil, map[string]*bintree{
|
"jail": &bintree{nil, map[string]*bintree{
|
||||||
"commands.js": &bintree{testdataJailCommandsJs, map[string]*bintree{}},
|
"commands.js": &bintree{testdataJailCommandsJs, map[string]*bintree{}},
|
||||||
"status.js": &bintree{testdataJailStatusJs, map[string]*bintree{}},
|
"status.js": &bintree{testdataJailStatusJs, map[string]*bintree{}},
|
||||||
"tx-send": &bintree{nil, map[string]*bintree{
|
"tx-send": &bintree{nil, map[string]*bintree{
|
||||||
"context-no-message-id.js": &bintree{testdataJailTxSendContextNoMessageIdJs, map[string]*bintree{}},
|
"context-no-message-id.js": &bintree{testdataJailTxSendContextNoMessageIdJs, map[string]*bintree{}},
|
||||||
"message-id-no-context.js": &bintree{testdataJailTxSendMessageIdNoContextJs, map[string]*bintree{}},
|
"message-id-no-context.js": &bintree{testdataJailTxSendMessageIdNoContextJs, map[string]*bintree{}},
|
||||||
"no-message-id-or-context.js": &bintree{testdataJailTxSendNoMessageIdOrContextJs, map[string]*bintree{}},
|
"no-message-id-or-context.js": &bintree{testdataJailTxSendNoMessageIdOrContextJs, map[string]*bintree{}},
|
||||||
"tx-send.js": &bintree{testdataJailTxSendTxSendJs, map[string]*bintree{}},
|
"tx-send.js": &bintree{testdataJailTxSendTxSendJs, map[string]*bintree{}},
|
||||||
}},
|
}},
|
||||||
}},
|
}},
|
||||||
"node": &bintree{nil, map[string]*bintree{
|
"node": &bintree{nil, map[string]*bintree{
|
||||||
|
@ -660,4 +661,3 @@ func _filePath(dir, name string) string {
|
||||||
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
cannonicalName := strings.Replace(name, "\\", "/", -1)
|
||||||
return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
|
return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue