From 1bfde4c4cc69292875ae9fdc41a8b4bd29e95a7a Mon Sep 17 00:00:00 2001 From: Andrea Maria Piana Date: Tue, 18 Jan 2022 16:31:34 +0000 Subject: [PATCH] Initial support for mutual contact requests --- VERSION | 2 +- appdatabase/migrations/bindata.go | 40 +- appdatabase/migrationsprevnodecfg/bindata.go | 108 +-- mailserver/migrations/bindata.go | 6 +- multiaccounts/migrations/bindata.go | 20 +- protocol/activity_center.go | 1 + protocol/activity_center_persistence.go | 114 ++- protocol/anonmetrics/migrations/migrations.go | 6 +- protocol/common/message.go | 149 ++-- protocol/contact.go | 60 +- protocol/encryption/migrations/migrations.go | 40 +- protocol/message_persistence.go | 80 +++ protocol/messenger.go | 41 +- protocol/messenger_contact_requests_test.go | 675 ++++++++++++++++++ protocol/messenger_contacts.go | 276 ++++++- protocol/messenger_handler.go | 136 +++- protocol/messenger_mailserver_cycle.go | 1 + protocol/messenger_response.go | 12 + protocol/messenger_test.go | 2 +- protocol/migrations/migrations.go | 156 ++-- ...45034602_add_mutual_contact_request.up.sql | 13 + ...650373957_add_contact_request_state.up.sql | 1 + protocol/persistence.go | 44 +- .../application_metadata_message.pb.go | 105 +-- .../application_metadata_message.proto | 2 + protocol/protobuf/chat_message.pb.go | 185 +++-- protocol/protobuf/chat_message.proto | 10 + protocol/protobuf/contact.pb.go | 158 +++- protocol/protobuf/contact.proto | 14 + .../migrations/migrations.go | 14 +- .../migrations/migrations.go | 10 +- protocol/requests/accept_contact_request.go | 21 + protocol/requests/dismiss_contact_request.go | 21 + protocol/requests/retract_contact_request.go | 21 + protocol/requests/send_contact_request.go | 27 + protocol/transport/migrations/migrations.go | 12 +- protocol/v1/status_message.go | 4 + services/ext/api.go | 16 + static/bindata.go | 42 +- t/bindata.go | 6 +- 40 files changed, 2221 insertions(+), 430 deletions(-) create mode 100644 protocol/messenger_contact_requests_test.go create mode 100644 protocol/migrations/sqlite/1645034602_add_mutual_contact_request.up.sql create mode 100644 protocol/migrations/sqlite/1650373957_add_contact_request_state.up.sql create mode 100644 protocol/requests/accept_contact_request.go create mode 100644 protocol/requests/dismiss_contact_request.go create mode 100644 protocol/requests/retract_contact_request.go create mode 100644 protocol/requests/send_contact_request.go diff --git a/VERSION b/VERSION index d53b52610..897e21587 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.99.2 \ No newline at end of file +0.100.0 diff --git a/appdatabase/migrations/bindata.go b/appdatabase/migrations/bindata.go index 94e489e30..f4871bef9 100644 --- a/appdatabase/migrations/bindata.go +++ b/appdatabase/migrations/bindata.go @@ -103,7 +103,7 @@ func _1640111208_dummyUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1640111208_dummy.up.sql", size: 258, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1640111208_dummy.up.sql", size: 258, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xf0, 0xae, 0x20, 0x6e, 0x75, 0xd1, 0x36, 0x14, 0xf2, 0x40, 0xe5, 0xd6, 0x7a, 0xc4, 0xa5, 0x72, 0xaa, 0xb5, 0x4d, 0x71, 0x97, 0xb8, 0xe8, 0x95, 0x22, 0x95, 0xa2, 0xac, 0xaf, 0x48, 0x58}} return a, nil } @@ -123,7 +123,7 @@ func _1642666031_add_removed_clock_to_bookmarksUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1642666031_add_removed_clock_to_bookmarks.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1642666031_add_removed_clock_to_bookmarks.up.sql", size: 117, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x84, 0x4e, 0x38, 0x99, 0x7a, 0xc, 0x90, 0x13, 0xec, 0xfe, 0x2f, 0x55, 0xff, 0xb7, 0xb6, 0xaa, 0x96, 0xc6, 0x92, 0x79, 0xcc, 0xee, 0x4e, 0x99, 0x53, 0xfe, 0x1c, 0xbb, 0x32, 0x2, 0xa4, 0x27}} return a, nil } @@ -143,7 +143,7 @@ func _1643644541_gif_api_key_settingUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1643644541_gif_api_key_setting.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1643644541_gif_api_key_setting.up.sql", size: 108, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1b, 0x94, 0x28, 0xfb, 0x66, 0xd1, 0x7c, 0xb8, 0x89, 0xe2, 0xb4, 0x71, 0x65, 0x24, 0x57, 0x22, 0x95, 0x38, 0x97, 0x3, 0x9b, 0xc6, 0xa4, 0x41, 0x7b, 0xba, 0xf7, 0xdb, 0x70, 0xf7, 0x20, 0x3a}} return a, nil } @@ -163,7 +163,7 @@ func _1644188994_recent_stickersUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1644188994_recent_stickers.up.sql", size: 79, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1644188994_recent_stickers.up.sql", size: 79, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1e, 0xad, 0xaa, 0x30, 0xbf, 0x4, 0x7, 0xf8, 0xc3, 0x3, 0xb8, 0x97, 0x23, 0x2b, 0xbd, 0x1c, 0x60, 0x69, 0xb0, 0x42, 0x5e, 0x6b, 0xd, 0xa7, 0xa3, 0x6b, 0x2e, 0xdc, 0x70, 0x13, 0x72, 0x7}} return a, nil } @@ -183,7 +183,7 @@ func _1646659233_add_address_to_dapp_permisssionUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1646659233_add_address_to_dapp_permisssion.up.sql", size: 700, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1646659233_add_address_to_dapp_permisssion.up.sql", size: 700, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xed, 0xb0, 0x35, 0xcc, 0x2e, 0x16, 0xe6, 0x15, 0x86, 0x2c, 0x37, 0x80, 0xae, 0xa3, 0xc5, 0x31, 0x78, 0x5, 0x9d, 0xcd, 0x7b, 0xeb, 0x5f, 0xf2, 0xb3, 0x74, 0x72, 0xdf, 0xcf, 0x88, 0xb, 0x40}} return a, nil } @@ -203,7 +203,7 @@ func _1646841105_add_emoji_accountUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1646841105_add_emoji_account.up.sql", size: 96, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1646841105_add_emoji_account.up.sql", size: 96, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe6, 0x77, 0x29, 0x95, 0x18, 0x64, 0x82, 0x63, 0xe7, 0xaf, 0x6c, 0xa9, 0x15, 0x7d, 0x46, 0xa6, 0xbc, 0xdf, 0xa7, 0xd, 0x2b, 0xd2, 0x2d, 0x97, 0x4d, 0xa, 0x6b, 0xd, 0x6e, 0x90, 0x42, 0x5c}} return a, nil } @@ -223,7 +223,7 @@ func _1647278782_display_nameUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1647278782_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1647278782_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa1, 0x1f, 0x3e, 0x61, 0x65, 0x8d, 0xff, 0xee, 0xde, 0xc5, 0x91, 0xd9, 0x5c, 0xb5, 0xe2, 0xf0, 0xb7, 0xe7, 0x5c, 0x5c, 0x16, 0x25, 0x89, 0xee, 0x78, 0x12, 0xea, 0x3e, 0x48, 0x41, 0xa6}} return a, nil } @@ -243,7 +243,7 @@ func _1647862838_reset_last_backupUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1647862838_reset_last_backup.up.sql", size: 37, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1647862838_reset_last_backup.up.sql", size: 37, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x21, 0xe3, 0xd5, 0xf6, 0x5f, 0xfe, 0x65, 0xfa, 0x1d, 0x88, 0xf8, 0x5f, 0x24, 0x71, 0x34, 0x68, 0x96, 0x2a, 0x60, 0x87, 0x15, 0x82, 0x4d, 0x8a, 0x59, 0x3d, 0x1f, 0xd8, 0x56, 0xd4, 0xfb, 0xda}} return a, nil } @@ -263,7 +263,7 @@ func _1647871652_add_settings_sync_clock_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1647871652_add_settings_sync_clock_table.up.sql", size: 1044, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1647871652_add_settings_sync_clock_table.up.sql", size: 1044, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd8, 0x58, 0xec, 0x85, 0x90, 0xfa, 0x30, 0x98, 0x98, 0x9a, 0xa6, 0xa8, 0x96, 0x2b, 0x38, 0x93, 0xf3, 0xae, 0x46, 0x74, 0xa4, 0x41, 0x62, 0x9b, 0x2, 0x86, 0xbf, 0xe5, 0x2a, 0xce, 0xe2, 0xc0}} return a, nil } @@ -283,7 +283,7 @@ func _1647880168_add_torrent_configUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1647880168_add_torrent_config.up.sql", size: 211, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1647880168_add_torrent_config.up.sql", size: 211, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0x92, 0x22, 0x37, 0x96, 0xf3, 0xb5, 0x5b, 0x27, 0xd0, 0x7d, 0x43, 0x5, 0x4e, 0x9d, 0xe2, 0x49, 0xbe, 0x86, 0x31, 0xa1, 0x89, 0xff, 0xd6, 0x51, 0xe0, 0x9c, 0xb, 0xda, 0xfc, 0xf2, 0x93}} return a, nil } @@ -303,7 +303,7 @@ func _1647882837_add_communities_settings_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1647882837_add_communities_settings_table.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1647882837_add_communities_settings_table.up.sql", size: 206, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbd, 0x87, 0x78, 0x99, 0xd9, 0x5d, 0xbd, 0xf7, 0x57, 0x9c, 0xca, 0x97, 0xbd, 0xb3, 0xe9, 0xb5, 0x89, 0x31, 0x3f, 0xf6, 0x5c, 0x13, 0xb, 0xc3, 0x54, 0x93, 0x18, 0x40, 0x7, 0x82, 0xfe, 0x7e}} return a, nil } @@ -323,7 +323,7 @@ func _1647956635_add_waku_messages_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1647956635_add_waku_messages_table.up.sql", size: 266, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1647956635_add_waku_messages_table.up.sql", size: 266, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0xe, 0xe1, 0xdc, 0xda, 0x2e, 0x89, 0x8d, 0xdc, 0x2a, 0x1c, 0x13, 0xa1, 0xfc, 0xfe, 0xf, 0xb2, 0xb9, 0x85, 0xc8, 0x45, 0xd6, 0xd1, 0x7, 0x5c, 0xa3, 0x8, 0x47, 0x44, 0x6d, 0x96, 0xe0}} return a, nil } @@ -343,7 +343,7 @@ func _1648554928_network_testUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1648554928_network_test.up.sql", size: 132, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1648554928_network_test.up.sql", size: 132, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9a, 0xc5, 0x7f, 0x87, 0xf3, 0x2c, 0xf7, 0xbb, 0xd3, 0x3a, 0x4e, 0x76, 0x88, 0xca, 0xaf, 0x73, 0xce, 0x8f, 0xa1, 0xf6, 0x3d, 0x4d, 0xed, 0x6f, 0x49, 0xf2, 0xfe, 0x56, 0x2a, 0x60, 0x68, 0xca}} return a, nil } @@ -363,7 +363,7 @@ func _1649174829_add_visitble_tokenUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1649174829_add_visitble_token.up.sql", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1649174829_add_visitble_token.up.sql", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1651569001, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa3, 0x22, 0xc0, 0x2b, 0x3f, 0x4f, 0x3d, 0x5e, 0x4c, 0x68, 0x7c, 0xd0, 0x15, 0x36, 0x9f, 0xec, 0xa1, 0x2a, 0x7b, 0xb4, 0xe3, 0xc6, 0xc9, 0xb4, 0x81, 0x50, 0x4a, 0x11, 0x3b, 0x35, 0x7, 0xcf}} return a, nil } @@ -383,7 +383,7 @@ func _1649882262_add_derived_from_accountsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1649882262_add_derived_from_accounts.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "1649882262_add_derived_from_accounts.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1651569001, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0xb9, 0x44, 0x4d, 0x85, 0x8d, 0x7f, 0xb4, 0xae, 0x4f, 0x5c, 0x66, 0x64, 0xb6, 0xe2, 0xe, 0x3d, 0xad, 0x9d, 0x8, 0x4f, 0xab, 0x6e, 0xa8, 0x7d, 0x76, 0x3, 0xad, 0x96, 0x1, 0xee, 0x5c}} return a, nil } @@ -403,7 +403,7 @@ func _1650612625_add_community_message_archive_hashes_tableUpSql() (*asset, erro return nil, err } - info := bindataFileInfo{name: "1650612625_add_community_message_archive_hashes_table.up.sql", size: 130, mode: os.FileMode(0644), modTime: time.Unix(1653040431, 0)} + info := bindataFileInfo{name: "1650612625_add_community_message_archive_hashes_table.up.sql", size: 130, mode: os.FileMode(0644), modTime: time.Unix(1652180449, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x48, 0x31, 0xb3, 0x75, 0x23, 0xe2, 0x45, 0xe, 0x47, 0x1b, 0x35, 0xa5, 0x6e, 0x83, 0x4e, 0x64, 0x7d, 0xd7, 0xa2, 0xda, 0xe9, 0x53, 0xf1, 0x16, 0x86, 0x2c, 0x57, 0xad, 0xfa, 0xca, 0x39, 0xde}} return a, nil } @@ -423,7 +423,7 @@ func _1650616788_add_communities_archives_info_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1650616788_add_communities_archives_info_table.up.sql", size: 208, mode: os.FileMode(0644), modTime: time.Unix(1653040431, 0)} + info := bindataFileInfo{name: "1650616788_add_communities_archives_info_table.up.sql", size: 208, mode: os.FileMode(0644), modTime: time.Unix(1652180449, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0x4f, 0x80, 0x45, 0xb9, 0xd9, 0x15, 0xe2, 0x78, 0xd0, 0xcb, 0x71, 0xc1, 0x1b, 0xb7, 0x1b, 0x1b, 0x97, 0xfe, 0x47, 0x53, 0x3c, 0x62, 0xbc, 0xdd, 0x3a, 0x94, 0x1a, 0xc, 0x48, 0x76, 0xe}} return a, nil } @@ -443,7 +443,7 @@ func _1652715604_add_clock_accountsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1652715604_add_clock_accounts.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1653040431, 0)} + info := bindataFileInfo{name: "1652715604_add_clock_accounts.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1653314960, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb6, 0xd9, 0x8d, 0x73, 0xc9, 0xef, 0xfa, 0xb1, 0x4b, 0xa5, 0xf3, 0x5, 0x19, 0x26, 0x46, 0xf8, 0x47, 0x93, 0xdb, 0xac, 0x2, 0xef, 0xf9, 0x71, 0x56, 0x83, 0xe6, 0x2d, 0xb0, 0xd7, 0x83, 0x5c}} return a, nil } @@ -463,7 +463,7 @@ func _1653037334_add_notifications_settings_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1653037334_add_notifications_settings_table.up.sql", size: 1276, mode: os.FileMode(0644), modTime: time.Unix(1653058540, 0)} + info := bindataFileInfo{name: "1653037334_add_notifications_settings_table.up.sql", size: 1276, mode: os.FileMode(0644), modTime: time.Unix(1653980143, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4b, 0xc4, 0x65, 0xac, 0xa, 0xf2, 0xef, 0xb6, 0x39, 0x3c, 0xc5, 0xb1, 0xb2, 0x9c, 0x86, 0x58, 0xe0, 0x38, 0xcb, 0x57, 0x3c, 0x76, 0x73, 0x87, 0x79, 0x4e, 0xf6, 0xed, 0xb0, 0x8e, 0x9e, 0xa}} return a, nil } @@ -483,7 +483,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1653038120, 0)} + info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x7c, 0x28, 0xcd, 0x47, 0xf2, 0xfa, 0x7c, 0x51, 0x2d, 0xd8, 0x38, 0xb, 0xb0, 0x34, 0x9d, 0x4c, 0x62, 0xa, 0x9e, 0x28, 0xc3, 0x31, 0x23, 0xd9, 0xbb, 0x89, 0x9f, 0xa0, 0x89, 0x1f, 0xe8}} return a, nil } diff --git a/appdatabase/migrationsprevnodecfg/bindata.go b/appdatabase/migrationsprevnodecfg/bindata.go index e1843d4fc..00c3298ad 100644 --- a/appdatabase/migrationsprevnodecfg/bindata.go +++ b/appdatabase/migrationsprevnodecfg/bindata.go @@ -137,7 +137,7 @@ func _0001_appDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0001_app.down.sql", size: 356, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0001_app.down.sql", size: 356, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb5, 0x25, 0xa0, 0xf8, 0x7d, 0x2d, 0xd, 0xcf, 0x18, 0xe4, 0x73, 0xc3, 0x95, 0xf5, 0x24, 0x20, 0xa9, 0xe6, 0x9e, 0x1d, 0x93, 0xe5, 0xc5, 0xad, 0x93, 0x8f, 0x5e, 0x40, 0xb5, 0x30, 0xaa, 0x25}} return a, nil } @@ -157,7 +157,7 @@ func _0001_appUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0001_app.up.sql", size: 2967, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0001_app.up.sql", size: 2967, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf7, 0x3a, 0xa7, 0xf2, 0x8f, 0xfa, 0x82, 0x7c, 0xc5, 0x49, 0xac, 0xac, 0xf, 0xc, 0x77, 0xe2, 0xba, 0xe8, 0x4d, 0xe, 0x6f, 0x5d, 0x2c, 0x2c, 0x18, 0x80, 0xc2, 0x1d, 0xe, 0x25, 0xe, 0x18}} return a, nil } @@ -177,7 +177,7 @@ func _0002_tokensDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0002_tokens.down.sql", size: 19, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0002_tokens.down.sql", size: 19, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd1, 0x31, 0x2, 0xcc, 0x2f, 0x38, 0x90, 0xf7, 0x58, 0x37, 0x47, 0xf4, 0x18, 0xf7, 0x72, 0x74, 0x67, 0x14, 0x7e, 0xf3, 0xb1, 0xd6, 0x5f, 0xb0, 0xd5, 0xe7, 0x91, 0xf4, 0x26, 0x77, 0x8e, 0x68}} return a, nil } @@ -197,7 +197,7 @@ func _0002_tokensUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0002_tokens.up.sql", size: 248, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0002_tokens.up.sql", size: 248, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcc, 0xd6, 0xde, 0xd3, 0x7b, 0xee, 0x92, 0x11, 0x38, 0xa4, 0xeb, 0x84, 0xca, 0xcb, 0x37, 0x75, 0x5, 0x77, 0x7f, 0x14, 0x39, 0xee, 0xa1, 0x8b, 0xd4, 0x5c, 0x6e, 0x55, 0x6, 0x50, 0x16, 0xd4}} return a, nil } @@ -217,7 +217,7 @@ func _0003_settingsDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0003_settings.down.sql", size: 118, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0003_settings.down.sql", size: 118, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe5, 0xa6, 0xf5, 0xc0, 0x60, 0x64, 0x77, 0xe2, 0xe7, 0x3c, 0x9b, 0xb1, 0x52, 0xa9, 0x95, 0x16, 0xf8, 0x60, 0x2f, 0xa5, 0xeb, 0x46, 0xb9, 0xb9, 0x8f, 0x4c, 0xf4, 0xfd, 0xbb, 0xe7, 0xe5, 0xe5}} return a, nil } @@ -237,7 +237,7 @@ func _0003_settingsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0003_settings.up.sql", size: 1311, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0003_settings.up.sql", size: 1311, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x35, 0x0, 0xeb, 0xe2, 0x33, 0x68, 0xb9, 0xf4, 0xf6, 0x8e, 0x9e, 0x10, 0xe9, 0x58, 0x68, 0x28, 0xb, 0xcd, 0xec, 0x74, 0x71, 0xa7, 0x9a, 0x5a, 0x77, 0x59, 0xb1, 0x13, 0x1c, 0xa1, 0x5b}} return a, nil } @@ -257,7 +257,7 @@ func _0004_pending_stickersDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0004_pending_stickers.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0004_pending_stickers.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}} return a, nil } @@ -277,7 +277,7 @@ func _0004_pending_stickersUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0004_pending_stickers.up.sql", size: 61, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0004_pending_stickers.up.sql", size: 61, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3c, 0xed, 0x25, 0xdf, 0x75, 0x2, 0x6c, 0xf0, 0xa2, 0xa8, 0x37, 0x62, 0x65, 0xad, 0xfd, 0x98, 0xa0, 0x9d, 0x63, 0x94, 0xdf, 0x6b, 0x46, 0xe0, 0x68, 0xec, 0x9c, 0x7f, 0x77, 0xdd, 0xb3, 0x6}} return a, nil } @@ -297,7 +297,7 @@ func _0005_waku_modeDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0005_waku_mode.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0005_waku_mode.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}} return a, nil } @@ -317,7 +317,7 @@ func _0005_waku_modeUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0005_waku_mode.up.sql", size: 146, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0005_waku_mode.up.sql", size: 146, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa6, 0x91, 0xc, 0xd7, 0x89, 0x61, 0x2e, 0x4c, 0x5a, 0xb6, 0x67, 0xd1, 0xc1, 0x42, 0x24, 0x38, 0xd6, 0x1b, 0x75, 0x41, 0x9c, 0x23, 0xb0, 0xca, 0x5c, 0xf1, 0x5c, 0xd0, 0x13, 0x92, 0x3e, 0xe1}} return a, nil } @@ -337,7 +337,7 @@ func _0006_appearanceUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0006_appearance.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0006_appearance.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0x6, 0x25, 0x6c, 0xe4, 0x9d, 0xa7, 0x72, 0xe8, 0xbc, 0xe4, 0x1f, 0x1e, 0x2d, 0x7c, 0xb7, 0xf6, 0xa3, 0xec, 0x3b, 0x4e, 0x93, 0x2e, 0xa4, 0xec, 0x6f, 0xe5, 0x95, 0x94, 0xe8, 0x4, 0xfb}} return a, nil } @@ -357,7 +357,7 @@ func _0007_enable_waku_defaultUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0007_enable_waku_default.up.sql", size: 38, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0007_enable_waku_default.up.sql", size: 38, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd4, 0x42, 0xb6, 0xe5, 0x48, 0x41, 0xeb, 0xc0, 0x7e, 0x3b, 0xe6, 0x8e, 0x96, 0x33, 0x20, 0x92, 0x24, 0x5a, 0x60, 0xfa, 0xa0, 0x3, 0x5e, 0x76, 0x4b, 0x89, 0xaa, 0x37, 0x66, 0xbc, 0x26, 0x11}} return a, nil } @@ -377,7 +377,7 @@ func _0008_add_push_notificationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0008_add_push_notifications.up.sql", size: 349, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0008_add_push_notifications.up.sql", size: 349, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5a, 0x0, 0xbf, 0xd0, 0xdd, 0xcd, 0x73, 0xe0, 0x7c, 0x56, 0xef, 0xdc, 0x57, 0x61, 0x94, 0x64, 0x70, 0xb9, 0xfa, 0xa1, 0x2a, 0x36, 0xc, 0x2f, 0xf8, 0x95, 0xa, 0x57, 0x3e, 0x7a, 0xd7, 0x12}} return a, nil } @@ -397,7 +397,7 @@ func _0009_enable_sending_push_notificationsDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0009_enable_sending_push_notifications.down.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0009_enable_sending_push_notifications.down.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe9, 0xae, 0x1b, 0x41, 0xcb, 0x9c, 0x2c, 0x93, 0xc6, 0x2a, 0x77, 0x3, 0xb9, 0x51, 0xe0, 0x68, 0x68, 0x0, 0xf7, 0x5b, 0xb3, 0x1e, 0x94, 0x44, 0xba, 0x9c, 0xd0, 0x3b, 0x80, 0x21, 0x6f, 0xb5}} return a, nil } @@ -417,7 +417,7 @@ func _0009_enable_sending_push_notificationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0009_enable_sending_push_notifications.up.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0009_enable_sending_push_notifications.up.sql", size: 49, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1b, 0x80, 0xe4, 0x9c, 0xc8, 0xb8, 0xd5, 0xef, 0xce, 0x74, 0x9b, 0x7b, 0xdd, 0xa, 0x99, 0x1e, 0xef, 0x7f, 0xb8, 0x99, 0x84, 0x4, 0x0, 0x6b, 0x1d, 0x2c, 0xa, 0xf8, 0x2c, 0x4f, 0xb5, 0x44}} return a, nil } @@ -437,7 +437,7 @@ func _0010_add_block_mentionsDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0010_add_block_mentions.down.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0010_add_block_mentions.down.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6d, 0x9e, 0x27, 0x1e, 0xba, 0x9f, 0xca, 0xae, 0x98, 0x2e, 0x6e, 0xe3, 0xdd, 0xac, 0x73, 0x34, 0x4e, 0x69, 0x92, 0xb5, 0xf6, 0x9, 0xab, 0x50, 0x35, 0xd, 0xee, 0xeb, 0x3e, 0xcc, 0x7e, 0xce}} return a, nil } @@ -457,7 +457,7 @@ func _0010_add_block_mentionsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0010_add_block_mentions.up.sql", size: 89, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0010_add_block_mentions.up.sql", size: 89, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd7, 0x23, 0x85, 0xa2, 0xb5, 0xb6, 0xb4, 0x3f, 0xdc, 0x4e, 0xff, 0xe2, 0x6b, 0x66, 0x68, 0x5e, 0xb2, 0xb4, 0x14, 0xb2, 0x1b, 0x4d, 0xb1, 0xce, 0xf7, 0x6, 0x58, 0xa7, 0xaf, 0x93, 0x3f, 0x25}} return a, nil } @@ -477,7 +477,7 @@ func _0011_allow_webview_permission_requestsDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0011_allow_webview_permission_requests.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0011_allow_webview_permission_requests.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}} return a, nil } @@ -497,7 +497,7 @@ func _0011_allow_webview_permission_requestsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0011_allow_webview_permission_requests.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0011_allow_webview_permission_requests.up.sql", size: 88, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x43, 0x5f, 0x22, 0x4c, 0x98, 0x1d, 0xc6, 0xf4, 0x89, 0xaf, 0xf4, 0x44, 0xba, 0xf8, 0x28, 0xa7, 0xb5, 0xb9, 0xf0, 0xf2, 0xcb, 0x5, 0x59, 0x7a, 0xc, 0xdf, 0xd3, 0x38, 0xa4, 0xb8, 0x98, 0xc2}} return a, nil } @@ -517,7 +517,7 @@ func _0012_pending_transactionsDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0012_pending_transactions.down.sql", size: 33, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0012_pending_transactions.down.sql", size: 33, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0x41, 0xfe, 0x5c, 0xd8, 0xc3, 0x29, 0xfd, 0x31, 0x78, 0x99, 0x7a, 0xeb, 0x17, 0x62, 0x88, 0x41, 0xb3, 0xe7, 0xb5, 0x5, 0x0, 0x90, 0xa1, 0x7, 0x1a, 0x23, 0x88, 0x81, 0xba, 0x56, 0x9d}} return a, nil } @@ -537,7 +537,7 @@ func _0012_pending_transactionsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0012_pending_transactions.up.sql", size: 321, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0012_pending_transactions.up.sql", size: 321, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd, 0x17, 0xff, 0xd7, 0xa7, 0x49, 0x1e, 0x7b, 0x34, 0x63, 0x7c, 0x53, 0xaa, 0x6b, 0x2d, 0xc8, 0xe0, 0x82, 0x21, 0x90, 0x3a, 0x94, 0xf1, 0xa6, 0xe4, 0x70, 0xe5, 0x85, 0x1a, 0x48, 0x25, 0xb}} return a, nil } @@ -557,7 +557,7 @@ func _0013_favouritesDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0013_favourites.down.sql", size: 23, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0013_favourites.down.sql", size: 23, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x32, 0xf8, 0x55, 0x13, 0x4f, 0x4a, 0x19, 0x83, 0x9c, 0xda, 0x34, 0xb8, 0x3, 0x54, 0x82, 0x1e, 0x99, 0x36, 0x6b, 0x42, 0x3, 0xf6, 0x43, 0xde, 0xe6, 0x32, 0xb6, 0xdf, 0xe2, 0x59, 0x8c, 0x84}} return a, nil } @@ -577,7 +577,7 @@ func _0013_favouritesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0013_favourites.up.sql", size: 132, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0013_favourites.up.sql", size: 132, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbe, 0x1, 0x27, 0x38, 0x76, 0xf5, 0xcb, 0x61, 0xda, 0x5b, 0xce, 0xd9, 0x8b, 0x18, 0x77, 0x61, 0x84, 0xe7, 0x22, 0xe2, 0x13, 0x99, 0xab, 0x32, 0xbc, 0xbe, 0xed, 0x1f, 0x2f, 0xb0, 0xe4, 0x8d}} return a, nil } @@ -597,7 +597,7 @@ func _0014_add_use_mailserversDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0014_add_use_mailservers.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0014_add_use_mailservers.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}} return a, nil } @@ -617,7 +617,7 @@ func _0014_add_use_mailserversUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0014_add_use_mailservers.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0014_add_use_mailservers.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0xba, 0x65, 0xbf, 0x1b, 0xc9, 0x6d, 0x45, 0xf2, 0xf5, 0x30, 0x7c, 0xc1, 0xde, 0xb8, 0xe3, 0x3f, 0xa9, 0x2f, 0x9f, 0xea, 0x1, 0x29, 0x29, 0x65, 0xe7, 0x38, 0xab, 0xa4, 0x62, 0xf, 0xd0}} return a, nil } @@ -637,7 +637,7 @@ func _0015_link_previewsDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0015_link_previews.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0015_link_previews.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}} return a, nil } @@ -657,7 +657,7 @@ func _0015_link_previewsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0015_link_previews.up.sql", size: 203, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0015_link_previews.up.sql", size: 203, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb1, 0xf7, 0x38, 0x25, 0xa6, 0xfc, 0x6b, 0x9, 0xe4, 0xd9, 0xbf, 0x58, 0x7b, 0x80, 0xd8, 0x48, 0x63, 0xde, 0xa5, 0x5e, 0x30, 0xa3, 0xeb, 0x68, 0x8e, 0x6a, 0x9f, 0xfd, 0xf4, 0x46, 0x41, 0x34}} return a, nil } @@ -677,7 +677,7 @@ func _0016_local_notifications_preferencesDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0016_local_notifications_preferences.down.sql", size: 43, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0016_local_notifications_preferences.down.sql", size: 43, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe0, 0x50, 0xc7, 0xdd, 0x53, 0x9c, 0x5d, 0x1e, 0xb5, 0x71, 0x25, 0x50, 0x58, 0xcf, 0x6d, 0xbe, 0x5a, 0x8, 0x12, 0xc9, 0x13, 0xd, 0x9a, 0x3d, 0x4b, 0x7a, 0x2f, 0x1b, 0xe5, 0x23, 0x52, 0x78}} return a, nil } @@ -697,7 +697,7 @@ func _0016_local_notifications_preferencesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0016_local_notifications_preferences.up.sql", size: 204, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0016_local_notifications_preferences.up.sql", size: 204, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3f, 0x3a, 0x16, 0x25, 0xdf, 0xba, 0x62, 0xd3, 0x81, 0x73, 0xc, 0x10, 0x85, 0xbc, 0x8d, 0xe, 0x1d, 0x62, 0xcb, 0xb, 0x6d, 0x8c, 0x4f, 0x63, 0x5f, 0xe2, 0xd, 0xc5, 0x46, 0xa8, 0x35, 0x5b}} return a, nil } @@ -717,7 +717,7 @@ func _0017_bookmarksDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0017_bookmarks.down.sql", size: 22, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0017_bookmarks.down.sql", size: 22, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9a, 0x13, 0x2a, 0x44, 0xb0, 0x3, 0x18, 0x63, 0xb8, 0x33, 0xda, 0x3a, 0xeb, 0xb8, 0xcb, 0xd1, 0x98, 0x29, 0xa7, 0xf0, 0x6, 0x9d, 0xc9, 0x62, 0xe7, 0x89, 0x7f, 0x77, 0xaf, 0xec, 0x6b, 0x8f}} return a, nil } @@ -737,7 +737,7 @@ func _0017_bookmarksUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0017_bookmarks.up.sql", size: 147, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0017_bookmarks.up.sql", size: 147, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbc, 0x47, 0xe1, 0xe3, 0xd8, 0xc6, 0x4, 0x6d, 0x5f, 0x2f, 0xa, 0x51, 0xa6, 0x8c, 0x6a, 0xe0, 0x3d, 0x8c, 0x91, 0x47, 0xbc, 0x1, 0x75, 0x46, 0x92, 0x2, 0x18, 0x6e, 0xe3, 0x4f, 0x18, 0x57}} return a, nil } @@ -757,7 +757,7 @@ func _0018_profile_pictures_visibilityUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0018_profile_pictures_visibility.up.sql", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0018_profile_pictures_visibility.up.sql", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0xe3, 0xc5, 0xec, 0x83, 0x55, 0x45, 0x57, 0x7a, 0xaa, 0xd2, 0xa7, 0x59, 0xa7, 0x87, 0xef, 0x63, 0x19, 0x9c, 0x46, 0x9c, 0xc5, 0x32, 0x89, 0xa4, 0x68, 0x70, 0xd8, 0x83, 0x43, 0xa4, 0x72}} return a, nil } @@ -777,7 +777,7 @@ func _0019_blocks_ranges_extra_dataUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0019_blocks_ranges_extra_data.up.sql", size: 89, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0019_blocks_ranges_extra_data.up.sql", size: 89, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa3, 0x96, 0x32, 0x58, 0xf0, 0xb9, 0xe1, 0x70, 0x81, 0xca, 0x8d, 0x45, 0x57, 0x8a, 0x7, 0x5d, 0x9e, 0x2a, 0x30, 0xb, 0xad, 0x5f, 0xf8, 0xd4, 0x30, 0x94, 0x73, 0x37, 0x8d, 0xc1, 0x9a, 0xed}} return a, nil } @@ -797,7 +797,7 @@ func _0020_metricsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0020_metrics.up.sql", size: 235, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0020_metrics.up.sql", size: 235, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe8, 0x32, 0xbc, 0xb6, 0x9b, 0x5a, 0x8f, 0x9f, 0x4c, 0x90, 0x81, 0x3e, 0x2e, 0xd1, 0x23, 0xcd, 0xf1, 0x83, 0x35, 0xca, 0x66, 0x87, 0x52, 0x4e, 0x30, 0x3e, 0x4f, 0xa8, 0xfd, 0x30, 0x16, 0xbd}} return a, nil } @@ -817,7 +817,7 @@ func _0021_add_session_id_to_metricsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0021_add_session_id_to_metrics.up.sql", size: 55, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0021_add_session_id_to_metrics.up.sql", size: 55, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb7, 0x81, 0xfc, 0x97, 0xd1, 0x8b, 0xea, 0x8e, 0xd7, 0xc2, 0x53, 0x62, 0xe9, 0xbc, 0xf, 0x8c, 0x46, 0x41, 0x41, 0xb7, 0x6, 0x35, 0xf5, 0xba, 0xbb, 0x28, 0x50, 0x48, 0xbf, 0x36, 0x90, 0x5c}} return a, nil } @@ -837,7 +837,7 @@ func _0022_pending_transfersUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0022_pending_transfers.up.sql", size: 706, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "0022_pending_transfers.up.sql", size: 706, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6a, 0x9, 0xe6, 0x6, 0xae, 0x60, 0xdd, 0xbb, 0x76, 0xac, 0xe0, 0x57, 0x30, 0x67, 0x37, 0x93, 0x40, 0x13, 0xec, 0xf2, 0x6e, 0x61, 0xa, 0x14, 0xb2, 0xb1, 0xbd, 0x91, 0xf8, 0x89, 0xb3, 0xe3}} return a, nil } @@ -857,7 +857,7 @@ func _1618237885_settings_anon_metrics_should_sendUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1618237885_settings_anon_metrics_should_send.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1618237885_settings_anon_metrics_should_send.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x6c, 0x1d, 0x1f, 0x54, 0x62, 0x18, 0x22, 0x5c, 0xa7, 0x8c, 0x59, 0x24, 0xd3, 0x4d, 0x55, 0xc4, 0x2a, 0x9e, 0x4c, 0x37, 0x6b, 0xfd, 0xac, 0xec, 0xb7, 0x68, 0x21, 0x26, 0x26, 0xf3, 0x92}} return a, nil } @@ -877,7 +877,7 @@ func _1618395756_contacts_onlyUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1618395756_contacts_only.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1618395756_contacts_only.up.sql", size: 136, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0xe3, 0xd0, 0xe7, 0xf2, 0x6e, 0xbf, 0x27, 0xf6, 0xe2, 0x2e, 0x16, 0x4b, 0x52, 0x3b, 0xcf, 0x63, 0x52, 0xfc, 0x1d, 0x43, 0xba, 0x42, 0xf9, 0x1e, 0x1e, 0x39, 0x40, 0xed, 0x0, 0x20, 0xa8}} return a, nil } @@ -897,7 +897,7 @@ func _1622184614_add_default_sync_periodUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622184614_add_default_sync_period.up.sql", size: 125, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1622184614_add_default_sync_period.up.sql", size: 125, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0x39, 0xeb, 0x8f, 0xdc, 0x1, 0x56, 0xc1, 0x9b, 0xaa, 0xda, 0x44, 0xe0, 0xdb, 0xda, 0x2c, 0xe7, 0x71, 0x8d, 0xbc, 0xc1, 0x9a, 0x4f, 0x48, 0xe0, 0x5e, 0x81, 0x1e, 0x8e, 0x6a, 0x4d, 0x3}} return a, nil } @@ -917,7 +917,7 @@ func _1625872445_user_statusUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1625872445_user_status.up.sql", size: 351, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1625872445_user_status.up.sql", size: 351, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0xa, 0xfe, 0x7a, 0xcc, 0x9e, 0x35, 0x26, 0xb, 0xc8, 0xf2, 0x7d, 0xfa, 0x4b, 0xcf, 0x53, 0x20, 0x76, 0xc7, 0xd, 0xbc, 0x78, 0x4f, 0x74, 0x2d, 0x2e, 0x2e, 0x7e, 0x62, 0xae, 0x78, 0x1f}} return a, nil } @@ -937,7 +937,7 @@ func _1627983977_add_gif_to_settingsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1627983977_add_gif_to_settings.up.sql", size: 102, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1627983977_add_gif_to_settings.up.sql", size: 102, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x63, 0xe6, 0xe1, 0x97, 0x64, 0x4c, 0xe2, 0x14, 0xb1, 0x96, 0x3a, 0xb0, 0xb9, 0xb7, 0xb5, 0x78, 0x4a, 0x39, 0x69, 0x89, 0xb7, 0x89, 0x19, 0xb8, 0x89, 0x1, 0xc5, 0xc2, 0x85, 0x53, 0xe2, 0x83}} return a, nil } @@ -957,7 +957,7 @@ func _1628580203_add_hidden_accountUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1628580203_add_hidden_account.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1628580203_add_hidden_account.up.sql", size: 67, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcb, 0x30, 0xf1, 0xd4, 0x60, 0xe2, 0x28, 0x14, 0xcb, 0x16, 0xb, 0x9, 0xea, 0x17, 0xa, 0x9e, 0x89, 0xa8, 0x32, 0x32, 0xf8, 0x4d, 0xa0, 0xe1, 0xe5, 0x79, 0xbd, 0x7d, 0x79, 0xe9, 0x4c, 0x9e}} return a, nil } @@ -977,7 +977,7 @@ func _1629123384_add_id_to_app_metricsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1629123384_add_id_to_app_metrics.up.sql", size: 589, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1629123384_add_id_to_app_metrics.up.sql", size: 589, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdf, 0x66, 0xc0, 0x69, 0xb, 0xad, 0x49, 0x7c, 0x8c, 0x67, 0xb8, 0xd6, 0x8d, 0x5d, 0x86, 0x1f, 0xa4, 0x53, 0xf5, 0x8, 0x1, 0xfd, 0x38, 0x49, 0xee, 0x84, 0xc0, 0xd8, 0x17, 0x72, 0x3, 0xb3}} return a, nil } @@ -997,7 +997,7 @@ func _1630401853_add_opensea_enabled_to_settingsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1630401853_add_opensea_enabled_to_settings.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1630401853_add_opensea_enabled_to_settings.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6, 0x91, 0x86, 0x15, 0xc8, 0x99, 0xe3, 0xae, 0xa, 0x6e, 0x94, 0x48, 0x51, 0x5b, 0x18, 0xe0, 0xbc, 0xaf, 0x34, 0x75, 0x55, 0x61, 0xd4, 0xc1, 0x85, 0xc7, 0x3d, 0x99, 0x9e, 0x1f, 0x37, 0x56}} return a, nil } @@ -1017,7 +1017,7 @@ func _1630464455_createSaved_addressesTableDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1630464455_create-saved_addresses-table.down.sql", size: 28, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1630464455_create-saved_addresses-table.down.sql", size: 28, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x23, 0x52, 0x39, 0xb5, 0x42, 0xac, 0xcb, 0xa1, 0x44, 0xb7, 0x94, 0x26, 0x24, 0xb2, 0x12, 0xc, 0xc5, 0xbf, 0x63, 0x13, 0x6f, 0x3c, 0x4, 0x7b, 0xf0, 0xd, 0xfa, 0x55, 0x9e, 0x51, 0xf9, 0x7a}} return a, nil } @@ -1037,7 +1037,7 @@ func _1630464455_createSaved_addressesTableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1630464455_create-saved_addresses-table.up.sql", size: 187, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1630464455_create-saved_addresses-table.up.sql", size: 187, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x32, 0xf, 0x56, 0x18, 0xeb, 0x4e, 0xac, 0xd8, 0xd6, 0x91, 0xae, 0x83, 0xcf, 0x91, 0x9e, 0x4, 0x4b, 0x2, 0x1f, 0x6d, 0xba, 0xf6, 0x3, 0xf2, 0x98, 0x72, 0xf6, 0x91, 0x29, 0x96, 0x0, 0x35}} return a, nil } @@ -1057,7 +1057,7 @@ func _1630485153_networksDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1630485153_networks.down.sql", size: 21, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1630485153_networks.down.sql", size: 21, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xbb, 0x3e, 0x57, 0xb7, 0xf7, 0x8, 0xbd, 0xb5, 0xc2, 0xea, 0xc, 0x45, 0xb7, 0x7, 0x9, 0xca, 0xe7, 0x48, 0x7e, 0x56, 0x4e, 0x44, 0x78, 0x8e, 0xe3, 0x87, 0x63, 0xaf, 0x16, 0x3f, 0xf9, 0x71}} return a, nil } @@ -1077,7 +1077,7 @@ func _1630485153_networksUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1630485153_networks.up.sql", size: 394, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1630485153_networks.up.sql", size: 394, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xed, 0x9, 0x1d, 0x3, 0x86, 0xbd, 0xc5, 0xde, 0x3c, 0x1b, 0x40, 0x41, 0x7c, 0x61, 0x8, 0x80, 0x53, 0x87, 0x1b, 0x5a, 0x56, 0xd, 0x88, 0x1d, 0x60, 0x24, 0xce, 0x7b, 0x8f, 0xff, 0xaf, 0x36}} return a, nil } @@ -1097,7 +1097,7 @@ func _1632262444_profile_pictures_show_toUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1632262444_profile_pictures_show_to.up.sql", size: 81, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1632262444_profile_pictures_show_to.up.sql", size: 81, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc3, 0xa2, 0x5a, 0x94, 0xde, 0x86, 0x2a, 0x29, 0xf5, 0xb3, 0x36, 0xe7, 0x53, 0x81, 0x55, 0xc9, 0xb5, 0xc3, 0xf4, 0x8c, 0x65, 0x2c, 0x4c, 0x48, 0xfd, 0x3c, 0xb7, 0x14, 0xb4, 0xea, 0x7a, 0x13}} return a, nil } @@ -1117,7 +1117,7 @@ func _1635942153_add_telemetry_server_url_to_settingsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1635942153_add_telemetry_server_url_to_settings.up.sql", size: 128, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1635942153_add_telemetry_server_url_to_settings.up.sql", size: 128, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6e, 0x9b, 0x1d, 0x39, 0x9c, 0x8d, 0x50, 0x86, 0xdf, 0xe5, 0x81, 0x55, 0xdc, 0x31, 0xcd, 0xb7, 0xc7, 0x5a, 0x67, 0x3b, 0x21, 0x99, 0xa5, 0x74, 0xb8, 0xd3, 0x58, 0xae, 0x29, 0x68, 0x2a, 0x8d}} return a, nil } @@ -1137,7 +1137,7 @@ func _1635942154_add_backup_settingUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1635942154_add_backup_setting.up.sql", size: 287, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1635942154_add_backup_setting.up.sql", size: 287, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb7, 0xe7, 0xfb, 0x70, 0x80, 0x5, 0xb4, 0x7b, 0x67, 0x8, 0x6e, 0x5f, 0x45, 0x17, 0xd9, 0x5f, 0x18, 0x66, 0x2f, 0x8a, 0x4f, 0xd4, 0x15, 0xe5, 0x2b, 0xbb, 0x25, 0x7a, 0x30, 0xad, 0x4c, 0x1a}} return a, nil } @@ -1157,7 +1157,7 @@ func _1637745568_add_auto_message_settingUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1637745568_add_auto_message_setting.up.sql", size: 122, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1637745568_add_auto_message_setting.up.sql", size: 122, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1d, 0xd8, 0xd2, 0xc2, 0x3a, 0xd7, 0xf1, 0x96, 0x6a, 0x35, 0xe5, 0x5c, 0xb9, 0xed, 0x4b, 0xf2, 0x5f, 0x80, 0x43, 0xca, 0x40, 0x57, 0x7e, 0xd7, 0x41, 0x9f, 0x70, 0x9f, 0xaf, 0x2a, 0xfc, 0x8f}} return a, nil } @@ -1177,7 +1177,7 @@ func _1640111208_nodeconfigUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1640111208_nodeconfig.up.sql", size: 7659, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "1640111208_nodeconfig.up.sql", size: 7659, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8e, 0x5a, 0xc6, 0xed, 0x6, 0xcb, 0x51, 0x8b, 0x78, 0xe9, 0x10, 0x37, 0xd1, 0xad, 0x9b, 0x76, 0x9a, 0xb9, 0x72, 0x85, 0xe7, 0x8a, 0x7f, 0xf0, 0x81, 0xf8, 0x33, 0x59, 0x67, 0x8e, 0xeb, 0xb1}} return a, nil } @@ -1197,7 +1197,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 85, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "doc.go", size: 85, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe5, 0xd2, 0xea, 0xc5, 0xd, 0xc4, 0x7f, 0x95, 0x8e, 0xd5, 0xf5, 0x96, 0xf2, 0x1b, 0xcb, 0xc7, 0xc2, 0x46, 0x1, 0x78, 0x1d, 0x5d, 0x59, 0x19, 0x99, 0xdd, 0x5b, 0xf5, 0x63, 0xa5, 0x25, 0xb8}} return a, nil } diff --git a/mailserver/migrations/bindata.go b/mailserver/migrations/bindata.go index b6da5960f..baa514686 100644 --- a/mailserver/migrations/bindata.go +++ b/mailserver/migrations/bindata.go @@ -86,7 +86,7 @@ func _1557732988_initialize_dbDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1557732988_initialize_db.down.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1557732988_initialize_db.down.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0x40, 0x78, 0xb7, 0x71, 0x3c, 0x20, 0x3b, 0xc9, 0xb, 0x2f, 0x49, 0xe4, 0xff, 0x1c, 0x84, 0x54, 0xa1, 0x30, 0xe3, 0x90, 0xf8, 0x73, 0xda, 0xb0, 0x2a, 0xea, 0x8e, 0xf1, 0x82, 0xe7, 0xd2}} return a, nil } @@ -106,7 +106,7 @@ func _1557732988_initialize_dbUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1557732988_initialize_db.up.sql", size: 278, mode: os.FileMode(0644), modTime: time.Unix(1637329330, 0)} + info := bindataFileInfo{name: "1557732988_initialize_db.up.sql", size: 278, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x85, 0x41, 0x7a, 0xba, 0x4f, 0xa3, 0x43, 0xc0, 0x63, 0xfa, 0x2c, 0xd1, 0xc5, 0xbb, 0x20, 0xa0, 0x64, 0xa8, 0x3b, 0x65, 0x82, 0xa2, 0x14, 0x28, 0x18, 0x7c, 0x8b, 0x3a, 0x7a, 0xfd, 0xe0}} return a, nil } @@ -126,7 +126,7 @@ func staticGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "static.go", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "static.go", size: 178, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xab, 0x8a, 0xf4, 0x27, 0x24, 0x9d, 0x2a, 0x1, 0x7b, 0x54, 0xea, 0xae, 0x4a, 0x35, 0x40, 0x92, 0xb5, 0xf9, 0xb3, 0x54, 0x3e, 0x3a, 0x1a, 0x2b, 0xae, 0xfb, 0x9e, 0x82, 0xeb, 0x4c, 0xf, 0x6}} return a, nil } diff --git a/multiaccounts/migrations/bindata.go b/multiaccounts/migrations/bindata.go index 0974814ef..f99c84fd5 100644 --- a/multiaccounts/migrations/bindata.go +++ b/multiaccounts/migrations/bindata.go @@ -93,7 +93,7 @@ func _0001_accountsDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0001_accounts.down.sql", size: 21, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "0001_accounts.down.sql", size: 21, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0x61, 0x4c, 0x18, 0xfc, 0xc, 0xdf, 0x5c, 0x1f, 0x5e, 0xd3, 0xbd, 0xfa, 0x12, 0x5e, 0x8d, 0x8d, 0x8b, 0xb9, 0x5f, 0x99, 0x46, 0x63, 0xa5, 0xe3, 0xa6, 0x8a, 0x4, 0xf1, 0x73, 0x8a, 0xe9}} return a, nil } @@ -113,7 +113,7 @@ func _0001_accountsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "0001_accounts.up.sql", size: 163, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "0001_accounts.up.sql", size: 163, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0xfa, 0x99, 0x8e, 0x96, 0xb3, 0x13, 0x6c, 0x1f, 0x6, 0x27, 0xc5, 0xd2, 0xd4, 0xe0, 0xa5, 0x26, 0x82, 0xa7, 0x26, 0xf2, 0x68, 0x9d, 0xed, 0x9c, 0x3d, 0xbb, 0xdc, 0x37, 0x28, 0xbc, 0x1}} return a, nil } @@ -133,7 +133,7 @@ func _1605007189_identity_imagesDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1605007189_identity_images.down.sql", size: 29, mode: os.FileMode(0644), modTime: time.Unix(1610470168, 0)} + info := bindataFileInfo{name: "1605007189_identity_images.down.sql", size: 29, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2f, 0xcf, 0xa7, 0xae, 0xd5, 0x4f, 0xcd, 0x14, 0x63, 0x9, 0xbe, 0x39, 0x49, 0x18, 0x96, 0xb2, 0xa3, 0x8, 0x7d, 0x41, 0xdb, 0x50, 0x5d, 0xf5, 0x4d, 0xa2, 0xd, 0x8f, 0x57, 0x79, 0x77, 0x67}} return a, nil } @@ -153,7 +153,7 @@ func _1605007189_identity_imagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1605007189_identity_images.up.sql", size: 268, mode: os.FileMode(0644), modTime: time.Unix(1610470168, 0)} + info := bindataFileInfo{name: "1605007189_identity_images.up.sql", size: 268, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x50, 0xb6, 0xc1, 0x5c, 0x76, 0x72, 0x6b, 0x22, 0x34, 0xdc, 0x96, 0xdc, 0x2b, 0xfd, 0x2d, 0xbe, 0xcc, 0x1e, 0xd4, 0x5, 0x93, 0xd, 0xc2, 0x51, 0xf3, 0x1a, 0xef, 0x2b, 0x26, 0xa4, 0xeb, 0x65}} return a, nil } @@ -173,7 +173,7 @@ func _1606224181_drop_photo_path_from_accountsDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1606224181_drop_photo_path_from_accounts.down.sql", size: 892, mode: os.FileMode(0644), modTime: time.Unix(1610470168, 0)} + info := bindataFileInfo{name: "1606224181_drop_photo_path_from_accounts.down.sql", size: 892, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x90, 0x24, 0x17, 0x7, 0x80, 0x93, 0x6f, 0x8d, 0x5d, 0xaa, 0x8c, 0x79, 0x15, 0x5d, 0xb3, 0x19, 0xd7, 0xd8, 0x39, 0xf9, 0x3a, 0x63, 0x8f, 0x81, 0x15, 0xb6, 0xd6, 0x9a, 0x37, 0xa8, 0x8e, 0x9b}} return a, nil } @@ -193,7 +193,7 @@ func _1606224181_drop_photo_path_from_accountsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1606224181_drop_photo_path_from_accounts.up.sql", size: 866, mode: os.FileMode(0644), modTime: time.Unix(1610470168, 0)} + info := bindataFileInfo{name: "1606224181_drop_photo_path_from_accounts.up.sql", size: 866, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xff, 0x4c, 0x97, 0xee, 0xef, 0x82, 0xb8, 0x6c, 0x71, 0xbb, 0x50, 0x7b, 0xe6, 0xd9, 0x22, 0x31, 0x7c, 0x1a, 0xfe, 0x91, 0x28, 0xf6, 0x6, 0x36, 0xe, 0xb1, 0xf1, 0xc8, 0x25, 0xac, 0x7e, 0xd6}} return a, nil } @@ -213,7 +213,7 @@ func _1648646095_image_clockDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1648646095_image_clock.down.sql", size: 939, mode: os.FileMode(0644), modTime: time.Unix(1650623699, 0)} + info := bindataFileInfo{name: "1648646095_image_clock.down.sql", size: 939, mode: os.FileMode(0644), modTime: time.Unix(1651569001, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0xa8, 0x1f, 0xf, 0xe0, 0xd7, 0xc9, 0x68, 0x98, 0xd8, 0x37, 0xb8, 0xba, 0x9e, 0xb2, 0x19, 0xf3, 0xc4, 0x73, 0x80, 0x3, 0x17, 0x2a, 0x53, 0x68, 0x10, 0x13, 0x54, 0x99, 0xb1, 0xf5, 0x1c}} return a, nil } @@ -233,7 +233,7 @@ func _1648646095_image_clockUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1648646095_image_clock.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1650623699, 0)} + info := bindataFileInfo{name: "1648646095_image_clock.up.sql", size: 69, mode: os.FileMode(0644), modTime: time.Unix(1651569001, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x98, 0xa6, 0xa4, 0x4e, 0x4e, 0xca, 0x17, 0x56, 0xea, 0xfb, 0xf0, 0xa9, 0x81, 0x95, 0xe, 0x80, 0x52, 0x1, 0x47, 0x9b, 0xde, 0x14, 0xfa, 0x72, 0xc9, 0x62, 0x6f, 0x24, 0xa2, 0xc, 0x32, 0x50}} return a, nil } @@ -253,7 +253,7 @@ func _1649317600_add_color_hashUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1649317600_add_color_hash.up.sql", size: 201, mode: os.FileMode(0644), modTime: time.Unix(1650623699, 0)} + info := bindataFileInfo{name: "1649317600_add_color_hash.up.sql", size: 201, mode: os.FileMode(0644), modTime: time.Unix(1651569001, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xf, 0x37, 0x6d, 0xcf, 0x99, 0xc9, 0x2e, 0xdc, 0x70, 0x11, 0xb4, 0x36, 0x26, 0x4f, 0x39, 0xa8, 0x44, 0xf, 0xcb, 0xcc, 0x81, 0x74, 0x7a, 0x88, 0xaa, 0x54, 0x8c, 0xc4, 0xe, 0x56, 0x4f}} return a, nil } @@ -273,7 +273,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "doc.go", size: 74, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x7c, 0x28, 0xcd, 0x47, 0xf2, 0xfa, 0x7c, 0x51, 0x2d, 0xd8, 0x38, 0xb, 0xb0, 0x34, 0x9d, 0x4c, 0x62, 0xa, 0x9e, 0x28, 0xc3, 0x31, 0x23, 0xd9, 0xbb, 0x89, 0x9f, 0xa0, 0x89, 0x1f, 0xe8}} return a, nil } diff --git a/protocol/activity_center.go b/protocol/activity_center.go index 8f86eb32d..04fa28d7d 100644 --- a/protocol/activity_center.go +++ b/protocol/activity_center.go @@ -20,6 +20,7 @@ const ( ActivityCenterNotificationTypeNewPrivateGroupChat ActivityCenterNotificationTypeMention ActivityCenterNotificationTypeReply + ActivityCenterNotificationTypeContactRequest ) var ErrInvalidActivityCenterNotification = errors.New("invalid activity center notification") diff --git a/protocol/activity_center_persistence.go b/protocol/activity_center_persistence.go index 83d26b48c..f2107910b 100644 --- a/protocol/activity_center_persistence.go +++ b/protocol/activity_center_persistence.go @@ -116,6 +116,75 @@ func (db sqlitePersistence) SaveActivityCenterNotification(notification *Activit return err } +func (db sqlitePersistence) unmarshalActivityCenterNotificationRow(row *sql.Row) (*ActivityCenterNotification, error) { + var chatID sql.NullString + var lastMessageBytes []byte + var messageBytes []byte + var replyMessageBytes []byte + var name sql.NullString + var author sql.NullString + notification := &ActivityCenterNotification{} + err := row.Scan( + ¬ification.ID, + ¬ification.Timestamp, + ¬ification.Type, + &chatID, + ¬ification.Read, + ¬ification.Accepted, + ¬ification.Dismissed, + &messageBytes, + &lastMessageBytes, + &replyMessageBytes, + &name, + &author) + + if err != nil { + return nil, err + } + if chatID.Valid { + notification.ChatID = chatID.String + + } + + if name.Valid { + notification.Name = name.String + } + + if author.Valid { + notification.Author = author.String + } + + // Restore last message + if lastMessageBytes != nil { + lastMessage := &common.Message{} + if err = json.Unmarshal(lastMessageBytes, lastMessage); err != nil { + return nil, err + } + notification.LastMessage = lastMessage + } + + // Restore message + if messageBytes != nil { + message := &common.Message{} + if err = json.Unmarshal(messageBytes, message); err != nil { + return nil, err + } + notification.Message = message + } + + // Restore reply message + if replyMessageBytes != nil { + replyMessage := &common.Message{} + if err = json.Unmarshal(replyMessageBytes, replyMessage); err != nil { + return nil, err + } + notification.ReplyMessage = replyMessage + } + + return notification, nil + +} + func (db sqlitePersistence) unmarshalActivityCenterNotificationRows(rows *sql.Rows) (string, []*ActivityCenterNotification, error) { var notifications []*ActivityCenterNotification latestCursor := "" @@ -345,6 +414,30 @@ func (db sqlitePersistence) GetActivityCenterNotificationsByID(ids []types.HexBy return notifications, nil } +func (db sqlitePersistence) GetActivityCenterNotificationByID(id types.HexBytes) (*ActivityCenterNotification, error) { + row := db.db.QueryRow(` + SELECT + a.id, + a.timestamp, + a.notification_type, + a.chat_id, + a.read, + a.accepted, + a.dismissed, + a.message, + c.last_message, + a.reply_message, + c.name, + a.author + FROM activity_center_notifications a + LEFT JOIN chats c + ON + c.id = a.chat_id + WHERE a.id = ?`, id) + + return db.unmarshalActivityCenterNotificationRow(row) +} + func (db sqlitePersistence) ActivityCenterNotifications(currCursor string, limit uint64) (string, []*ActivityCenterNotification, error) { var tx *sql.Tx var err error @@ -426,7 +519,15 @@ func (db sqlitePersistence) DismissAllActivityCenterNotificationsFromCommunity(c } func (db sqlitePersistence) DismissAllActivityCenterNotificationsFromChatID(chatID string) error { - _, err := db.db.Exec(`UPDATE activity_center_notifications SET read = 1, dismissed = 1 WHERE NOT dismissed AND NOT accepted AND chat_id = ?`, chatID) + // We exclude notifications related to contacts, since those we don't want to be cleared + _, err := db.db.Exec(` +UPDATE activity_center_notifications SET read = 1, dismissed = 1 + WHERE + NOT dismissed + AND NOT accepted + AND chat_id = ? + AND notification_type != ? + `, chatID, ActivityCenterNotificationTypeContactRequest) return err } @@ -491,6 +592,17 @@ func (db sqlitePersistence) AcceptActivityCenterNotifications(ids []types.HexByt return notifications, err } +func (db sqlitePersistence) UpdateActivityCenterNotificationMessage(id types.HexBytes, message *common.Message) error { + encodedMessage, err := json.Marshal(message) + if err != nil { + return err + } + + _, err = db.db.Exec(`UPDATE activity_center_notifications SET message = ? WHERE id = ?`, encodedMessage, id) + return err + +} + func (db sqlitePersistence) AcceptActivityCenterNotificationsForInvitesFromUser(userPublicKey string) ([]*ActivityCenterNotification, error) { var tx *sql.Tx var err error diff --git a/protocol/anonmetrics/migrations/migrations.go b/protocol/anonmetrics/migrations/migrations.go index da67fc313..c02a2132d 100644 --- a/protocol/anonmetrics/migrations/migrations.go +++ b/protocol/anonmetrics/migrations/migrations.go @@ -86,7 +86,7 @@ func _1619446565_postgres_make_anon_metrics_tableDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619446565_postgres_make_anon_metrics_table.down.sql", size: 24, mode: os.FileMode(0644), modTime: time.Unix(1631628269, 0)} + info := bindataFileInfo{name: "1619446565_postgres_make_anon_metrics_table.down.sql", size: 24, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x75, 0xea, 0x1, 0x74, 0xe6, 0xa3, 0x11, 0xd0, 0x86, 0x87, 0x7e, 0x31, 0xb4, 0x1a, 0x27, 0x5d, 0xda, 0x77, 0xa3, 0xf5, 0x1d, 0x88, 0x79, 0xcf, 0xd5, 0x95, 0x75, 0xd, 0x47, 0xa1, 0x90, 0x5}} return a, nil } @@ -106,7 +106,7 @@ func _1619446565_postgres_make_anon_metrics_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619446565_postgres_make_anon_metrics_table.up.sql", size: 443, mode: os.FileMode(0644), modTime: time.Unix(1631628269, 0)} + info := bindataFileInfo{name: "1619446565_postgres_make_anon_metrics_table.up.sql", size: 443, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0xdc, 0x72, 0x28, 0x3c, 0xf6, 0x94, 0xb0, 0x47, 0x3d, 0xca, 0x55, 0x3d, 0xf7, 0x83, 0xb8, 0x7d, 0x2f, 0x1e, 0x98, 0xb7, 0xde, 0xa, 0xff, 0xa0, 0x52, 0x60, 0x83, 0x56, 0xc5, 0xd1, 0xa2}} return a, nil } @@ -126,7 +126,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 380, mode: os.FileMode(0644), modTime: time.Unix(1631628269, 0)} + info := bindataFileInfo{name: "doc.go", size: 380, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0x1, 0xd4, 0xd6, 0xc7, 0x44, 0xd4, 0xfd, 0x7b, 0x69, 0x1f, 0xe3, 0xe, 0x48, 0x14, 0x99, 0xf0, 0x8e, 0x43, 0xae, 0x54, 0x64, 0xa2, 0x8b, 0x82, 0x1c, 0x2b, 0xb, 0xec, 0xf5, 0xb3, 0xfc}} return a, nil } diff --git a/protocol/common/message.go b/protocol/common/message.go index dbed6731a..9956e3d8b 100644 --- a/protocol/common/message.go +++ b/protocol/common/message.go @@ -51,6 +51,14 @@ const ( CommandStateTransactionSent ) +type ContactRequestState int + +const ( + ContactRequestStatePending ContactRequestState = iota + 1 + ContactRequestStateAccepted + ContactRequestStateDismissed +) + type CommandParameters struct { // ID is the ID of the initial message ID string `json:"id"` @@ -164,6 +172,9 @@ type Message struct { // Deleted indicates if a message was deleted Deleted bool `json:"deleted"` + + // ContactRequestState is the state of the contact request message + ContactRequestState ContactRequestState `json:"contactRequestState,omitempty"` } func (m *Message) PrepareServerURLs(port int) { @@ -190,75 +201,77 @@ func (m *Message) MarshalJSON() ([]byte, error) { URL string `json:"url"` } item := struct { - ID string `json:"id"` - WhisperTimestamp uint64 `json:"whisperTimestamp"` - From string `json:"from"` - Alias string `json:"alias"` - Identicon string `json:"identicon"` - Seen bool `json:"seen"` - OutgoingStatus string `json:"outgoingStatus,omitempty"` - QuotedMessage *QuotedMessage `json:"quotedMessage"` - RTL bool `json:"rtl"` - ParsedText json.RawMessage `json:"parsedText,omitempty"` - LineCount int `json:"lineCount"` - Text string `json:"text"` - ChatID string `json:"chatId"` - LocalChatID string `json:"localChatId"` - Clock uint64 `json:"clock"` - Replace string `json:"replace"` - ResponseTo string `json:"responseTo"` - New bool `json:"new,omitempty"` - EnsName string `json:"ensName"` - DisplayName string `json:"displayName"` - Image string `json:"image,omitempty"` - Audio string `json:"audio,omitempty"` - AudioDurationMs uint64 `json:"audioDurationMs,omitempty"` - CommunityID string `json:"communityId,omitempty"` - Sticker *StickerAlias `json:"sticker,omitempty"` - CommandParameters *CommandParameters `json:"commandParameters,omitempty"` - GapParameters *GapParameters `json:"gapParameters,omitempty"` - Timestamp uint64 `json:"timestamp"` - ContentType protobuf.ChatMessage_ContentType `json:"contentType"` - MessageType protobuf.MessageType `json:"messageType"` - Mentions []string `json:"mentions,omitempty"` - Mentioned bool `json:"mentioned,omitempty"` - Links []string `json:"links,omitempty"` - EditedAt uint64 `json:"editedAt,omitempty"` - Deleted bool `json:"deleted,omitempty"` + ID string `json:"id"` + WhisperTimestamp uint64 `json:"whisperTimestamp"` + From string `json:"from"` + Alias string `json:"alias"` + Identicon string `json:"identicon"` + Seen bool `json:"seen"` + OutgoingStatus string `json:"outgoingStatus,omitempty"` + QuotedMessage *QuotedMessage `json:"quotedMessage"` + RTL bool `json:"rtl"` + ParsedText json.RawMessage `json:"parsedText,omitempty"` + LineCount int `json:"lineCount"` + Text string `json:"text"` + ChatID string `json:"chatId"` + LocalChatID string `json:"localChatId"` + Clock uint64 `json:"clock"` + Replace string `json:"replace"` + ResponseTo string `json:"responseTo"` + New bool `json:"new,omitempty"` + EnsName string `json:"ensName"` + DisplayName string `json:"displayName"` + Image string `json:"image,omitempty"` + Audio string `json:"audio,omitempty"` + AudioDurationMs uint64 `json:"audioDurationMs,omitempty"` + CommunityID string `json:"communityId,omitempty"` + Sticker *StickerAlias `json:"sticker,omitempty"` + CommandParameters *CommandParameters `json:"commandParameters,omitempty"` + GapParameters *GapParameters `json:"gapParameters,omitempty"` + Timestamp uint64 `json:"timestamp"` + ContentType protobuf.ChatMessage_ContentType `json:"contentType"` + MessageType protobuf.MessageType `json:"messageType"` + Mentions []string `json:"mentions,omitempty"` + Mentioned bool `json:"mentioned,omitempty"` + Links []string `json:"links,omitempty"` + EditedAt uint64 `json:"editedAt,omitempty"` + Deleted bool `json:"deleted,omitempty"` + ContactRequestState ContactRequestState `json:"contactRequestState,omitempty"` }{ - ID: m.ID, - WhisperTimestamp: m.WhisperTimestamp, - From: m.From, - Alias: m.Alias, - Identicon: m.Identicon, - Seen: m.Seen, - OutgoingStatus: m.OutgoingStatus, - QuotedMessage: m.QuotedMessage, - RTL: m.RTL, - ParsedText: m.ParsedText, - LineCount: m.LineCount, - Text: m.Text, - Replace: m.Replace, - ChatID: m.ChatId, - LocalChatID: m.LocalChatID, - Clock: m.Clock, - ResponseTo: m.ResponseTo, - New: m.New, - EnsName: m.EnsName, - DisplayName: m.DisplayName, - Image: m.ImageLocalURL, - Audio: m.AudioLocalURL, - CommunityID: m.CommunityID, - Timestamp: m.Timestamp, - ContentType: m.ContentType, - Mentions: m.Mentions, - Mentioned: m.Mentioned, - Links: m.Links, - MessageType: m.MessageType, - CommandParameters: m.CommandParameters, - GapParameters: m.GapParameters, - EditedAt: m.EditedAt, - Deleted: m.Deleted, + ID: m.ID, + WhisperTimestamp: m.WhisperTimestamp, + From: m.From, + Alias: m.Alias, + Identicon: m.Identicon, + Seen: m.Seen, + OutgoingStatus: m.OutgoingStatus, + QuotedMessage: m.QuotedMessage, + RTL: m.RTL, + ParsedText: m.ParsedText, + LineCount: m.LineCount, + Text: m.Text, + Replace: m.Replace, + ChatID: m.ChatId, + LocalChatID: m.LocalChatID, + Clock: m.Clock, + ResponseTo: m.ResponseTo, + New: m.New, + EnsName: m.EnsName, + DisplayName: m.DisplayName, + Image: m.ImageLocalURL, + Audio: m.AudioLocalURL, + CommunityID: m.CommunityID, + Timestamp: m.Timestamp, + ContentType: m.ContentType, + Mentions: m.Mentions, + Mentioned: m.Mentioned, + Links: m.Links, + MessageType: m.MessageType, + CommandParameters: m.CommandParameters, + GapParameters: m.GapParameters, + EditedAt: m.EditedAt, + Deleted: m.Deleted, + ContactRequestState: m.ContactRequestState, } if sticker := m.GetSticker(); sticker != nil { item.Sticker = &StickerAlias{ diff --git a/protocol/contact.go b/protocol/contact.go index a17333939..330e5913e 100644 --- a/protocol/contact.go +++ b/protocol/contact.go @@ -7,10 +7,21 @@ import ( "github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/images" "github.com/status-im/status-go/multiaccounts/settings" + "github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/identity/alias" "github.com/status-im/status-go/protocol/identity/identicon" ) +type ContactRequestState int + +const ( + ContactRequestStateNone ContactRequestState = iota + ContactRequestStateMutual + ContactRequestStateSent + ContactRequestStateReceived + ContactRequestStateDismissed +) + // ContactDeviceInfo is a struct containing information about a particular device owned by a contact type ContactDeviceInfo struct { // The installation id of the device @@ -87,6 +98,9 @@ type Contact struct { Blocked bool `json:"blocked"` HasAddedUs bool `json:"hasAddedUs"` + ContactRequestState ContactRequestState `json:"contactRequestState"` + ContactRequestClock uint64 `json:"contactRequestClock"` + IsSyncing bool Removed bool } @@ -122,6 +136,50 @@ func (c *Contact) Add() { c.Removed = false } +func (c *Contact) ContactRequestSent() { + switch c.ContactRequestState { + case ContactRequestStateNone, ContactRequestStateDismissed: + c.ContactRequestState = ContactRequestStateSent + case ContactRequestStateReceived: + c.ContactRequestState = ContactRequestStateMutual + } +} + +func (c *Contact) ContactRequestReceived() { + switch c.ContactRequestState { + case ContactRequestStateNone: + c.ContactRequestState = ContactRequestStateReceived + case ContactRequestStateSent: + c.ContactRequestState = ContactRequestStateMutual + } +} + +func (c *Contact) ContactRequestAccepted() { + switch c.ContactRequestState { + case ContactRequestStateSent: + c.ContactRequestState = ContactRequestStateMutual + } +} + +func (c *Contact) AcceptContactRequest() { + switch c.ContactRequestState { + case ContactRequestStateReceived, ContactRequestStateDismissed: + c.ContactRequestState = ContactRequestStateMutual + } +} + +func (c *Contact) RetractContactRequest() { + c.ContactRequestState = ContactRequestStateNone +} + +func (c *Contact) ContactRequestRetracted() { + c.ContactRequestState = ContactRequestStateNone +} + +func (c *Contact) DismissContactRequest() { + c.ContactRequestState = ContactRequestStateDismissed +} + func buildContactFromPkString(pkString string) (*Contact, error) { publicKeyBytes, err := types.DecodeHex(pkString) if err != nil { @@ -137,7 +195,7 @@ func buildContactFromPkString(pkString string) (*Contact, error) { } func BuildContactFromPublicKey(publicKey *ecdsa.PublicKey) (*Contact, error) { - id := types.EncodeHex(crypto.FromECDSAPub(publicKey)) + id := common.PubkeyToHex(publicKey) return buildContact(id, publicKey) } diff --git a/protocol/encryption/migrations/migrations.go b/protocol/encryption/migrations/migrations.go index 9298cbb2e..9330795c3 100644 --- a/protocol/encryption/migrations/migrations.go +++ b/protocol/encryption/migrations/migrations.go @@ -103,7 +103,7 @@ func _1536754952_initial_schemaDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1536754952_initial_schema.down.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1536754952_initial_schema.down.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x44, 0xcf, 0x76, 0x71, 0x1f, 0x5e, 0x9a, 0x43, 0xd8, 0xcd, 0xb8, 0xc3, 0x70, 0xc3, 0x7f, 0xfc, 0x90, 0xb4, 0x25, 0x1e, 0xf4, 0x66, 0x20, 0xb8, 0x33, 0x7e, 0xb0, 0x76, 0x1f, 0xc, 0xc0, 0x75}} return a, nil } @@ -123,7 +123,7 @@ func _1536754952_initial_schemaUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1536754952_initial_schema.up.sql", size: 962, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1536754952_initial_schema.up.sql", size: 962, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x90, 0x5a, 0x59, 0x3e, 0x3, 0xe2, 0x3c, 0x81, 0x42, 0xcd, 0x4c, 0x9a, 0xe8, 0xda, 0x93, 0x2b, 0x70, 0xa4, 0xd5, 0x29, 0x3e, 0xd5, 0xc9, 0x27, 0xb6, 0xb7, 0x65, 0xff, 0x0, 0xcb, 0xde}} return a, nil } @@ -143,7 +143,7 @@ func _1539249977_update_ratchet_infoDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1539249977_update_ratchet_info.down.sql", size: 311, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1539249977_update_ratchet_info.down.sql", size: 311, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1, 0xa4, 0xeb, 0xa0, 0xe6, 0xa0, 0xd4, 0x48, 0xbb, 0xad, 0x6f, 0x7d, 0x67, 0x8c, 0xbd, 0x25, 0xde, 0x1f, 0x73, 0x9a, 0xbb, 0xa8, 0xc9, 0x30, 0xb7, 0xa9, 0x7c, 0xaf, 0xb5, 0x1, 0x61, 0xdd}} return a, nil } @@ -163,7 +163,7 @@ func _1539249977_update_ratchet_infoUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1539249977_update_ratchet_info.up.sql", size: 368, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1539249977_update_ratchet_info.up.sql", size: 368, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0x8e, 0xbf, 0x6f, 0xa, 0xc0, 0xe1, 0x3c, 0x42, 0x28, 0x88, 0x1d, 0xdb, 0xba, 0x1c, 0x83, 0xec, 0xba, 0xd3, 0x5f, 0x5c, 0x77, 0x5e, 0xa7, 0x46, 0x36, 0xec, 0x69, 0xa, 0x4b, 0x17, 0x79}} return a, nil } @@ -183,7 +183,7 @@ func _1540715431_add_versionDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1540715431_add_version.down.sql", size: 127, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1540715431_add_version.down.sql", size: 127, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x9, 0x4, 0xe3, 0x76, 0x2e, 0xb8, 0x9, 0x23, 0xf0, 0x70, 0x93, 0xc4, 0x50, 0xe, 0x9d, 0x84, 0x22, 0x8c, 0x94, 0xd3, 0x24, 0x9, 0x9a, 0xc1, 0xa1, 0x48, 0x45, 0xfd, 0x40, 0x6e, 0xe6}} return a, nil } @@ -203,7 +203,7 @@ func _1540715431_add_versionUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1540715431_add_version.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1540715431_add_version.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc7, 0x4c, 0x36, 0x96, 0xdf, 0x16, 0x10, 0xa6, 0x27, 0x1a, 0x79, 0x8b, 0x42, 0x83, 0x23, 0xc, 0x7e, 0xb6, 0x3d, 0x2, 0xda, 0xa4, 0xb4, 0xd, 0x27, 0x55, 0xba, 0xdc, 0xb2, 0x88, 0x8f, 0xa6}} return a, nil } @@ -223,7 +223,7 @@ func _1541164797_add_installationsDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1541164797_add_installations.down.sql", size: 26, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1541164797_add_installations.down.sql", size: 26, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0xfd, 0xe6, 0xd8, 0xca, 0x3b, 0x38, 0x18, 0xee, 0x0, 0x5f, 0x36, 0x9e, 0x1e, 0xd, 0x19, 0x3e, 0xb4, 0x73, 0x53, 0xe9, 0xa5, 0xac, 0xdd, 0xa1, 0x2f, 0xc7, 0x6c, 0xa8, 0xd9, 0xa, 0x88}} return a, nil } @@ -243,7 +243,7 @@ func _1541164797_add_installationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1541164797_add_installations.up.sql", size: 216, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1541164797_add_installations.up.sql", size: 216, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2d, 0x18, 0x26, 0xb8, 0x88, 0x47, 0xdb, 0x83, 0xcc, 0xb6, 0x9d, 0x1c, 0x1, 0xae, 0x2f, 0xde, 0x97, 0x82, 0x3, 0x30, 0xa8, 0x63, 0xa1, 0x78, 0x4b, 0xa5, 0x9, 0x8, 0x75, 0xa2, 0x57, 0x81}} return a, nil } @@ -263,7 +263,7 @@ func _1558084410_add_secretDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1558084410_add_secret.down.sql", size: 56, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1558084410_add_secret.down.sql", size: 56, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x49, 0xb, 0x65, 0xdf, 0x59, 0xbf, 0xe9, 0x5, 0x5b, 0x6f, 0xd5, 0x3a, 0xb7, 0x57, 0xe8, 0x78, 0x38, 0x73, 0x53, 0x57, 0xf7, 0x24, 0x4, 0xe4, 0xa2, 0x49, 0x22, 0xa2, 0xc6, 0xfd, 0x80, 0xa4}} return a, nil } @@ -283,7 +283,7 @@ func _1558084410_add_secretUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1558084410_add_secret.up.sql", size: 301, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1558084410_add_secret.up.sql", size: 301, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x32, 0x36, 0x8e, 0x47, 0xb0, 0x8f, 0xc1, 0xc6, 0xf7, 0xc6, 0x9f, 0x2d, 0x44, 0x75, 0x2b, 0x26, 0xec, 0x6, 0xa0, 0x7b, 0xa5, 0xbd, 0xc8, 0x76, 0x8a, 0x82, 0x68, 0x2, 0x42, 0xb5, 0xf4}} return a, nil } @@ -303,7 +303,7 @@ func _1558588866_add_versionDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1558588866_add_version.down.sql", size: 47, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1558588866_add_version.down.sql", size: 47, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xde, 0x52, 0x34, 0x3c, 0x46, 0x4a, 0xf0, 0x72, 0x47, 0x6f, 0x49, 0x5c, 0xc7, 0xf9, 0x32, 0xce, 0xc4, 0x3d, 0xfd, 0x61, 0xa1, 0x8b, 0x8f, 0xf2, 0x31, 0x34, 0xde, 0x15, 0x49, 0xa6, 0xde, 0xb9}} return a, nil } @@ -323,7 +323,7 @@ func _1558588866_add_versionUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1558588866_add_version.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1558588866_add_version.up.sql", size: 57, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2a, 0xea, 0x64, 0x39, 0x61, 0x20, 0x83, 0x83, 0xb, 0x2e, 0x79, 0x64, 0xb, 0x53, 0xfa, 0xfe, 0xc6, 0xf7, 0x67, 0x42, 0xd3, 0x4f, 0xdc, 0x7e, 0x30, 0x32, 0xe8, 0x14, 0x41, 0xe9, 0xe7, 0x3b}} return a, nil } @@ -343,7 +343,7 @@ func _1559627659_add_contact_codeDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1559627659_add_contact_code.down.sql", size: 32, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1559627659_add_contact_code.down.sql", size: 32, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5d, 0x64, 0x6d, 0xce, 0x24, 0x42, 0x20, 0x8d, 0x4f, 0x37, 0xaa, 0x9d, 0xc, 0x57, 0x98, 0xc1, 0xd1, 0x1a, 0x34, 0xcd, 0x9f, 0x8f, 0x34, 0x86, 0xb3, 0xd3, 0xdc, 0xf1, 0x7d, 0xe5, 0x1b, 0x6e}} return a, nil } @@ -363,7 +363,7 @@ func _1559627659_add_contact_codeUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1559627659_add_contact_code.up.sql", size: 198, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1559627659_add_contact_code.up.sql", size: 198, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x16, 0xf6, 0xc2, 0x62, 0x9c, 0xd2, 0xc9, 0x1e, 0xd8, 0xea, 0xaa, 0xea, 0x95, 0x8f, 0x89, 0x6a, 0x85, 0x5d, 0x9d, 0x99, 0x78, 0x3c, 0x90, 0x66, 0x99, 0x3e, 0x4b, 0x19, 0x62, 0xfb, 0x31, 0x4d}} return a, nil } @@ -383,7 +383,7 @@ func _1561368210_add_installation_metadataDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1561368210_add_installation_metadata.down.sql", size: 35, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1561368210_add_installation_metadata.down.sql", size: 35, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa8, 0xde, 0x3f, 0xd2, 0x4a, 0x50, 0x98, 0x56, 0xe3, 0xc0, 0xcd, 0x9d, 0xb0, 0x34, 0x3b, 0xe5, 0x62, 0x18, 0xb5, 0x20, 0xc9, 0x3e, 0xdc, 0x6a, 0x40, 0x36, 0x66, 0xea, 0x51, 0x8c, 0x71, 0xf5}} return a, nil } @@ -403,7 +403,7 @@ func _1561368210_add_installation_metadataUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1561368210_add_installation_metadata.up.sql", size: 267, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "1561368210_add_installation_metadata.up.sql", size: 267, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb4, 0x71, 0x8f, 0x29, 0xb1, 0xaa, 0xd6, 0xd1, 0x8c, 0x17, 0xef, 0x6c, 0xd5, 0x80, 0xb8, 0x2c, 0xc3, 0xfe, 0xec, 0x24, 0x4d, 0xc8, 0x25, 0xd3, 0xb4, 0xcd, 0xa9, 0xac, 0x63, 0x61, 0xb2, 0x9c}} return a, nil } @@ -423,7 +423,7 @@ func _1632236298_add_communitiesDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1632236298_add_communities.down.sql", size: 151, mode: os.FileMode(0644), modTime: time.Unix(1638351408, 0)} + info := bindataFileInfo{name: "1632236298_add_communities.down.sql", size: 151, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x26, 0xe5, 0x47, 0xd1, 0xe5, 0xec, 0x5b, 0x3e, 0xdc, 0x22, 0xf4, 0x27, 0xee, 0x70, 0xf3, 0x9, 0x4f, 0xd2, 0x9f, 0x92, 0xf, 0x5a, 0x18, 0x11, 0xb7, 0x40, 0xab, 0xf1, 0x98, 0x72, 0xd6, 0x60}} return a, nil } @@ -443,7 +443,7 @@ func _1632236298_add_communitiesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1632236298_add_communities.up.sql", size: 584, mode: os.FileMode(0644), modTime: time.Unix(1638351408, 0)} + info := bindataFileInfo{name: "1632236298_add_communities.up.sql", size: 584, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0xe0, 0x1, 0x6e, 0x84, 0xc, 0x35, 0xe4, 0x5a, 0xf, 0xbe, 0xcb, 0xf7, 0xd2, 0xa8, 0x25, 0xf5, 0xdb, 0x7, 0xcb, 0xa3, 0xe6, 0xf4, 0xc4, 0x1b, 0xa5, 0xec, 0x32, 0x1e, 0x1e, 0x48, 0x60}} return a, nil } @@ -463,7 +463,7 @@ func _1636536507_add_index_bundlesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1636536507_add_index_bundles.up.sql", size: 347, mode: os.FileMode(0644), modTime: time.Unix(1637329330, 0)} + info := bindataFileInfo{name: "1636536507_add_index_bundles.up.sql", size: 347, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf1, 0xb9, 0x3c, 0x16, 0xfc, 0xfb, 0xb2, 0xb4, 0x3b, 0xfe, 0xdc, 0xf5, 0x9c, 0x42, 0xa0, 0xa0, 0xd4, 0xd, 0x5b, 0x97, 0x10, 0x80, 0x95, 0xe, 0x13, 0xc1, 0x18, 0x8, 0xee, 0xf, 0x99, 0xee}} return a, nil } @@ -483,7 +483,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 377, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "doc.go", size: 377, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xef, 0xaf, 0xdf, 0xcf, 0x65, 0xae, 0x19, 0xfc, 0x9d, 0x29, 0xc1, 0x91, 0xaf, 0xb5, 0xd5, 0xb1, 0x56, 0xf3, 0xee, 0xa8, 0xba, 0x13, 0x65, 0xdb, 0xab, 0xcf, 0x4e, 0xac, 0x92, 0xe9, 0x60, 0xf1}} return a, nil } diff --git a/protocol/message_persistence.go b/protocol/message_persistence.go index 0c3014997..cab30b008 100644 --- a/protocol/message_persistence.go +++ b/protocol/message_persistence.go @@ -54,6 +54,7 @@ func (db sqlitePersistence) tableUserMessagesAllFields() string { response_to, gap_from, gap_to, + contact_request_state, mentioned` } @@ -96,6 +97,7 @@ func (db sqlitePersistence) tableUserMessagesAllFieldsJoin() string { m1.response_to, m1.gap_from, m1.gap_to, + m1.contact_request_state, m1.mentioned, m2.source, m2.text, @@ -133,6 +135,7 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message var gapTo sql.NullInt64 var editedAt sql.NullInt64 var deleted sql.NullBool + var contactRequestState sql.NullInt64 sticker := &protobuf.StickerMessage{} command := &common.CommandParameters{} @@ -178,6 +181,7 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message &message.ResponseTo, &gapFrom, &gapTo, + &contactRequestState, &message.Mentioned, "edFrom, "edText, @@ -202,6 +206,10 @@ func (db sqlitePersistence) tableUserMessagesScanAllFields(row scanner, message message.Deleted = deleted.Bool } + if contactRequestState.Valid { + message.ContactRequestState = common.ContactRequestState(contactRequestState.Int64) + } + if quotedText.Valid { message.QuotedMessage = &common.QuotedMessage{ ID: quotedID.String, @@ -348,6 +356,7 @@ func (db sqlitePersistence) tableUserMessagesAllValues(message *common.Message) message.ResponseTo, gapFrom, gapTo, + message.ContactRequestState, message.Mentioned, }, nil } @@ -595,6 +604,72 @@ func (db sqlitePersistence) MessageByChatID(chatID string, currCursor string, li return result, newCursor, nil } +func (db sqlitePersistence) PendingContactRequests(currCursor string, limit int) ([]*common.Message, string, error) { + cursorWhere := "" + if currCursor != "" { + cursorWhere = "AND cursor <= ?" //nolint: goconst + } + allFields := db.tableUserMessagesAllFieldsJoin() + args := []interface{}{protobuf.ChatMessage_CONTACT_REQUEST} + if currCursor != "" { + args = append(args, currCursor) + } + // Build a new column `cursor` at the query time by having a fixed-sized clock value at the beginning + // concatenated with message ID. Results are sorted using this new column. + // This new column values can also be returned as a cursor for subsequent requests. + rows, err := db.db.Query( + fmt.Sprintf(` + SELECT + %s, + substr('0000000000000000000000000000000000000000000000000000000000000000' || m1.clock_value, -64, 64) || m1.id as cursor + FROM + user_messages m1 + LEFT JOIN + user_messages m2 + ON + m1.response_to = m2.id + + LEFT JOIN + contacts c + ON + + m1.source = c.id + WHERE + NOT(m1.hide) AND NOT(m1.seen) AND m1.content_type = ? %s + ORDER BY cursor DESC + LIMIT ? + `, allFields, cursorWhere), + append(args, limit+1)..., // take one more to figure our whether a cursor should be returned + ) + if err != nil { + return nil, "", err + } + defer rows.Close() + + var ( + result []*common.Message + cursors []string + ) + for rows.Next() { + var ( + message common.Message + cursor string + ) + if err := db.tableUserMessagesScanAllFields(rows, &message, &cursor); err != nil { + return nil, "", err + } + result = append(result, &message) + cursors = append(cursors, cursor) + } + + var newCursor string + if len(result) > limit { + newCursor = cursors[limit] + result = result[:limit] + } + return result, newCursor, nil +} + // AllMessageByChatIDWhichMatchPattern returns all messages which match the search // term, for a given chatID in descending order. // Ordering is accomplished using two concatenated values: ClockValue and ID. @@ -1947,3 +2022,8 @@ func (db sqlitePersistence) clearHistoryFromSyncMessage(chat *Chat, clearedAt ui err = db.saveChat(tx, *chat) return err } + +func (db sqlitePersistence) SetContactRequestState(id string, state common.ContactRequestState) error { + _, err := db.db.Exec(`UPDATE user_messages SET contact_request_state = ? WHERE id = ?`, state, id) + return err +} diff --git a/protocol/messenger.go b/protocol/messenger.go index bf2a0d775..3eb8a41e9 100644 --- a/protocol/messenger.go +++ b/protocol/messenger.go @@ -2516,6 +2516,7 @@ func (m *Messenger) sendChatMessage(ctx context.Context, message *common.Message response.SetMessages(msg) response.AddChat(chat) + m.logger.Debug("sent message", zap.String("id", message.ID)) m.prepareMessages(response.messages) @@ -3239,13 +3240,8 @@ func (r *ReceivedMessageState) addNewActivityCenterNotification(publicKey ecdsa. return nil } -func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filter][]*types.Message, storeWakuMessages bool) (*MessengerResponse, error) { - - m.handleMessagesMutex.Lock() - defer m.handleMessagesMutex.Unlock() - - response := &MessengerResponse{} - messageState := &ReceivedMessageState{ +func (m *Messenger) buildMessageState() *ReceivedMessageState { + return &ReceivedMessageState{ AllChats: m.allChats, AllContacts: m.allContacts, ModifiedContacts: new(stringBoolMap), @@ -3254,10 +3250,19 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte ExistingMessagesMap: make(map[string]bool), EmojiReactions: make(map[string]*EmojiReaction), GroupChatInvitations: make(map[string]*GroupChatInvitation), - Response: response, + Response: &MessengerResponse{}, Timesource: m.getTimesource(), AllBookmarks: make(map[string]*browsers.Bookmark), } +} + +func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filter][]*types.Message, storeWakuMessages bool) (*MessengerResponse, error) { + + m.handleMessagesMutex.Lock() + defer m.handleMessagesMutex.Unlock() + + messageState := m.buildMessageState() + response := messageState.Response logger := m.logger.With(zap.String("site", "RetrieveAll")) @@ -3716,6 +3721,26 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte allMessagesProcessed = false continue } + case protobuf.AcceptContactRequest: + logger.Debug("Handling AcceptContactRequest") + message := msg.ParsedMessage.Interface().(protobuf.AcceptContactRequest) + err = m.HandleAcceptContactRequest(messageState, message) + if err != nil { + logger.Warn("failed to handle AcceptContactRequest", zap.Error(err)) + allMessagesProcessed = false + continue + } + case protobuf.RetractContactRequest: + + logger.Debug("Handling RetractContactRequest") + message := msg.ParsedMessage.Interface().(protobuf.RetractContactRequest) + err = m.HandleRetractContactRequest(messageState, message) + if err != nil { + logger.Warn("failed to handle RetractContactRequest", zap.Error(err)) + allMessagesProcessed = false + continue + } + case protobuf.PushNotificationQuery: logger.Debug("Received PushNotificationQuery") if m.pushNotificationServer == nil { diff --git a/protocol/messenger_contact_requests_test.go b/protocol/messenger_contact_requests_test.go new file mode 100644 index 000000000..69c6a360b --- /dev/null +++ b/protocol/messenger_contact_requests_test.go @@ -0,0 +1,675 @@ +package protocol + +import ( + "context" + "crypto/ecdsa" + "testing" + + "github.com/stretchr/testify/suite" + "go.uber.org/zap" + + gethbridge "github.com/status-im/status-go/eth-node/bridge/geth" + "github.com/status-im/status-go/eth-node/crypto" + "github.com/status-im/status-go/eth-node/types" + "github.com/status-im/status-go/protocol/common" + "github.com/status-im/status-go/protocol/protobuf" + "github.com/status-im/status-go/protocol/requests" + "github.com/status-im/status-go/protocol/tt" + "github.com/status-im/status-go/waku" +) + +func TestMessengerContactRequestSuite(t *testing.T) { + suite.Run(t, new(MessengerContactRequestSuite)) +} + +type MessengerContactRequestSuite struct { + suite.Suite + m *Messenger // main instance of Messenger + privateKey *ecdsa.PrivateKey // private key for the main instance of Messenger + // If one wants to send messages between different instances of Messenger, + // a single waku service should be shared. + shh types.Waku + logger *zap.Logger +} + +func (s *MessengerContactRequestSuite) SetupTest() { + s.logger = tt.MustCreateTestLogger() + + config := waku.DefaultConfig + config.MinimumAcceptedPoW = 0 + shh := waku.New(&config, s.logger) + s.shh = gethbridge.NewGethWakuWrapper(shh) + s.Require().NoError(shh.Start()) + + s.m = s.newMessenger(s.shh) + s.privateKey = s.m.identity + _, err := s.m.Start() + s.Require().NoError(err) +} + +func (s *MessengerContactRequestSuite) TearDownTest() { + s.Require().NoError(s.m.Shutdown()) +} + +func (s *MessengerContactRequestSuite) newMessenger(shh types.Waku) *Messenger { + privateKey, err := crypto.GenerateKey() + s.Require().NoError(err) + + messenger, err := newMessengerWithKey(s.shh, privateKey, s.logger, nil) + s.Require().NoError(err) + return messenger +} + +func (s *MessengerContactRequestSuite) TestReceiveAndAcceptContactRequest() { + + messageText := "hello!" + + theirMessenger := s.newMessenger(s.shh) + _, err := theirMessenger.Start() + s.Require().NoError(err) + + contactID := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) + request := &requests.SendContactRequest{ + ID: types.Hex2Bytes(contactID), + Message: messageText, + } + + // Send contact request + resp, err := s.m.SendContactRequest(context.Background(), request) + s.Require().NoError(err) + + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(common.ContactRequestStatePending, resp.Messages()[0].ContactRequestState) + + // Make sure it's not returned as coming from us + contactRequests, _, err := s.m.PendingContactRequests("", 10) + s.Require().NoError(err) + s.Require().Len(contactRequests, 0) + + // Make sure contact is added on the sender side + contacts := s.m.AddedContacts() + s.Require().Len(contacts, 1) + s.Require().Equal(ContactRequestStateSent, contacts[0].ContactRequestState) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + theirMessenger, + func(r *MessengerResponse) bool { + return len(r.Contacts) > 0 && len(r.Messages()) > 0 && len(r.ActivityCenterNotifications()) > 0 + }, + "no messages", + ) + + // Check contact request has been received + s.Require().NoError(err) + + // Check activity center notification is of the right type + s.Require().Len(resp.ActivityCenterNotifications(), 1) + s.Require().Equal(ActivityCenterNotificationTypeContactRequest, resp.ActivityCenterNotifications()[0].Type) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStatePending, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateReceived, resp.Contacts[0].ContactRequestState) + + // Make sure it's the pending contact requests + contactRequests, _, err = theirMessenger.PendingContactRequests("", 10) + s.Require().NoError(err) + s.Require().Len(contactRequests, 1) + s.Require().Equal(contactRequests[0].ContactRequestState, common.ContactRequestStatePending) + + // Accept contact request, receiver side + resp, err = theirMessenger.AcceptContactRequest(context.Background(), &requests.AcceptContactRequest{ID: types.Hex2Bytes(contactRequests[0].ID)}) + s.Require().NoError(err) + + // Make sure the message is updated + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(resp.Messages()[0].ID, contactRequests[0].ID) + s.Require().Equal(common.ContactRequestStateAccepted, resp.Messages()[0].ContactRequestState) + + s.Require().Len(resp.ActivityCenterNotifications(), 1) + s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), contactRequests[0].ID) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateMutual, resp.Contacts[0].ContactRequestState) + + // Make sure the sender is added to our contacts + contacts = theirMessenger.AddedContacts() + s.Require().Len(contacts, 1) + + // Make sure we consider them a mutual contact, receiver side + mutualContacts := theirMessenger.MutualContacts() + s.Require().Len(mutualContacts, 1) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + s.m, + func(r *MessengerResponse) bool { + return len(r.Contacts) > 0 && len(r.Messages()) > 0 && len(r.ActivityCenterNotifications()) > 0 + }, + "no messages", + ) + s.Require().NoError(err) + + // Check activity center notification is of the right type + s.Require().Equal(ActivityCenterNotificationTypeContactRequest, resp.ActivityCenterNotifications()[0].Type) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Make sure the message is updated, sender s2de + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(resp.Messages()[0].ID, contactRequests[0].ID) + s.Require().Equal(common.ContactRequestStateAccepted, resp.Messages()[0].ContactRequestState) + + // Make sure we consider them a mutual contact, sender side + mutualContacts = s.m.MutualContacts() + s.Require().Len(mutualContacts, 1) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateMutual, resp.Contacts[0].ContactRequestState) +} + +func (s *MessengerContactRequestSuite) TestReceiveAndDismissContactRequest() { + + messageText := "hello!" + + theirMessenger := s.newMessenger(s.shh) + _, err := theirMessenger.Start() + s.Require().NoError(err) + + contactID := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) + request := &requests.SendContactRequest{ + ID: types.Hex2Bytes(contactID), + Message: messageText, + } + + // Send contact request + resp, err := s.m.SendContactRequest(context.Background(), request) + s.Require().NoError(err) + + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(common.ContactRequestStatePending, resp.Messages()[0].ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateSent, resp.Contacts[0].ContactRequestState) + + // Make sure it's not returned as coming from us + contactRequests, _, err := s.m.PendingContactRequests("", 10) + s.Require().NoError(err) + s.Require().Len(contactRequests, 0) + + // Make sure contact is added on the sender side + contacts := s.m.AddedContacts() + s.Require().Len(contacts, 1) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + theirMessenger, + func(r *MessengerResponse) bool { + return len(r.Contacts) > 0 && len(r.ActivityCenterNotifications()) > 0 + }, + "no messages", + ) + s.Require().NoError(err) + + // Check activity center notification is of the right type + s.Require().Equal(ActivityCenterNotificationTypeContactRequest, resp.ActivityCenterNotifications()[0].Type) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStatePending, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateReceived, resp.Contacts[0].ContactRequestState) + + // Check contact request has been received + s.Require().NoError(err) + + // Make sure it's the pending contact requests + contactRequests, _, err = theirMessenger.PendingContactRequests("", 10) + s.Require().NoError(err) + s.Require().Len(contactRequests, 1) + s.Require().Equal(contactRequests[0].ContactRequestState, common.ContactRequestStatePending) + + // Dismiss contact request, receiver side + resp, err = theirMessenger.DismissContactRequest(context.Background(), &requests.DismissContactRequest{ID: types.Hex2Bytes(contactRequests[0].ID)}) + s.Require().NoError(err) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateDismissed, resp.Contacts[0].ContactRequestState) + + // Make sure the message is updated + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(resp.Messages()[0].ID, contactRequests[0].ID) + s.Require().Equal(common.ContactRequestStateDismissed, resp.Messages()[0].ContactRequestState) + + s.Require().Len(resp.ActivityCenterNotifications(), 1) + s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), contactRequests[0].ID) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStateDismissed, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Make sure the sender is not added to our contacts + contacts = theirMessenger.AddedContacts() + s.Require().Len(contacts, 0) +} + +func (s *MessengerContactRequestSuite) TestReceiveAcceptAndRetractContactRequest() { + + messageText := "hello!" + + theirMessenger := s.newMessenger(s.shh) + _, err := theirMessenger.Start() + s.Require().NoError(err) + + contactID := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) + request := &requests.SendContactRequest{ + ID: types.Hex2Bytes(contactID), + Message: messageText, + } + + // Send contact request + resp, err := s.m.SendContactRequest(context.Background(), request) + s.Require().NoError(err) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateSent, resp.Contacts[0].ContactRequestState) + + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(common.ContactRequestStatePending, resp.Messages()[0].ContactRequestState) + + // Make sure it's not returned as coming from us + contactRequests, _, err := s.m.PendingContactRequests("", 10) + s.Require().NoError(err) + s.Require().Len(contactRequests, 0) + + // Make sure contact is added on the sender side + contacts := s.m.AddedContacts() + s.Require().Len(contacts, 1) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + theirMessenger, + func(r *MessengerResponse) bool { + return len(r.Messages()) > 0 && len(r.ActivityCenterNotifications()) > 0 + }, + "no messages", + ) + + // Check contact request has been received + s.Require().NoError(err) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateReceived, resp.Contacts[0].ContactRequestState) + + // Check activity center notification is of the right type + s.Require().Len(resp.ActivityCenterNotifications(), 1) + s.Require().Equal(ActivityCenterNotificationTypeContactRequest, resp.ActivityCenterNotifications()[0].Type) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStatePending, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Make sure it's the pending contact requests + contactRequests, _, err = theirMessenger.PendingContactRequests("", 10) + s.Require().NoError(err) + s.Require().Len(contactRequests, 1) + s.Require().Equal(contactRequests[0].ContactRequestState, common.ContactRequestStatePending) + + // Accept contact request, receiver side + resp, err = theirMessenger.AcceptContactRequest(context.Background(), &requests.AcceptContactRequest{ID: types.Hex2Bytes(contactRequests[0].ID)}) + s.Require().NoError(err) + + // Make sure the message is updated + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(resp.Messages()[0].ID, contactRequests[0].ID) + s.Require().Equal(common.ContactRequestStateAccepted, resp.Messages()[0].ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateMutual, resp.Contacts[0].ContactRequestState) + + s.Require().Len(resp.ActivityCenterNotifications(), 1) + s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), contactRequests[0].ID) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Make sure the sender is added to our contacts + contacts = theirMessenger.AddedContacts() + s.Require().Len(contacts, 1) + + // Make sure we consider them a mutual contact, receiver side + mutualContacts := theirMessenger.MutualContacts() + s.Require().Len(mutualContacts, 1) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + s.m, + func(r *MessengerResponse) bool { + return len(r.Messages()) > 0 && len(r.ActivityCenterNotifications()) > 0 && len(r.Contacts) > 0 + }, + "no messages", + ) + s.Require().NoError(err) + + // Check activity center notification is of the right type + s.Require().Equal(ActivityCenterNotificationTypeContactRequest, resp.ActivityCenterNotifications()[0].Type) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateMutual, resp.Contacts[0].ContactRequestState) + + // Make sure the message is updated, sender side + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(resp.Messages()[0].ID, contactRequests[0].ID) + s.Require().Equal(common.ContactRequestStateAccepted, resp.Messages()[0].ContactRequestState) + + // Make sure we consider them a mutual contact, sender side + mutualContacts = s.m.MutualContacts() + s.Require().Len(mutualContacts, 1) + + resp, err = s.m.RetractContactRequest(&requests.RetractContactRequest{ContactID: types.Hex2Bytes(contactID)}) + s.Require().NoError(err) + s.Require().NotNil(resp) + s.Require().Len(resp.Contacts, 1) + s.Require().False(resp.Contacts[0].HasAddedUs) + s.Require().False(resp.Contacts[0].Added) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateNone, resp.Contacts[0].ContactRequestState) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + theirMessenger, + func(r *MessengerResponse) bool { + return len(r.Contacts) > 0 + }, + "no messages", + ) + s.Require().NoError(err) + s.Require().NotNil(resp) + s.Require().Len(resp.Contacts, 1) + + myID := types.EncodeHex(crypto.FromECDSAPub(&s.m.identity.PublicKey)) + s.Require().Equal(myID, resp.Contacts[0].ID) + + s.Require().False(resp.Contacts[0].Added) + s.Require().False(resp.Contacts[0].HasAddedUs) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateNone, resp.Contacts[0].ContactRequestState) +} + +func (s *MessengerContactRequestSuite) TestReceiveAcceptAndRetractContactRequestOutOfOrder() { + message := protobuf.ChatMessage{ + Clock: 4, + Timestamp: 1, + Text: "some text", + ChatId: common.PubkeyToHex(&s.m.identity.PublicKey), + MessageType: protobuf.MessageType_ONE_TO_ONE, + ContentType: protobuf.ChatMessage_CONTACT_REQUEST, + } + + contactKey, err := crypto.GenerateKey() + s.Require().NoError(err) + + contact, err := BuildContactFromPublicKey(&contactKey.PublicKey) + s.Require().NoError(err) + + state := s.m.buildMessageState() + + state.CurrentMessageState = &CurrentMessageState{ + PublicKey: &contactKey.PublicKey, + MessageID: "0xa", + Message: message, + Contact: contact, + WhisperTimestamp: 1, + } + + response := state.Response + err = s.m.HandleChatMessage(state) + s.Require().NoError(err) + s.Require().Len(response.ActivityCenterNotifications(), 1) + contacts := s.m.Contacts() + s.Require().Len(contacts, 1) + s.Require().Equal(ContactRequestStateReceived, contacts[0].ContactRequestState) + + retract := protobuf.RetractContactRequest{ + Clock: 2, + } + err = s.m.HandleRetractContactRequest(state, retract) + s.Require().NoError(err) + + // Nothing should have changed + contacts = s.m.Contacts() + s.Require().Len(contacts, 1) + s.Require().Equal(ContactRequestStateReceived, contacts[0].ContactRequestState) +} + +func (s *MessengerContactRequestSuite) TestReceiveAndAcceptContactRequestTwice() { + + messageText := "hello!" + + theirMessenger := s.newMessenger(s.shh) + _, err := theirMessenger.Start() + s.Require().NoError(err) + + contactID := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) + request := &requests.SendContactRequest{ + ID: types.Hex2Bytes(contactID), + Message: messageText, + } + + // Send contact request + resp, err := s.m.SendContactRequest(context.Background(), request) + s.Require().NoError(err) + + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(common.ContactRequestStatePending, resp.Messages()[0].ContactRequestState) + + // Make sure it's not returned as coming from us + contactRequests, _, err := s.m.PendingContactRequests("", 10) + s.Require().NoError(err) + s.Require().Len(contactRequests, 0) + + // Make sure contact is added on the sender side + contacts := s.m.AddedContacts() + s.Require().Len(contacts, 1) + s.Require().Equal(ContactRequestStateSent, contacts[0].ContactRequestState) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + theirMessenger, + func(r *MessengerResponse) bool { + return len(r.Contacts) > 0 && len(r.Messages()) > 0 && len(r.ActivityCenterNotifications()) > 0 + }, + "no messages", + ) + + // Check contact request has been received + s.Require().NoError(err) + + // Check activity center notification is of the right type + s.Require().Len(resp.ActivityCenterNotifications(), 1) + s.Require().Equal(ActivityCenterNotificationTypeContactRequest, resp.ActivityCenterNotifications()[0].Type) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStatePending, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateReceived, resp.Contacts[0].ContactRequestState) + + // Make sure it's the pending contact requests + contactRequests, _, err = theirMessenger.PendingContactRequests("", 10) + s.Require().NoError(err) + s.Require().Len(contactRequests, 1) + s.Require().Equal(contactRequests[0].ContactRequestState, common.ContactRequestStatePending) + + // Accept contact request, receiver side + resp, err = theirMessenger.AcceptContactRequest(context.Background(), &requests.AcceptContactRequest{ID: types.Hex2Bytes(contactRequests[0].ID)}) + s.Require().NoError(err) + + // Make sure the message is updated + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(resp.Messages()[0].ID, contactRequests[0].ID) + s.Require().Equal(common.ContactRequestStateAccepted, resp.Messages()[0].ContactRequestState) + + s.Require().Len(resp.ActivityCenterNotifications(), 1) + s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), contactRequests[0].ID) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateMutual, resp.Contacts[0].ContactRequestState) + + // Make sure the sender is added to our contacts + contacts = theirMessenger.AddedContacts() + s.Require().Len(contacts, 1) + + // Make sure we consider them a mutual contact, receiver side + mutualContacts := theirMessenger.MutualContacts() + s.Require().Len(mutualContacts, 1) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + s.m, + func(r *MessengerResponse) bool { + return len(r.Contacts) > 0 && len(r.Messages()) > 0 && len(r.ActivityCenterNotifications()) > 0 + }, + "no messages", + ) + s.Require().NoError(err) + + // Check activity center notification is of the right type + s.Require().Equal(ActivityCenterNotificationTypeContactRequest, resp.ActivityCenterNotifications()[0].Type) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Make sure the message is updated, sender s2de + s.Require().NotNil(resp) + s.Require().Len(resp.Messages(), 1) + s.Require().Equal(resp.Messages()[0].ID, contactRequests[0].ID) + s.Require().Equal(common.ContactRequestStateAccepted, resp.Messages()[0].ContactRequestState) + + // Make sure we consider them a mutual contact, sender side + mutualContacts = s.m.MutualContacts() + s.Require().Len(mutualContacts, 1) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateMutual, resp.Contacts[0].ContactRequestState) + + // Resend contact request with higher clock value + resp, err = s.m.SendContactRequest(context.Background(), request) + s.Require().NoError(err) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + theirMessenger, + func(r *MessengerResponse) bool { + return len(r.Messages()) == 1 && r.Messages()[0].ID == resp.Messages()[0].ID + }, + "no messages", + ) + s.Require().NoError(err) + + // Nothing should have changed, on both sides + mutualContacts = s.m.MutualContacts() + s.Require().Len(mutualContacts, 1) + + mutualContacts = theirMessenger.MutualContacts() + s.Require().Len(mutualContacts, 1) +} + +/* Disabling as currently there's an issue with duplicated contact requests +func (s *MessengerContactRequestSuite) TestReceiveAndAcceptLegacyContactRequest() { + + theirMessenger := s.newMessenger(s.shh) + _, err := theirMessenger.Start() + s.Require().NoError(err) + + contactID := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) + request := &requests.AddContact{ + ID: types.Hex2Bytes(contactID), + } + + // Send contact request + resp, err := s.m.AddContact(context.Background(), request) + s.Require().NoError(err) + + s.Require().NotNil(resp) + + // Make sure contact is added on the sender side + contacts := s.m.AddedContacts() + s.Require().Len(contacts, 1) + s.Require().Equal(ContactRequestStateSent, contacts[0].ContactRequestState) + + // Wait for the message to reach its destination + resp, err = WaitOnMessengerResponse( + theirMessenger, + func(r *MessengerResponse) bool { + return len(r.Contacts) > 0 && len(r.ActivityCenterNotifications()) == 1 + }, + "no messages", + ) + + s.Require().NoError(err) + + notification := resp.ActivityCenterNotifications()[0] + + // Check contact request has been received + s.Require().NoError(err) + + // Check activity center notification is of the right type + s.Require().Equal(ActivityCenterNotificationTypeContactRequest, notification.Type) + s.Require().NotNil(notification.Type) + s.Require().Equal(common.ContactRequestStatePending, notification.Message.ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateReceived, resp.Contacts[0].ContactRequestState) + + // Accept contact request, receiver side + resp, err = theirMessenger.AcceptContactRequest(context.Background(), &requests.AcceptContactRequest{ID: types.Hex2Bytes(notification.Message.ID)}) + s.Require().NoError(err) + + // Make sure the message is updated + s.Require().NotNil(resp) + + s.Require().Len(resp.ActivityCenterNotifications(), 1) + s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), notification.Message.ID) + s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) + s.Require().Equal(common.ContactRequestStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) + + // Check the contact state is correctly set + s.Require().Len(resp.Contacts, 1) + s.Require().Equal(ContactRequestStateMutual, resp.Contacts[0].ContactRequestState) + + // Make sure the sender is added to our contacts + contacts = theirMessenger.AddedContacts() + s.Require().Len(contacts, 1) + + // Make sure we consider them a mutual contact, receiver side + mutualContacts := theirMessenger.MutualContacts() + s.Require().Len(mutualContacts, 1) +} */ diff --git a/protocol/messenger_contacts.go b/protocol/messenger_contacts.go index 3f06fb218..d38e65882 100644 --- a/protocol/messenger_contacts.go +++ b/protocol/messenger_contacts.go @@ -3,15 +3,84 @@ package protocol import ( "context" "crypto/ecdsa" + "errors" "github.com/golang/protobuf/proto" + "github.com/status-im/status-go/eth-node/types" "github.com/status-im/status-go/protocol/common" "github.com/status-im/status-go/protocol/protobuf" "github.com/status-im/status-go/protocol/requests" "github.com/status-im/status-go/protocol/transport" ) +func (m *Messenger) AcceptContactRequest(ctx context.Context, request *requests.AcceptContactRequest) (*MessengerResponse, error) { + err := request.Validate() + if err != nil { + return nil, err + } + + contactRequest, err := m.persistence.MessageByID(request.ID.String()) + if err != nil { + return nil, err + } + + return m.addContact(contactRequest.From, "", "", "", contactRequest.ID) +} + +func (m *Messenger) SendContactRequest(ctx context.Context, request *requests.SendContactRequest) (*MessengerResponse, error) { + err := request.Validate() + if err != nil { + return nil, err + } + + chatID := request.ID.String() + + response, err := m.addContact(chatID, "", "", "", "") + if err != nil { + return nil, err + } + + publicKey, err := common.HexToPubkey(chatID) + if err != nil { + return nil, err + } + + // A valid added chat is required. + chat, ok := m.allChats.Load(chatID) + if !ok { + // Create a one to one chat and set active to false + chat = CreateOneToOneChat(chatID, publicKey, m.getTimesource()) + chat.Active = false + err = m.initChatSyncFields(chat) + if err != nil { + return nil, err + } + err = m.saveChat(chat) + if err != nil { + return nil, err + } + } + + chatMessage := &common.Message{} + chatMessage.ChatId = chatID + chatMessage.Text = request.Message + chatMessage.ContentType = protobuf.ChatMessage_CONTACT_REQUEST + chatMessage.ContactRequestState = common.ContactRequestStatePending + + messageResponse, err := m.sendChatMessage(ctx, chatMessage) + if err != nil { + return nil, err + } + + err = response.Merge(messageResponse) + if err != nil { + return nil, err + } + + return response, nil +} + // NOTE: This sets HasAddedUs to false, so next time we receive a contact request it will be reset to true func (m *Messenger) RejectContactRequest(ctx context.Context, request *requests.RejectContactRequest) (*MessengerResponse, error) { err := request.Validate() @@ -44,16 +113,63 @@ func (m *Messenger) RejectContactRequest(ctx context.Context, request *requests. return response, nil } -func (m *Messenger) AddContact(ctx context.Context, request *requests.AddContact) (*MessengerResponse, error) { +func (m *Messenger) DismissContactRequest(ctx context.Context, request *requests.DismissContactRequest) (*MessengerResponse, error) { err := request.Validate() if err != nil { return nil, err } - pubKey := request.ID.String() + contactRequest, err := m.persistence.MessageByID(request.ID.String()) + if err != nil { + return nil, err + } - ensName := request.ENSName + contact, ok := m.allContacts.Load(contactRequest.From) + if !ok { + var err error + contact, err = buildContactFromPkString(contactRequest.From) + if err != nil { + return nil, err + } + } + contact.DismissContactRequest() + err = m.persistence.SaveContact(contact, nil) + if err != nil { + return nil, err + } + + response := &MessengerResponse{} + response.AddContact(contact) + + contactRequest.ContactRequestState = common.ContactRequestStateDismissed + + err = m.persistence.SetContactRequestState(contactRequest.ID, contactRequest.ContactRequestState) + if err != nil { + return nil, err + } + + notification, err := m.persistence.GetActivityCenterNotificationByID(types.FromHex(contactRequest.ID)) + if err != nil { + return nil, err + } + + if notification != nil { + err := m.persistence.UpdateActivityCenterNotificationMessage(notification.ID, contactRequest) + if err != nil { + return nil, err + } + notification.Message = contactRequest + + response.AddActivityCenterNotification(notification) + } + + response.AddMessage(contactRequest) + + return response, nil +} + +func (m *Messenger) addContact(pubKey, ensName, nickname, displayName, contactRequestID string) (*MessengerResponse, error) { contact, ok := m.allContacts.Load(pubKey) if !ok { var err error @@ -75,12 +191,12 @@ func (m *Messenger) AddContact(ctx context.Context, request *requests.AddContact return nil, err } - if len(request.Nickname) != 0 { - contact.LocalNickname = request.Nickname + if len(nickname) != 0 { + contact.LocalNickname = nickname } - if len(request.DisplayName) != 0 { - contact.DisplayName = request.DisplayName + if len(displayName) != 0 { + contact.DisplayName = displayName } if !contact.Added { @@ -88,8 +204,10 @@ func (m *Messenger) AddContact(ctx context.Context, request *requests.AddContact } contact.LastUpdatedLocally = m.getTimesource().GetCurrentTime() + contact.ContactRequestSent() + // We sync the contact with the other devices - err = m.syncContact(context.Background(), contact) + err := m.syncContact(context.Background(), contact) if err != nil { return nil, err } @@ -144,7 +262,7 @@ func (m *Messenger) AddContact(ctx context.Context, request *requests.AddContact return nil, err } - displayName, err := m.settings.DisplayName() + displayName, err = m.settings.DisplayName() if err != nil { return nil, err } @@ -155,6 +273,67 @@ func (m *Messenger) AddContact(ctx context.Context, request *requests.AddContact return nil, err } + if len(contactRequestID) != 0 { + contactRequest, err := m.persistence.MessageByID(contactRequestID) + if err != nil { + return nil, err + } + + contactRequest.ContactRequestState = common.ContactRequestStateAccepted + + err = m.persistence.SetContactRequestState(contactRequest.ID, contactRequest.ContactRequestState) + if err != nil { + return nil, err + } + + contact.AcceptContactRequest() + + chat, ok := m.allChats.Load(contact.ID) + if !ok { + chat = OneToOneFromPublicKey(publicKey, m.getTimesource()) + chat.Active = false + if err := m.saveChat(chat); err != nil { + return nil, err + } + } + clock, _ := chat.NextClockAndTimestamp(m.getTimesource()) + acceptContactRequest := &protobuf.AcceptContactRequest{ + Id: contactRequest.ID, + Clock: clock, + } + encodedMessage, err := proto.Marshal(acceptContactRequest) + if err != nil { + return nil, err + } + + _, err = m.dispatchMessage(context.Background(), common.RawMessage{ + LocalChatID: pubKey, + Payload: encodedMessage, + MessageType: protobuf.ApplicationMetadataMessage_ACCEPT_CONTACT_REQUEST, + ResendAutomatically: true, + }) + if err != nil { + return nil, err + } + + notification, err := m.persistence.GetActivityCenterNotificationByID(types.FromHex(contactRequest.ID)) + if err != nil { + return nil, err + } + + if notification != nil { + err := m.persistence.UpdateActivityCenterNotificationMessage(notification.ID, contactRequest) + if err != nil { + return nil, err + } + notification.Message = contactRequest + + response.AddActivityCenterNotification(notification) + } + + response.AddMessage(contactRequest) + } + // Send profile picture with contact request chat, ok := m.allChats.Load(contact.ID) if !ok { @@ -183,8 +362,18 @@ func (m *Messenger) AddContact(ctx context.Context, request *requests.AddContact return nil, err } + response.AddContact(contact) + return response, nil } +func (m *Messenger) AddContact(ctx context.Context, request *requests.AddContact) (*MessengerResponse, error) { + err := request.Validate() + if err != nil { + return nil, err + } + + return m.addContact(request.ID.String(), request.ENSName, request.Nickname, request.DisplayName, "") +} func (m *Messenger) resetLastPublishedTimeForChatIdentity() error { // Reset last published time for ChatIdentity so new contact can receive data @@ -199,6 +388,7 @@ func (m *Messenger) removeContact(ctx context.Context, response *MessengerRespon return ErrContactNotFound } + contact.RetractContactRequest() contact.Remove() contact.LastUpdatedLocally = m.getTimesource().GetCurrentTime() @@ -239,6 +429,7 @@ func (m *Messenger) removeContact(ctx context.Context, response *MessengerRespon response.Contacts = []*Contact{contact} return nil } + func (m *Messenger) RemoveContact(ctx context.Context, pubKey string) (*MessengerResponse, error) { response := new(MessengerResponse) @@ -270,6 +461,17 @@ func (m *Messenger) AddedContacts() []*Contact { return contacts } +func (m *Messenger) MutualContacts() []*Contact { + var contacts []*Contact + m.allContacts.Range(func(contactID string, contact *Contact) (shouldContinue bool) { + if contact.Added && contact.HasAddedUs { + contacts = append(contacts, contact) + } + return true + }) + return contacts +} + func (m *Messenger) BlockedContacts() []*Contact { var contacts []*Contact m.allContacts.Range(func(contactID string, contact *Contact) (shouldContinue bool) { @@ -564,3 +766,59 @@ func (m *Messenger) addENSNameToContact(contact *Contact) error { return nil } + +func (m *Messenger) RetractContactRequest(request *requests.RetractContactRequest) (*MessengerResponse, error) { + err := request.Validate() + if err != nil { + return nil, err + } + contact, ok := m.allContacts.Load(request.ContactID.String()) + if !ok { + return nil, errors.New("contact not found") + } + contact.HasAddedUs = false + m.allContacts.Store(contact.ID, contact) + response := &MessengerResponse{} + err = m.removeContact(context.Background(), response, contact.ID) + if err != nil { + return nil, err + } + chat, ok := m.allChats.Load(contact.ID) + if !ok { + pubKey, err := contact.PublicKey() + if err != nil { + return nil, err + } + + chat = OneToOneFromPublicKey(pubKey, m.getTimesource()) + chat.Active = false + if err := m.saveChat(chat); err != nil { + return nil, err + } + } + + clock, _ := chat.NextClockAndTimestamp(m.getTimesource()) + retractContactRequest := &protobuf.RetractContactRequest{ + Clock: clock, + } + encodedMessage, err := proto.Marshal(retractContactRequest) + if err != nil { + return nil, err + } + + _, err = m.dispatchMessage(context.Background(), common.RawMessage{ + LocalChatID: contact.ID, + Payload: encodedMessage, + MessageType: protobuf.ApplicationMetadataMessage_RETRACT_CONTACT_REQUEST, + ResendAutomatically: true, + }) + if err != nil { + return nil, err + } + + return response, err +} + +func (m *Messenger) PendingContactRequests(cursor string, limit int) ([]*common.Message, string, error) { + return m.persistence.PendingContactRequests(cursor, limit) +} diff --git a/protocol/messenger_handler.go b/protocol/messenger_handler.go index e292f0891..f07b1c83a 100644 --- a/protocol/messenger_handler.go +++ b/protocol/messenger_handler.go @@ -228,6 +228,51 @@ func (m *Messenger) createMessageNotification(chat *Chat, messageState *Received } } +func (m *Messenger) createContactRequestNotification(contact *Contact, messageState *ReceivedMessageState, contactRequest *common.Message) error { + + // Legacy contact request + if contactRequest == nil { + + if messageState.CurrentMessageState == nil || messageState.CurrentMessageState.MessageID == "" { + return errors.New("no available id") + } + contactRequest = &common.Message{} + + contactRequest.WhisperTimestamp = messageState.CurrentMessageState.WhisperTimestamp + contactRequest.Seen = true + contactRequest.Text = "Please add me to your contacts" + contactRequest.From = contact.ID + contactRequest.ContentType = protobuf.ChatMessage_CONTACT_REQUEST + contactRequest.Clock = messageState.CurrentMessageState.Message.Clock + contactRequest.ID = messageState.CurrentMessageState.MessageID + contactRequest.ContactRequestState = common.ContactRequestStatePending + err := contactRequest.PrepareContent(common.PubkeyToHex(&m.identity.PublicKey)) + if err != nil { + return err + } + + messageState.Response.AddMessage(contactRequest) + + err = m.persistence.SaveMessages([]*common.Message{contactRequest}) + if err != nil { + return err + } + + } + + notification := &ActivityCenterNotification{ + ID: types.FromHex(contactRequest.ID), + Name: contact.CanonicalName(), + Message: contactRequest, + Type: ActivityCenterNotificationTypeContactRequest, + Author: messageState.CurrentMessageState.Contact.ID, + Timestamp: messageState.CurrentMessageState.WhisperTimestamp, + ChatID: contact.ID, + } + + return m.addActivityCenterNotification(messageState, notification) +} + func (m *Messenger) handleCommandMessage(state *ReceivedMessageState, message *common.Message) error { message.ID = state.CurrentMessageState.MessageID message.From = state.CurrentMessageState.Contact.ID @@ -582,6 +627,66 @@ func (m *Messenger) HandlePinMessage(state *ReceivedMessageState, message protob return nil } +func (m *Messenger) HandleAcceptContactRequest(state *ReceivedMessageState, message protobuf.AcceptContactRequest) error { + contact := state.CurrentMessageState.Contact + + if contact.ContactRequestClock > message.Clock { + m.logger.Info("not handling accept since clock lower") + return nil + } + + // TODO: Handle missing contact request message + request, err := m.persistence.MessageByID(message.Id) + if err != nil { + return err + } + + if request.LocalChatID != state.CurrentMessageState.Contact.ID { + return errors.New("can't accept contact request not sent to user") + } + + contact.ContactRequestClock = message.Clock + + state.ModifiedContacts.Store(contact.ID, true) + state.AllContacts.Store(contact.ID, contact) + + request.ContactRequestState = common.ContactRequestStateAccepted + + err = m.persistence.SetContactRequestState(request.ID, request.ContactRequestState) + if err != nil { + return err + } + + err = m.createContactRequestNotification(state.CurrentMessageState.Contact, state, request) + if err != nil { + m.logger.Warn("could not create contact request notification", zap.Error(err)) + } + + state.CurrentMessageState.Contact.ContactRequestAccepted() + + state.Response.AddMessage(request) + return nil + +} + +func (m *Messenger) HandleRetractContactRequest(state *ReceivedMessageState, message protobuf.RetractContactRequest) error { + contact := state.CurrentMessageState.Contact + if contact.ContactRequestClock > message.Clock { + m.logger.Info("not handling retract since clock lower") + return nil + } + + contact.Added = false + contact.HasAddedUs = false + contact.ContactRequestClock = message.Clock + contact.ContactRequestRetracted() + state.ModifiedContacts.Store(contact.ID, true) + + state.AllContacts.Store(contact.ID, contact) + + return nil +} + func (m *Messenger) HandleContactUpdate(state *ReceivedMessageState, message protobuf.ContactUpdate) error { logger := m.logger.With(zap.String("site", "HandleContactUpdate")) contact := state.CurrentMessageState.Contact @@ -622,6 +727,15 @@ func (m *Messenger) HandleContactUpdate(state *ReceivedMessageState, message pro contact.LastUpdated = message.Clock state.ModifiedContacts.Store(contact.ID, true) state.AllContacts.Store(contact.ID, contact) + /* Disabling for now in order to avoid duplicated contact requests in activity center + if contact.ContactRequestState == ContactRequestStateNone { + contact.ContactRequestState = ContactRequestStateReceived + err = m.createContactRequestNotification(contact, state, nil) + if err != nil { + m.logger.Warn("could not create contact request notification", zap.Error(err)) + } + + }*/ } if chat.LastClockValue < message.Clock { @@ -1003,7 +1117,24 @@ func (m *Messenger) HandleChatMessage(state *ReceivedMessageState) error { receivedMessage.OutgoingStatus = common.OutgoingStatusSent } - if receivedMessage.ContentType == protobuf.ChatMessage_COMMUNITY { + contact := state.CurrentMessageState.Contact + + if receivedMessage.ContentType == protobuf.ChatMessage_CONTACT_REQUEST { + if contact.ContactRequestClock > receivedMessage.Clock { + m.logger.Info("not handling contact message since clock lower") + return nil + } + receivedMessage.ContactRequestState = common.ContactRequestStatePending + contact.ContactRequestClock = receivedMessage.Clock + contact.ContactRequestReceived() + state.ModifiedContacts.Store(contact.ID, true) + state.AllContacts.Store(contact.ID, contact) + err = m.createContactRequestNotification(state.CurrentMessageState.Contact, state, receivedMessage) + if err != nil { + return err + } + + } else if receivedMessage.ContentType == protobuf.ChatMessage_COMMUNITY { chat.Highlight = true } @@ -1036,7 +1167,7 @@ func (m *Messenger) HandleChatMessage(state *ReceivedMessageState) error { } // If the chat is not active, create a notification in the center - if !receivedMessage.Deleted && chat.OneToOne() && !chat.Active { + if !receivedMessage.Deleted && chat.OneToOne() && !chat.Active && receivedMessage.ContentType != protobuf.ChatMessage_CONTACT_REQUEST { m.createMessageNotification(chat, state) } @@ -1045,7 +1176,6 @@ func (m *Messenger) HandleChatMessage(state *ReceivedMessageState) error { // TODO(samyoul) remove storing of an updated reference pointer? m.allChats.Store(chat.ID, chat) - contact := state.CurrentMessageState.Contact if receivedMessage.EnsName != "" { oldRecord, err := m.ensVerifier.Add(contact.ID, receivedMessage.EnsName, receivedMessage.Clock) if err != nil { diff --git a/protocol/messenger_mailserver_cycle.go b/protocol/messenger_mailserver_cycle.go index d885e17c0..df549bcbd 100644 --- a/protocol/messenger_mailserver_cycle.go +++ b/protocol/messenger_mailserver_cycle.go @@ -485,6 +485,7 @@ func (m *Messenger) handleMailserverCycleEvent(connectedPeers []ConnectedPeer) e } if m.mailserverCycle.activeMailserver != nil && id == m.mailserverCycle.activeMailserver.ID { + m.mailserverCycle.activeMailserver.FailedRequests = 0 m.logger.Info("mailserver available", zap.String("address", connectedPeer.UniqueID)) m.EmitMailserverAvailable() signal.SendMailserverAvailable(m.mailserverCycle.activeMailserver.Address, m.mailserverCycle.activeMailserver.ID) diff --git a/protocol/messenger_response.go b/protocol/messenger_response.go index bc3f82b32..9cd985edc 100644 --- a/protocol/messenger_response.go +++ b/protocol/messenger_response.go @@ -418,6 +418,18 @@ func (r *MessengerResponse) AddMessage(message *common.Message) { r.messages[message.ID] = message } +func (r *MessengerResponse) AddContact(c *Contact) { + + for idx, c1 := range r.Contacts { + if c1.ID == c.ID { + r.Contacts[idx] = c + return + } + } + + r.Contacts = append(r.Contacts, c) +} + func (r *MessengerResponse) SetMessages(messages []*common.Message) { r.messages = make(map[string]*common.Message) r.AddMessages(messages) diff --git a/protocol/messenger_test.go b/protocol/messenger_test.go index 29c42881d..ab5af571c 100644 --- a/protocol/messenger_test.go +++ b/protocol/messenger_test.go @@ -125,7 +125,7 @@ func newMessengerWithKey(shh types.Waku, privateKey *ecdsa.PrivateKey, logger *z options := []Option{ WithCustomLogger(logger), - WithDatabaseConfig(":memory:", "some-key"), + WithDatabaseConfig(":memory:", "somekey"), WithMultiAccounts(madb), WithAccount(iai.ToMultiAccount()), WithDatasync(), diff --git a/protocol/migrations/migrations.go b/protocol/migrations/migrations.go index 914b420a8..7944f1612 100644 --- a/protocol/migrations/migrations.go +++ b/protocol/migrations/migrations.go @@ -50,6 +50,8 @@ // 1635840039_add_clock_read_at_column_in_chats.up.sql (245B) // 1637852321_add_received_invitation_admin_column_in_chats.up.sql (72B) // 1645034601_display_name.up.sql (110B) +// 1645034602_add_mutual_contact_request.up.sql (454B) +// 1650373957_add_contact_request_state.up.sql (59B) // README.md (554B) // doc.go (850B) @@ -135,7 +137,7 @@ func _000001_initDownDbSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "000001_init.down.db.sql", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xbb, 0x3f, 0x1, 0x75, 0x19, 0x70, 0x86, 0xa7, 0x34, 0x40, 0x17, 0x34, 0x3e, 0x18, 0x51, 0x79, 0xd4, 0x22, 0xad, 0x8f, 0x80, 0xcc, 0xa6, 0xcc, 0x6, 0x2b, 0x62, 0x2, 0x47, 0xba, 0xf9}} return a, nil } @@ -155,7 +157,7 @@ func _000001_initUpDbSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "000001_init.up.db.sql", size: 2719, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x60, 0xdc, 0xeb, 0xe, 0xc2, 0x4f, 0x75, 0xa, 0xf6, 0x3e, 0xc7, 0xc4, 0x4, 0xe2, 0xe1, 0xa4, 0x73, 0x2f, 0x4a, 0xad, 0x1a, 0x0, 0xc3, 0x93, 0x9d, 0x77, 0x3e, 0x31, 0x91, 0x77, 0x2e, 0xc8}} return a, nil } @@ -175,7 +177,7 @@ func _000002_add_last_ens_clock_valueUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "000002_add_last_ens_clock_value.up.sql", size: 77, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4d, 0x3, 0x8f, 0xd5, 0x85, 0x83, 0x47, 0xbe, 0xf9, 0x82, 0x7e, 0x81, 0xa4, 0xbd, 0xaa, 0xd5, 0x98, 0x18, 0x5, 0x2d, 0x82, 0x42, 0x3b, 0x3, 0x50, 0xc3, 0x1e, 0x84, 0x35, 0xf, 0xb6, 0x2b}} return a, nil } @@ -195,7 +197,7 @@ func _1586358095_add_replaceUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0644), modTime: time.Unix(1588169971, 0)} + info := bindataFileInfo{name: "1586358095_add_replace.up.sql", size: 224, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd2, 0xb3, 0xa9, 0xc7, 0x7f, 0x9d, 0x8f, 0x43, 0x8c, 0x9e, 0x58, 0x8d, 0x44, 0xbc, 0xfa, 0x6b, 0x5f, 0x3f, 0x5a, 0xbe, 0xe8, 0xb1, 0x16, 0xf, 0x91, 0x2a, 0xa0, 0x71, 0xbb, 0x8d, 0x6b, 0xcb}} return a, nil } @@ -215,7 +217,7 @@ func _1588665364_add_image_dataUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0644), modTime: time.Unix(1594716841, 0)} + info := bindataFileInfo{name: "1588665364_add_image_data.up.sql", size: 186, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd6, 0xc6, 0x35, 0xb4, 0x4c, 0x39, 0x96, 0x29, 0x30, 0xda, 0xf4, 0x8f, 0xcb, 0xf1, 0x9f, 0x84, 0xdc, 0x88, 0xd4, 0xd5, 0xbc, 0xb6, 0x5b, 0x46, 0x78, 0x67, 0x76, 0x1a, 0x5, 0x36, 0xdc, 0xe5}} return a, nil } @@ -235,7 +237,7 @@ func _1589365189_add_pow_targetUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1594716841, 0)} + info := bindataFileInfo{name: "1589365189_add_pow_target.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x3a, 0xe2, 0x2e, 0x7d, 0xaf, 0xbb, 0xcc, 0x21, 0xa1, 0x7a, 0x41, 0x9a, 0xd0, 0xbb, 0xa9, 0xc8, 0x35, 0xf9, 0x32, 0x34, 0x46, 0x44, 0x9a, 0x86, 0x40, 0x7c, 0xb9, 0x23, 0xc7, 0x3, 0x3f}} return a, nil } @@ -255,7 +257,7 @@ func _1591277220_add_index_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0644), modTime: time.Unix(1594716841, 0)} + info := bindataFileInfo{name: "1591277220_add_index_messages.up.sql", size: 240, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9c, 0xfe, 0xbe, 0xd5, 0xb8, 0x8f, 0xdd, 0xef, 0xbb, 0xa8, 0xad, 0x7f, 0xed, 0x5b, 0x5b, 0x2f, 0xe6, 0x82, 0x27, 0x78, 0x1f, 0xb9, 0x57, 0xdc, 0x8, 0xc2, 0xb2, 0xa9, 0x9a, 0x4, 0xe1, 0x7a}} return a, nil } @@ -275,7 +277,7 @@ func _1593087212_add_mute_chat_and_raw_message_fieldsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1597848235, 0)} + info := bindataFileInfo{name: "1593087212_add_mute_chat_and_raw_message_fields.up.sql", size: 215, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x73, 0x99, 0x61, 0xd1, 0xaa, 0xb4, 0xbf, 0xaf, 0xd7, 0x20, 0x17, 0x40, 0xf9, 0x2, 0xfb, 0xcc, 0x40, 0x2a, 0xd, 0x86, 0x36, 0x30, 0x88, 0x89, 0x25, 0x80, 0x42, 0xb0, 0x5b, 0xe9, 0x73, 0x78}} return a, nil } @@ -295,7 +297,7 @@ func _1595862781_add_audio_dataUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0644), modTime: time.Unix(1597848235, 0)} + info := bindataFileInfo{name: "1595862781_add_audio_data.up.sql", size: 246, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xae, 0xd2, 0xee, 0x55, 0xfb, 0x36, 0xa4, 0x92, 0x66, 0xe, 0x81, 0x62, 0x1e, 0x7a, 0x69, 0xa, 0xd5, 0x4b, 0xa5, 0x6a, 0x8d, 0x1d, 0xce, 0xf3, 0x3e, 0xc0, 0x5f, 0x9c, 0x66, 0x1b, 0xb4, 0xed}} return a, nil } @@ -315,7 +317,7 @@ func _1595865249_create_emoji_reactions_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0644), modTime: time.Unix(1597848235, 0)} + info := bindataFileInfo{name: "1595865249_create_emoji_reactions_table.up.sql", size: 300, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x3e, 0xc5, 0x43, 0x5c, 0x3d, 0x53, 0x43, 0x2c, 0x1a, 0xa5, 0xb6, 0xbf, 0x7, 0x4, 0x5a, 0x3e, 0x40, 0x8b, 0xa4, 0x57, 0x12, 0x58, 0xbc, 0x42, 0xe2, 0xc3, 0xde, 0x76, 0x98, 0x80, 0xe2, 0xbe}} return a, nil } @@ -335,7 +337,7 @@ func _1596805115_create_group_chat_invitations_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1596805115_create_group_chat_invitations_table.up.sql", size: 231, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6d, 0xb1, 0x14, 0x6d, 0x54, 0x28, 0x67, 0xc3, 0x23, 0x6a, 0xfc, 0x80, 0xdf, 0x9e, 0x4c, 0x35, 0x36, 0xf, 0xf8, 0xf3, 0x5f, 0xae, 0xad, 0xb, 0xc1, 0x51, 0x8e, 0x17, 0x7, 0xe5, 0x7f, 0x91}} return a, nil } @@ -355,7 +357,7 @@ func _1597322655_add_invitation_admin_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1597322655_add_invitation_admin_chat_field.up.sql", size: 54, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x7a, 0xa0, 0xf2, 0xdb, 0x13, 0x91, 0x91, 0xa8, 0x34, 0x1a, 0xa1, 0x49, 0x68, 0xd5, 0xae, 0x2c, 0xd8, 0xd5, 0xea, 0x8f, 0x8c, 0xc7, 0x2, 0x4e, 0x58, 0x2c, 0x3a, 0x14, 0xd4, 0x4f, 0x2c}} return a, nil } @@ -375,7 +377,7 @@ func _1597757544_add_nicknameUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1597757544_add_nickname.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf4, 0xa2, 0x64, 0x50, 0xc5, 0x4, 0xb9, 0x8b, 0xd1, 0x18, 0x9b, 0xc3, 0x91, 0x36, 0x2a, 0x1f, 0xc3, 0x6c, 0x2d, 0x92, 0xf8, 0x5e, 0xff, 0xb1, 0x59, 0x61, 0x2, 0x1c, 0xe1, 0x85, 0x90, 0xa4}} return a, nil } @@ -395,7 +397,7 @@ func _1598955122_add_mentionsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1598955122_add_mentions.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8d, 0x22, 0x17, 0x92, 0xd2, 0x11, 0x4e, 0x7, 0x93, 0x9a, 0x55, 0xfd, 0xb, 0x97, 0xc4, 0x63, 0x6a, 0x81, 0x97, 0xcd, 0xb2, 0xf8, 0x4b, 0x5f, 0x3c, 0xfa, 0x3a, 0x38, 0x53, 0x10, 0xed, 0x9d}} return a, nil } @@ -415,7 +417,7 @@ func _1599641390_add_emoji_reactions_indexUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1599641390_add_emoji_reactions_index.up.sql", size: 126, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf9, 0xd8, 0xdc, 0xa7, 0xb, 0x92, 0x7a, 0x61, 0x37, 0x24, 0x1c, 0x77, 0x5e, 0xe, 0x7e, 0xfc, 0x9f, 0x98, 0x7b, 0x65, 0xe7, 0xf9, 0x71, 0x57, 0x89, 0x2d, 0x90, 0x1b, 0xf6, 0x5e, 0x37, 0xe8}} return a, nil } @@ -435,7 +437,7 @@ func _1599720851_add_seen_index_remove_long_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1599720851_add_seen_index_remove_long_messages.up.sql", size: 150, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x24, 0x1c, 0xc4, 0x78, 0x91, 0xc7, 0xeb, 0xfe, 0xc8, 0xa0, 0xd8, 0x13, 0x27, 0x97, 0xc8, 0x96, 0x56, 0x97, 0x33, 0x2c, 0x1e, 0x16, 0x8a, 0xd3, 0x49, 0x99, 0x3, 0xe9, 0xbb, 0xc4, 0x5, 0x3c}} return a, nil } @@ -455,7 +457,7 @@ func _1603198582_add_profile_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1603198582_add_profile_chat_field.up.sql", size: 45, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0xca, 0xe, 0x46, 0xa0, 0x9, 0x9d, 0x47, 0x57, 0xe9, 0xfb, 0x17, 0xeb, 0x9c, 0xf6, 0xb8, 0x1d, 0xe9, 0xd, 0x0, 0xd5, 0xe5, 0xd8, 0x9e, 0x60, 0xa, 0xbf, 0x32, 0x2c, 0x52, 0x7f, 0x6a}} return a, nil } @@ -475,7 +477,7 @@ func _1603816533_add_linksUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1603816533_add_links.up.sql", size: 48, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc9, 0x24, 0xd6, 0x1d, 0xa, 0x83, 0x1e, 0x4d, 0xf, 0xae, 0x4d, 0x8c, 0x51, 0x32, 0xa8, 0x37, 0xb0, 0x14, 0xfb, 0x32, 0x34, 0xc8, 0xc, 0x4e, 0x5b, 0xc5, 0x15, 0x65, 0x73, 0x0, 0x0, 0x1d}} return a, nil } @@ -495,7 +497,7 @@ func _1603888149_create_chat_identity_last_published_tableUpSql() (*asset, error return nil, err } - info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0644), modTime: time.Unix(1610470168, 0)} + info := bindataFileInfo{name: "1603888149_create_chat_identity_last_published_table.up.sql", size: 407, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7f, 0x9, 0xf, 0xfb, 0xdb, 0x3c, 0x86, 0x70, 0x82, 0xda, 0x10, 0x25, 0xe2, 0x4e, 0x40, 0x45, 0xab, 0x8b, 0x1c, 0x91, 0x7c, 0xf1, 0x70, 0x2e, 0x81, 0xf3, 0x71, 0x45, 0xda, 0xe2, 0xa4, 0x57}} return a, nil } @@ -515,7 +517,7 @@ func _1605075346_add_communitiesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0644), modTime: time.Unix(1610470168, 0)} + info := bindataFileInfo{name: "1605075346_add_communities.up.sql", size: 6971, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1f, 0x64, 0xea, 0xb4, 0xae, 0x9e, 0xdb, 0x9, 0x58, 0xb6, 0x5c, 0x7a, 0x50, 0xc5, 0xfe, 0x93, 0x5d, 0x36, 0x85, 0x5d, 0x6a, 0xba, 0xc9, 0x7e, 0x84, 0xd7, 0xbf, 0x2a, 0x53, 0xf3, 0x97, 0xf1}} return a, nil } @@ -535,7 +537,7 @@ func _1610117927_add_message_cacheUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0644), modTime: time.Unix(1616757075, 0)} + info := bindataFileInfo{name: "1610117927_add_message_cache.up.sql", size: 142, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xf1, 0xf0, 0x82, 0x79, 0x28, 0x19, 0xc2, 0x39, 0x6a, 0xa5, 0x96, 0x59, 0x23, 0xa0, 0xed, 0x60, 0x58, 0x86, 0x9, 0xb9, 0xad, 0xfb, 0xa, 0xe3, 0x47, 0x6e, 0xa1, 0x18, 0xe8, 0x39, 0x2c}} return a, nil } @@ -555,7 +557,7 @@ func _1610959908_add_dont_wrap_to_raw_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1616757075, 0)} + info := bindataFileInfo{name: "1610959908_add_dont_wrap_to_raw_messages.up.sql", size: 83, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x71, 0x2, 0x9a, 0xca, 0xd4, 0x38, 0x44, 0x30, 0x2b, 0xa8, 0x27, 0x32, 0x63, 0x53, 0x22, 0x60, 0x59, 0x84, 0x23, 0x96, 0x77, 0xf0, 0x56, 0xd7, 0x94, 0xe0, 0x95, 0x28, 0x6, 0x1d, 0x4e, 0xb1}} return a, nil } @@ -575,7 +577,7 @@ func _1610960912_add_send_on_personal_topicUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1616757075, 0)} + info := bindataFileInfo{name: "1610960912_add_send_on_personal_topic.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0xac, 0x2f, 0xc4, 0xd, 0xa7, 0x1b, 0x37, 0x30, 0xc2, 0x68, 0xee, 0xde, 0x54, 0x5e, 0xbf, 0x3f, 0xa0, 0xd6, 0xc6, 0x9f, 0xd4, 0x34, 0x12, 0x76, 0x1e, 0x66, 0x4a, 0xfc, 0xf, 0xee, 0xc9}} return a, nil } @@ -595,7 +597,7 @@ func _1612870480_add_datasync_idUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1616757075, 0)} + info := bindataFileInfo{name: "1612870480_add_datasync_id.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0x9a, 0xbc, 0xfa, 0xaa, 0x8c, 0x9c, 0x37, 0x67, 0x15, 0x9c, 0x7e, 0x78, 0x75, 0x66, 0x82, 0x18, 0x72, 0x10, 0xbc, 0xd4, 0xab, 0x44, 0xfe, 0x57, 0x85, 0x6d, 0x19, 0xf5, 0x96, 0x8a, 0xbe}} return a, nil } @@ -615,7 +617,7 @@ func _1614152139_add_communities_request_to_joinUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0644), modTime: time.Unix(1616757075, 0)} + info := bindataFileInfo{name: "1614152139_add_communities_request_to_join.up.sql", size: 831, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x11, 0x3, 0x26, 0xf9, 0x29, 0x50, 0x4f, 0xcd, 0x46, 0xe5, 0xb1, 0x6b, 0xb9, 0x2, 0x40, 0xb1, 0xdf, 0x4a, 0x4c, 0x7a, 0xda, 0x3, 0x35, 0xcd, 0x2d, 0xcc, 0x80, 0x7d, 0x57, 0x5f, 0x3, 0x5c}} return a, nil } @@ -635,7 +637,7 @@ func _1615374373_add_confirmationsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0644), modTime: time.Unix(1616757075, 0)} + info := bindataFileInfo{name: "1615374373_add_confirmations.up.sql", size: 227, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xdd, 0xa6, 0x65, 0xc5, 0x1d, 0xb2, 0x77, 0x36, 0xe3, 0x79, 0xda, 0xe8, 0x7a, 0xa4, 0xdf, 0x45, 0xae, 0xd8, 0xb4, 0xba, 0x90, 0xfd, 0x74, 0x71, 0x14, 0x75, 0x73, 0x72, 0xb9, 0x9e, 0x1, 0x81}} return a, nil } @@ -655,7 +657,7 @@ func _1617694931_add_notification_centerUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0644), modTime: time.Unix(1622467450, 0)} + info := bindataFileInfo{name: "1617694931_add_notification_center.up.sql", size: 572, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x45, 0xc6, 0xc9, 0x73, 0xbb, 0x1f, 0xda, 0xa3, 0x4d, 0x19, 0x98, 0x85, 0x2d, 0xca, 0xda, 0xcc, 0x3b, 0x32, 0xff, 0xc7, 0x7b, 0xe3, 0x9f, 0x9b, 0x2a, 0x93, 0xf5, 0xdf, 0x65, 0x38, 0x91}} return a, nil } @@ -675,7 +677,7 @@ func _1618923660_create_pin_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1622467450, 0)} + info := bindataFileInfo{name: "1618923660_create_pin_messages.up.sql", size: 265, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x61, 0x44, 0x3a, 0xbe, 0x30, 0xd2, 0x7e, 0xc0, 0xe2, 0x8e, 0x65, 0x53, 0x54, 0xbb, 0x7a, 0x1c, 0xb3, 0x5d, 0xd2, 0xa6, 0xa9, 0x28, 0xb7, 0xa4, 0x5f, 0x8b, 0x9, 0x5f, 0x17, 0xc1, 0x85, 0x21}} return a, nil } @@ -695,7 +697,7 @@ func _1619094007_add_joined_chat_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1622467450, 0)} + info := bindataFileInfo{name: "1619094007_add_joined_chat_field.up.sql", size: 101, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfa, 0x30, 0x81, 0x3a, 0x2f, 0x9f, 0xb3, 0x0, 0x55, 0x8e, 0x1d, 0xa8, 0xb0, 0x68, 0xf0, 0x40, 0x1a, 0x6c, 0xaa, 0xfc, 0x33, 0xd1, 0xd1, 0x55, 0x3f, 0xf2, 0xbd, 0x54, 0xa1, 0x2b, 0x40, 0x95}} return a, nil } @@ -715,7 +717,7 @@ func _1619099821_add_last_synced_fieldUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1622467450, 0)} + info := bindataFileInfo{name: "1619099821_add_last_synced_field.up.sql", size: 226, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf, 0x52, 0x22, 0xe, 0x2f, 0xd7, 0x93, 0x5f, 0x42, 0xc2, 0x93, 0x4, 0x35, 0x6f, 0xc9, 0x19, 0xed, 0x6b, 0x52, 0x6f, 0xae, 0x99, 0xe2, 0x68, 0x3d, 0x4f, 0x40, 0xe, 0xe1, 0xa, 0x47, 0x21}} return a, nil } @@ -735,7 +737,7 @@ func _1621933219_add_mentionedUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1622467450, 0)} + info := bindataFileInfo{name: "1621933219_add_mentioned.up.sql", size: 70, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x76, 0x8a, 0xc9, 0x7, 0x8f, 0xa5, 0xcb, 0x12, 0x21, 0x4e, 0xfe, 0x96, 0x77, 0xcf, 0x7f, 0x76, 0x75, 0x36, 0x2c, 0xf8, 0x1d, 0x13, 0xcb, 0xcd, 0x6e, 0x70, 0xbf, 0xf5, 0x93, 0x67, 0xd1}} return a, nil } @@ -755,7 +757,7 @@ func _1622010048_add_unviewed_mentions_countUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1625049984, 0)} + info := bindataFileInfo{name: "1622010048_add_unviewed_mentions_count.up.sql", size: 114, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7c, 0x16, 0x85, 0xa6, 0x5b, 0xe1, 0x66, 0xb9, 0x84, 0xbe, 0x7f, 0xa, 0x77, 0x23, 0xb9, 0xef, 0x8e, 0x2, 0x8, 0xfc, 0x61, 0xb2, 0x43, 0xa9, 0x63, 0xae, 0xb4, 0xdf, 0x30, 0xb1, 0x61, 0x4b}} return a, nil } @@ -775,7 +777,7 @@ func _1622061278_add_message_activity_center_notification_fieldUpSql() (*asset, return nil, err } - info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1625049984, 0)} + info := bindataFileInfo{name: "1622061278_add_message_activity_center_notification_field.up.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8, 0xc, 0xa6, 0x1f, 0xa5, 0xc6, 0x7c, 0x6f, 0xab, 0x2c, 0x2d, 0xb5, 0xa4, 0xdd, 0xc1, 0xd6, 0x44, 0x83, 0xf9, 0xb1, 0xa5, 0xce, 0x34, 0x3d, 0x2, 0xa9, 0x35, 0xcf, 0xc6, 0xb2, 0x43, 0x37}} return a, nil } @@ -795,7 +797,7 @@ func _1622464518_set_synced_to_fromUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0644), modTime: time.Unix(1625049989, 0)} + info := bindataFileInfo{name: "1622464518_set_synced_to_from.up.sql", size: 105, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x33, 0x3e, 0x2b, 0xa, 0x1e, 0xc7, 0x6d, 0x6f, 0xd1, 0x1d, 0xe8, 0x4b, 0xdd, 0x92, 0x76, 0xea, 0xf2, 0x3e, 0x15, 0x85, 0xc4, 0xc3, 0x31, 0xf1, 0xc0, 0xa2, 0xd7, 0x47, 0xde, 0x4e, 0xfd, 0xc6}} return a, nil } @@ -815,7 +817,7 @@ func _1622464519_add_chat_descriptionUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0644), modTime: time.Unix(1625049989, 0)} + info := bindataFileInfo{name: "1622464519_add_chat_description.up.sql", size: 93, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0x2e, 0x89, 0x31, 0xec, 0xef, 0xeb, 0x43, 0xf5, 0x96, 0x6d, 0xce, 0x91, 0x8a, 0x37, 0x2a, 0x11, 0x7a, 0x3f, 0xd9, 0x10, 0xbb, 0xa1, 0xbc, 0x7, 0xe0, 0x3b, 0xa5, 0xf4, 0xa6, 0xf4, 0xa1}} return a, nil } @@ -835,7 +837,7 @@ func _1622622253_add_pinned_by_to_pin_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1625049989, 0)} + info := bindataFileInfo{name: "1622622253_add_pinned_by_to_pin_messages.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9b, 0x94, 0xa3, 0x45, 0x91, 0x1e, 0x66, 0xd1, 0x96, 0x5a, 0xaf, 0xfa, 0x29, 0x39, 0xa8, 0x3a, 0x97, 0x4c, 0x65, 0x6, 0x96, 0x90, 0x4c, 0xfe, 0xce, 0x7d, 0x5d, 0xd4, 0xb3, 0x8, 0x6d, 0x5f}} return a, nil } @@ -855,7 +857,7 @@ func _1623938329_add_author_activity_center_notification_fieldUpSql() (*asset, e return nil, err } - info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1625049989, 0)} + info := bindataFileInfo{name: "1623938329_add_author_activity_center_notification_field.up.sql", size: 66, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x36, 0xe6, 0xa7, 0xd5, 0x26, 0xff, 0xab, 0x92, 0x88, 0xf0, 0xd3, 0x34, 0xd9, 0x2f, 0xe7, 0x18, 0x1a, 0x40, 0xf9, 0xbe, 0x8e, 0xfc, 0xd0, 0x4f, 0x1f, 0x4a, 0xb9, 0x83, 0x3f, 0xa9, 0xde, 0xb}} return a, nil } @@ -875,7 +877,7 @@ func _1623938330_add_edit_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0644), modTime: time.Unix(1625049989, 0)} + info := bindataFileInfo{name: "1623938330_add_edit_messages.up.sql", size: 369, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xd2, 0xce, 0xe, 0x5c, 0x19, 0xbe, 0x5e, 0x29, 0xbe, 0x9b, 0x31, 0x53, 0x76, 0xb2, 0xc8, 0x56, 0xf0, 0x82, 0xfe, 0x7d, 0x6c, 0xe8, 0x5c, 0xe9, 0x7a, 0x5d, 0x5, 0xc4, 0x92, 0x38, 0xe3}} return a, nil } @@ -895,7 +897,7 @@ func _1624978434_add_muted_communityUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1626786555, 0)} + info := bindataFileInfo{name: "1624978434_add_muted_community.up.sql", size: 82, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6, 0xdc, 0x6e, 0x6f, 0x97, 0xc7, 0x3d, 0x50, 0xab, 0x80, 0x87, 0x44, 0x43, 0x38, 0xe6, 0xc5, 0xc1, 0x91, 0x26, 0xf, 0x16, 0xe, 0xd9, 0x32, 0x37, 0x25, 0x96, 0x25, 0x6, 0xc8, 0xb5, 0x4a}} return a, nil } @@ -915,7 +917,7 @@ func _1625018910_add_repply_message_activity_center_notification_fieldUpSql() (* return nil, err } - info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1626786555, 0)} + info := bindataFileInfo{name: "1625018910_add_repply_message_activity_center_notification_field.up.sql", size: 86, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf2, 0x52, 0x12, 0x40, 0xd8, 0x6f, 0x71, 0x97, 0x46, 0x39, 0xaa, 0x74, 0x41, 0xcd, 0x45, 0x4c, 0xe8, 0xd9, 0xe2, 0x56, 0x8e, 0x78, 0x18, 0x62, 0xf6, 0xa8, 0x36, 0xe9, 0x9a, 0x1f, 0xc, 0xb1}} return a, nil } @@ -935,7 +937,7 @@ func _1625762506_add_deleted_messagesUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0644), modTime: time.Unix(1627897055, 0)} + info := bindataFileInfo{name: "1625762506_add_deleted_messages.up.sql", size: 357, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xd5, 0x61, 0x42, 0xb6, 0x8c, 0x7f, 0x2d, 0xec, 0xa9, 0x6d, 0x3d, 0x0, 0xa3, 0x32, 0xd8, 0x4a, 0x38, 0x5c, 0x97, 0xfc, 0x68, 0xde, 0xa9, 0xb7, 0xd8, 0xde, 0xb, 0x29, 0x93, 0xdc, 0x81, 0xf8}} return a, nil } @@ -955,7 +957,7 @@ func _1627388946_add_communities_synced_atUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0644), modTime: time.Unix(1631628269, 0)} + info := bindataFileInfo{name: "1627388946_add_communities_synced_at.up.sql", size: 87, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc1, 0xbd, 0x9b, 0x6a, 0xc9, 0x1a, 0x7a, 0x34, 0xcf, 0x5f, 0x80, 0x9e, 0x8c, 0x1c, 0xc0, 0xec, 0x4e, 0x78, 0xb0, 0x2d, 0x15, 0x77, 0x38, 0x4a, 0x6a, 0x5, 0x84, 0xf5, 0x8d, 0x8b, 0xbe, 0x9}} return a, nil } @@ -975,7 +977,7 @@ func _1628280060_createUsermessagesIndexSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1631628269, 0)} + info := bindataFileInfo{name: "1628280060_create-usermessages-index.sql", size: 80, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0x6f, 0x70, 0x47, 0x40, 0xab, 0xa8, 0x60, 0xe0, 0xf9, 0x8, 0x7e, 0x19, 0x9d, 0xba, 0x33, 0x16, 0xfc, 0x3c, 0xdc, 0xa8, 0xa6, 0x53, 0x61, 0x39, 0x82, 0x91, 0xcf, 0x69, 0xd8, 0xf2, 0xcf}} return a, nil } @@ -995,7 +997,7 @@ func _1632303896_modify_contacts_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0644), modTime: time.Unix(1637329330, 0)} + info := bindataFileInfo{name: "1632303896_modify_contacts_table.up.sql", size: 1574, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x1e, 0x6c, 0x3c, 0xd, 0xd7, 0x7d, 0xbb, 0x19, 0xbc, 0xe4, 0x7, 0xfd, 0xf8, 0x66, 0x6d, 0x78, 0xf6, 0x4, 0xe6, 0x51, 0xe4, 0xe6, 0xdc, 0xe, 0x5a, 0x2e, 0xac, 0xe6, 0xe7, 0x24, 0x69}} return a, nil } @@ -1015,7 +1017,7 @@ func _1633349838_add_emoji_column_in_chatsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1637329330, 0)} + info := bindataFileInfo{name: "1633349838_add_emoji_column_in_chats.up.sql", size: 52, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcb, 0x33, 0xcb, 0x3b, 0xa9, 0x99, 0x77, 0x6a, 0xea, 0xc4, 0x39, 0xd7, 0xa1, 0x49, 0xa7, 0xdf, 0xff, 0x72, 0xda, 0x34, 0x21, 0x67, 0x66, 0xca, 0x65, 0x46, 0x1, 0xa6, 0x4e, 0xf9, 0x38, 0x86}} return a, nil } @@ -1035,7 +1037,7 @@ func _1634831235_add_highlight_column_in_chatsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1637329330, 0)} + info := bindataFileInfo{name: "1634831235_add_highlight_column_in_chats.up.sql", size: 62, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xaa, 0x63, 0x5c, 0x73, 0x19, 0x83, 0xbd, 0x35, 0x80, 0x9f, 0x66, 0xec, 0x4c, 0xbc, 0x9d, 0x2d, 0x52, 0x91, 0x6d, 0xb3, 0x2b, 0x87, 0xde, 0x24, 0x46, 0x5c, 0xd, 0xfd, 0x78, 0xf5, 0xe3, 0xe9}} return a, nil } @@ -1055,7 +1057,7 @@ func _1634896007_add_last_updated_locally_and_removedUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0644), modTime: time.Unix(1637329330, 0)} + info := bindataFileInfo{name: "1634896007_add_last_updated_locally_and_removed.up.sql", size: 131, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2e, 0xa8, 0x34, 0xe2, 0xc0, 0x62, 0xc8, 0xd6, 0x5a, 0x87, 0xe3, 0x70, 0xe1, 0xc4, 0x16, 0x9c, 0x60, 0x2e, 0x98, 0xf0, 0x91, 0x84, 0xbe, 0xe0, 0xdf, 0x3e, 0x4d, 0x24, 0xc4, 0x6c, 0x40, 0x17}} return a, nil } @@ -1075,7 +1077,7 @@ func _1635840039_add_clock_read_at_column_in_chatsUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0644), modTime: time.Unix(1637329330, 0)} + info := bindataFileInfo{name: "1635840039_add_clock_read_at_column_in_chats.up.sql", size: 245, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x6c, 0xba, 0x3f, 0xba, 0x1a, 0x71, 0xa8, 0x9, 0x19, 0xbe, 0x1e, 0x38, 0x50, 0x30, 0x3a, 0x52, 0x15, 0x29, 0xee, 0x49, 0x19, 0x6f, 0x53, 0xc2, 0xc6, 0x6c, 0xd9, 0x80, 0x7e, 0xb9, 0x58, 0x7a}} return a, nil } @@ -1095,7 +1097,7 @@ func _1637852321_add_received_invitation_admin_column_in_chatsUpSql() (*asset, e return nil, err } - info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1638351408, 0)} + info := bindataFileInfo{name: "1637852321_add_received_invitation_admin_column_in_chats.up.sql", size: 72, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x70, 0x8b, 0x92, 0x56, 0x83, 0x70, 0x7f, 0x6, 0xb2, 0xd, 0x1c, 0x2f, 0xcc, 0x93, 0xc3, 0x85, 0x8c, 0xc2, 0x38, 0x94, 0x7e, 0x88, 0x3f, 0x39, 0x34, 0xf8, 0x90, 0xcf, 0x83, 0x68, 0x3d, 0xe5}} return a, nil } @@ -1115,11 +1117,51 @@ func _1645034601_display_nameUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1647884149, 0)} + info := bindataFileInfo{name: "1645034601_display_name.up.sql", size: 110, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0xfc, 0xda, 0x70, 0x53, 0x19, 0x90, 0x20, 0x4, 0x1c, 0x99, 0x42, 0x53, 0x1a, 0xd6, 0xb8, 0xbb, 0x8a, 0xe8, 0xbe, 0xcc, 0xb7, 0xc, 0x7f, 0x73, 0x50, 0x18, 0xf1, 0x8b, 0x18, 0x54, 0x64}} return a, nil } +var __1645034602_add_mutual_contact_requestUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x90\xc1\x6a\xc3\x30\x10\x44\xef\xfa\x8a\x3d\xda\x90\x3f\xf0\x49\xb6\x05\x35\x55\xa4\x22\x94\xd2\x9c\x84\x50\x17\x23\x52\x3b\xad\x77\x7d\xe8\xdf\x97\xd0\x24\x44\xd0\x94\x9c\x67\xde\xec\xec\x74\x4e\x49\xaf\xc0\xcb\x56\x2b\x48\xc7\x99\x63\xe2\xb0\xe0\xd7\x8a\xc4\x04\x95\x00\xa0\x3c\xce\x79\x1e\xc3\x01\xbf\xe1\x55\xba\xee\x49\x3a\x30\xd6\x83\xd9\x69\xbd\x11\x70\x85\xee\xe9\x27\x3e\xf2\xba\x20\xb4\xda\xb6\x85\xc4\x79\x42\xe2\x38\x7d\xc2\x60\x7c\xa1\xbc\xb8\x61\x2b\xdd\x1e\x9e\xd5\x1e\xaa\x9b\x06\x9b\xdb\x73\xb5\xa8\x1b\x21\xa4\xf6\xca\x95\x0f\x10\xc8\xbe\x87\xce\xea\xdd\xd6\x5c\x81\x09\x89\xe2\x88\x21\xbf\x5f\x6a\x36\x0f\xb3\xe7\x41\x42\xfa\x38\xa6\xc3\xa9\x6c\x89\xae\x84\xcb\x25\xff\x5f\x9e\x38\x32\xfe\xf2\xe2\xbc\xfc\x60\x7a\xf5\x76\xc7\x68\x4d\x19\x5d\xfd\x69\xab\x1b\xf1\x13\x00\x00\xff\xff\xdb\x9e\x87\x1a\xc6\x01\x00\x00") + +func _1645034602_add_mutual_contact_requestUpSqlBytes() ([]byte, error) { + return bindataRead( + __1645034602_add_mutual_contact_requestUpSql, + "1645034602_add_mutual_contact_request.up.sql", + ) +} + +func _1645034602_add_mutual_contact_requestUpSql() (*asset, error) { + bytes, err := _1645034602_add_mutual_contact_requestUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1645034602_add_mutual_contact_request.up.sql", size: 454, mode: os.FileMode(0644), modTime: time.Unix(1653980143, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1a, 0xe0, 0x5d, 0x68, 0xb8, 0x50, 0xa4, 0xbb, 0x3e, 0x4f, 0x2, 0x87, 0xad, 0x87, 0x6e, 0x38, 0xdf, 0xc8, 0x4c, 0xe2, 0x5f, 0xd1, 0x6, 0xdc, 0xe7, 0xbd, 0x4a, 0x9c, 0xf3, 0x91, 0xa1, 0x51}} + return a, nil +} + +var __1650373957_add_contact_request_stateUpSql = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x72\xf4\x09\x71\x0d\x52\x08\x71\x74\xf2\x71\x55\x48\xce\xcf\x2b\x49\x4c\x2e\x29\x56\x70\x74\x71\x51\x70\xf6\xf7\x09\xf5\xf5\x83\x89\xc5\x17\xa5\x16\x96\xa6\x16\x97\xc4\x17\x97\x24\x96\xa4\x2a\x78\xfa\x85\x58\x73\x01\x02\x00\x00\xff\xff\x0c\x1a\x7b\x73\x3b\x00\x00\x00") + +func _1650373957_add_contact_request_stateUpSqlBytes() ([]byte, error) { + return bindataRead( + __1650373957_add_contact_request_stateUpSql, + "1650373957_add_contact_request_state.up.sql", + ) +} + +func _1650373957_add_contact_request_stateUpSql() (*asset, error) { + bytes, err := _1650373957_add_contact_request_stateUpSqlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "1650373957_add_contact_request_state.up.sql", size: 59, mode: os.FileMode(0644), modTime: time.Unix(1653980143, 0)} + a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5e, 0xc1, 0x3f, 0x29, 0xe, 0x19, 0x86, 0x1a, 0x4c, 0x6c, 0x2a, 0x90, 0x9d, 0xdf, 0xb1, 0xb, 0x72, 0x25, 0xcd, 0x6c, 0x5f, 0xd, 0x51, 0x9e, 0x85, 0xc0, 0x9, 0xb7, 0xbc, 0x87, 0x23, 0xec}} + return a, nil +} + var _readmeMd = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\xc1\xce\xd3\x30\x10\x84\xef\x7e\x8a\x91\x7a\x01\xa9\x2a\x8f\xc0\x0d\x71\x82\x03\x48\x1c\xc9\x36\x9e\x36\x96\x1c\x6f\xf0\xae\x93\xe6\xed\x91\xa3\xc2\xdf\xff\x66\xed\xd8\x33\xdf\x78\x4f\xa7\x13\xbe\xea\x06\x57\x6c\x35\x39\x31\xa7\x7b\x15\x4f\x5a\xec\x73\x08\xbf\x08\x2d\x79\x7f\x4a\x43\x5b\x86\x17\xfd\x8c\x21\xea\x56\x5e\x47\x90\x4a\x14\x75\x48\xde\x64\x37\x2c\x6a\x96\xae\x99\x48\x05\xf6\x27\x77\x13\xad\x08\xae\x8a\x51\xe7\x25\xf3\xf1\xa9\x9f\xf9\x58\x58\x2c\xad\xbc\xe0\x8b\x56\xf0\x21\x5d\xeb\x4c\x95\xb3\xae\x84\x60\xd4\xdc\xe6\x82\x5d\x1b\x36\x6d\x39\x62\x92\xf5\xb8\x11\xdb\x92\xd3\x28\xce\xe0\x13\xe1\x72\xcd\x3c\x63\xd4\x65\x87\xae\xac\xe8\xc3\x28\x2e\x67\x44\x66\x3a\x21\x25\xa2\x72\xac\x14\x67\xbc\x84\x9f\x53\x32\x8c\x52\x70\x25\x56\xd6\xfd\x8d\x05\x37\xad\x30\x9d\x9f\xa6\x86\x0f\xcd\x58\x7f\xcf\x34\x93\x3b\xed\x90\x9f\xa4\x1f\xcf\x30\x85\x4d\x07\x58\xaf\x7f\x25\xc4\x9d\xf3\x72\x64\x84\xd0\x7f\xf9\x9b\x3a\x2d\x84\xef\x85\x48\x66\x8d\xd8\x88\x9b\x8c\x8c\x98\x5b\xf6\x74\x14\x4e\x33\x0d\xc9\xe0\x93\x38\xda\x12\xc5\x69\xbd\xe4\xf0\x2e\x7a\x78\x07\x1c\xfe\x13\x9f\x91\x29\x31\x95\x7b\x7f\x62\x59\x37\xb4\xe5\x5e\x25\xfe\x33\xee\xd5\x53\x71\xd6\xda\x3a\xd8\xcb\xde\x2e\xf8\xa1\x90\x55\x53\x0c\xc7\xaa\x0d\xe9\x76\x14\x29\x1c\x7b\x68\xdd\x2f\xe1\x6f\x00\x00\x00\xff\xff\x3c\x0a\xc2\xfe\x2a\x02\x00\x00") func readmeMdBytes() ([]byte, error) { @@ -1135,7 +1177,7 @@ func readmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0644), modTime: time.Unix(1610470168, 0)} + info := bindataFileInfo{name: "README.md", size: 554, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x1c, 0x6e, 0xfb, 0xcc, 0x81, 0x94, 0x4d, 0x8c, 0xa0, 0x3b, 0x5, 0xb0, 0x18, 0xd6, 0xbb, 0xb3, 0x79, 0xc8, 0x8f, 0xff, 0xc1, 0x10, 0xf9, 0xf, 0x20, 0x1b, 0x4a, 0x74, 0x96, 0x42, 0xd7, 0xa8}} return a, nil } @@ -1155,7 +1197,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0644), modTime: time.Unix(1588169971, 0)} + info := bindataFileInfo{name: "doc.go", size: 850, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa0, 0xcc, 0x41, 0xe1, 0x61, 0x12, 0x97, 0xe, 0x36, 0x8c, 0xa7, 0x9e, 0xe0, 0x6e, 0x59, 0x9e, 0xee, 0xd5, 0x4a, 0xcf, 0x1e, 0x60, 0xd6, 0xc3, 0x3a, 0xc9, 0x6c, 0xf2, 0x86, 0x5a, 0xb4, 0x1e}} return a, nil } @@ -1351,6 +1393,10 @@ var _bindata = map[string]func() (*asset, error){ "1645034601_display_name.up.sql": _1645034601_display_nameUpSql, + "1645034602_add_mutual_contact_request.up.sql": _1645034602_add_mutual_contact_requestUpSql, + + "1650373957_add_contact_request_state.up.sql": _1650373957_add_contact_request_stateUpSql, + "README.md": readmeMd, "doc.go": docGo, @@ -1447,8 +1493,10 @@ var _bintree = &bintree{nil, map[string]*bintree{ "1635840039_add_clock_read_at_column_in_chats.up.sql": &bintree{_1635840039_add_clock_read_at_column_in_chatsUpSql, map[string]*bintree{}}, "1637852321_add_received_invitation_admin_column_in_chats.up.sql": &bintree{_1637852321_add_received_invitation_admin_column_in_chatsUpSql, map[string]*bintree{}}, "1645034601_display_name.up.sql": &bintree{_1645034601_display_nameUpSql, map[string]*bintree{}}, - "README.md": &bintree{readmeMd, map[string]*bintree{}}, - "doc.go": &bintree{docGo, map[string]*bintree{}}, + "1645034602_add_mutual_contact_request.up.sql": &bintree{_1645034602_add_mutual_contact_requestUpSql, map[string]*bintree{}}, + "1650373957_add_contact_request_state.up.sql": &bintree{_1650373957_add_contact_request_stateUpSql, map[string]*bintree{}}, + "README.md": &bintree{readmeMd, map[string]*bintree{}}, + "doc.go": &bintree{docGo, map[string]*bintree{}}, }} // RestoreAsset restores an asset under the given directory. diff --git a/protocol/migrations/sqlite/1645034602_add_mutual_contact_request.up.sql b/protocol/migrations/sqlite/1645034602_add_mutual_contact_request.up.sql new file mode 100644 index 000000000..01b734fb1 --- /dev/null +++ b/protocol/migrations/sqlite/1645034602_add_mutual_contact_request.up.sql @@ -0,0 +1,13 @@ +CREATE TABLE contact_requests ( + signing_key VARCHAR NOT NULL, + contact_key VARCHAR NOT NULL, + signature BLOB NOT NULL, + timestamp INT NOT NULL, + PRIMARY KEY (signing_key, contact_key) +); + +ALTER TABLE contacts ADD COLUMN contact_message_id VARCHAR; +ALTER TABLE contacts ADD COLUMN contact_request_clock INT; +ALTER TABLE user_messages ADD COLUMN contact_request_state INT; + +CREATE INDEX contact_request_state ON user_messages(contact_request_state); diff --git a/protocol/migrations/sqlite/1650373957_add_contact_request_state.up.sql b/protocol/migrations/sqlite/1650373957_add_contact_request_state.up.sql new file mode 100644 index 000000000..3d2fd10e7 --- /dev/null +++ b/protocol/migrations/sqlite/1650373957_add_contact_request_state.up.sql @@ -0,0 +1 @@ +ALTER TABLE contacts ADD COLUMN contact_request_state INT; diff --git a/protocol/persistence.go b/protocol/persistence.go index 5c74df5a8..6fb700810 100644 --- a/protocol/persistence.go +++ b/protocol/persistence.go @@ -491,6 +491,8 @@ func (db sqlitePersistence) Contacts() ([]*Contact, error) { c.removed, c.has_added_us, c.local_nickname, + c.contact_request_state, + c.contact_request_clock, i.image_type, i.payload FROM contacts c @@ -505,18 +507,20 @@ func (db sqlitePersistence) Contacts() ([]*Contact, error) { for rows.Next() { var ( - contact Contact - nickname sql.NullString - displayName sql.NullString - imageType sql.NullString - ensName sql.NullString - ensVerified sql.NullBool - added sql.NullBool - blocked sql.NullBool - removed sql.NullBool - hasAddedUs sql.NullBool - lastUpdatedLocally sql.NullInt64 - imagePayload []byte + contact Contact + nickname sql.NullString + contactRequestState sql.NullInt64 + contactRequestClock sql.NullInt64 + displayName sql.NullString + imageType sql.NullString + ensName sql.NullString + ensVerified sql.NullBool + added sql.NullBool + blocked sql.NullBool + removed sql.NullBool + hasAddedUs sql.NullBool + lastUpdatedLocally sql.NullInt64 + imagePayload []byte ) contact.Images = make(map[string]images.IdentityImage) @@ -536,6 +540,8 @@ func (db sqlitePersistence) Contacts() ([]*Contact, error) { &removed, &hasAddedUs, &nickname, + &contactRequestState, + &contactRequestClock, &imageType, &imagePayload, ) @@ -547,6 +553,14 @@ func (db sqlitePersistence) Contacts() ([]*Contact, error) { contact.LocalNickname = nickname.String } + if contactRequestState.Valid { + contact.ContactRequestState = ContactRequestState(contactRequestState.Int64) + } + + if contactRequestClock.Valid { + contact.ContactRequestClock = uint64(contactRequestClock.Int64) + } + if displayName.Valid { contact.DisplayName = displayName.String } @@ -722,6 +736,8 @@ func (db sqlitePersistence) SaveContact(contact *Contact, tx *sql.Tx) (err error last_updated, last_updated_locally, local_nickname, + contact_request_state, + contact_request_clock, added, blocked, removed, @@ -729,7 +745,7 @@ func (db sqlitePersistence) SaveContact(contact *Contact, tx *sql.Tx) (err error name, photo, tribute_to_talk - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `) if err != nil { return @@ -745,6 +761,8 @@ func (db sqlitePersistence) SaveContact(contact *Contact, tx *sql.Tx) (err error contact.LastUpdated, contact.LastUpdatedLocally, contact.LocalNickname, + contact.ContactRequestState, + contact.ContactRequestClock, contact.Added, contact.Blocked, contact.Removed, diff --git a/protocol/protobuf/application_metadata_message.pb.go b/protocol/protobuf/application_metadata_message.pb.go index 78eef7105..f1d6dcd5f 100644 --- a/protocol/protobuf/application_metadata_message.pb.go +++ b/protocol/protobuf/application_metadata_message.pb.go @@ -69,6 +69,8 @@ const ( ApplicationMetadataMessage_COMMUNITY_ARCHIVE_MAGNETLINK ApplicationMetadataMessage_Type = 43 ApplicationMetadataMessage_SYNC_PROFILE_PICTURE ApplicationMetadataMessage_Type = 44 ApplicationMetadataMessage_SYNC_WALLET_ACCOUNT ApplicationMetadataMessage_Type = 45 + ApplicationMetadataMessage_ACCEPT_CONTACT_REQUEST ApplicationMetadataMessage_Type = 46 + ApplicationMetadataMessage_RETRACT_CONTACT_REQUEST ApplicationMetadataMessage_Type = 47 ) var ApplicationMetadataMessage_Type_name = map[int32]string{ @@ -118,6 +120,8 @@ var ApplicationMetadataMessage_Type_name = map[int32]string{ 43: "COMMUNITY_ARCHIVE_MAGNETLINK", 44: "SYNC_PROFILE_PICTURE", 45: "SYNC_WALLET_ACCOUNT", + 46: "ACCEPT_CONTACT_REQUEST", + 47: "RETRACT_CONTACT_REQUEST", } var ApplicationMetadataMessage_Type_value = map[string]int32{ @@ -167,6 +171,8 @@ var ApplicationMetadataMessage_Type_value = map[string]int32{ "COMMUNITY_ARCHIVE_MAGNETLINK": 43, "SYNC_PROFILE_PICTURE": 44, "SYNC_WALLET_ACCOUNT": 45, + "ACCEPT_CONTACT_REQUEST": 46, + "RETRACT_CONTACT_REQUEST": 47, } func (x ApplicationMetadataMessage_Type) String() string { @@ -245,53 +251,54 @@ func init() { } var fileDescriptor_ad09a6406fcf24c7 = []byte{ - // 762 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0xdf, 0x73, 0x13, 0x37, - 0x10, 0xae, 0x21, 0x4d, 0xc8, 0x3a, 0x09, 0x8a, 0xc8, 0x0f, 0xc7, 0xf9, 0x65, 0x0c, 0x85, 0x00, - 0xad, 0x3b, 0xd3, 0x3e, 0x76, 0xfa, 0x20, 0x4b, 0x1b, 0x5b, 0xf8, 0x4e, 0x3a, 0x24, 0x9d, 0x19, - 0xf7, 0x45, 0x73, 0x14, 0x97, 0xc9, 0x0c, 0x60, 0x0f, 0x31, 0x0f, 0xf9, 0x3b, 0xfa, 0xf7, 0x76, - 0xa6, 0xa3, 0x3b, 0xdb, 0x67, 0x12, 0x87, 0x3c, 0xd9, 0xda, 0xef, 0x5b, 0xad, 0xf6, 0xdb, 0xfd, - 0x0e, 0x9a, 0xd9, 0x78, 0xfc, 0xf1, 0xe2, 0xef, 0x6c, 0x72, 0x31, 0xfa, 0xec, 0x3f, 0x0d, 0x27, - 0xd9, 0xfb, 0x6c, 0x92, 0xf9, 0x4f, 0xc3, 0xcb, 0xcb, 0xec, 0xc3, 0xb0, 0x35, 0xfe, 0x32, 0x9a, - 0x8c, 0xe8, 0x83, 0xfc, 0xe7, 0xdd, 0xd7, 0x7f, 0x9a, 0xff, 0x56, 0xa1, 0xce, 0xca, 0x84, 0x78, - 0xca, 0x8f, 0x0b, 0x3a, 0x3d, 0x82, 0xf5, 0xcb, 0x8b, 0x0f, 0x9f, 0xb3, 0xc9, 0xd7, 0x2f, 0xc3, - 0x5a, 0xa5, 0x51, 0x39, 0xdb, 0x30, 0x65, 0x80, 0xd6, 0x60, 0x6d, 0x9c, 0x5d, 0x7d, 0x1c, 0x65, - 0xef, 0x6b, 0xf7, 0x72, 0x6c, 0x76, 0xa4, 0x7f, 0xc2, 0xca, 0xe4, 0x6a, 0x3c, 0xac, 0xdd, 0x6f, - 0x54, 0xce, 0xb6, 0x7e, 0x7b, 0xd1, 0x9a, 0xd5, 0x6b, 0xdd, 0x5e, 0xab, 0xe5, 0xae, 0xc6, 0x43, - 0x93, 0xa7, 0x35, 0xff, 0x5b, 0x87, 0x95, 0x70, 0xa4, 0x55, 0x58, 0x4b, 0x55, 0x4f, 0xe9, 0xb7, - 0x8a, 0xfc, 0x40, 0x09, 0x6c, 0xf0, 0x2e, 0x73, 0x3e, 0x46, 0x6b, 0x59, 0x07, 0x49, 0x85, 0x52, - 0xd8, 0xe2, 0x5a, 0x39, 0xc6, 0x9d, 0x4f, 0x13, 0xc1, 0x1c, 0x92, 0x7b, 0xf4, 0x18, 0x0e, 0x62, - 0x8c, 0xdb, 0x68, 0x6c, 0x57, 0x26, 0xd3, 0xf0, 0x3c, 0xe5, 0x3e, 0xdd, 0x85, 0xed, 0x84, 0x49, - 0xe3, 0xa5, 0xb2, 0x8e, 0x45, 0x11, 0x73, 0x52, 0x2b, 0xb2, 0x12, 0xc2, 0x76, 0xa0, 0xf8, 0xb7, - 0xe1, 0x1f, 0xe9, 0x13, 0x38, 0x35, 0xf8, 0x26, 0x45, 0xeb, 0x3c, 0x13, 0xc2, 0xa0, 0xb5, 0xfe, - 0x5c, 0x1b, 0xef, 0x0c, 0x53, 0x96, 0xf1, 0x9c, 0xb4, 0x4a, 0x5f, 0xc2, 0x33, 0xc6, 0x39, 0x26, - 0xce, 0xdf, 0xc5, 0x5d, 0xa3, 0xaf, 0xe0, 0xb9, 0x40, 0x1e, 0x49, 0x85, 0x77, 0x92, 0x1f, 0xd0, - 0x7d, 0x78, 0x34, 0x23, 0x2d, 0x02, 0xeb, 0x74, 0x07, 0x88, 0x45, 0x25, 0xbe, 0x89, 0x02, 0x3d, - 0x85, 0xc3, 0xeb, 0x77, 0x2f, 0x12, 0xaa, 0x41, 0x9a, 0x1b, 0x4d, 0xfa, 0xa9, 0x80, 0x64, 0x63, - 0x39, 0xcc, 0x38, 0xd7, 0xa9, 0x72, 0x64, 0x93, 0x3e, 0x86, 0xe3, 0x9b, 0x70, 0x92, 0xb6, 0x23, - 0xc9, 0x7d, 0x98, 0x0b, 0xd9, 0xa2, 0x27, 0x50, 0x9f, 0xcd, 0x83, 0x6b, 0x81, 0x9e, 0x89, 0x3e, - 0x1a, 0x27, 0x2d, 0xc6, 0xa8, 0x1c, 0x79, 0x48, 0x9b, 0x70, 0x92, 0xa4, 0xb6, 0xeb, 0x95, 0x76, - 0xf2, 0x5c, 0xf2, 0xe2, 0x0a, 0x83, 0x1d, 0x69, 0x9d, 0x29, 0x24, 0x27, 0x41, 0xa1, 0xef, 0x73, - 0xbc, 0x41, 0x9b, 0x68, 0x65, 0x91, 0x6c, 0xd3, 0x43, 0xd8, 0xbf, 0x49, 0x7e, 0x93, 0xa2, 0x19, - 0x10, 0x4a, 0x9f, 0x42, 0xe3, 0x16, 0xb0, 0xbc, 0xe2, 0x51, 0xe8, 0x7a, 0x59, 0xbd, 0x5c, 0x3f, - 0xb2, 0x13, 0x5a, 0x5a, 0x06, 0x4f, 0xd3, 0x77, 0xc3, 0x0a, 0x62, 0xac, 0x5f, 0x4b, 0x6f, 0x70, - 0xaa, 0xf3, 0x1e, 0x3d, 0x80, 0xdd, 0x8e, 0xd1, 0x69, 0x92, 0xcb, 0xe2, 0xa5, 0xea, 0x4b, 0x57, - 0x74, 0xb7, 0x4f, 0xb7, 0x61, 0xb3, 0x08, 0x0a, 0x54, 0x4e, 0xba, 0x01, 0xa9, 0x05, 0x36, 0xd7, - 0x71, 0x9c, 0x2a, 0xe9, 0x06, 0x5e, 0xa0, 0xe5, 0x46, 0x26, 0x39, 0xfb, 0x80, 0xd6, 0x60, 0xa7, - 0x84, 0x16, 0xee, 0xa9, 0x87, 0x57, 0x97, 0xc8, 0x7c, 0xda, 0xda, 0xbf, 0xd6, 0x52, 0x91, 0x43, - 0xfa, 0x10, 0xaa, 0x89, 0x54, 0xf3, 0xb5, 0x3f, 0x0a, 0xde, 0x41, 0x21, 0x4b, 0xef, 0x1c, 0x87, - 0x97, 0x58, 0xc7, 0x5c, 0x6a, 0x67, 0xd6, 0x39, 0x09, 0xbd, 0x08, 0x8c, 0x70, 0xc1, 0x2f, 0xa7, - 0x61, 0xa9, 0x96, 0xed, 0xcc, 0xb4, 0x34, 0x69, 0xd0, 0x3a, 0xec, 0x31, 0xa5, 0xd5, 0x20, 0xd6, - 0xa9, 0xf5, 0x31, 0x3a, 0x23, 0xb9, 0x6f, 0x33, 0xc7, 0xbb, 0xe4, 0xf1, 0xdc, 0x55, 0x79, 0xcb, - 0x06, 0x63, 0xdd, 0x47, 0x41, 0x9a, 0x61, 0x6a, 0x65, 0x78, 0x5a, 0xca, 0x06, 0x01, 0x05, 0x79, - 0x42, 0x01, 0x56, 0xdb, 0x8c, 0xf7, 0xd2, 0x84, 0x3c, 0x9d, 0x6f, 0x64, 0x50, 0xb6, 0x1f, 0x3a, - 0xe5, 0xa8, 0x1c, 0x9a, 0x82, 0xfa, 0xd3, 0x7c, 0x23, 0xaf, 0xc3, 0x85, 0x1b, 0x51, 0x90, 0x67, - 0x61, 0xe3, 0x96, 0x52, 0x84, 0xb4, 0xb1, 0xb4, 0x16, 0x05, 0x79, 0x9e, 0x2b, 0x11, 0x38, 0x6d, - 0xad, 0x7b, 0x31, 0x33, 0x3d, 0x72, 0x46, 0xf7, 0x80, 0x16, 0x2f, 0x8c, 0x90, 0x19, 0xdf, 0x95, - 0xd6, 0x69, 0x33, 0x20, 0x2f, 0x82, 0x8c, 0x79, 0xdc, 0xa2, 0x73, 0x52, 0x75, 0xc8, 0x4b, 0xda, - 0x80, 0xa3, 0x72, 0x10, 0xcc, 0xf0, 0xae, 0xec, 0xa3, 0x8f, 0x59, 0x47, 0xa1, 0x8b, 0xa4, 0xea, - 0x91, 0x57, 0x61, 0x88, 0x79, 0x4e, 0x62, 0xf4, 0xb9, 0x8c, 0xd0, 0x27, 0x92, 0xbb, 0xd4, 0x20, - 0xf9, 0x39, 0xf8, 0x3b, 0x47, 0xde, 0xb2, 0x28, 0x42, 0x37, 0xb7, 0xda, 0x2f, 0xed, 0xcd, 0xbf, - 0xaa, 0xad, 0x5f, 0xff, 0x98, 0x7d, 0x34, 0xdf, 0xad, 0xe6, 0xff, 0x7e, 0xff, 0x3f, 0x00, 0x00, - 0xff, 0xff, 0x02, 0xb0, 0xf0, 0x03, 0xdb, 0x05, 0x00, 0x00, + // 782 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x5d, 0x73, 0x13, 0x37, + 0x14, 0x6d, 0x20, 0x4d, 0xe0, 0x3a, 0x09, 0x8a, 0xc8, 0x87, 0xe3, 0x7c, 0x19, 0x43, 0x21, 0x40, + 0x6b, 0x66, 0xda, 0xc7, 0x4e, 0x1f, 0x64, 0xe9, 0xc6, 0x16, 0xde, 0x95, 0x16, 0x49, 0x6b, 0xc6, + 0x7d, 0xd1, 0x2c, 0xc5, 0x65, 0x32, 0x03, 0xd8, 0x43, 0xcc, 0x43, 0xfe, 0x58, 0x7f, 0x45, 0x7f, + 0x54, 0x47, 0xbb, 0x5e, 0xaf, 0x43, 0x4c, 0xf3, 0x64, 0xef, 0x3d, 0xe7, 0xea, 0xea, 0x9e, 0x7b, + 0x8f, 0xa0, 0x95, 0x4d, 0x26, 0x1f, 0x2f, 0xfe, 0xca, 0xa6, 0x17, 0xe3, 0xcf, 0xfe, 0xd3, 0x68, + 0x9a, 0xbd, 0xcf, 0xa6, 0x99, 0xff, 0x34, 0xba, 0xbc, 0xcc, 0x3e, 0x8c, 0xda, 0x93, 0x2f, 0xe3, + 0xe9, 0x98, 0xde, 0xcb, 0x7f, 0xde, 0x7d, 0xfd, 0xbb, 0xf5, 0x6f, 0x0d, 0x1a, 0xac, 0x4a, 0x88, + 0x67, 0xfc, 0xb8, 0xa0, 0xd3, 0x23, 0xb8, 0x7f, 0x79, 0xf1, 0xe1, 0x73, 0x36, 0xfd, 0xfa, 0x65, + 0x54, 0x5f, 0x69, 0xae, 0x9c, 0x6d, 0x98, 0x2a, 0x40, 0xeb, 0xb0, 0x3e, 0xc9, 0xae, 0x3e, 0x8e, + 0xb3, 0xf7, 0xf5, 0x3b, 0x39, 0x56, 0x7e, 0xd2, 0x3f, 0x60, 0x75, 0x7a, 0x35, 0x19, 0xd5, 0xef, + 0x36, 0x57, 0xce, 0xb6, 0x7e, 0x7d, 0xde, 0x2e, 0xeb, 0xb5, 0xbf, 0x5f, 0xab, 0xed, 0xae, 0x26, + 0x23, 0x93, 0xa7, 0xb5, 0xfe, 0x01, 0x58, 0x0d, 0x9f, 0xb4, 0x06, 0xeb, 0xa9, 0xea, 0x2b, 0xfd, + 0x56, 0x91, 0x1f, 0x28, 0x81, 0x0d, 0xde, 0x63, 0xce, 0xc7, 0x68, 0x2d, 0xeb, 0x22, 0x59, 0xa1, + 0x14, 0xb6, 0xb8, 0x56, 0x8e, 0x71, 0xe7, 0xd3, 0x44, 0x30, 0x87, 0xe4, 0x0e, 0x3d, 0x86, 0x83, + 0x18, 0xe3, 0x0e, 0x1a, 0xdb, 0x93, 0xc9, 0x2c, 0x3c, 0x4f, 0xb9, 0x4b, 0x77, 0x61, 0x3b, 0x61, + 0xd2, 0x78, 0xa9, 0xac, 0x63, 0x51, 0xc4, 0x9c, 0xd4, 0x8a, 0xac, 0x86, 0xb0, 0x1d, 0x2a, 0x7e, + 0x3d, 0xfc, 0x23, 0x7d, 0x0c, 0xa7, 0x06, 0xdf, 0xa4, 0x68, 0x9d, 0x67, 0x42, 0x18, 0xb4, 0xd6, + 0x9f, 0x6b, 0xe3, 0x9d, 0x61, 0xca, 0x32, 0x9e, 0x93, 0xd6, 0xe8, 0x0b, 0x78, 0xca, 0x38, 0xc7, + 0xc4, 0xf9, 0xdb, 0xb8, 0xeb, 0xf4, 0x25, 0x3c, 0x13, 0xc8, 0x23, 0xa9, 0xf0, 0x56, 0xf2, 0x3d, + 0xba, 0x0f, 0x0f, 0x4b, 0xd2, 0x22, 0x70, 0x9f, 0xee, 0x00, 0xb1, 0xa8, 0xc4, 0xb5, 0x28, 0xd0, + 0x53, 0x38, 0xfc, 0xf6, 0xec, 0x45, 0x42, 0x2d, 0x48, 0x73, 0xa3, 0x49, 0x3f, 0x13, 0x90, 0x6c, + 0x2c, 0x87, 0x19, 0xe7, 0x3a, 0x55, 0x8e, 0x6c, 0xd2, 0x47, 0x70, 0x7c, 0x13, 0x4e, 0xd2, 0x4e, + 0x24, 0xb9, 0x0f, 0x73, 0x21, 0x5b, 0xf4, 0x04, 0x1a, 0xe5, 0x3c, 0xb8, 0x16, 0xe8, 0x99, 0x18, + 0xa0, 0x71, 0xd2, 0x62, 0x8c, 0xca, 0x91, 0x07, 0xb4, 0x05, 0x27, 0x49, 0x6a, 0x7b, 0x5e, 0x69, + 0x27, 0xcf, 0x25, 0x2f, 0x8e, 0x30, 0xd8, 0x95, 0xd6, 0x99, 0x42, 0x72, 0x12, 0x14, 0xfa, 0x7f, + 0x8e, 0x37, 0x68, 0x13, 0xad, 0x2c, 0x92, 0x6d, 0x7a, 0x08, 0xfb, 0x37, 0xc9, 0x6f, 0x52, 0x34, + 0x43, 0x42, 0xe9, 0x13, 0x68, 0x7e, 0x07, 0xac, 0x8e, 0x78, 0x18, 0xba, 0x5e, 0x56, 0x2f, 0xd7, + 0x8f, 0xec, 0x84, 0x96, 0x96, 0xc1, 0xb3, 0xf4, 0xdd, 0xb0, 0x82, 0x18, 0xeb, 0xd7, 0xd2, 0x1b, + 0x9c, 0xe9, 0xbc, 0x47, 0x0f, 0x60, 0xb7, 0x6b, 0x74, 0x9a, 0xe4, 0xb2, 0x78, 0xa9, 0x06, 0xd2, + 0x15, 0xdd, 0xed, 0xd3, 0x6d, 0xd8, 0x2c, 0x82, 0x02, 0x95, 0x93, 0x6e, 0x48, 0xea, 0x81, 0xcd, + 0x75, 0x1c, 0xa7, 0x4a, 0xba, 0xa1, 0x17, 0x68, 0xb9, 0x91, 0x49, 0xce, 0x3e, 0xa0, 0x75, 0xd8, + 0xa9, 0xa0, 0x85, 0x73, 0x1a, 0xe1, 0xd6, 0x15, 0x32, 0x9f, 0xb6, 0xf6, 0xaf, 0xb5, 0x54, 0xe4, + 0x90, 0x3e, 0x80, 0x5a, 0x22, 0xd5, 0x7c, 0xed, 0x8f, 0x82, 0x77, 0x50, 0xc8, 0xca, 0x3b, 0xc7, + 0xe1, 0x26, 0xd6, 0x31, 0x97, 0xda, 0xd2, 0x3a, 0x27, 0xa1, 0x17, 0x81, 0x11, 0x2e, 0xf8, 0xe5, + 0x34, 0x2c, 0xd5, 0xb2, 0x9d, 0x99, 0x95, 0x26, 0x4d, 0xda, 0x80, 0x3d, 0xa6, 0xb4, 0x1a, 0xc6, + 0x3a, 0xb5, 0x3e, 0x46, 0x67, 0x24, 0xf7, 0x1d, 0xe6, 0x78, 0x8f, 0x3c, 0x9a, 0xbb, 0x2a, 0x6f, + 0xd9, 0x60, 0xac, 0x07, 0x28, 0x48, 0x2b, 0x4c, 0xad, 0x0a, 0xcf, 0x4a, 0xd9, 0x20, 0xa0, 0x20, + 0x8f, 0x29, 0xc0, 0x5a, 0x87, 0xf1, 0x7e, 0x9a, 0x90, 0x27, 0xf3, 0x8d, 0x0c, 0xca, 0x0e, 0x42, + 0xa7, 0x1c, 0x95, 0x43, 0x53, 0x50, 0x7f, 0x9a, 0x6f, 0xe4, 0xb7, 0x70, 0xe1, 0x46, 0x14, 0xe4, + 0x69, 0xd8, 0xb8, 0xa5, 0x14, 0x21, 0x6d, 0x2c, 0xad, 0x45, 0x41, 0x9e, 0xe5, 0x4a, 0x04, 0x4e, + 0x47, 0xeb, 0x7e, 0xcc, 0x4c, 0x9f, 0x9c, 0xd1, 0x3d, 0xa0, 0xc5, 0x0d, 0x23, 0x64, 0xc6, 0xf7, + 0xa4, 0x75, 0xda, 0x0c, 0xc9, 0xf3, 0x20, 0x63, 0x1e, 0xb7, 0xe8, 0x9c, 0x54, 0x5d, 0xf2, 0x82, + 0x36, 0xe1, 0xa8, 0x1a, 0x04, 0x33, 0xbc, 0x27, 0x07, 0xe8, 0x63, 0xd6, 0x55, 0xe8, 0x22, 0xa9, + 0xfa, 0xe4, 0x65, 0x18, 0x62, 0x9e, 0x93, 0x18, 0x7d, 0x2e, 0x23, 0xf4, 0x89, 0xe4, 0x2e, 0x35, + 0x48, 0x7e, 0x0e, 0xfe, 0xce, 0x91, 0xb7, 0x2c, 0x8a, 0xd0, 0xcd, 0xad, 0xf6, 0x4b, 0xae, 0x69, + 0xf1, 0xa2, 0x94, 0x76, 0x2a, 0x17, 0xb2, 0x1d, 0xc4, 0x33, 0xe8, 0x4c, 0xe1, 0xb1, 0xeb, 0xe0, + 0xab, 0xce, 0xe6, 0x9f, 0xb5, 0xf6, 0xab, 0xdf, 0xcb, 0xd7, 0xf6, 0xdd, 0x5a, 0xfe, 0xef, 0xb7, + 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x8d, 0x5a, 0x84, 0x17, 0x14, 0x06, 0x00, 0x00, } diff --git a/protocol/protobuf/application_metadata_message.proto b/protocol/protobuf/application_metadata_message.proto index 0e81a404c..f6f4a833c 100644 --- a/protocol/protobuf/application_metadata_message.proto +++ b/protocol/protobuf/application_metadata_message.proto @@ -59,5 +59,7 @@ message ApplicationMetadataMessage { COMMUNITY_ARCHIVE_MAGNETLINK = 43; SYNC_PROFILE_PICTURE = 44; SYNC_WALLET_ACCOUNT = 45; + ACCEPT_CONTACT_REQUEST = 46; + RETRACT_CONTACT_REQUEST = 47; } } diff --git a/protocol/protobuf/chat_message.pb.go b/protocol/protobuf/chat_message.pb.go index 5d9b22cb6..3964d4522 100644 --- a/protocol/protobuf/chat_message.pb.go +++ b/protocol/protobuf/chat_message.pb.go @@ -64,6 +64,7 @@ const ( ChatMessage_COMMUNITY ChatMessage_ContentType = 9 // Only local ChatMessage_SYSTEM_MESSAGE_GAP ChatMessage_ContentType = 10 + ChatMessage_CONTACT_REQUEST ChatMessage_ContentType = 11 ) var ChatMessage_ContentType_name = map[int32]string{ @@ -78,6 +79,7 @@ var ChatMessage_ContentType_name = map[int32]string{ 8: "AUDIO", 9: "COMMUNITY", 10: "SYSTEM_MESSAGE_GAP", + 11: "CONTACT_REQUEST", } var ChatMessage_ContentType_value = map[string]int32{ @@ -92,6 +94,7 @@ var ChatMessage_ContentType_value = map[string]int32{ "AUDIO": 8, "COMMUNITY": 9, "SYSTEM_MESSAGE_GAP": 10, + "CONTACT_REQUEST": 11, } func (x ChatMessage_ContentType) String() string { @@ -436,10 +439,13 @@ type ChatMessage struct { // Grant for community chat messages Grant []byte `protobuf:"bytes,13,opt,name=grant,proto3" json:"grant,omitempty"` // Message author's display name, introduced in version 1 - DisplayName string `protobuf:"bytes,14,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + DisplayName string `protobuf:"bytes,14,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + SentContactRequestSignature *ContactRequestSignature `protobuf:"bytes,15,opt,name=sent_contact_request_signature,json=sentContactRequestSignature,proto3" json:"sent_contact_request_signature,omitempty"` + ReceivedContactRequestSignature *ContactRequestSignature `protobuf:"bytes,16,opt,name=received_contact_request_signature,json=receivedContactRequestSignature,proto3" json:"received_contact_request_signature,omitempty"` + ContactMessage bool `protobuf:"varint,17,opt,name=contact_message,json=contactMessage,proto3" json:"contact_message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ChatMessage) Reset() { *m = ChatMessage{} } @@ -600,6 +606,27 @@ func (m *ChatMessage) GetDisplayName() string { return "" } +func (m *ChatMessage) GetSentContactRequestSignature() *ContactRequestSignature { + if m != nil { + return m.SentContactRequestSignature + } + return nil +} + +func (m *ChatMessage) GetReceivedContactRequestSignature() *ContactRequestSignature { + if m != nil { + return m.ReceivedContactRequestSignature + } + return nil +} + +func (m *ChatMessage) GetContactMessage() bool { + if m != nil { + return m.ContactMessage + } + return false +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*ChatMessage) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -610,6 +637,53 @@ func (*ChatMessage) XXX_OneofWrappers() []interface{} { } } +type ContactRequestSignature struct { + Signature []byte `protobuf:"bytes,1,opt,name=signature,proto3" json:"signature,omitempty"` + Timestamp uint64 `protobuf:"varint,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ContactRequestSignature) Reset() { *m = ContactRequestSignature{} } +func (m *ContactRequestSignature) String() string { return proto.CompactTextString(m) } +func (*ContactRequestSignature) ProtoMessage() {} +func (*ContactRequestSignature) Descriptor() ([]byte, []int) { + return fileDescriptor_263952f55fd35689, []int{6} +} + +func (m *ContactRequestSignature) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ContactRequestSignature.Unmarshal(m, b) +} +func (m *ContactRequestSignature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ContactRequestSignature.Marshal(b, m, deterministic) +} +func (m *ContactRequestSignature) XXX_Merge(src proto.Message) { + xxx_messageInfo_ContactRequestSignature.Merge(m, src) +} +func (m *ContactRequestSignature) XXX_Size() int { + return xxx_messageInfo_ContactRequestSignature.Size(m) +} +func (m *ContactRequestSignature) XXX_DiscardUnknown() { + xxx_messageInfo_ContactRequestSignature.DiscardUnknown(m) +} + +var xxx_messageInfo_ContactRequestSignature proto.InternalMessageInfo + +func (m *ContactRequestSignature) GetSignature() []byte { + if m != nil { + return m.Signature + } + return nil +} + +func (m *ContactRequestSignature) GetTimestamp() uint64 { + if m != nil { + return m.Timestamp + } + return 0 +} + func init() { proto.RegisterEnum("protobuf.AudioMessage_AudioType", AudioMessage_AudioType_name, AudioMessage_AudioType_value) proto.RegisterEnum("protobuf.ChatMessage_ContentType", ChatMessage_ContentType_name, ChatMessage_ContentType_value) @@ -619,6 +693,7 @@ func init() { proto.RegisterType((*EditMessage)(nil), "protobuf.EditMessage") proto.RegisterType((*DeleteMessage)(nil), "protobuf.DeleteMessage") proto.RegisterType((*ChatMessage)(nil), "protobuf.ChatMessage") + proto.RegisterType((*ContactRequestSignature)(nil), "protobuf.ContactRequestSignature") } func init() { @@ -626,51 +701,59 @@ func init() { } var fileDescriptor_263952f55fd35689 = []byte{ - // 734 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x54, 0x4d, 0x6f, 0xc3, 0x44, - 0x10, 0xad, 0x13, 0x27, 0x8e, 0xc7, 0x49, 0x64, 0x6d, 0x4b, 0x6b, 0x10, 0xd0, 0x34, 0x42, 0x22, - 0xa7, 0x20, 0x95, 0x22, 0x55, 0xe2, 0xe4, 0x26, 0x56, 0x6a, 0x8a, 0x9d, 0xb0, 0x76, 0x80, 0x72, - 0xb1, 0x5c, 0x7b, 0x69, 0xac, 0xc6, 0x1f, 0x8a, 0x37, 0x12, 0xb9, 0xf2, 0x7f, 0xb8, 0x72, 0xe5, - 0x87, 0xf0, 0x67, 0xd0, 0xae, 0xe3, 0xd8, 0x8d, 0x44, 0xdb, 0x53, 0x66, 0x26, 0xf3, 0x9e, 0xdf, - 0xbe, 0xd9, 0x59, 0x40, 0xc1, 0xca, 0xa7, 0x5e, 0x4c, 0xf2, 0xdc, 0x7f, 0x26, 0xe3, 0x6c, 0x93, - 0xd2, 0x14, 0x75, 0xf8, 0xcf, 0xd3, 0xf6, 0xf7, 0xcf, 0x14, 0x92, 0x6c, 0xe3, 0xbc, 0x28, 0x0f, - 0x6f, 0xa1, 0xef, 0xd0, 0x28, 0x78, 0x21, 0x1b, 0xab, 0x68, 0x47, 0x08, 0xc4, 0x95, 0x9f, 0xaf, - 0x34, 0x61, 0x20, 0x8c, 0x64, 0xcc, 0x63, 0x56, 0xcb, 0xfc, 0xe0, 0x45, 0x6b, 0x0c, 0x84, 0x51, - 0x0b, 0xf3, 0x78, 0xf8, 0x13, 0x74, 0xcd, 0xd8, 0x7f, 0x26, 0x25, 0x4e, 0x03, 0x29, 0xf3, 0x77, - 0xeb, 0xd4, 0x0f, 0x39, 0xb4, 0x8b, 0xcb, 0x14, 0x7d, 0x0d, 0x22, 0xdd, 0x65, 0x84, 0xa3, 0xfb, - 0xd7, 0xa7, 0xe3, 0x52, 0xc9, 0x98, 0xe3, 0xdd, 0x5d, 0x46, 0x30, 0x6f, 0x18, 0xfe, 0x2d, 0x40, - 0x57, 0xdf, 0x86, 0x51, 0xfa, 0x3e, 0xe7, 0xcd, 0x2b, 0xce, 0x41, 0xc5, 0x59, 0xc7, 0x17, 0x49, - 0xf5, 0x01, 0x74, 0x09, 0x4a, 0xb8, 0xdd, 0xf8, 0x34, 0x4a, 0x13, 0x2f, 0xce, 0xb5, 0xe6, 0x40, - 0x18, 0x89, 0x18, 0xca, 0x92, 0x95, 0x0f, 0xbf, 0x03, 0xf9, 0x80, 0x41, 0xe7, 0x80, 0x96, 0xf6, - 0x83, 0x3d, 0xff, 0xc5, 0xf6, 0xf4, 0xe5, 0xd4, 0x9c, 0x7b, 0xee, 0xe3, 0xc2, 0x50, 0x4f, 0x90, - 0x04, 0x4d, 0x5d, 0x9f, 0xa8, 0x02, 0x0f, 0x2c, 0xac, 0x36, 0x86, 0xff, 0x08, 0xa0, 0x18, 0x61, - 0x44, 0x4b, 0xdd, 0x67, 0xd0, 0x0a, 0xd6, 0x69, 0xf0, 0xc2, 0x55, 0x8b, 0xb8, 0x48, 0x98, 0x8b, - 0x94, 0xfc, 0x41, 0xb9, 0x66, 0x19, 0xf3, 0x18, 0x5d, 0x80, 0xc4, 0x87, 0x15, 0x85, 0x5c, 0x8d, - 0x8c, 0xdb, 0x2c, 0x35, 0x43, 0xf4, 0x05, 0xc0, 0x7e, 0x80, 0xec, 0x3f, 0x91, 0xff, 0x27, 0xef, - 0x2b, 0x66, 0xc8, 0xbe, 0xf0, 0xbc, 0xf1, 0x13, 0xaa, 0xb5, 0xb8, 0x2f, 0x45, 0x82, 0x6e, 0xa1, - 0x5b, 0x82, 0xb8, 0x3b, 0x6d, 0xee, 0xce, 0x27, 0x95, 0x3b, 0x7b, 0x81, 0xdc, 0x12, 0x25, 0xae, - 0x92, 0xe1, 0x5f, 0x02, 0xf4, 0xa6, 0x64, 0x4d, 0x28, 0x79, 0xfb, 0x0c, 0x35, 0xbd, 0x8d, 0x37, - 0xf4, 0x36, 0xff, 0x57, 0xaf, 0xf8, 0x96, 0xde, 0xd6, 0x87, 0xf5, 0xfe, 0xd9, 0x06, 0x65, 0xb2, - 0xf2, 0xdf, 0x71, 0xfc, 0x73, 0x90, 0x69, 0x14, 0x93, 0x9c, 0xfa, 0x71, 0xc6, 0xf5, 0x8a, 0xb8, - 0x2a, 0x1c, 0xe6, 0xd1, 0xac, 0xcd, 0xe3, 0x12, 0x94, 0x0d, 0xc9, 0xb3, 0x34, 0xc9, 0x89, 0x47, - 0xd3, 0xbd, 0xef, 0x50, 0x96, 0xdc, 0x14, 0x7d, 0x0a, 0x1d, 0x92, 0xe4, 0x5e, 0xe2, 0xc7, 0x85, - 0x5c, 0x19, 0x4b, 0x24, 0xc9, 0x6d, 0x3f, 0x26, 0x75, 0x6f, 0xda, 0xaf, 0xbc, 0x39, 0x3e, 0xa6, - 0xf4, 0xd1, 0x63, 0xa2, 0x29, 0x74, 0x83, 0x34, 0xa1, 0x24, 0xa1, 0x05, 0xb2, 0xc3, 0x91, 0x57, - 0x15, 0xb2, 0xe6, 0xc1, 0x78, 0x52, 0x74, 0x16, 0x2c, 0x41, 0x95, 0xa0, 0x1b, 0x90, 0xf2, 0x62, - 0xc9, 0x35, 0x79, 0x20, 0x8c, 0x94, 0x6b, 0xad, 0x22, 0x78, 0xbd, 0xfd, 0xf7, 0x27, 0xb8, 0x6c, - 0x45, 0x63, 0x68, 0x45, 0x6c, 0x41, 0x35, 0xe0, 0x98, 0xf3, 0xa3, 0xbd, 0xad, 0x10, 0x45, 0x1b, - 0xeb, 0xf7, 0xd9, 0xee, 0x68, 0xca, 0x71, 0x7f, 0x7d, 0x27, 0x59, 0x3f, 0x6f, 0x43, 0x5f, 0x82, - 0x1c, 0xa4, 0x71, 0xbc, 0x4d, 0x22, 0xba, 0xd3, 0xba, 0xec, 0x5a, 0xdc, 0x9f, 0xe0, 0xaa, 0x54, - 0x5d, 0x99, 0x5e, 0xfd, 0xca, 0x5c, 0x41, 0x37, 0x8c, 0xf2, 0x6c, 0xed, 0xef, 0x8a, 0x19, 0xf4, - 0xb9, 0xd3, 0xca, 0xbe, 0xc6, 0xe6, 0x30, 0xfc, 0x57, 0x00, 0xa5, 0xe6, 0x05, 0xd2, 0xe0, 0xac, - 0xdc, 0xe3, 0xc9, 0xdc, 0x76, 0x0d, 0xdb, 0x2d, 0x37, 0xb9, 0x0f, 0xe0, 0x1a, 0xbf, 0xba, 0xde, - 0xe2, 0x47, 0xdd, 0xb4, 0x55, 0x01, 0x29, 0x20, 0x39, 0xae, 0x39, 0x79, 0x30, 0xb0, 0xda, 0x40, - 0x00, 0x6d, 0xc7, 0xd5, 0xdd, 0xa5, 0xa3, 0x36, 0x91, 0x0c, 0x2d, 0xc3, 0x9a, 0xff, 0x60, 0xaa, - 0x22, 0xba, 0x80, 0x53, 0x17, 0xeb, 0xb6, 0xa3, 0x4f, 0x5c, 0x73, 0xce, 0x18, 0x2d, 0x4b, 0xb7, - 0xa7, 0x6a, 0x0b, 0x8d, 0xe0, 0x2b, 0xe7, 0xd1, 0x71, 0x0d, 0xcb, 0xb3, 0x0c, 0xc7, 0xd1, 0x67, - 0xc6, 0xe1, 0x6b, 0x0b, 0x6c, 0xfe, 0xac, 0xbb, 0x86, 0x37, 0xc3, 0xf3, 0xe5, 0x42, 0x6d, 0x33, - 0x36, 0xd3, 0xd2, 0x67, 0x86, 0x2a, 0xb1, 0x90, 0xbf, 0x2d, 0x6a, 0x07, 0xf5, 0x40, 0x66, 0x64, - 0x4b, 0xdb, 0x74, 0x1f, 0x55, 0x99, 0xbd, 0x3e, 0x47, 0x74, 0x33, 0x7d, 0xa1, 0xc2, 0x9d, 0x7c, - 0x78, 0x13, 0xef, 0x7a, 0xbf, 0x29, 0xe3, 0x6f, 0xbe, 0x2f, 0x6d, 0x7e, 0x6a, 0xf3, 0xe8, 0xdb, - 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x91, 0x87, 0x42, 0xf9, 0xff, 0x05, 0x00, 0x00, + // 852 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x55, 0xdd, 0x6e, 0xdb, 0x36, + 0x14, 0x8e, 0xe2, 0x5f, 0x1d, 0x39, 0x8e, 0xc6, 0x74, 0x8d, 0xb6, 0x75, 0x8d, 0x2b, 0x0c, 0xa8, + 0xaf, 0x3c, 0xa0, 0xeb, 0x80, 0x02, 0xbb, 0x52, 0x1d, 0x21, 0xd5, 0x3a, 0xc9, 0x2e, 0x45, 0x6f, + 0xcb, 0x6e, 0x04, 0x56, 0x62, 0x13, 0x21, 0x91, 0xe4, 0x99, 0xf4, 0x30, 0xbf, 0xc9, 0x5e, 0x62, + 0xb7, 0xbb, 0xdd, 0x2b, 0xed, 0x11, 0x06, 0x52, 0x56, 0xa4, 0x04, 0x88, 0x93, 0x2b, 0xf3, 0x1c, + 0x9d, 0xef, 0x3b, 0x1f, 0xbf, 0x43, 0xd2, 0x80, 0xe2, 0x4b, 0x2a, 0xa2, 0x8c, 0x71, 0x4e, 0x2f, + 0xd8, 0x64, 0xb9, 0x2a, 0x44, 0x81, 0xfa, 0xea, 0xe7, 0xe3, 0xfa, 0xd3, 0x97, 0x06, 0xcb, 0xd7, + 0x19, 0x2f, 0xd3, 0xf6, 0x1b, 0x18, 0x86, 0x22, 0x8d, 0xaf, 0xd8, 0xca, 0x2f, 0xcb, 0x11, 0x82, + 0xf6, 0x25, 0xe5, 0x97, 0x96, 0x36, 0xd2, 0xc6, 0x3a, 0x56, 0x6b, 0x99, 0x5b, 0xd2, 0xf8, 0xca, + 0xda, 0x1f, 0x69, 0xe3, 0x0e, 0x56, 0x6b, 0xfb, 0x03, 0x0c, 0xbc, 0x8c, 0x5e, 0xb0, 0x0a, 0x67, + 0x41, 0x6f, 0x49, 0x37, 0xd7, 0x05, 0x4d, 0x14, 0x74, 0x80, 0xab, 0x10, 0xbd, 0x84, 0xb6, 0xd8, + 0x2c, 0x99, 0x42, 0x0f, 0x5f, 0x1d, 0x4d, 0x2a, 0x25, 0x13, 0x85, 0x27, 0x9b, 0x25, 0xc3, 0xaa, + 0xc0, 0xfe, 0x47, 0x83, 0x81, 0xb3, 0x4e, 0xd2, 0xe2, 0x61, 0xce, 0xd7, 0xb7, 0x38, 0x47, 0x35, + 0x67, 0x13, 0x5f, 0x06, 0x75, 0x03, 0x74, 0x02, 0x46, 0xb2, 0x5e, 0x51, 0x91, 0x16, 0x79, 0x94, + 0x71, 0xab, 0x35, 0xd2, 0xc6, 0x6d, 0x0c, 0x55, 0xca, 0xe7, 0xf6, 0xf7, 0xa0, 0xdf, 0x60, 0xd0, + 0x53, 0x40, 0x8b, 0xe0, 0x7d, 0x30, 0xfb, 0x25, 0x88, 0x9c, 0xc5, 0xa9, 0x37, 0x8b, 0xc8, 0xf9, + 0xdc, 0x35, 0xf7, 0x50, 0x0f, 0x5a, 0x8e, 0x33, 0x35, 0x35, 0xb5, 0xf0, 0xb1, 0xb9, 0x6f, 0xff, + 0xab, 0x81, 0xe1, 0x26, 0xa9, 0xa8, 0x74, 0x3f, 0x81, 0x4e, 0x7c, 0x5d, 0xc4, 0x57, 0x4a, 0x75, + 0x1b, 0x97, 0x81, 0x74, 0x51, 0xb0, 0x3f, 0x85, 0xd2, 0xac, 0x63, 0xb5, 0x46, 0xc7, 0xd0, 0x53, + 0xc3, 0x4a, 0x13, 0xa5, 0x46, 0xc7, 0x5d, 0x19, 0x7a, 0x09, 0xfa, 0x1a, 0x60, 0x3b, 0x40, 0xf9, + 0xad, 0xad, 0xbe, 0xe9, 0xdb, 0x8c, 0x97, 0xc8, 0x0e, 0x17, 0x2b, 0x9a, 0x0b, 0xab, 0xa3, 0x7c, + 0x29, 0x03, 0xf4, 0x06, 0x06, 0x15, 0x48, 0xb9, 0xd3, 0x55, 0xee, 0x7c, 0x5e, 0xbb, 0xb3, 0x15, + 0xa8, 0x2c, 0x31, 0xb2, 0x3a, 0xb0, 0xff, 0xd6, 0xe0, 0xe0, 0x94, 0x5d, 0x33, 0xc1, 0x76, 0xef, + 0xa1, 0xa1, 0x77, 0x7f, 0x87, 0xde, 0xd6, 0xbd, 0x7a, 0xdb, 0xbb, 0xf4, 0x76, 0x1e, 0xad, 0xf7, + 0xaf, 0x3e, 0x18, 0xd3, 0x4b, 0xfa, 0x80, 0xe3, 0xcf, 0x40, 0x17, 0x69, 0xc6, 0xb8, 0xa0, 0xd9, + 0x52, 0xe9, 0x6d, 0xe3, 0x3a, 0x71, 0x33, 0x8f, 0x56, 0x63, 0x1e, 0x27, 0x60, 0xac, 0x18, 0x5f, + 0x16, 0x39, 0x67, 0x91, 0x28, 0xb6, 0xbe, 0x43, 0x95, 0x22, 0x05, 0xfa, 0x02, 0xfa, 0x2c, 0xe7, + 0x51, 0x4e, 0xb3, 0x52, 0xae, 0x8e, 0x7b, 0x2c, 0xe7, 0x01, 0xcd, 0x58, 0xd3, 0x9b, 0xee, 0x2d, + 0x6f, 0xee, 0x6e, 0xb3, 0xf7, 0xd8, 0x6d, 0xa2, 0x53, 0x18, 0xc4, 0x45, 0x2e, 0x58, 0x2e, 0x4a, + 0x64, 0x5f, 0x21, 0x5f, 0xd4, 0xc8, 0x86, 0x07, 0x93, 0x69, 0x59, 0x59, 0xb2, 0xc4, 0x75, 0x80, + 0x5e, 0x43, 0x8f, 0x97, 0x97, 0xdc, 0xd2, 0x47, 0xda, 0xd8, 0x78, 0x65, 0xd5, 0x04, 0xb7, 0x6f, + 0xff, 0xbb, 0x3d, 0x5c, 0x95, 0xa2, 0x09, 0x74, 0x52, 0x79, 0x41, 0x2d, 0x50, 0x98, 0xa7, 0x77, + 0xee, 0x6d, 0x8d, 0x28, 0xcb, 0x64, 0x3d, 0x95, 0x77, 0xc7, 0x32, 0xee, 0xd6, 0x37, 0xef, 0xa4, + 0xac, 0x57, 0x65, 0xe8, 0x39, 0xe8, 0x71, 0x91, 0x65, 0xeb, 0x3c, 0x15, 0x1b, 0x6b, 0x20, 0x8f, + 0xc5, 0xbb, 0x3d, 0x5c, 0xa7, 0xea, 0x23, 0x73, 0xd0, 0x3c, 0x32, 0x2f, 0x60, 0x90, 0xa4, 0x7c, + 0x79, 0x4d, 0x37, 0xe5, 0x0c, 0x86, 0xca, 0x69, 0x63, 0x9b, 0x53, 0x73, 0xf8, 0x04, 0xcf, 0xb9, + 0x74, 0x4c, 0x5a, 0x40, 0x63, 0x11, 0xad, 0xd8, 0xef, 0x6b, 0xc6, 0x45, 0xc4, 0xd3, 0x8b, 0x9c, + 0x8a, 0xf5, 0x8a, 0x59, 0x87, 0x4a, 0x61, 0xd3, 0xc6, 0xb2, 0x14, 0x97, 0x95, 0x61, 0x55, 0x88, + 0xbf, 0x92, 0x44, 0xf7, 0x7c, 0x44, 0x39, 0xd8, 0x2b, 0x16, 0xb3, 0xf4, 0x0f, 0x96, 0xec, 0xe8, + 0x65, 0x3e, 0xb6, 0xd7, 0x49, 0x45, 0x76, 0x5f, 0xbf, 0x97, 0x70, 0x58, 0xb5, 0xd9, 0x9e, 0x11, + 0xeb, 0xb3, 0x91, 0x36, 0xee, 0xe3, 0xe1, 0x36, 0xbd, 0xb5, 0xd8, 0xfe, 0x4f, 0x03, 0xa3, 0x71, + 0x18, 0x90, 0x05, 0x4f, 0xaa, 0x87, 0x6c, 0x3a, 0x0b, 0x88, 0x1b, 0x90, 0xea, 0x29, 0x1b, 0x02, + 0x10, 0xf7, 0x57, 0x12, 0xcd, 0x7f, 0x72, 0xbc, 0xc0, 0xd4, 0x90, 0x01, 0xbd, 0x90, 0x78, 0xd3, + 0xf7, 0x2e, 0x36, 0xf7, 0x11, 0x40, 0x37, 0x24, 0x0e, 0x59, 0x84, 0x66, 0x0b, 0xe9, 0xd0, 0x71, + 0xfd, 0xd9, 0x8f, 0x9e, 0xd9, 0x46, 0xc7, 0x70, 0x44, 0xb0, 0x13, 0x84, 0xce, 0x94, 0x78, 0x33, + 0xc9, 0xe8, 0xfb, 0x4e, 0x70, 0x6a, 0x76, 0xd0, 0x18, 0xbe, 0x09, 0xcf, 0x43, 0xe2, 0xfa, 0x91, + 0xef, 0x86, 0xa1, 0x73, 0xe6, 0xde, 0x74, 0x9b, 0x63, 0xef, 0x67, 0x87, 0xb8, 0xd1, 0x19, 0x9e, + 0x2d, 0xe6, 0x66, 0x57, 0xb2, 0x79, 0xbe, 0x73, 0xe6, 0x9a, 0x3d, 0xb9, 0x54, 0x8f, 0xab, 0xd9, + 0x47, 0x07, 0xa0, 0x4b, 0xb2, 0x45, 0xe0, 0x91, 0x73, 0x53, 0x97, 0xcf, 0xef, 0x1d, 0xba, 0x33, + 0x67, 0x6e, 0x02, 0x3a, 0x82, 0x43, 0xc9, 0xeb, 0x4c, 0x49, 0x84, 0xdd, 0x0f, 0x0b, 0x37, 0x24, + 0xa6, 0xf1, 0x56, 0xbf, 0xf9, 0xa7, 0xb0, 0x17, 0x70, 0x7c, 0x9f, 0x83, 0xcf, 0x40, 0xaf, 0x07, + 0x53, 0xfe, 0xa3, 0xd4, 0x89, 0xdd, 0xaf, 0xc5, 0xdb, 0x83, 0xdf, 0x8c, 0xc9, 0xb7, 0x3f, 0x54, + 0x53, 0xfc, 0xd8, 0x55, 0xab, 0xef, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x99, 0x11, 0xcc, 0x26, + 0x6c, 0x07, 0x00, 0x00, } diff --git a/protocol/protobuf/chat_message.proto b/protocol/protobuf/chat_message.proto index ddd3d0423..1a5c1cf47 100644 --- a/protocol/protobuf/chat_message.proto +++ b/protocol/protobuf/chat_message.proto @@ -91,6 +91,10 @@ message ChatMessage { // Message author's display name, introduced in version 1 string display_name = 14; + ContactRequestSignature sent_contact_request_signature = 15; + ContactRequestSignature received_contact_request_signature = 16; + bool contact_message = 17; + enum ContentType { UNKNOWN_CONTENT_TYPE = 0; TEXT_PLAIN = 1; @@ -105,7 +109,13 @@ message ChatMessage { COMMUNITY = 9; // Only local SYSTEM_MESSAGE_GAP = 10; + CONTACT_REQUEST = 11; } } + +message ContactRequestSignature { + bytes signature = 1; + uint64 timestamp = 2; +} diff --git a/protocol/protobuf/contact.pb.go b/protocol/protobuf/contact.pb.go index 3c3abb426..5f84cbfab 100644 --- a/protocol/protobuf/contact.pb.go +++ b/protocol/protobuf/contact.pb.go @@ -21,13 +21,15 @@ var _ = math.Inf const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type ContactUpdate struct { - Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` - EnsName string `protobuf:"bytes,2,opt,name=ens_name,json=ensName,proto3" json:"ens_name,omitempty"` - ProfileImage string `protobuf:"bytes,3,opt,name=profile_image,json=profileImage,proto3" json:"profile_image,omitempty"` - DisplayName string `protobuf:"bytes,4,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"` + EnsName string `protobuf:"bytes,2,opt,name=ens_name,json=ensName,proto3" json:"ens_name,omitempty"` + ProfileImage string `protobuf:"bytes,3,opt,name=profile_image,json=profileImage,proto3" json:"profile_image,omitempty"` + DisplayName string `protobuf:"bytes,4,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + SentContactRequestSignature *ContactRequestSignature `protobuf:"bytes,14,opt,name=sent_contact_request_signature,json=sentContactRequestSignature,proto3" json:"sent_contact_request_signature,omitempty"` + ReceivedContactRequestSignature *ContactRequestSignature `protobuf:"bytes,15,opt,name=received_contact_request_signature,json=receivedContactRequestSignature,proto3" json:"received_contact_request_signature,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ContactUpdate) Reset() { *m = ContactUpdate{} } @@ -83,8 +85,118 @@ func (m *ContactUpdate) GetDisplayName() string { return "" } +func (m *ContactUpdate) GetSentContactRequestSignature() *ContactRequestSignature { + if m != nil { + return m.SentContactRequestSignature + } + return nil +} + +func (m *ContactUpdate) GetReceivedContactRequestSignature() *ContactRequestSignature { + if m != nil { + return m.ReceivedContactRequestSignature + } + return nil +} + +type AcceptContactRequest struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Clock uint64 `protobuf:"varint,2,opt,name=clock,proto3" json:"clock,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *AcceptContactRequest) Reset() { *m = AcceptContactRequest{} } +func (m *AcceptContactRequest) String() string { return proto.CompactTextString(m) } +func (*AcceptContactRequest) ProtoMessage() {} +func (*AcceptContactRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a5036fff2565fb15, []int{1} +} + +func (m *AcceptContactRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_AcceptContactRequest.Unmarshal(m, b) +} +func (m *AcceptContactRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_AcceptContactRequest.Marshal(b, m, deterministic) +} +func (m *AcceptContactRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_AcceptContactRequest.Merge(m, src) +} +func (m *AcceptContactRequest) XXX_Size() int { + return xxx_messageInfo_AcceptContactRequest.Size(m) +} +func (m *AcceptContactRequest) XXX_DiscardUnknown() { + xxx_messageInfo_AcceptContactRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_AcceptContactRequest proto.InternalMessageInfo + +func (m *AcceptContactRequest) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *AcceptContactRequest) GetClock() uint64 { + if m != nil { + return m.Clock + } + return 0 +} + +type RetractContactRequest struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Clock uint64 `protobuf:"varint,2,opt,name=clock,proto3" json:"clock,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *RetractContactRequest) Reset() { *m = RetractContactRequest{} } +func (m *RetractContactRequest) String() string { return proto.CompactTextString(m) } +func (*RetractContactRequest) ProtoMessage() {} +func (*RetractContactRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_a5036fff2565fb15, []int{2} +} + +func (m *RetractContactRequest) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_RetractContactRequest.Unmarshal(m, b) +} +func (m *RetractContactRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_RetractContactRequest.Marshal(b, m, deterministic) +} +func (m *RetractContactRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_RetractContactRequest.Merge(m, src) +} +func (m *RetractContactRequest) XXX_Size() int { + return xxx_messageInfo_RetractContactRequest.Size(m) +} +func (m *RetractContactRequest) XXX_DiscardUnknown() { + xxx_messageInfo_RetractContactRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_RetractContactRequest proto.InternalMessageInfo + +func (m *RetractContactRequest) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *RetractContactRequest) GetClock() uint64 { + if m != nil { + return m.Clock + } + return 0 +} + func init() { proto.RegisterType((*ContactUpdate)(nil), "protobuf.ContactUpdate") + proto.RegisterType((*AcceptContactRequest)(nil), "protobuf.AcceptContactRequest") + proto.RegisterType((*RetractContactRequest)(nil), "protobuf.RetractContactRequest") } func init() { @@ -92,16 +204,24 @@ func init() { } var fileDescriptor_a5036fff2565fb15 = []byte{ - // 166 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4d, 0xce, 0xcf, 0x2b, - 0x49, 0x4c, 0x2e, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x00, 0x53, 0x49, 0xa5, 0x69, - 0x4a, 0x1d, 0x8c, 0x5c, 0xbc, 0xce, 0x10, 0xb9, 0xd0, 0x82, 0x94, 0xc4, 0x92, 0x54, 0x21, 0x11, - 0x2e, 0xd6, 0xe4, 0x9c, 0xfc, 0xe4, 0x6c, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x96, 0x20, 0x08, 0x47, - 0x48, 0x92, 0x8b, 0x23, 0x35, 0xaf, 0x38, 0x3e, 0x2f, 0x31, 0x37, 0x55, 0x82, 0x49, 0x81, 0x51, - 0x83, 0x33, 0x88, 0x3d, 0x35, 0xaf, 0xd8, 0x2f, 0x31, 0x37, 0x55, 0x48, 0x99, 0x8b, 0xb7, 0xa0, - 0x28, 0x3f, 0x2d, 0x33, 0x27, 0x35, 0x3e, 0x33, 0x37, 0x31, 0x3d, 0x55, 0x82, 0x19, 0x2c, 0xcf, - 0x03, 0x15, 0xf4, 0x04, 0x89, 0x09, 0x29, 0x72, 0xf1, 0xa4, 0x64, 0x16, 0x17, 0xe4, 0x24, 0x56, - 0x42, 0xcc, 0x60, 0x01, 0xab, 0xe1, 0x86, 0x8a, 0x81, 0xcc, 0x71, 0xe2, 0x8d, 0xe2, 0xd6, 0xd3, - 0xb7, 0x86, 0xb9, 0x2c, 0x89, 0x0d, 0xcc, 0x32, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xd0, 0xfa, - 0xcb, 0x28, 0xbb, 0x00, 0x00, 0x00, + // 294 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x50, 0x41, 0x4b, 0xf4, 0x30, + 0x14, 0xa4, 0xfd, 0xf6, 0xd3, 0xdd, 0xb7, 0xdb, 0x15, 0xc2, 0x0a, 0x55, 0x41, 0xbb, 0xf5, 0xd2, + 0x53, 0x05, 0x3d, 0xaa, 0x07, 0xf5, 0xe4, 0xc5, 0x43, 0xc4, 0x8b, 0x97, 0x90, 0x4d, 0x5f, 0x6b, + 0xb0, 0x4d, 0x6b, 0x92, 0x0a, 0xfe, 0x5b, 0x7f, 0x8a, 0x6c, 0xda, 0xa2, 0x08, 0x2b, 0xe2, 0x29, + 0xc9, 0xcc, 0x64, 0xde, 0xbc, 0x81, 0x40, 0xd4, 0xca, 0x72, 0x61, 0xd3, 0x46, 0xd7, 0xb6, 0x26, + 0x63, 0x77, 0xac, 0xda, 0x7c, 0x9f, 0x88, 0x27, 0x6e, 0x59, 0x85, 0xc6, 0xf0, 0x02, 0x3b, 0x36, + 0x7e, 0xf7, 0x21, 0xb8, 0xe9, 0xf4, 0x0f, 0x4d, 0xc6, 0x2d, 0x92, 0x05, 0xfc, 0x17, 0x65, 0x2d, + 0x9e, 0x43, 0x2f, 0xf2, 0x92, 0x11, 0xed, 0x1e, 0x64, 0x0f, 0xc6, 0xa8, 0x0c, 0x53, 0xbc, 0xc2, + 0xd0, 0x8f, 0xbc, 0x64, 0x42, 0xb7, 0x51, 0x99, 0x3b, 0x5e, 0x21, 0x39, 0x86, 0xa0, 0xd1, 0x75, + 0x2e, 0x4b, 0x64, 0xb2, 0xe2, 0x05, 0x86, 0xff, 0x1c, 0x3f, 0xeb, 0xc1, 0xdb, 0x35, 0x46, 0x96, + 0x30, 0xcb, 0xa4, 0x69, 0x4a, 0xfe, 0xd6, 0x79, 0x8c, 0x9c, 0x66, 0xda, 0x63, 0xce, 0x27, 0x87, + 0x43, 0x83, 0xca, 0xb2, 0x3e, 0x3e, 0xd3, 0xf8, 0xd2, 0xa2, 0xb1, 0xcc, 0xc8, 0x42, 0x71, 0xdb, + 0x6a, 0x0c, 0xe7, 0x91, 0x97, 0x4c, 0x4f, 0x97, 0xe9, 0xb0, 0x51, 0xda, 0x27, 0xa7, 0x9d, 0xf2, + 0x7e, 0x10, 0xd2, 0x83, 0xb5, 0xd1, 0x06, 0x92, 0x28, 0x88, 0x35, 0x0a, 0x94, 0xaf, 0x98, 0xfd, + 0x30, 0x6b, 0xe7, 0xb7, 0xb3, 0x8e, 0x06, 0xb3, 0x0d, 0x82, 0xf8, 0x02, 0x16, 0x57, 0x42, 0x60, + 0xf3, 0x2d, 0x10, 0x99, 0x83, 0x2f, 0x33, 0xd7, 0xf2, 0x84, 0xfa, 0x32, 0xfb, 0x2c, 0xde, 0xff, + 0x52, 0x7c, 0x7c, 0x09, 0xbb, 0x14, 0xad, 0xe6, 0xe2, 0x4f, 0xdf, 0xaf, 0x83, 0xc7, 0x69, 0x7a, + 0x72, 0x3e, 0x2c, 0xb1, 0xda, 0x72, 0xb7, 0xb3, 0x8f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb8, 0x89, + 0xb6, 0xb0, 0x24, 0x02, 0x00, 0x00, } diff --git a/protocol/protobuf/contact.proto b/protocol/protobuf/contact.proto index 4d6b64077..171965a0a 100644 --- a/protocol/protobuf/contact.proto +++ b/protocol/protobuf/contact.proto @@ -2,10 +2,24 @@ syntax = "proto3"; option go_package = "./;protobuf"; package protobuf; +import "chat_message.proto"; message ContactUpdate { uint64 clock = 1; string ens_name = 2; string profile_image = 3; string display_name = 4; + + ContactRequestSignature sent_contact_request_signature = 14; + ContactRequestSignature received_contact_request_signature = 15; +} + +message AcceptContactRequest { + string id = 1; + uint64 clock = 2; +} + +message RetractContactRequest { + string id = 1; + uint64 clock = 2; } diff --git a/protocol/pushnotificationclient/migrations/migrations.go b/protocol/pushnotificationclient/migrations/migrations.go index 5abb3def5..6c77eeda1 100644 --- a/protocol/pushnotificationclient/migrations/migrations.go +++ b/protocol/pushnotificationclient/migrations/migrations.go @@ -90,7 +90,7 @@ func _1593601729_initial_schemaDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1593601729_initial_schema.down.sql", size: 144, mode: os.FileMode(0644), modTime: time.Unix(1597848235, 0)} + info := bindataFileInfo{name: "1593601729_initial_schema.down.sql", size: 144, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa, 0x95, 0x55, 0x64, 0x38, 0x40, 0x16, 0xbf, 0x8b, 0x1c, 0x18, 0xb4, 0xc5, 0x7f, 0xd0, 0xb8, 0xf0, 0x3c, 0xa2, 0x82, 0xf8, 0x8d, 0x5a, 0xd3, 0xb6, 0x6e, 0xa3, 0xb4, 0xc, 0x9, 0x33, 0x0}} return a, nil } @@ -110,7 +110,7 @@ func _1593601729_initial_schemaUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1593601729_initial_schema.up.sql", size: 1773, mode: os.FileMode(0644), modTime: time.Unix(1597848235, 0)} + info := bindataFileInfo{name: "1593601729_initial_schema.up.sql", size: 1773, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x4e, 0x1e, 0x5, 0x35, 0x9, 0xb2, 0x2d, 0x6f, 0x33, 0x63, 0xa2, 0x7a, 0x5b, 0xd2, 0x2d, 0xcb, 0x79, 0x7e, 0x6, 0xb4, 0x9d, 0x35, 0xd8, 0x9b, 0x55, 0xe5, 0xf8, 0x44, 0xca, 0xa6, 0xf3, 0xd3}} return a, nil } @@ -130,7 +130,7 @@ func _1597909626_add_server_typeDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1597909626_add_server_type.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1597909626_add_server_type.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}} return a, nil } @@ -150,7 +150,7 @@ func _1597909626_add_server_typeUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1597909626_add_server_type.up.sql", size: 145, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1597909626_add_server_type.up.sql", size: 145, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc8, 0x3f, 0xe0, 0xe7, 0x57, 0x0, 0x5d, 0x60, 0xf3, 0x55, 0x64, 0x71, 0x80, 0x3c, 0xca, 0x8, 0x61, 0xb5, 0x3c, 0xe, 0xa1, 0xe4, 0x61, 0xd1, 0x4e, 0xd8, 0xb2, 0x55, 0xdd, 0x87, 0x62, 0x9b}} return a, nil } @@ -170,7 +170,7 @@ func _1599053776_add_chat_id_and_typeDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1599053776_add_chat_id_and_type.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1599053776_add_chat_id_and_type.down.sql", size: 0, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14, 0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24, 0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c, 0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55}} return a, nil } @@ -190,7 +190,7 @@ func _1599053776_add_chat_id_and_typeUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1599053776_add_chat_id_and_type.up.sql", size: 264, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1599053776_add_chat_id_and_type.up.sql", size: 264, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xea, 0x7a, 0xf9, 0xc4, 0xa2, 0x96, 0x2e, 0xf9, 0x8f, 0x7, 0xf1, 0x1e, 0x73, 0x8a, 0xa6, 0x3a, 0x13, 0x4, 0x73, 0x82, 0x83, 0xb, 0xe3, 0xb5, 0x3b, 0x7e, 0xd, 0x23, 0xce, 0x98, 0xd4, 0xdc}} return a, nil } @@ -210,7 +210,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 382, mode: os.FileMode(0644), modTime: time.Unix(1597848235, 0)} + info := bindataFileInfo{name: "doc.go", size: 382, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc0, 0x2f, 0x1e, 0x64, 0x9, 0x93, 0xe4, 0x8b, 0xf2, 0x98, 0x5a, 0x45, 0xe2, 0x80, 0x88, 0x67, 0x7a, 0x2d, 0xd7, 0x4b, 0xd1, 0x73, 0xb6, 0x6d, 0x15, 0xc2, 0x0, 0x34, 0xcd, 0xa0, 0xdb, 0x20}} return a, nil } diff --git a/protocol/pushnotificationserver/migrations/migrations.go b/protocol/pushnotificationserver/migrations/migrations.go index 896ac6291..7183c741e 100644 --- a/protocol/pushnotificationserver/migrations/migrations.go +++ b/protocol/pushnotificationserver/migrations/migrations.go @@ -88,7 +88,7 @@ func _1593601728_initial_schemaDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1593601728_initial_schema.down.sql", size: 200, mode: os.FileMode(0644), modTime: time.Unix(1597848235, 0)} + info := bindataFileInfo{name: "1593601728_initial_schema.down.sql", size: 200, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x88, 0x8a, 0x61, 0x81, 0x57, 0x45, 0x9b, 0x97, 0x9b, 0x1f, 0xf6, 0x94, 0x8a, 0x20, 0xb3, 0x2b, 0xff, 0x69, 0x49, 0xf4, 0x58, 0xcc, 0xd0, 0x55, 0xcc, 0x9a, 0x8b, 0xb6, 0x7f, 0x29, 0x53, 0xc1}} return a, nil } @@ -108,7 +108,7 @@ func _1593601728_initial_schemaUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1593601728_initial_schema.up.sql", size: 675, mode: os.FileMode(0644), modTime: time.Unix(1597848235, 0)} + info := bindataFileInfo{name: "1593601728_initial_schema.up.sql", size: 675, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xfd, 0x61, 0x90, 0x79, 0xd9, 0x14, 0x65, 0xe9, 0x96, 0x53, 0x17, 0x33, 0x54, 0xeb, 0x8b, 0x5d, 0x95, 0x99, 0x10, 0x36, 0x58, 0xdd, 0xb2, 0xbf, 0x45, 0xd9, 0xbb, 0xc4, 0x92, 0xe, 0xce, 0x2}} return a, nil } @@ -128,7 +128,7 @@ func _1598419937_add_push_notifications_tableDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1598419937_add_push_notifications_table.down.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1598419937_add_push_notifications_table.down.sql", size: 51, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc, 0x98, 0xc8, 0x30, 0x45, 0x5b, 0xc5, 0x7d, 0x13, 0x5d, 0xe7, 0xc8, 0x23, 0x43, 0xf7, 0xdc, 0x9c, 0xe2, 0xdd, 0x63, 0xf0, 0xb7, 0x16, 0x40, 0xc, 0xda, 0xb9, 0x16, 0x70, 0x2b, 0x5a, 0x7e}} return a, nil } @@ -148,7 +148,7 @@ func _1598419937_add_push_notifications_tableUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1598419937_add_push_notifications_table.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1604313406, 0)} + info := bindataFileInfo{name: "1598419937_add_push_notifications_table.up.sql", size: 104, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x2, 0x3e, 0xef, 0xf, 0xc2, 0xdf, 0xbc, 0x99, 0x7a, 0xc2, 0xd3, 0x64, 0x4f, 0x4c, 0x7e, 0xfc, 0x2e, 0x8c, 0xa7, 0x54, 0xd3, 0x4d, 0x25, 0x98, 0x41, 0xbc, 0xea, 0xd7, 0x2, 0xc1, 0xd0, 0x52}} return a, nil } @@ -168,7 +168,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 382, mode: os.FileMode(0644), modTime: time.Unix(1597848235, 0)} + info := bindataFileInfo{name: "doc.go", size: 382, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc0, 0x2f, 0x1e, 0x64, 0x9, 0x93, 0xe4, 0x8b, 0xf2, 0x98, 0x5a, 0x45, 0xe2, 0x80, 0x88, 0x67, 0x7a, 0x2d, 0xd7, 0x4b, 0xd1, 0x73, 0xb6, 0x6d, 0x15, 0xc2, 0x0, 0x34, 0xcd, 0xa0, 0xdb, 0x20}} return a, nil } diff --git a/protocol/requests/accept_contact_request.go b/protocol/requests/accept_contact_request.go new file mode 100644 index 000000000..8cec5ba09 --- /dev/null +++ b/protocol/requests/accept_contact_request.go @@ -0,0 +1,21 @@ +package requests + +import ( + "errors" + + "github.com/status-im/status-go/eth-node/types" +) + +var ErrAcceptContactRequestInvalidID = errors.New("accept-contact-request: invalid id") + +type AcceptContactRequest struct { + ID types.HexBytes `json:"id"` +} + +func (a *AcceptContactRequest) Validate() error { + if len(a.ID) == 0 { + return ErrAcceptContactRequestInvalidID + } + + return nil +} diff --git a/protocol/requests/dismiss_contact_request.go b/protocol/requests/dismiss_contact_request.go new file mode 100644 index 000000000..24f2563ef --- /dev/null +++ b/protocol/requests/dismiss_contact_request.go @@ -0,0 +1,21 @@ +package requests + +import ( + "errors" + + "github.com/status-im/status-go/eth-node/types" +) + +var ErrDismissContactRequestInvalidID = errors.New("dismiss-contact-request: invalid id") + +type DismissContactRequest struct { + ID types.HexBytes `json:"id"` +} + +func (a *DismissContactRequest) Validate() error { + if len(a.ID) == 0 { + return ErrDismissContactRequestInvalidID + } + + return nil +} diff --git a/protocol/requests/retract_contact_request.go b/protocol/requests/retract_contact_request.go new file mode 100644 index 000000000..5ea3f8685 --- /dev/null +++ b/protocol/requests/retract_contact_request.go @@ -0,0 +1,21 @@ +package requests + +import ( + "errors" + + "github.com/status-im/status-go/eth-node/types" +) + +var ErrRetractContactRequestInvalidContactID = errors.New("retract-contact-request: invalid id") + +type RetractContactRequest struct { + ContactID types.HexBytes `json:"contactId"` +} + +func (a *RetractContactRequest) Validate() error { + if len(a.ContactID) == 0 { + return ErrRetractContactRequestInvalidContactID + } + + return nil +} diff --git a/protocol/requests/send_contact_request.go b/protocol/requests/send_contact_request.go new file mode 100644 index 000000000..5427d9497 --- /dev/null +++ b/protocol/requests/send_contact_request.go @@ -0,0 +1,27 @@ +package requests + +import ( + "errors" + + "github.com/status-im/status-go/eth-node/types" +) + +var ErrSendContactRequestInvalidID = errors.New("send-contact-request: invalid id") +var ErrSendContactRequestInvalidMessage = errors.New("send-contact-request: invalid message") + +type SendContactRequest struct { + ID types.HexBytes `json:"id"` + Message string `json:"message"` +} + +func (a *SendContactRequest) Validate() error { + if len(a.ID) == 0 { + return ErrSendContactRequestInvalidID + } + + if len(a.Message) == 0 { + return ErrSendContactRequestInvalidMessage + } + + return nil +} diff --git a/protocol/transport/migrations/migrations.go b/protocol/transport/migrations/migrations.go index c8bc6a776..41ec048c6 100644 --- a/protocol/transport/migrations/migrations.go +++ b/protocol/transport/migrations/migrations.go @@ -89,7 +89,7 @@ func _1561059284_add_waku_keysDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1561059284_add_waku_keys.down.sql", size: 22, mode: os.FileMode(0644), modTime: time.Unix(1622467450, 0)} + info := bindataFileInfo{name: "1561059284_add_waku_keys.down.sql", size: 22, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe5, 0x2a, 0x7e, 0x9, 0xa3, 0xdd, 0xc6, 0x3, 0xfa, 0xaa, 0x98, 0xa0, 0x26, 0x5e, 0x67, 0x43, 0xe6, 0x20, 0xfd, 0x10, 0xfd, 0x60, 0x89, 0x17, 0x13, 0x87, 0x1b, 0x44, 0x36, 0x79, 0xb6, 0x60}} return a, nil } @@ -109,7 +109,7 @@ func _1561059284_add_waku_keysUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1561059284_add_waku_keys.up.sql", size: 109, mode: os.FileMode(0644), modTime: time.Unix(1622467450, 0)} + info := bindataFileInfo{name: "1561059284_add_waku_keys.up.sql", size: 109, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa9, 0x5c, 0x8, 0x32, 0xef, 0x12, 0x88, 0x21, 0xd, 0x7a, 0x42, 0x4d, 0xe7, 0x2d, 0x6c, 0x99, 0xb6, 0x1, 0xf1, 0xba, 0x2c, 0x40, 0x8d, 0xa9, 0x4b, 0xe6, 0xc4, 0x21, 0xec, 0x47, 0x6b, 0xf7}} return a, nil } @@ -129,7 +129,7 @@ func _1616691080_add_wakuv2_keysDownSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1616691080_add_wakuV2_keys.down.sql", size: 24, mode: os.FileMode(0644), modTime: time.Unix(1625049989, 0)} + info := bindataFileInfo{name: "1616691080_add_wakuV2_keys.down.sql", size: 24, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x42, 0xb6, 0x23, 0x70, 0xb8, 0x63, 0x18, 0x61, 0xea, 0x35, 0x6e, 0xae, 0xe9, 0x71, 0x89, 0xa, 0xa5, 0x72, 0xa2, 0x64, 0xaa, 0x45, 0x1, 0xf, 0xfc, 0xee, 0x1b, 0xd9, 0xd2, 0x27, 0xf4, 0xe2}} return a, nil } @@ -149,7 +149,7 @@ func _1616691080_add_wakuv2_keysUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1616691080_add_wakuV2_keys.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1625049989, 0)} + info := bindataFileInfo{name: "1616691080_add_wakuV2_keys.up.sql", size: 111, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x10, 0xf0, 0x97, 0x25, 0xfe, 0x96, 0x2c, 0xa8, 0x62, 0x4a, 0x71, 0x75, 0xff, 0x5f, 0x43, 0x1e, 0x71, 0x53, 0xf1, 0xde, 0xf, 0xcf, 0xcd, 0x87, 0x15, 0x61, 0x9d, 0x25, 0x2e, 0xaf, 0x18, 0x99}} return a, nil } @@ -169,7 +169,7 @@ func _1634723014_add_wakuv2_keysUpSql() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "1634723014_add_wakuV2_keys.up.sql", size: 125, mode: os.FileMode(0644), modTime: time.Unix(1637329330, 0)} + info := bindataFileInfo{name: "1634723014_add_wakuV2_keys.up.sql", size: 125, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xe1, 0x7a, 0x1e, 0x6, 0xad, 0x1b, 0x37, 0xdb, 0xea, 0x94, 0xaf, 0xe0, 0x7d, 0xc9, 0xd6, 0xda, 0x52, 0x71, 0x8a, 0x44, 0xb3, 0xa6, 0x7b, 0x1e, 0x90, 0xdb, 0x1e, 0x5a, 0xa, 0x40, 0x26}} return a, nil } @@ -189,7 +189,7 @@ func docGo() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "doc.go", size: 373, mode: os.FileMode(0644), modTime: time.Unix(1622467450, 0)} + info := bindataFileInfo{name: "doc.go", size: 373, mode: os.FileMode(0644), modTime: time.Unix(1652264632, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x23, 0x6a, 0xc1, 0xce, 0x94, 0xf6, 0xef, 0xf1, 0x97, 0x95, 0xb, 0x35, 0xaf, 0x5f, 0xe7, 0x5f, 0xac, 0x6e, 0xb8, 0xab, 0xba, 0xb5, 0x35, 0x97, 0x22, 0x36, 0x11, 0xce, 0x44, 0xfc, 0xfa, 0xac}} return a, nil } diff --git a/protocol/v1/status_message.go b/protocol/v1/status_message.go index 1e0f4cac5..8a48ecc71 100644 --- a/protocol/v1/status_message.go +++ b/protocol/v1/status_message.go @@ -276,6 +276,10 @@ func (m *StatusMessage) HandleApplication() error { return m.unmarshalProtobufData(new(protobuf.CommunityMessageArchiveMagnetlink)) case protobuf.ApplicationMetadataMessage_SYNC_WALLET_ACCOUNT: return m.unmarshalProtobufData(new(protobuf.SyncWalletAccounts)) + case protobuf.ApplicationMetadataMessage_ACCEPT_CONTACT_REQUEST: + return m.unmarshalProtobufData(new(protobuf.AcceptContactRequest)) + case protobuf.ApplicationMetadataMessage_RETRACT_CONTACT_REQUEST: + return m.unmarshalProtobufData(new(protobuf.RetractContactRequest)) } return nil } diff --git a/services/ext/api.go b/services/ext/api.go index 6ce53a167..48134feb5 100644 --- a/services/ext/api.go +++ b/services/ext/api.go @@ -605,10 +605,26 @@ func (api *PublicAPI) AddContact(ctx context.Context, request *requests.AddConta return api.service.messenger.AddContact(ctx, request) } +func (api *PublicAPI) SendContactRequest(ctx context.Context, request *requests.SendContactRequest) (*protocol.MessengerResponse, error) { + return api.service.messenger.SendContactRequest(ctx, request) +} + +func (api *PublicAPI) AcceptContactRequest(ctx context.Context, request *requests.AcceptContactRequest) (*protocol.MessengerResponse, error) { + return api.service.messenger.AcceptContactRequest(ctx, request) +} + +func (api *PublicAPI) RetractContactRequest(ctx context.Context, request *requests.RetractContactRequest) (*protocol.MessengerResponse, error) { + return api.service.messenger.RetractContactRequest(request) +} + func (api *PublicAPI) RejectContactRequest(ctx context.Context, request *requests.RejectContactRequest) (*protocol.MessengerResponse, error) { return api.service.messenger.RejectContactRequest(ctx, request) } +func (api *PublicAPI) DismissContactRequest(ctx context.Context, request *requests.DismissContactRequest) (*protocol.MessengerResponse, error) { + return api.service.messenger.DismissContactRequest(ctx, request) +} + func (api *PublicAPI) RemoveContact(ctx context.Context, pubKey string) (*protocol.MessengerResponse, error) { return api.service.messenger.RemoveContact(ctx, pubKey) } diff --git a/static/bindata.go b/static/bindata.go index d814783cd..c3e233444 100644 --- a/static/bindata.go +++ b/static/bindata.go @@ -104,7 +104,7 @@ func emojisTxt() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "emojis.txt", size: 28134, mode: os.FileMode(0644), modTime: time.Unix(1647884149, 0)} + info := bindataFileInfo{name: "emojis.txt", size: 28134, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf5, 0x28, 0xc, 0x22, 0x34, 0xa1, 0xeb, 0x8, 0x8d, 0xef, 0x38, 0x1b, 0xd8, 0xc2, 0x1a, 0x6d, 0xa2, 0x62, 0xad, 0x43, 0xfc, 0x1c, 0x38, 0xda, 0x8c, 0x3f, 0x34, 0xa, 0x8c, 0x6f, 0x5d, 0xd8}} return a, nil } @@ -124,7 +124,7 @@ func ConfigReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/README.md", size: 3031, mode: os.FileMode(0644), modTime: time.Unix(1644838748, 0)} + info := bindataFileInfo{name: "../config/README.md", size: 3031, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x15, 0x44, 0x2b, 0x13, 0x14, 0x34, 0xa, 0x66, 0x62, 0x1b, 0xc6, 0x4a, 0x2c, 0x7d, 0x4d, 0x89, 0xfb, 0xc9, 0x69, 0xe4, 0x18, 0x5f, 0x3, 0x98, 0x6d, 0x3c, 0x9e, 0xa8, 0xcd, 0x53, 0x5d, 0x75}} return a, nil } @@ -144,7 +144,7 @@ func ConfigCliAnonMetricNodeClientJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/anon-metric-node-client.json", size: 857, mode: os.FileMode(0644), modTime: time.Unix(1631628269, 0)} + info := bindataFileInfo{name: "../config/cli/anon-metric-node-client.json", size: 857, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x90, 0xdf, 0xcd, 0xc8, 0x92, 0x1d, 0x63, 0x5e, 0xe1, 0xf9, 0x7f, 0xed, 0xf2, 0x68, 0x6b, 0x20, 0xff, 0x1d, 0x3b, 0xc9, 0x7b, 0xb9, 0x6a, 0xba, 0xd3, 0xbd, 0xf7, 0x48, 0x7b, 0x5a, 0x52, 0x79}} return a, nil } @@ -164,7 +164,7 @@ func ConfigCliAnonMetricNodeServerJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/anon-metric-node-server.json", size: 696, mode: os.FileMode(0644), modTime: time.Unix(1631628269, 0)} + info := bindataFileInfo{name: "../config/cli/anon-metric-node-server.json", size: 696, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xf0, 0x2f, 0x97, 0xab, 0x77, 0x61, 0x93, 0x9d, 0x1f, 0x33, 0x18, 0x72, 0xad, 0xce, 0xa3, 0x35, 0xa9, 0x44, 0xbf, 0x29, 0xa8, 0xea, 0x21, 0xb7, 0x22, 0x7f, 0x7d, 0x3a, 0x6b, 0x55, 0x3c, 0x66}} return a, nil } @@ -184,7 +184,7 @@ func ConfigCliFleetEthProdJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/fleet-eth.prod.json", size: 4470, mode: os.FileMode(0644), modTime: time.Unix(1641901099, 0)} + info := bindataFileInfo{name: "../config/cli/fleet-eth.prod.json", size: 4470, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0x7b, 0x71, 0xe3, 0x8a, 0xb0, 0x7f, 0xc3, 0xe, 0xd2, 0x67, 0x38, 0x50, 0xf4, 0x27, 0xaa, 0xec, 0x47, 0xa1, 0x1, 0xf7, 0x5d, 0xe9, 0x8f, 0x3c, 0x35, 0x9f, 0xdb, 0x9b, 0x30, 0x88, 0x26}} return a, nil } @@ -204,7 +204,7 @@ func ConfigCliFleetEthStagingJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/fleet-eth.staging.json", size: 2145, mode: os.FileMode(0644), modTime: time.Unix(1640110246, 0)} + info := bindataFileInfo{name: "../config/cli/fleet-eth.staging.json", size: 2145, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xa2, 0xe9, 0x85, 0x4b, 0x66, 0xa4, 0x1d, 0x4e, 0xaf, 0x21, 0xd7, 0xc2, 0x59, 0xf7, 0xd, 0xc2, 0x61, 0x4e, 0x4a, 0x9e, 0x38, 0x90, 0x6a, 0x2a, 0x16, 0xa6, 0x5c, 0x6d, 0x0, 0x5, 0x6, 0xb3}} return a, nil } @@ -224,7 +224,7 @@ func ConfigCliFleetEthTestJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/fleet-eth.test.json", size: 2174, mode: os.FileMode(0644), modTime: time.Unix(1640110247, 0)} + info := bindataFileInfo{name: "../config/cli/fleet-eth.test.json", size: 2174, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x55, 0x19, 0xca, 0x8d, 0xaa, 0x69, 0x9b, 0xa2, 0xa1, 0xdd, 0xef, 0xf2, 0x63, 0x5e, 0xcd, 0xe2, 0x8f, 0xc7, 0x37, 0x7e, 0x41, 0xa1, 0xc1, 0x3f, 0x65, 0x80, 0xa, 0xa4, 0x27, 0x74, 0x8d, 0xc6}} return a, nil } @@ -244,7 +244,7 @@ func ConfigCliFleetStatusProdJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/fleet-status.prod.json", size: 1920, mode: os.FileMode(0644), modTime: time.Unix(1647884149, 0)} + info := bindataFileInfo{name: "../config/cli/fleet-status.prod.json", size: 1920, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5, 0xf, 0x4a, 0x61, 0xd2, 0xfd, 0x7d, 0x59, 0xcf, 0x49, 0x81, 0x6, 0x71, 0xdb, 0x63, 0xe8, 0xeb, 0xdf, 0x9e, 0x65, 0x22, 0xae, 0x9b, 0xb0, 0x16, 0x17, 0xe0, 0x52, 0xe6, 0xb, 0xcf, 0x88}} return a, nil } @@ -264,7 +264,7 @@ func ConfigCliFleetStatusTestJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/fleet-status.test.json", size: 937, mode: os.FileMode(0644), modTime: time.Unix(1647339453, 0)} + info := bindataFileInfo{name: "../config/cli/fleet-status.test.json", size: 937, mode: os.FileMode(0644), modTime: time.Unix(1650884918, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x5c, 0x3b, 0xc5, 0xd2, 0xe9, 0xd3, 0x52, 0xd4, 0x5a, 0xf3, 0xed, 0x37, 0xed, 0xde, 0xda, 0xc1, 0x57, 0x37, 0x17, 0x8c, 0x40, 0xee, 0x12, 0x82, 0x14, 0x2c, 0x8b, 0xc7, 0x4b, 0x2, 0xf8, 0x82}} return a, nil } @@ -284,7 +284,7 @@ func ConfigCliFleetWakuv2ProdJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/fleet-wakuv2.prod.json", size: 747, mode: os.FileMode(0644), modTime: time.Unix(1640110247, 0)} + info := bindataFileInfo{name: "../config/cli/fleet-wakuv2.prod.json", size: 747, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xc3, 0x81, 0x84, 0xfd, 0x7d, 0x7e, 0x27, 0xc8, 0x5e, 0xb6, 0x38, 0xe1, 0x6, 0xa, 0xbc, 0x86, 0x87, 0x54, 0xa2, 0x2f, 0xe1, 0xa1, 0xc8, 0x6, 0x80, 0xfa, 0xed, 0xfe, 0x13, 0x6c, 0x81, 0xd9}} return a, nil } @@ -304,7 +304,7 @@ func ConfigCliFleetWakuv2TestJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/fleet-wakuv2.test.json", size: 748, mode: os.FileMode(0644), modTime: time.Unix(1640110247, 0)} + info := bindataFileInfo{name: "../config/cli/fleet-wakuv2.test.json", size: 748, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x77, 0x6d, 0x28, 0xb7, 0xc2, 0xf3, 0x22, 0xe3, 0x6d, 0xc1, 0xeb, 0x4b, 0x42, 0xe2, 0x6, 0xb0, 0x60, 0x30, 0xdb, 0xe3, 0x26, 0xff, 0x9, 0xf5, 0xea, 0xe6, 0x56, 0xce, 0xa8, 0x98, 0x61, 0x70}} return a, nil } @@ -324,7 +324,7 @@ func ConfigCliLesEnabledJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/les-enabled.json", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "../config/cli/les-enabled.json", size: 58, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x7e, 0xee, 0x27, 0xa7, 0x74, 0xa0, 0x46, 0xa1, 0x41, 0xed, 0x4d, 0x16, 0x5b, 0xf3, 0xf0, 0x7c, 0xc8, 0x2f, 0x6f, 0x47, 0xa4, 0xbb, 0x5f, 0x43, 0x33, 0xd, 0x9, 0x9d, 0xea, 0x9e, 0x15, 0xee}} return a, nil } @@ -344,7 +344,7 @@ func ConfigCliMailserverEnabledJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/cli/mailserver-enabled.json", size: 176, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "../config/cli/mailserver-enabled.json", size: 176, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x34, 0xec, 0x81, 0x8b, 0x99, 0xb6, 0xdb, 0xc0, 0x8b, 0x46, 0x97, 0x96, 0xc7, 0x58, 0x30, 0x33, 0xef, 0x54, 0x25, 0x87, 0x7b, 0xb9, 0x94, 0x6b, 0x18, 0xa4, 0x5b, 0x58, 0x67, 0x7c, 0x44, 0xa6}} return a, nil } @@ -364,7 +364,7 @@ func ConfigStatusChainGenesisJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "../config/status-chain-genesis.json", size: 612, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "../config/status-chain-genesis.json", size: 612, mode: os.FileMode(0644), modTime: time.Unix(1648117578, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xb, 0xf0, 0xc, 0x1, 0x95, 0x65, 0x6, 0x55, 0x48, 0x8f, 0x83, 0xa0, 0xb4, 0x81, 0xda, 0xad, 0x30, 0x6d, 0xb2, 0x78, 0x1b, 0x26, 0x4, 0x13, 0x12, 0x9, 0x6, 0xae, 0x3a, 0x2c, 0x1, 0x71}} return a, nil } @@ -384,7 +384,7 @@ func keysBootnodeKey() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "keys/bootnode.key", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "keys/bootnode.key", size: 65, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x31, 0xcf, 0x27, 0xd4, 0x96, 0x2e, 0x32, 0xcd, 0x58, 0x96, 0x2a, 0xe5, 0x8c, 0xa0, 0xf1, 0x73, 0x1f, 0xd6, 0xd6, 0x8b, 0xb, 0x73, 0xd3, 0x2c, 0x84, 0x1a, 0x56, 0xa4, 0x74, 0xb6, 0x95, 0x20}} return a, nil } @@ -404,7 +404,7 @@ func keysFirebaseauthkey() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "keys/firebaseauthkey", size: 153, mode: os.FileMode(0644), modTime: time.Unix(1541622131, 0)} + info := bindataFileInfo{name: "keys/firebaseauthkey", size: 153, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe, 0x69, 0x23, 0x64, 0x7d, 0xf9, 0x14, 0x37, 0x6f, 0x2b, 0x1, 0xf0, 0xb0, 0xa4, 0xb2, 0xd0, 0x18, 0xcd, 0xf9, 0xeb, 0x57, 0xa3, 0xfd, 0x79, 0x25, 0xa7, 0x9c, 0x3, 0xce, 0x26, 0xec, 0xe1}} return a, nil } @@ -424,7 +424,7 @@ func keysTestAccount1StatusChainPk() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "keys/test-account1-status-chain.pk", size: 489, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "keys/test-account1-status-chain.pk", size: 489, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8f, 0xba, 0x35, 0x1, 0x2b, 0x9d, 0xad, 0xf0, 0x2d, 0x3c, 0x4d, 0x6, 0xb5, 0x22, 0x2, 0x47, 0xd4, 0x1c, 0xf4, 0x31, 0x2f, 0xb, 0x5b, 0x27, 0x5d, 0x43, 0x97, 0x58, 0x2d, 0xf0, 0xe1, 0xbe}} return a, nil } @@ -444,7 +444,7 @@ func keysTestAccount1Pk() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "keys/test-account1.pk", size: 491, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "keys/test-account1.pk", size: 491, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9, 0x43, 0xc2, 0xf4, 0x8c, 0xc6, 0x64, 0x25, 0x8c, 0x7, 0x8c, 0xa8, 0x89, 0x2b, 0x7b, 0x9b, 0x4f, 0x81, 0xcb, 0xce, 0x3d, 0xef, 0x82, 0x9c, 0x27, 0x27, 0xa9, 0xc5, 0x46, 0x70, 0x30, 0x38}} return a, nil } @@ -464,7 +464,7 @@ func keysTestAccount2StatusChainPk() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "keys/test-account2-status-chain.pk", size: 489, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "keys/test-account2-status-chain.pk", size: 489, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9, 0xf8, 0x5c, 0xe9, 0x92, 0x96, 0x2d, 0x88, 0x2b, 0x8e, 0x42, 0x3f, 0xa4, 0x93, 0x6c, 0xad, 0xe9, 0xc0, 0x1b, 0x8a, 0x8, 0x8c, 0x5e, 0x7a, 0x84, 0xa2, 0xf, 0x9f, 0x77, 0x58, 0x2c, 0x2c}} return a, nil } @@ -484,7 +484,7 @@ func keysTestAccount2Pk() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "keys/test-account2.pk", size: 491, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "keys/test-account2.pk", size: 491, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x9f, 0x72, 0xd5, 0x95, 0x5c, 0x5a, 0x99, 0x9d, 0x2f, 0x21, 0x83, 0xd7, 0x10, 0x17, 0x4a, 0x3d, 0x65, 0xc9, 0x26, 0x1a, 0x2c, 0x9d, 0x65, 0x63, 0xd2, 0xa0, 0xfc, 0x7c, 0x0, 0x87, 0x38, 0x9f}} return a, nil } @@ -504,7 +504,7 @@ func keysTestAccount3BeforeEip55Pk() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "keys/test-account3-before-eip55.pk", size: 489, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "keys/test-account3-before-eip55.pk", size: 489, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x81, 0x40, 0x56, 0xc1, 0x5e, 0x10, 0x6e, 0x28, 0x15, 0x3, 0x4e, 0xc4, 0xc4, 0x71, 0x4d, 0x16, 0x99, 0xcc, 0x1b, 0x63, 0xee, 0x10, 0x20, 0xe4, 0x59, 0x52, 0x3f, 0xc0, 0xad, 0x15, 0x13, 0x72}} return a, nil } diff --git a/t/bindata.go b/t/bindata.go index 21398d55a..ad4d2f2b5 100644 --- a/t/bindata.go +++ b/t/bindata.go @@ -86,7 +86,7 @@ func configPublicChainAccountsJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "config/public-chain-accounts.json", size: 307, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "config/public-chain-accounts.json", size: 307, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x76, 0x5d, 0xc0, 0xfe, 0x57, 0x50, 0x18, 0xec, 0x2d, 0x61, 0x1b, 0xa9, 0x81, 0x11, 0x5f, 0x77, 0xf7, 0xb6, 0x67, 0x82, 0x1, 0x40, 0x68, 0x9d, 0xc5, 0x41, 0xaf, 0xce, 0x43, 0x81, 0x92, 0x96}} return a, nil } @@ -106,7 +106,7 @@ func configStatusChainAccountsJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "config/status-chain-accounts.json", size: 543, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "config/status-chain-accounts.json", size: 543, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0x8e, 0xb3, 0x61, 0x51, 0x70, 0x3c, 0x12, 0x3e, 0xf1, 0x1c, 0x81, 0xfb, 0x9a, 0x7c, 0xe3, 0x63, 0xd0, 0x8f, 0x12, 0xc5, 0x2d, 0xf4, 0xea, 0x27, 0x33, 0xef, 0xca, 0xf9, 0x3f, 0x72, 0x44, 0xbf}} return a, nil } @@ -126,7 +126,7 @@ func configTestDataJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "config/test-data.json", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1586880790, 0)} + info := bindataFileInfo{name: "config/test-data.json", size: 84, mode: os.FileMode(0644), modTime: time.Unix(1648117579, 0)} a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xce, 0x9d, 0x80, 0xf5, 0x87, 0xfa, 0x57, 0x1d, 0xa1, 0xd5, 0x7a, 0x10, 0x3, 0xac, 0xd7, 0xf4, 0x64, 0x32, 0x96, 0x2b, 0xb7, 0x21, 0xb7, 0xa6, 0x80, 0x40, 0xe9, 0x65, 0xe3, 0xd6, 0xbd, 0x40}} return a, nil }