github.com/status-im/status-go@v1.1.0/protocol/messenger_contact_verification_test.go (about) 1 package protocol 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/status-im/status-go/eth-node/crypto" 8 "github.com/status-im/status-go/protocol/common" 9 "github.com/status-im/status-go/protocol/requests" 10 "github.com/status-im/status-go/protocol/verification" 11 12 "github.com/stretchr/testify/suite" 13 14 "github.com/status-im/status-go/eth-node/types" 15 ) 16 17 func TestMessengerVerificationRequests(t *testing.T) { // nolint: deadcode,unused 18 suite.Run(t, new(MessengerVerificationRequests)) 19 } 20 21 type MessengerVerificationRequests struct { 22 MessengerBaseTestSuite 23 } 24 25 func (s *MessengerVerificationRequests) mutualContact(theirMessenger *Messenger) { 26 messageText := "hello!" 27 28 contactID := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) 29 request := &requests.SendContactRequest{ 30 ID: contactID, 31 Message: messageText, 32 } 33 34 // Send contact request 35 resp, err := s.m.SendContactRequest(context.Background(), request) 36 s.Require().NoError(err) 37 38 s.Require().NotNil(resp) 39 s.Require().Len(resp.Messages(), 2) 40 41 // Make sure it's not returned as coming from us 42 contactRequests, _, err := s.m.PendingContactRequests("", 10) 43 s.Require().NoError(err) 44 s.Require().Len(contactRequests, 0) 45 46 // Make sure contact is added on the sender side 47 contacts := s.m.AddedContacts() 48 s.Require().Len(contacts, 1) 49 s.Require().Equal(ContactRequestStateSent, contacts[0].ContactRequestLocalState) 50 51 // Wait for the message to reach its destination 52 resp, err = WaitOnMessengerResponse( 53 theirMessenger, 54 func(r *MessengerResponse) bool { 55 return len(r.Contacts) > 0 && len(r.Messages()) > 0 && len(r.ActivityCenterNotifications()) > 0 56 }, 57 "no messages", 58 ) 59 60 // Check contact request has been received 61 s.Require().NoError(err) 62 63 // Check activity center notification is of the right type 64 s.Require().Len(resp.ActivityCenterNotifications(), 1) 65 s.Require().Equal(ActivityCenterNotificationTypeContactRequest, resp.ActivityCenterNotifications()[0].Type) 66 s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) 67 s.Require().Equal(common.ContactRequestStatePending, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) 68 69 // Check the contact state is correctly set 70 s.Require().Len(resp.Contacts, 1) 71 s.Require().Equal(ContactRequestStateReceived, resp.Contacts[0].ContactRequestRemoteState) 72 73 // Make sure it's the pending contact requests 74 contactRequests, _, err = theirMessenger.PendingContactRequests("", 10) 75 s.Require().NoError(err) 76 s.Require().Len(contactRequests, 1) 77 s.Require().Equal(contactRequests[0].ContactRequestState, common.ContactRequestStatePending) 78 79 // Accept contact request, receiver side 80 resp, err = theirMessenger.AcceptContactRequest(context.Background(), &requests.AcceptContactRequest{ID: types.Hex2Bytes(contactRequests[0].ID)}) 81 s.Require().NoError(err) 82 83 // Make sure the message is updated 84 s.Require().NotNil(resp) 85 s.Require().Len(resp.Messages(), 2) 86 87 s.Require().Len(resp.ActivityCenterNotifications(), 1) 88 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), contactRequests[0].ID) 89 s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) 90 s.Require().Equal(common.ContactRequestStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) 91 92 // Check the contact state is correctly set 93 s.Require().Len(resp.Contacts, 1) 94 s.Require().True(resp.Contacts[0].mutual()) 95 96 // Make sure the sender is added to our contacts 97 contacts = theirMessenger.AddedContacts() 98 s.Require().Len(contacts, 1) 99 100 // Make sure we consider them a mutual contact, receiver side 101 mutualContacts := theirMessenger.MutualContacts() 102 s.Require().Len(mutualContacts, 1) 103 104 // Wait for the message to reach its destination 105 resp, err = WaitOnMessengerResponse( 106 s.m, 107 func(r *MessengerResponse) bool { 108 return len(r.Contacts) == 1 && len(r.Messages()) == 2 && len(r.ActivityCenterNotifications()) == 1 109 }, 110 "no messages", 111 ) 112 s.Require().NoError(err) 113 114 // Check activity center notification is of the right type 115 s.Require().Equal(ActivityCenterNotificationTypeContactRequest, resp.ActivityCenterNotifications()[0].Type) 116 s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) 117 s.Require().Equal(common.ContactRequestStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactRequestState) 118 119 // Make sure the message is updated, sender side 120 s.Require().NotNil(resp) 121 s.Require().Len(resp.Messages(), 2) 122 123 // Make sure we consider them a mutual contact, sender side 124 mutualContacts = s.m.MutualContacts() 125 s.Require().Len(mutualContacts, 1) 126 127 // Check the contact state is correctly set 128 s.Require().Len(resp.Contacts, 1) 129 s.Require().True(resp.Contacts[0].mutual()) 130 } 131 132 func (s *MessengerVerificationRequests) TestAcceptVerificationRequests() { 133 theirMessenger := s.newMessenger(s.shh) 134 defer TearDownMessenger(&s.Suite, theirMessenger) 135 136 s.mutualContact(theirMessenger) 137 138 theirPk := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) 139 challenge := "challenge" 140 141 resp, err := s.m.SendContactVerificationRequest(context.Background(), theirPk, challenge) 142 s.Require().NoError(err) 143 s.Require().Len(resp.VerificationRequests(), 1) 144 verificationRequestID := resp.VerificationRequests()[0].ID 145 146 s.Require().Len(resp.Messages(), 1) 147 s.Require().NotEmpty(resp.Messages()[0].OutgoingStatus) 148 s.Require().Equal(challenge, resp.Messages()[0].Text) 149 s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState) 150 151 // Wait for the message to reach its destination 152 resp, err = WaitOnMessengerResponse( 153 theirMessenger, 154 func(r *MessengerResponse) bool { 155 return len(r.VerificationRequests()) == 1 && len(r.ActivityCenterNotifications()) == 1 156 }, 157 "no messages", 158 ) 159 s.Require().NoError(err) 160 s.Require().Len(resp.VerificationRequests(), 1) 161 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 162 s.Require().Equal(resp.ActivityCenterNotifications()[0].Type, ActivityCenterNotificationTypeContactVerification) 163 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusPENDING) 164 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, false) 165 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 166 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 167 168 s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) 169 s.Require().Equal(challenge, resp.ActivityCenterNotifications()[0].Message.Text) 170 s.Require().Equal(common.ContactVerificationStatePending, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 171 s.Require().Len(resp.Messages(), 1) 172 s.Require().Empty(resp.Messages()[0].OutgoingStatus) 173 s.Require().Equal(challenge, resp.Messages()[0].Text) 174 s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState) 175 176 resp, err = theirMessenger.AcceptContactVerificationRequest(context.Background(), verificationRequestID, "hello back") 177 178 s.Require().NoError(err) 179 180 s.Require().NoError(err) 181 s.Require().Len(resp.VerificationRequests(), 1) 182 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 183 s.Require().Equal(resp.VerificationRequests()[0].RequestStatus, verification.RequestStatusACCEPTED) 184 s.Require().NotEmpty(resp.VerificationRequests()[0].RepliedAt) 185 186 s.Require().Len(resp.ActivityCenterNotifications(), 1) 187 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 188 189 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusACCEPTED) 190 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, true) 191 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, true) 192 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 193 s.Require().Equal(common.ContactVerificationStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 194 s.Require().Len(resp.Messages(), 2) 195 s.Require().Equal(common.ContactVerificationStateAccepted, resp.Messages()[0].ContactVerificationState) 196 197 s.Require().NotNil(resp.ActivityCenterNotifications()[0].ReplyMessage) 198 s.Require().NotEmpty(resp.ActivityCenterNotifications()[0].ReplyMessage.OutgoingStatus) 199 s.Require().Equal("hello back", resp.ActivityCenterNotifications()[0].ReplyMessage.Text) 200 201 // Wait for the message to reach its destination 202 resp, err = WaitOnMessengerResponse( 203 s.m, 204 func(r *MessengerResponse) bool { 205 return len(r.VerificationRequests()) == 1 206 }, 207 "no messages", 208 ) 209 s.Require().NoError(err) 210 s.Require().Len(resp.VerificationRequests(), 1) 211 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 212 213 messages := resp.Messages() 214 s.Require().Len(messages, 2) 215 var originalMessage *common.Message 216 var replyMessage *common.Message 217 218 if messages[0].ID == resp.VerificationRequests()[0].ID { 219 originalMessage = messages[0] 220 replyMessage = messages[1] 221 } else { 222 originalMessage = messages[1] 223 replyMessage = messages[0] 224 } 225 226 s.Require().Equal(common.ContactVerificationStateAccepted, originalMessage.ContactVerificationState) 227 // Not sure this is the right state for this, it should probably be pendingtrustedverification or something 228 s.Require().Equal(common.ContactVerificationStateAccepted, replyMessage.ContactVerificationState) 229 230 s.Require().Len(resp.ActivityCenterNotifications(), 1) 231 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 232 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusACCEPTED) 233 s.Require().Equal(common.ContactVerificationStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 234 235 s.Require().NotNil(resp.ActivityCenterNotifications()[0].ReplyMessage) 236 s.Require().Empty(resp.ActivityCenterNotifications()[0].ReplyMessage.OutgoingStatus) 237 s.Require().Equal("hello back", resp.ActivityCenterNotifications()[0].ReplyMessage.Text) 238 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, false) 239 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 240 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 241 242 // Mark as tusted 243 resp, err = s.m.VerifiedTrusted(context.Background(), &requests.VerifiedTrusted{ID: types.FromHex(verificationRequestID)}) 244 s.Require().NoError(err) 245 s.Require().NotNil(resp) 246 247 s.Require().Len(resp.ActivityCenterNotifications(), 1) 248 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 249 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusTRUSTED) 250 s.Require().Equal(common.ContactVerificationStateTrusted, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 251 252 s.Require().Len(resp.Messages(), 1) 253 s.Require().Equal(common.ContactVerificationStateTrusted, resp.Messages()[0].ContactVerificationState) 254 255 s.Require().Len(resp.Contacts, 1) 256 s.Require().Equal(resp.Contacts[0].ID, theirPk) 257 s.Require().Equal(resp.Contacts[0].VerificationStatus, VerificationStatusVERIFIED) 258 } 259 260 func (s *MessengerVerificationRequests) TestTrustedVerificationRequests() { 261 theirMessenger := s.newMessenger(s.shh) 262 defer TearDownMessenger(&s.Suite, theirMessenger) 263 264 s.mutualContact(theirMessenger) 265 266 theirPk := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) 267 challenge := "challenge" 268 269 resp, err := s.m.SendContactVerificationRequest(context.Background(), theirPk, challenge) 270 s.Require().NoError(err) 271 s.Require().Len(resp.VerificationRequests(), 1) 272 verificationRequestID := resp.VerificationRequests()[0].ID 273 274 s.Require().Len(resp.Messages(), 1) 275 s.Require().NotEmpty(resp.Messages()[0].OutgoingStatus) 276 s.Require().Equal(challenge, resp.Messages()[0].Text) 277 s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState) 278 279 // Wait for the message to reach its destination 280 resp, err = WaitOnMessengerResponse( 281 theirMessenger, 282 func(r *MessengerResponse) bool { 283 return len(r.VerificationRequests()) == 1 && len(r.ActivityCenterNotifications()) == 1 284 }, 285 "no messages", 286 ) 287 s.Require().NoError(err) 288 s.Require().Len(resp.VerificationRequests(), 1) 289 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 290 s.Require().Equal(resp.ActivityCenterNotifications()[0].Type, ActivityCenterNotificationTypeContactVerification) 291 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusPENDING) 292 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, false) 293 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 294 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 295 296 s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) 297 s.Require().Equal(challenge, resp.ActivityCenterNotifications()[0].Message.Text) 298 s.Require().Equal(common.ContactVerificationStatePending, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 299 s.Require().Len(resp.Messages(), 1) 300 s.Require().Empty(resp.Messages()[0].OutgoingStatus) 301 s.Require().Equal(challenge, resp.Messages()[0].Text) 302 s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState) 303 304 resp, err = theirMessenger.AcceptContactVerificationRequest(context.Background(), verificationRequestID, "hello back") 305 306 s.Require().NoError(err) 307 308 s.Require().Len(resp.VerificationRequests(), 1) 309 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 310 s.Require().Equal(resp.VerificationRequests()[0].RequestStatus, verification.RequestStatusACCEPTED) 311 s.Require().NotEmpty(resp.VerificationRequests()[0].RepliedAt) 312 313 s.Require().Len(resp.ActivityCenterNotifications(), 1) 314 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 315 316 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusACCEPTED) 317 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, true) 318 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, true) 319 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 320 s.Require().Equal(common.ContactVerificationStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 321 s.Require().Len(resp.Messages(), 2) 322 s.Require().Equal(common.ContactVerificationStateAccepted, resp.Messages()[0].ContactVerificationState) 323 324 s.Require().NotNil(resp.ActivityCenterNotifications()[0].ReplyMessage) 325 s.Require().NotEmpty(resp.ActivityCenterNotifications()[0].ReplyMessage.OutgoingStatus) 326 s.Require().Equal("hello back", resp.ActivityCenterNotifications()[0].ReplyMessage.Text) 327 328 // Wait for the message to reach its destination 329 resp, err = WaitOnMessengerResponse( 330 s.m, 331 func(r *MessengerResponse) bool { 332 return len(r.VerificationRequests()) == 1 333 }, 334 "no messages", 335 ) 336 s.Require().NoError(err) 337 s.Require().Len(resp.VerificationRequests(), 1) 338 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 339 340 messages := resp.Messages() 341 s.Require().Len(messages, 2) 342 343 s.Require().Len(resp.ActivityCenterNotifications(), 1) 344 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 345 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusACCEPTED) 346 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, false) 347 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 348 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 349 s.Require().Equal(common.ContactVerificationStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 350 351 s.Require().NotNil(resp.ActivityCenterNotifications()[0].ReplyMessage) 352 s.Require().Empty(resp.ActivityCenterNotifications()[0].ReplyMessage.OutgoingStatus) 353 s.Require().Equal("hello back", resp.ActivityCenterNotifications()[0].ReplyMessage.Text) 354 355 resp, err = s.m.VerifiedTrusted(context.Background(), &requests.VerifiedTrusted{ID: types.FromHex(verificationRequestID)}) 356 s.Require().NoError(err) 357 s.Require().NotNil(resp) 358 359 s.Require().Len(resp.ActivityCenterNotifications(), 1) 360 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 361 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusTRUSTED) 362 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, true) 363 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, true) 364 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 365 s.Require().Equal(common.ContactVerificationStateTrusted, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 366 367 s.Require().Len(resp.Messages(), 1) 368 s.Require().Equal(common.ContactVerificationStateTrusted, resp.Messages()[0].ContactVerificationState) 369 } 370 371 func (s *MessengerVerificationRequests) TestUnthrustworthyVerificationRequests() { 372 theirMessenger := s.newMessenger(s.shh) 373 defer TearDownMessenger(&s.Suite, theirMessenger) 374 375 s.mutualContact(theirMessenger) 376 377 theirPk := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) 378 challenge := "challenge" 379 380 resp, err := s.m.SendContactVerificationRequest(context.Background(), theirPk, challenge) 381 s.Require().NoError(err) 382 s.Require().Len(resp.VerificationRequests(), 1) 383 verificationRequestID := resp.VerificationRequests()[0].ID 384 385 s.Require().Len(resp.Messages(), 1) 386 s.Require().NotEmpty(resp.Messages()[0].OutgoingStatus) 387 s.Require().Equal(challenge, resp.Messages()[0].Text) 388 s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState) 389 390 // Wait for the message to reach its destination 391 resp, err = WaitOnMessengerResponse( 392 theirMessenger, 393 func(r *MessengerResponse) bool { 394 return len(r.VerificationRequests()) == 1 && len(r.ActivityCenterNotifications()) == 1 395 }, 396 "no messages", 397 ) 398 s.Require().NoError(err) 399 s.Require().Len(resp.VerificationRequests(), 1) 400 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 401 s.Require().Equal(resp.ActivityCenterNotifications()[0].Type, ActivityCenterNotificationTypeContactVerification) 402 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusPENDING) 403 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, false) 404 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 405 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 406 407 s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) 408 s.Require().Equal(challenge, resp.ActivityCenterNotifications()[0].Message.Text) 409 s.Require().Equal(common.ContactVerificationStatePending, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 410 s.Require().Len(resp.Messages(), 1) 411 s.Require().Empty(resp.Messages()[0].OutgoingStatus) 412 s.Require().Equal(challenge, resp.Messages()[0].Text) 413 s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState) 414 415 resp, err = theirMessenger.AcceptContactVerificationRequest(context.Background(), verificationRequestID, "hello back") 416 417 s.Require().NoError(err) 418 419 s.Require().NoError(err) 420 s.Require().Len(resp.VerificationRequests(), 1) 421 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 422 s.Require().Equal(resp.VerificationRequests()[0].RequestStatus, verification.RequestStatusACCEPTED) 423 s.Require().NotEmpty(resp.VerificationRequests()[0].RepliedAt) 424 425 s.Require().Len(resp.ActivityCenterNotifications(), 1) 426 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 427 428 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusACCEPTED) 429 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, true) 430 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, true) 431 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 432 s.Require().Equal(common.ContactVerificationStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 433 s.Require().Len(resp.Messages(), 2) 434 s.Require().Equal(common.ContactVerificationStateAccepted, resp.Messages()[0].ContactVerificationState) 435 436 s.Require().NotNil(resp.ActivityCenterNotifications()[0].ReplyMessage) 437 s.Require().NotEmpty(resp.ActivityCenterNotifications()[0].ReplyMessage.OutgoingStatus) 438 s.Require().Equal("hello back", resp.ActivityCenterNotifications()[0].ReplyMessage.Text) 439 440 // Wait for the message to reach its destination 441 resp, err = WaitOnMessengerResponse( 442 s.m, 443 func(r *MessengerResponse) bool { 444 return len(r.VerificationRequests()) == 1 445 }, 446 "no messages", 447 ) 448 s.Require().NoError(err) 449 s.Require().Len(resp.VerificationRequests(), 1) 450 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 451 452 messages := resp.Messages() 453 s.Require().Len(messages, 2) 454 var originalMessage *common.Message 455 var replyMessage *common.Message 456 457 if messages[0].ID == resp.VerificationRequests()[0].ID { 458 originalMessage = messages[0] 459 replyMessage = messages[1] 460 } else { 461 originalMessage = messages[1] 462 replyMessage = messages[0] 463 } 464 465 s.Require().Equal(common.ContactVerificationStateAccepted, originalMessage.ContactVerificationState) 466 // Not sure this is the right state for this, it should probably be pendingtrustedverification or something 467 s.Require().Equal(common.ContactVerificationStateAccepted, replyMessage.ContactVerificationState) 468 469 s.Require().Len(resp.ActivityCenterNotifications(), 1) 470 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 471 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusACCEPTED) 472 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, false) 473 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 474 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 475 s.Require().Equal(common.ContactVerificationStateAccepted, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 476 477 s.Require().NotNil(resp.ActivityCenterNotifications()[0].ReplyMessage) 478 s.Require().Empty(resp.ActivityCenterNotifications()[0].ReplyMessage.OutgoingStatus) 479 s.Require().Equal("hello back", resp.ActivityCenterNotifications()[0].ReplyMessage.Text) 480 481 resp, err = s.m.VerifiedUntrustworthy(context.Background(), &requests.VerifiedUntrustworthy{ID: types.FromHex(verificationRequestID)}) 482 s.Require().NoError(err) 483 s.Require().NotNil(resp) 484 485 s.Require().Len(resp.ActivityCenterNotifications(), 1) 486 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 487 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusUNTRUSTWORTHY) 488 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, true) 489 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, true) 490 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 491 s.Require().Equal(common.ContactVerificationStateUntrustworthy, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 492 493 s.Require().Len(resp.Messages(), 1) 494 s.Require().Equal(common.ContactVerificationStateUntrustworthy, resp.Messages()[0].ContactVerificationState) 495 } 496 497 func (s *MessengerVerificationRequests) TestRemoveTrustVerificationStatus() { 498 // GIVEN 499 theirMessenger := s.newMessenger(s.shh) 500 defer TearDownMessenger(&s.Suite, theirMessenger) 501 502 s.mutualContact(theirMessenger) 503 504 theirPk := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) 505 challenge := "challenge" 506 507 resp, err := s.m.SendContactVerificationRequest(context.Background(), theirPk, challenge) 508 s.Require().NoError(err) 509 s.Require().Len(resp.VerificationRequests(), 1) 510 verificationRequestID := resp.VerificationRequests()[0].ID 511 512 // Wait for the message to reach its destination 513 resp, err = WaitOnMessengerResponse( 514 theirMessenger, 515 func(r *MessengerResponse) bool { 516 return len(r.VerificationRequests()) == 1 && len(r.ActivityCenterNotifications()) == 1 517 }, 518 "no messages", 519 ) 520 s.Require().NoError(err) 521 s.Require().Len(resp.VerificationRequests(), 1) 522 523 resp, err = theirMessenger.AcceptContactVerificationRequest(context.Background(), verificationRequestID, "hello back") 524 s.Require().NoError(err) 525 s.Require().Len(resp.VerificationRequests(), 1) 526 527 // Wait for the message to reach its destination 528 _, err = WaitOnMessengerResponse( 529 s.m, 530 func(r *MessengerResponse) bool { 531 return len(r.VerificationRequests()) == 1 532 }, 533 "no messages", 534 ) 535 s.Require().NoError(err) 536 537 // Mark as trusted 538 _, err = s.m.VerifiedTrusted(context.Background(), &requests.VerifiedTrusted{ID: types.FromHex(verificationRequestID)}) 539 s.Require().NoError(err) 540 541 // WHEN 542 _, err = s.m.RemoveTrustVerificationStatus(context.Background(), theirPk) 543 s.Require().NoError(err) 544 545 // THEN 546 trustStatus, err := s.m.GetTrustStatus(theirPk) 547 s.Require().NoError(err) 548 s.Require().Equal(verification.TrustStatusUNKNOWN, trustStatus) 549 550 contact, _ := s.m.allContacts.Load(theirPk) 551 s.Require().NotNil(contact) 552 s.Require().Equal(VerificationStatusUNVERIFIED, contact.VerificationStatus) 553 s.Require().Equal(verification.TrustStatusUNKNOWN, contact.TrustStatus) 554 } 555 556 func (s *MessengerVerificationRequests) TestDeclineVerificationRequests() { 557 theirMessenger := s.newMessenger(s.shh) 558 defer TearDownMessenger(&s.Suite, theirMessenger) 559 560 s.mutualContact(theirMessenger) 561 562 theirPk := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) 563 challenge := "challenge" 564 565 resp, err := s.m.SendContactVerificationRequest(context.Background(), theirPk, challenge) 566 s.Require().NoError(err) 567 s.Require().Len(resp.VerificationRequests(), 1) 568 verificationRequestID := resp.VerificationRequests()[0].ID 569 570 s.Require().Len(resp.Messages(), 1) 571 s.Require().Equal(challenge, resp.Messages()[0].Text) 572 s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState) 573 574 // Wait for the message to reach its destination 575 resp, err = WaitOnMessengerResponse( 576 theirMessenger, 577 func(r *MessengerResponse) bool { 578 return len(r.VerificationRequests()) == 1 && len(r.ActivityCenterNotifications()) == 1 579 }, 580 "no messages", 581 ) 582 s.Require().NoError(err) 583 s.Require().Len(resp.VerificationRequests(), 1) 584 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 585 s.Require().Equal(resp.ActivityCenterNotifications()[0].Type, ActivityCenterNotificationTypeContactVerification) 586 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusPENDING) 587 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, false) 588 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 589 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 590 591 s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) 592 s.Require().Equal(challenge, resp.ActivityCenterNotifications()[0].Message.Text) 593 s.Require().Equal(resp.ActivityCenterNotifications()[0].Message.ContactVerificationState, common.ContactVerificationStatePending) 594 s.Require().Len(resp.Messages(), 1) 595 s.Require().Equal(challenge, resp.Messages()[0].Text) 596 s.Require().Equal(resp.Messages()[0].ContactVerificationState, common.ContactVerificationStatePending) 597 598 // Make sure it's stored and retrieved correctly 599 notification, err := theirMessenger.ActivityCenterNotification(types.FromHex(verificationRequestID)) 600 601 s.Require().NoError(err) 602 s.Require().NotNil(notification) 603 s.Require().Equal(notification.ContactVerificationStatus, verification.RequestStatusPENDING) 604 s.Require().Equal(notification.Message.ContactVerificationState, common.ContactVerificationStatePending) 605 s.Require().Equal(notification.Read, false) 606 s.Require().Equal(notification.Accepted, false) 607 s.Require().Equal(notification.Dismissed, false) 608 609 resp, err = theirMessenger.DeclineContactVerificationRequest(context.Background(), verificationRequestID) 610 611 s.Require().NoError(err) 612 613 s.Require().NotNil(resp) 614 615 s.Require().Len(resp.VerificationRequests(), 1) 616 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 617 s.Require().Equal(resp.VerificationRequests()[0].RequestStatus, verification.RequestStatusDECLINED) 618 s.Require().NotEmpty(resp.VerificationRequests()[0].RepliedAt) 619 620 s.Require().Len(resp.ActivityCenterNotifications(), 1) 621 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 622 623 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusDECLINED) 624 s.Require().Equal(resp.ActivityCenterNotifications()[0].Message.ContactVerificationState, common.ContactVerificationStateDeclined) 625 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, true) 626 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 627 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, true) 628 s.Require().Len(resp.Messages(), 1) 629 s.Require().Equal(resp.Messages()[0].ContactVerificationState, common.ContactVerificationStateDeclined) 630 631 // Make sure it's stored and retrieved correctly 632 notification, err = theirMessenger.ActivityCenterNotification(types.FromHex(verificationRequestID)) 633 634 s.Require().NoError(err) 635 s.Require().NotNil(notification) 636 s.Require().Equal(notification.ContactVerificationStatus, verification.RequestStatusDECLINED) 637 s.Require().Equal(notification.Message.ContactVerificationState, common.ContactVerificationStateDeclined) 638 s.Require().Equal(notification.Read, true) 639 s.Require().Equal(notification.Accepted, false) 640 s.Require().Equal(notification.Dismissed, true) 641 642 // Wait for the message to reach its destination 643 resp, err = WaitOnMessengerResponse( 644 s.m, 645 func(r *MessengerResponse) bool { 646 return len(r.VerificationRequests()) == 1 647 }, 648 "no messages", 649 ) 650 s.Require().NoError(err) 651 s.Require().Len(resp.VerificationRequests(), 1) 652 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 653 654 s.Require().Len(resp.Messages(), 1) 655 s.Require().Equal(resp.Messages()[0].ContactVerificationState, common.ContactVerificationStateDeclined) 656 657 s.Require().Len(resp.Contacts, 1) 658 s.Require().Equal(resp.Contacts[0].ID, theirPk) 659 s.Require().Equal(resp.Contacts[0].VerificationStatus, VerificationStatusUNVERIFIED) 660 661 s.Require().Len(resp.ActivityCenterNotifications(), 1) 662 s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID) 663 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusDECLINED) 664 s.Require().Equal(resp.ActivityCenterNotifications()[0].Message.ContactVerificationState, common.ContactVerificationStateDeclined) 665 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, true) 666 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 667 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, true) 668 } 669 670 func (s *MessengerVerificationRequests) TestCancelVerificationRequest() { 671 theirMessenger := s.newMessenger(s.shh) 672 defer TearDownMessenger(&s.Suite, theirMessenger) 673 674 s.mutualContact(theirMessenger) 675 676 theirPk := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey)) 677 challenge := "challenge" 678 679 resp, err := s.m.SendContactVerificationRequest(context.Background(), theirPk, challenge) 680 s.Require().NoError(err) 681 s.Require().Len(resp.VerificationRequests(), 1) 682 verificationRequestID := resp.VerificationRequests()[0].ID 683 684 s.Require().Len(resp.Messages(), 1) 685 s.Require().Equal(challenge, resp.Messages()[0].Text) 686 s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState) 687 688 // Wait for the message to reach its destination 689 resp, err = WaitOnMessengerResponse( 690 theirMessenger, 691 func(r *MessengerResponse) bool { 692 return len(r.VerificationRequests()) == 1 && len(r.ActivityCenterNotifications()) == 1 693 }, 694 "no messages", 695 ) 696 s.Require().NoError(err) 697 s.Require().Len(resp.VerificationRequests(), 1) 698 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 699 s.Require().Equal(resp.ActivityCenterNotifications()[0].Type, ActivityCenterNotificationTypeContactVerification) 700 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusPENDING) 701 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, false) 702 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 703 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 704 705 s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) 706 s.Require().Equal(challenge, resp.ActivityCenterNotifications()[0].Message.Text) 707 s.Require().Equal(common.ContactVerificationStatePending, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState) 708 s.Require().Len(resp.Messages(), 1) 709 s.Require().Equal(challenge, resp.Messages()[0].Text) 710 s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState) 711 712 // Make sure it's stored and retrieved correctly 713 notifications, err := theirMessenger.ActivityCenterNotifications( 714 ActivityCenterNotificationsRequest{ 715 Cursor: "", 716 Limit: 4, 717 ActivityTypes: []ActivityCenterType{ActivityCenterNotificationTypeContactVerification}, 718 ReadType: ActivityCenterQueryParamsReadUnread, 719 }, 720 ) 721 s.Require().NoError(err) 722 s.Require().Greater(len(notifications.Notifications), 0) 723 s.Require().Equal(notifications.Notifications[0].ContactVerificationStatus, verification.RequestStatusPENDING) 724 s.Require().Equal(common.ContactVerificationStatePending, notifications.Notifications[0].Message.ContactVerificationState) 725 726 resp, err = s.m.CancelVerificationRequest(context.Background(), verificationRequestID) 727 728 s.Require().NoError(err) 729 730 s.Require().NotNil(resp) 731 732 s.Require().Len(resp.VerificationRequests(), 1) 733 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 734 s.Require().Equal(resp.VerificationRequests()[0].RequestStatus, verification.RequestStatusCANCELED) 735 736 s.Require().Len(resp.Contacts, 1) 737 s.Require().Equal(resp.Contacts[0].ID, theirPk) 738 s.Require().Equal(resp.Contacts[0].VerificationStatus, VerificationStatusUNVERIFIED) 739 740 // Check canceled state on the receiver's side 741 resp, err = WaitOnMessengerResponse( 742 theirMessenger, 743 func(r *MessengerResponse) bool { 744 return len(r.VerificationRequests()) == 1 && len(r.ActivityCenterNotifications()) == 1 745 }, 746 "no messages", 747 ) 748 s.Require().NoError(err) 749 s.Require().Len(resp.VerificationRequests(), 1) 750 s.Require().Equal(resp.VerificationRequests()[0].ID, verificationRequestID) 751 s.Require().Equal(resp.ActivityCenterNotifications()[0].Type, ActivityCenterNotificationTypeContactVerification) 752 s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusCANCELED) 753 s.Require().Equal(resp.ActivityCenterNotifications()[0].Read, true) 754 s.Require().Equal(resp.ActivityCenterNotifications()[0].Accepted, false) 755 s.Require().Equal(resp.ActivityCenterNotifications()[0].Dismissed, false) 756 757 s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message) 758 s.Require().Equal(challenge, resp.ActivityCenterNotifications()[0].Message.Text) 759 s.Require().Equal(resp.ActivityCenterNotifications()[0].Message.ContactVerificationState, common.ContactVerificationStateCanceled) 760 s.Require().Len(resp.Messages(), 1) 761 s.Require().Equal(challenge, resp.Messages()[0].Text) 762 s.Require().Equal(resp.Messages()[0].ContactVerificationState, common.ContactVerificationStateCanceled) 763 } 764 765 func (s *MessengerVerificationRequests) newMessenger(shh types.Waku) *Messenger { 766 privateKey, err := crypto.GenerateKey() 767 s.Require().NoError(err) 768 messenger, err := newMessengerWithKey(s.shh, privateKey, s.logger, nil) 769 s.Require().NoError(err) 770 return messenger 771 }