shuffle servers and limit & filter by chat id

This commit is contained in:
Andrea Maria Piana 2020-08-25 11:46:01 +02:00
parent 401d18e558
commit d7222c89e0
No known key found for this signature in database
GPG Key ID: AA6CCA6DE0E06424
6 changed files with 120 additions and 77 deletions

View File

@ -618,6 +618,10 @@ func NewNodeConfigWithDefaults(dataDir string, networkID uint64, opts ...Option)
}
func (c *NodeConfig) setDefaultPushNotificationsServers() error {
if c.ClusterConfig.Fleet == FleetUndefined {
return nil
}
// If empty load defaults from the fleet
if len(c.ClusterConfig.PushNotificationsServers) == 0 {
log.Debug("empty push notification servers, setting", "fleet", c.ClusterConfig.Fleet)

View File

@ -545,7 +545,7 @@ func (m *PushNotificationQueryResponse) GetSuccess() bool {
type PushNotification struct {
AccessToken string `protobuf:"bytes,1,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"`
ChatId string `protobuf:"bytes,2,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
ChatId []byte `protobuf:"bytes,2,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"`
PublicKey []byte `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"`
InstallationId string `protobuf:"bytes,4,opt,name=installation_id,json=installationId,proto3" json:"installation_id,omitempty"`
Message []byte `protobuf:"bytes,5,opt,name=message,proto3" json:"message,omitempty"`
@ -587,11 +587,11 @@ func (m *PushNotification) GetAccessToken() string {
return ""
}
func (m *PushNotification) GetChatId() string {
func (m *PushNotification) GetChatId() []byte {
if m != nil {
return m.ChatId
}
return ""
return nil
}
func (m *PushNotification) GetPublicKey() []byte {
@ -800,64 +800,64 @@ func init() { proto.RegisterFile("push_notifications.proto", fileDescriptor_200a
var fileDescriptor_200acd86044eaa5d = []byte{
// 952 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xdd, 0x6e, 0xe3, 0x44,
0x14, 0xc6, 0x4e, 0xda, 0x24, 0x27, 0x21, 0x75, 0x47, 0x6d, 0xd7, 0x2c, 0x74, 0x09, 0x06, 0x89,
0xa8, 0x17, 0x01, 0x15, 0x89, 0x5d, 0x71, 0x45, 0x48, 0x9d, 0xae, 0xd5, 0xc6, 0x0e, 0x13, 0x97,
0xd5, 0x4a, 0x48, 0x96, 0x63, 0x4f, 0x5a, 0xab, 0xae, 0xc7, 0x78, 0x26, 0x45, 0xb9, 0xe3, 0x01,
0xb8, 0xe1, 0x96, 0xc7, 0xe0, 0x9a, 0x37, 0xe0, 0xa5, 0x90, 0xc7, 0x76, 0x9a, 0x36, 0x6e, 0x5a,
0x24, 0xae, 0x92, 0xf3, 0x9d, 0x9f, 0x99, 0x39, 0xdf, 0xf9, 0x8e, 0x41, 0x8d, 0xe7, 0xec, 0xca,
0x89, 0x28, 0x0f, 0x66, 0x81, 0xe7, 0xf2, 0x80, 0x46, 0xac, 0x17, 0x27, 0x94, 0x53, 0x54, 0x17,
0x3f, 0xd3, 0xf9, 0x4c, 0xfb, 0xbb, 0x0a, 0x9f, 0x8c, 0xe7, 0xec, 0xca, 0x5c, 0x89, 0xc2, 0xe4,
0x32, 0x60, 0x3c, 0x11, 0xff, 0x91, 0x05, 0xc0, 0xe9, 0x35, 0x89, 0x1c, 0xbe, 0x88, 0x89, 0x2a,
0x75, 0xa4, 0x6e, 0xfb, 0xf8, 0xeb, 0x5e, 0x91, 0xdf, 0xdb, 0x94, 0xdb, 0xb3, 0xd3, 0x44, 0x7b,
0x11, 0x13, 0xdc, 0xe0, 0xc5, 0x5f, 0xf4, 0x19, 0xb4, 0x7c, 0x72, 0x1b, 0x78, 0xc4, 0x11, 0x98,
0x2a, 0x77, 0xa4, 0x6e, 0x03, 0x37, 0x33, 0x4c, 0x64, 0xa0, 0x2f, 0x61, 0x27, 0x88, 0x18, 0x77,
0xc3, 0x50, 0xd4, 0x71, 0x02, 0x5f, 0xad, 0x88, 0xa8, 0xf6, 0x2a, 0x6c, 0xf8, 0x69, 0x2d, 0xd7,
0xf3, 0x08, 0x63, 0x79, 0xad, 0x6a, 0x56, 0x2b, 0xc3, 0xb2, 0x5a, 0x2a, 0xd4, 0x48, 0xe4, 0x4e,
0x43, 0xe2, 0xab, 0x5b, 0x1d, 0xa9, 0x5b, 0xc7, 0x85, 0x99, 0x7a, 0x6e, 0x49, 0xc2, 0x02, 0x1a,
0xa9, 0xdb, 0x1d, 0xa9, 0x5b, 0xc5, 0x85, 0x89, 0xba, 0xa0, 0xb8, 0x61, 0x48, 0x7f, 0x25, 0xbe,
0x73, 0x4d, 0x16, 0x4e, 0x18, 0x30, 0xae, 0xd6, 0x3a, 0x95, 0x6e, 0x0b, 0xb7, 0x73, 0xfc, 0x8c,
0x2c, 0xce, 0x03, 0xc6, 0xd1, 0x11, 0xec, 0x4e, 0x43, 0xea, 0x5d, 0x13, 0xdf, 0xf1, 0xae, 0x5c,
0x9e, 0x85, 0xd6, 0x45, 0xe8, 0x4e, 0xee, 0x18, 0x5c, 0xb9, 0x5c, 0xc4, 0xbe, 0x02, 0x98, 0x47,
0x89, 0xe8, 0x0f, 0x49, 0xd4, 0x86, 0xb8, 0xcc, 0x0a, 0x82, 0xf6, 0x60, 0xeb, 0x32, 0x71, 0x23,
0xae, 0x42, 0x47, 0xea, 0xb6, 0x70, 0x66, 0xa0, 0xd7, 0xa0, 0x8a, 0x33, 0x9d, 0x59, 0x42, 0x6f,
0x1c, 0x8f, 0x46, 0xdc, 0xf5, 0x38, 0x73, 0x68, 0x14, 0x2e, 0xd4, 0xa6, 0xa8, 0xb1, 0x2f, 0xfc,
0xc3, 0x84, 0xde, 0x0c, 0x72, 0xaf, 0x15, 0x85, 0x0b, 0xf4, 0x31, 0x34, 0xdc, 0x38, 0x72, 0x38,
0x8d, 0x03, 0x4f, 0x6d, 0x89, 0xc6, 0xd4, 0xdd, 0x38, 0xb2, 0x53, 0x5b, 0x1b, 0x42, 0x63, 0x49,
0x0e, 0x3a, 0x00, 0x74, 0x61, 0x9e, 0x99, 0xd6, 0x3b, 0xd3, 0xb1, 0xad, 0x33, 0xdd, 0x74, 0xec,
0xf7, 0x63, 0x5d, 0xf9, 0x00, 0x7d, 0x08, 0x8d, 0xfe, 0x38, 0xc7, 0x14, 0x09, 0x21, 0x68, 0x0f,
0x0d, 0xac, 0xff, 0xd0, 0x9f, 0xe8, 0x39, 0x26, 0x6b, 0x7f, 0xc9, 0xf0, 0xc5, 0xa6, 0x11, 0xc0,
0x84, 0xc5, 0x34, 0x62, 0x24, 0x6d, 0x36, 0x9b, 0x0b, 0x5a, 0xc4, 0x0c, 0xd5, 0x71, 0x61, 0x22,
0x13, 0xb6, 0x48, 0x92, 0xd0, 0x44, 0x0c, 0x42, 0xfb, 0xf8, 0xcd, 0xf3, 0x66, 0xab, 0x28, 0xdc,
0xd3, 0xd3, 0x5c, 0x31, 0x63, 0x59, 0x19, 0x74, 0x08, 0x90, 0x90, 0x5f, 0xe6, 0x84, 0xf1, 0x62,
0x6e, 0x5a, 0xb8, 0x91, 0x23, 0x86, 0xaf, 0xfd, 0x26, 0x41, 0x63, 0x99, 0xb3, 0xfa, 0x74, 0x1d,
0x63, 0x0b, 0x17, 0x4f, 0xdf, 0x87, 0xdd, 0x51, 0xff, 0x7c, 0x68, 0xe1, 0x91, 0x7e, 0xe2, 0x8c,
0xf4, 0xc9, 0xa4, 0x7f, 0xaa, 0x2b, 0x12, 0xda, 0x03, 0xe5, 0x27, 0x1d, 0x4f, 0x0c, 0xcb, 0x74,
0x46, 0xc6, 0x64, 0xd4, 0xb7, 0x07, 0x6f, 0x15, 0x19, 0xbd, 0x84, 0x83, 0x0b, 0x73, 0x72, 0x31,
0x1e, 0x5b, 0xd8, 0xd6, 0x4f, 0x56, 0x7b, 0x58, 0x49, 0x9b, 0x66, 0x98, 0xb6, 0x8e, 0xcd, 0xfe,
0x79, 0x76, 0x82, 0x52, 0xd5, 0xe6, 0xa0, 0xe6, 0x4c, 0x0d, 0xa8, 0x4f, 0xfa, 0xfe, 0x2d, 0x49,
0x78, 0xc0, 0xc8, 0x0d, 0x89, 0x38, 0x7a, 0x0f, 0x07, 0x6b, 0xaa, 0x75, 0x82, 0x68, 0x46, 0x55,
0xa9, 0x53, 0xe9, 0x36, 0x8f, 0x3f, 0x7f, 0xbc, 0x3d, 0x3f, 0xce, 0x49, 0xb2, 0x30, 0xa2, 0x19,
0xc5, 0x7b, 0xf1, 0x03, 0x57, 0x8a, 0x6a, 0x6f, 0x60, 0xbf, 0x34, 0x05, 0x7d, 0x0a, 0xcd, 0x78,
0x3e, 0x0d, 0x03, 0x2f, 0x9d, 0x76, 0x26, 0x0e, 0x6a, 0x61, 0xc8, 0xa0, 0x33, 0xb2, 0x60, 0xda,
0xef, 0x32, 0x7c, 0xf4, 0xe8, 0x69, 0x6b, 0x22, 0x94, 0xd6, 0x45, 0x58, 0x22, 0x68, 0xb9, 0x54,
0xd0, 0x87, 0x00, 0x77, 0x57, 0x29, 0xc8, 0x5b, 0xde, 0xa4, 0x54, 0x98, 0xd5, 0x52, 0x61, 0x2e,
0xc5, 0xb4, 0xb5, 0x2a, 0xa6, 0xc7, 0x25, 0x7f, 0x04, 0xbb, 0x8c, 0x24, 0xb7, 0x24, 0x71, 0x56,
0xce, 0xaf, 0x89, 0xdc, 0x9d, 0xcc, 0x31, 0x2e, 0x6e, 0xa1, 0xfd, 0x21, 0xc1, 0x61, 0x69, 0x3b,
0x96, 0xd3, 0xfe, 0x1a, 0xaa, 0xff, 0x95, 0x33, 0x91, 0x90, 0xbe, 0xff, 0x86, 0x30, 0xe6, 0x5e,
0x92, 0xa2, 0x47, 0x2d, 0xdc, 0xc8, 0x11, 0xc3, 0x5f, 0x55, 0x51, 0xe5, 0x9e, 0x8a, 0xb4, 0x7f,
0x64, 0x50, 0x1e, 0x16, 0x7f, 0x0e, 0x33, 0x2f, 0xa0, 0x26, 0x16, 0xd7, 0x92, 0x91, 0xed, 0xd4,
0x7c, 0x9a, 0x89, 0x12, 0x46, 0xab, 0xa5, 0x8c, 0xaa, 0x50, 0xcb, 0xef, 0x9f, 0x53, 0x51, 0x98,
0x68, 0x00, 0x55, 0xf1, 0x4d, 0xd9, 0x16, 0xba, 0xff, 0xea, 0xf1, 0x26, 0xad, 0x01, 0x42, 0xee,
0x22, 0x59, 0xb3, 0x61, 0xaf, 0xcc, 0x8b, 0x34, 0x78, 0x55, 0x08, 0x7b, 0x7c, 0x31, 0x79, 0xeb,
0x98, 0x96, 0x6d, 0x0c, 0x8d, 0x41, 0xdf, 0x4e, 0xb5, 0x9b, 0x8b, 0xbc, 0x09, 0xb5, 0x3b, 0x69,
0x0b, 0xc3, 0x4c, 0xdd, 0x8a, 0xac, 0xc5, 0xf0, 0x62, 0x7d, 0xf9, 0x88, 0x0d, 0x82, 0xbe, 0x85,
0x7a, 0xbe, 0x4c, 0x58, 0x4e, 0xef, 0xcb, 0x0d, 0x1b, 0x6b, 0x19, 0xfb, 0x04, 0xb3, 0xda, 0x9f,
0x32, 0x1c, 0xac, 0x1f, 0x19, 0xd3, 0x84, 0x6f, 0x58, 0x9d, 0xdf, 0xdf, 0x5f, 0x9d, 0x47, 0x9b,
0x56, 0x67, 0x5a, 0xaa, 0x74, 0x59, 0xfe, 0x1f, 0x2c, 0x6b, 0x3f, 0x3f, 0x67, 0xa9, 0xee, 0x40,
0xf3, 0x1d, 0xb6, 0xcc, 0xd3, 0xd5, 0x2f, 0xca, 0x83, 0xe5, 0x28, 0xa7, 0x98, 0x69, 0xd9, 0x0e,
0xd6, 0x4f, 0x8d, 0x89, 0xad, 0x63, 0xfd, 0x44, 0xa9, 0xa4, 0x0b, 0x73, 0xfd, 0x41, 0xb9, 0xd4,
0xee, 0xf7, 0x55, 0x7a, 0xa8, 0x98, 0xef, 0xa0, 0x96, 0x88, 0xb7, 0x33, 0x55, 0x16, 0x6c, 0x75,
0x9e, 0x6a, 0x12, 0x2e, 0x12, 0xa6, 0xdb, 0x22, 0xf2, 0x9b, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff,
0xc6, 0x95, 0x5d, 0x48, 0x48, 0x09, 0x00, 0x00,
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x51, 0x6f, 0xe3, 0x44,
0x10, 0xc6, 0x4e, 0xda, 0x24, 0x93, 0x90, 0xba, 0xab, 0xb6, 0x67, 0x0e, 0x7a, 0x04, 0x83, 0x44,
0xd4, 0x87, 0x80, 0x8a, 0xc4, 0x9d, 0x78, 0x22, 0xa4, 0x4e, 0xcf, 0x6a, 0x63, 0x87, 0x8d, 0xcb,
0xe9, 0x24, 0x24, 0xcb, 0xb1, 0x37, 0xad, 0x55, 0xd7, 0x6b, 0xbc, 0x9b, 0xa2, 0xbc, 0xf1, 0x03,
0x78, 0xe1, 0x95, 0x9f, 0xc1, 0x33, 0xff, 0x80, 0x3f, 0x85, 0xbc, 0xb6, 0xd3, 0xb4, 0x71, 0xd3,
0x22, 0xf1, 0x94, 0xcc, 0x37, 0x3b, 0x33, 0xbb, 0xf3, 0xcd, 0x37, 0x06, 0x35, 0x9e, 0xb3, 0x2b,
0x27, 0xa2, 0x3c, 0x98, 0x05, 0x9e, 0xcb, 0x03, 0x1a, 0xb1, 0x5e, 0x9c, 0x50, 0x4e, 0x51, 0x5d,
0xfc, 0x4c, 0xe7, 0x33, 0xed, 0xef, 0x2a, 0x7c, 0x32, 0x9e, 0xb3, 0x2b, 0x73, 0xe5, 0x14, 0x26,
0x97, 0x01, 0xe3, 0x89, 0xf8, 0x8f, 0x2c, 0x00, 0x4e, 0xaf, 0x49, 0xe4, 0xf0, 0x45, 0x4c, 0x54,
0xa9, 0x23, 0x75, 0xdb, 0xc7, 0x5f, 0xf7, 0x8a, 0xf8, 0xde, 0xa6, 0xd8, 0x9e, 0x9d, 0x06, 0xda,
0x8b, 0x98, 0xe0, 0x06, 0x2f, 0xfe, 0xa2, 0xcf, 0xa0, 0xe5, 0x93, 0xdb, 0xc0, 0x23, 0x8e, 0xc0,
0x54, 0xb9, 0x23, 0x75, 0x1b, 0xb8, 0x99, 0x61, 0x22, 0x02, 0x7d, 0x09, 0x3b, 0x41, 0xc4, 0xb8,
0x1b, 0x86, 0x22, 0x8f, 0x13, 0xf8, 0x6a, 0x45, 0x9c, 0x6a, 0xaf, 0xc2, 0x86, 0x9f, 0xe6, 0x72,
0x3d, 0x8f, 0x30, 0x96, 0xe7, 0xaa, 0x66, 0xb9, 0x32, 0x2c, 0xcb, 0xa5, 0x42, 0x8d, 0x44, 0xee,
0x34, 0x24, 0xbe, 0xba, 0xd5, 0x91, 0xba, 0x75, 0x5c, 0x98, 0xa9, 0xe7, 0x96, 0x24, 0x2c, 0xa0,
0x91, 0xba, 0xdd, 0x91, 0xba, 0x55, 0x5c, 0x98, 0xa8, 0x0b, 0x8a, 0x1b, 0x86, 0xf4, 0x57, 0xe2,
0x3b, 0xd7, 0x64, 0xe1, 0x84, 0x01, 0xe3, 0x6a, 0xad, 0x53, 0xe9, 0xb6, 0x70, 0x3b, 0xc7, 0xcf,
0xc8, 0xe2, 0x3c, 0x60, 0x1c, 0x1d, 0xc1, 0xee, 0x34, 0xa4, 0xde, 0x35, 0xf1, 0x1d, 0xef, 0xca,
0xe5, 0xd9, 0xd1, 0xba, 0x38, 0xba, 0x93, 0x3b, 0x06, 0x57, 0x2e, 0x17, 0x67, 0x5f, 0x01, 0xcc,
0xa3, 0x44, 0xf4, 0x87, 0x24, 0x6a, 0x43, 0x5c, 0x66, 0x05, 0x41, 0x7b, 0xb0, 0x75, 0x99, 0xb8,
0x11, 0x57, 0xa1, 0x23, 0x75, 0x5b, 0x38, 0x33, 0xd0, 0x6b, 0x50, 0x45, 0x4d, 0x67, 0x96, 0xd0,
0x1b, 0xc7, 0xa3, 0x11, 0x77, 0x3d, 0xce, 0x1c, 0x1a, 0x85, 0x0b, 0xb5, 0x29, 0x72, 0xec, 0x0b,
0xff, 0x30, 0xa1, 0x37, 0x83, 0xdc, 0x6b, 0x45, 0xe1, 0x02, 0x7d, 0x0c, 0x0d, 0x37, 0x8e, 0x1c,
0x4e, 0xe3, 0xc0, 0x53, 0x5b, 0xa2, 0x31, 0x75, 0x37, 0x8e, 0xec, 0xd4, 0xd6, 0x86, 0xd0, 0x58,
0x92, 0x83, 0x0e, 0x00, 0x5d, 0x98, 0x67, 0xa6, 0xf5, 0xce, 0x74, 0x6c, 0xeb, 0x4c, 0x37, 0x1d,
0xfb, 0xfd, 0x58, 0x57, 0x3e, 0x40, 0x1f, 0x42, 0xa3, 0x3f, 0xce, 0x31, 0x45, 0x42, 0x08, 0xda,
0x43, 0x03, 0xeb, 0x3f, 0xf4, 0x27, 0x7a, 0x8e, 0xc9, 0xda, 0x5f, 0x32, 0x7c, 0xb1, 0x69, 0x04,
0x30, 0x61, 0x31, 0x8d, 0x18, 0x49, 0x9b, 0xcd, 0xe6, 0x82, 0x16, 0x31, 0x43, 0x75, 0x5c, 0x98,
0xc8, 0x84, 0x2d, 0x92, 0x24, 0x34, 0x11, 0x83, 0xd0, 0x3e, 0x7e, 0xf3, 0xbc, 0xd9, 0x2a, 0x12,
0xf7, 0xf4, 0x34, 0x56, 0xcc, 0x58, 0x96, 0x06, 0x1d, 0x02, 0x24, 0xe4, 0x97, 0x39, 0x61, 0xbc,
0x98, 0x9b, 0x16, 0x6e, 0xe4, 0x88, 0xe1, 0x6b, 0xbf, 0x49, 0xd0, 0x58, 0xc6, 0xac, 0x3e, 0x5d,
0xc7, 0xd8, 0xc2, 0xc5, 0xd3, 0xf7, 0x61, 0x77, 0xd4, 0x3f, 0x1f, 0x5a, 0x78, 0xa4, 0x9f, 0x38,
0x23, 0x7d, 0x32, 0xe9, 0x9f, 0xea, 0x8a, 0x84, 0xf6, 0x40, 0xf9, 0x49, 0xc7, 0x13, 0xc3, 0x32,
0x9d, 0x91, 0x31, 0x19, 0xf5, 0xed, 0xc1, 0x5b, 0x45, 0x46, 0x2f, 0xe1, 0xe0, 0xc2, 0x9c, 0x5c,
0x8c, 0xc7, 0x16, 0xb6, 0xf5, 0x93, 0xd5, 0x1e, 0x56, 0xd2, 0xa6, 0x19, 0xa6, 0xad, 0x63, 0xb3,
0x7f, 0x9e, 0x55, 0x50, 0xaa, 0xda, 0x1c, 0xd4, 0x9c, 0xa9, 0x01, 0xf5, 0x49, 0xdf, 0xbf, 0x25,
0x09, 0x0f, 0x18, 0xb9, 0x21, 0x11, 0x47, 0xef, 0xe1, 0x60, 0x4d, 0xb5, 0x4e, 0x10, 0xcd, 0xa8,
0x2a, 0x75, 0x2a, 0xdd, 0xe6, 0xf1, 0xe7, 0x8f, 0xb7, 0xe7, 0xc7, 0x39, 0x49, 0x16, 0x46, 0x34,
0xa3, 0x78, 0x2f, 0x7e, 0xe0, 0x4a, 0x51, 0xed, 0x0d, 0xec, 0x97, 0x86, 0xa0, 0x4f, 0xa1, 0x19,
0xcf, 0xa7, 0x61, 0xe0, 0xa5, 0xd3, 0xce, 0x44, 0xa1, 0x16, 0x86, 0x0c, 0x3a, 0x23, 0x0b, 0xa6,
0xfd, 0x2e, 0xc3, 0x47, 0x8f, 0x56, 0x5b, 0x13, 0xa1, 0xb4, 0x2e, 0xc2, 0x12, 0x41, 0xcb, 0xa5,
0x82, 0x3e, 0x04, 0xb8, 0xbb, 0x4a, 0x41, 0xde, 0xf2, 0x26, 0xa5, 0xc2, 0xac, 0x96, 0x0a, 0x73,
0x29, 0xa6, 0xad, 0x55, 0x31, 0x3d, 0x2e, 0xf9, 0x23, 0xd8, 0x65, 0x24, 0xb9, 0x25, 0x89, 0xb3,
0x52, 0xbf, 0x26, 0x62, 0x77, 0x32, 0xc7, 0xb8, 0xb8, 0x85, 0xf6, 0x87, 0x04, 0x87, 0xa5, 0xed,
0x58, 0x4e, 0xfb, 0x6b, 0xa8, 0xfe, 0x57, 0xce, 0x44, 0x40, 0xfa, 0xfe, 0x1b, 0xc2, 0x98, 0x7b,
0x49, 0x8a, 0x1e, 0xb5, 0x70, 0x23, 0x47, 0x0c, 0x7f, 0x55, 0x45, 0x95, 0x7b, 0x2a, 0xd2, 0xfe,
0x91, 0x41, 0x79, 0x98, 0xfc, 0x39, 0xcc, 0xbc, 0x80, 0x9a, 0x58, 0x5c, 0xcb, 0x6a, 0xdb, 0xa9,
0xf9, 0x34, 0x13, 0x25, 0x8c, 0x56, 0x4b, 0x19, 0x55, 0xa1, 0x96, 0xdf, 0x3f, 0xa7, 0xa2, 0x30,
0xd1, 0x00, 0xaa, 0xe2, 0x9b, 0xb2, 0x2d, 0x74, 0xff, 0xd5, 0xe3, 0x4d, 0x5a, 0x03, 0x84, 0xdc,
0x45, 0xb0, 0x66, 0xc3, 0x5e, 0x99, 0x17, 0x69, 0xf0, 0xaa, 0x10, 0xf6, 0xf8, 0x62, 0xf2, 0xd6,
0x31, 0x2d, 0xdb, 0x18, 0x1a, 0x83, 0xbe, 0x9d, 0x6a, 0x37, 0x17, 0x79, 0x13, 0x6a, 0x77, 0xd2,
0x16, 0x86, 0x99, 0xba, 0x15, 0x59, 0x8b, 0xe1, 0xc5, 0xfa, 0xf2, 0x11, 0x1b, 0x04, 0x7d, 0x0b,
0xf5, 0x7c, 0x99, 0xb0, 0x9c, 0xde, 0x97, 0x1b, 0x36, 0xd6, 0xf2, 0xec, 0x13, 0xcc, 0x6a, 0x7f,
0xca, 0x70, 0xb0, 0x5e, 0x32, 0xa6, 0x09, 0xdf, 0xb0, 0x3a, 0xbf, 0xbf, 0xbf, 0x3a, 0x8f, 0x36,
0xad, 0xce, 0x34, 0x55, 0xe9, 0xb2, 0xfc, 0x3f, 0x58, 0xd6, 0x7e, 0x7e, 0xce, 0x52, 0xdd, 0x81,
0xe6, 0x3b, 0x6c, 0x99, 0xa7, 0xab, 0x5f, 0x94, 0x07, 0xcb, 0x51, 0x4e, 0x31, 0xd3, 0xb2, 0x1d,
0xac, 0x9f, 0x1a, 0x13, 0x5b, 0xc7, 0xfa, 0x89, 0x52, 0x49, 0x17, 0xe6, 0xfa, 0x83, 0x72, 0xa9,
0xdd, 0xef, 0xab, 0xf4, 0x50, 0x31, 0xdf, 0x41, 0x2d, 0x11, 0x6f, 0x67, 0xaa, 0x2c, 0xd8, 0xea,
0x3c, 0xd5, 0x24, 0x5c, 0x04, 0x4c, 0xb7, 0xc5, 0xc9, 0x6f, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff,
0xff, 0x42, 0x7f, 0xee, 0x48, 0x09, 0x00, 0x00,
}

View File

@ -62,7 +62,7 @@ message PushNotificationQueryResponse {
message PushNotification {
string access_token = 1;
string chat_id = 2;
bytes chat_id = 2;
bytes public_key = 3;
string installation_id = 4;
bytes message = 5;

View File

@ -12,7 +12,7 @@ import (
"errors"
"io"
"math"
"sort"
mrand "math/rand"
"time"
"github.com/golang/protobuf/proto"
@ -60,6 +60,9 @@ const pushNotificationBackoffTime int64 = 2
// RegistrationBackoffTime is the step of the exponential backoff
const RegistrationBackoffTime int64 = 15
// defaultPushNotificationsServerCount is how many push notification servers we should register with if none is selected
const defaultPushNotificationsServersCount = 3
type ServerType int
const (
@ -301,6 +304,23 @@ func (c *Client) Reregister(contactIDs []*ecdsa.PublicKey, mutedChatIDs []string
return c.Register(c.deviceToken, c.apnTopic, c.tokenType, contactIDs, mutedChatIDs)
}
// pickDefaultServesr picks n servers at random
func (c *Client) pickDefaultServers(servers []*ecdsa.PublicKey) []*ecdsa.PublicKey {
// shuffle and pick n at random
shuffledServers := make([]*ecdsa.PublicKey, len(servers))
copy(shuffledServers, c.config.DefaultServers)
mrand.Shuffle(len(shuffledServers), func(i, j int) {
shuffledServers[i], shuffledServers[j] = shuffledServers[j], shuffledServers[i]
})
// Take the min not to get an out of bounds slice
min := len(c.config.DefaultServers)
if min > defaultPushNotificationsServersCount {
min = defaultPushNotificationsServersCount
}
return shuffledServers[:min]
}
// Register registers with all the servers
func (c *Client) Register(deviceToken, apnTopic string, tokenType protobuf.PushNotificationRegistration_TokenType, contactIDs []*ecdsa.PublicKey, mutedChatIDs []string) error {
// stop registration loop
@ -313,9 +333,9 @@ func (c *Client) Register(deviceToken, apnTopic string, tokenType protobuf.PushN
if err != nil {
return err
}
if len(currentServers) == 0 {
if len(currentServers) == 0 && len(c.config.DefaultServers) != 0 {
c.config.Logger.Debug("servers empty, checking default servers")
for _, s := range c.config.DefaultServers {
for _, s := range c.pickDefaultServers(c.config.DefaultServers) {
err = c.AddPushNotificationsServer(s, ServerTypeDefault)
if err != nil {
return err
@ -1117,9 +1137,12 @@ func (c *Client) sendNotification(publicKey *ecdsa.PublicKey, installationIDs []
// we should also retry if no response at all is received after a timeout.
// also we send a single notification for multiple message ids, need to check with UI what's the desired behavior
// sort by server so we tend to hit the same one
sort.Slice(info, func(i, j int) bool {
return info[i].ServerPublicKey.X.Cmp(info[j].ServerPublicKey.X) <= 0
// shuffle so we don't hit the same servers all the times
// NOTE: here's is a tradeoff, ideally we want to randomly pick a server,
// but hit the same servers for batched notifications, for now naively
// hit a random server
mrand.Shuffle(len(info), func(i, j int) {
info[i], info[j] = info[j], info[i]
})
installationIDsMap := make(map[string]bool)
@ -1152,9 +1175,12 @@ func (c *Client) sendNotification(publicKey *ecdsa.PublicKey, installationIDs []
for _, infos := range actionableInfos {
var pushNotifications []*protobuf.PushNotification
for _, i := range infos {
// TODO: Add ChatID, message, public_key
// TODO: Add group chat ChatID
pushNotifications = append(pushNotifications, &protobuf.PushNotification{
Type: protobuf.PushNotification_MESSAGE,
Type: protobuf.PushNotification_MESSAGE,
// For now we set the ChatID to our own identity key, this will work fine for blocked users
// and muted 1-to-1 chats, but not for group chats.
ChatId: common.Shake256([]byte(types.EncodeHex(crypto.FromECDSAPub(&c.config.Identity.PublicKey)))),
AccessToken: i.AccessToken,
PublicKey: common.HashPublicKey(publicKey),
InstallationId: i.InstallationID,

View File

@ -9,6 +9,7 @@ import (
"go.uber.org/zap"
"github.com/status-im/status-go/eth-node/types"
"github.com/status-im/status-go/protocol/protobuf"
)
@ -60,7 +61,7 @@ func PushNotificationRegistrationToGoRushRequest(requestAndRegistrations []*Requ
Topic: registration.ApnTopic,
Data: &GoRushRequestData{
EncryptedMessage: hex.EncodeToString(request.Message),
ChatID: request.ChatId,
ChatID: types.EncodeHex(request.ChatId),
PublicKey: hex.EncodeToString(request.PublicKey),
},
})

View File

@ -1,6 +1,7 @@
package pushnotificationserver
import (
"bytes"
"context"
"crypto/ecdsa"
"encoding/hex"
@ -137,7 +138,7 @@ func (s *Server) HandlePushNotificationQuery(publicKey *ecdsa.PublicKey, message
// HandlePushNotificationRequest will send a gorush notification and send a response back to the user
func (s *Server) HandlePushNotificationRequest(publicKey *ecdsa.PublicKey,
request protobuf.PushNotificationRequest) error {
s.config.Logger.Debug("handling pn request")
s.config.Logger.Info("handling pn request")
response := s.buildPushNotificationRequestResponseAndSendNotification(&request)
if response == nil {
return nil
@ -284,7 +285,7 @@ func (s *Server) validateRegistration(publicKey *ecdsa.PublicKey, payload []byte
// buildPushNotificationQueryResponse check if we have the client information and send them back
func (s *Server) buildPushNotificationQueryResponse(query *protobuf.PushNotificationQuery) *protobuf.PushNotificationQueryResponse {
s.config.Logger.Debug("handling push notification query")
s.config.Logger.Info("handling push notification query")
response := &protobuf.PushNotificationQueryResponse{}
if query == nil || len(query.PublicKeys) == 0 {
return response
@ -320,6 +321,15 @@ func (s *Server) buildPushNotificationQueryResponse(query *protobuf.PushNotifica
return response
}
func (s *Server) blockedChatID(blockedChatIDs [][]byte, chatID []byte) bool {
for _, blockedChatID := range blockedChatIDs {
if bytes.Equal(blockedChatID, chatID) {
return true
}
}
return false
}
// buildPushNotificationRequestResponseAndSendNotification will build a response
// and fire-and-forget send a query to the gorush instance
func (s *Server) buildPushNotificationRequestResponseAndSendNotification(request *protobuf.PushNotificationRequest) *protobuf.PushNotificationResponse {
@ -332,7 +342,6 @@ func (s *Server) buildPushNotificationRequestResponseAndSendNotification(request
response.MessageId = request.MessageId
// TODO: filter by chat id
// collect successful requests & registrations
var requestAndRegistrations []*RequestAndRegistration
@ -356,6 +365,9 @@ func (s *Server) buildPushNotificationRequestResponseAndSendNotification(request
report.Error = protobuf.PushNotificationReport_NOT_REGISTERED
} else if registration.AccessToken != pn.AccessToken {
report.Error = protobuf.PushNotificationReport_WRONG_TOKEN
} else if s.blockedChatID(registration.BlockedChatList, pn.ChatId) {
// We report as successful but don't send the notification
report.Success = true
} else {
// For now we just assume that the notification will be successful
requestAndRegistrations = append(requestAndRegistrations, &RequestAndRegistration{
@ -368,7 +380,7 @@ func (s *Server) buildPushNotificationRequestResponseAndSendNotification(request
response.Reports = append(response.Reports, report)
}
s.config.Logger.Debug("built pn request")
s.config.Logger.Info("built pn request")
if len(requestAndRegistrations) == 0 {
s.config.Logger.Warn("no request and registration")
return response