feat(ActivityCenter): Add message for canceling contact requests (#2992)

* feat(ActivityCenter): Add message for canceling contact requests

* feat(Contacts): GetVerificationRequestSentTo returns last verification request

* Fix error message in protocol/messenger_contact_verification.go

Co-authored-by: Jonathan Rainville <rainville.jonathan@gmail.com>

Co-authored-by: Jonathan Rainville <rainville.jonathan@gmail.com>
This commit is contained in:
Mikhail Rogachev 2022-12-14 12:27:02 +04:00 committed by GitHub
parent f5dfa58602
commit cd9fb48579
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 359 additions and 110 deletions

View File

@ -67,6 +67,7 @@ const (
ContactVerificationStateDeclined
ContactVerificationStateTrusted
ContactVerificationStateUntrustworthy
ContactVerificationStateCanceled
)
type CommandParameters struct {

View File

@ -3991,6 +3991,15 @@ func (m *Messenger) handleRetrievedMessages(chatWithMessages map[transport.Filte
continue
}
case protobuf.CancelContactVerification:
logger.Debug("Handling CancelContactVerification")
err = m.HandleCancelContactVerification(messageState, msg.ParsedMessage.Interface().(protobuf.CancelContactVerification))
if err != nil {
logger.Warn("failed to handle CancelContactVerification", zap.Error(err))
allMessagesProcessed = false
continue
}
case protobuf.ContactVerificationTrusted:
logger.Debug("Handling ContactVerificationTrusted")
err = m.HandleContactVerificationTrusted(messageState, msg.ParsedMessage.Interface().(protobuf.ContactVerificationTrusted))

View File

@ -132,7 +132,7 @@ func (m *Messenger) GetVerificationRequestSentTo(ctx context.Context, contactID
return nil, errors.New("contact not found")
}
return m.verificationDatabase.GetVerificationRequestSentTo(contactID)
return m.verificationDatabase.GetLatestVerificationRequestSentTo(contactID)
}
func (m *Messenger) GetReceivedVerificationRequests(ctx context.Context) ([]*verification.Request, error) {
@ -140,56 +140,101 @@ func (m *Messenger) GetReceivedVerificationRequests(ctx context.Context) ([]*ver
return m.verificationDatabase.GetReceivedVerificationRequests(myPubKey)
}
func (m *Messenger) CancelVerificationRequest(ctx context.Context, contactID string) error {
contact, ok := m.allContacts.Load(contactID)
if !ok || !contact.Added || !contact.HasAddedUs {
return errors.New("must be a mutual contact")
}
verifRequest, err := m.verificationDatabase.GetVerificationRequestSentTo(contactID)
func (m *Messenger) CancelVerificationRequest(ctx context.Context, id string) (*MessengerResponse, error) {
verifRequest, err := m.verificationDatabase.GetVerificationRequest(id)
if err != nil {
return err
return nil, err
}
if verifRequest == nil {
return errors.New("no contact verification found")
m.logger.Error("could not find verification request with id", zap.String("id", id))
return nil, verification.ErrVerificationRequestNotFound
}
if verifRequest.From != common.PubkeyToHex(&m.identity.PublicKey) {
return nil, errors.New("Can cancel only outgoing contact request")
}
contactID := verifRequest.To
contact, ok := m.allContacts.Load(contactID)
if !ok || !contact.Added || !contact.HasAddedUs {
return nil, errors.New("Can't find contact for canceling verification request")
}
if verifRequest.RequestStatus != verification.RequestStatusPENDING {
return errors.New("can't cancel a request already verified")
return nil, errors.New("can cancel only pending verification request")
}
verifRequest.RequestStatus = verification.RequestStatusCANCELED
err = m.verificationDatabase.SaveVerificationRequest(verifRequest)
if err != nil {
return err
return nil, err
}
contact.VerificationStatus = VerificationStatusUNVERIFIED
contact.LastUpdatedLocally = m.getTimesource().GetCurrentTime()
err = m.persistence.SaveContact(contact, nil)
if err != nil {
return err
return nil, err
}
// We sync the contact with the other devices
err = m.syncContact(context.Background(), contact)
if err != nil {
return err
}
err = m.SyncVerificationRequest(context.Background(), verifRequest)
if err != nil {
return err
return nil, err
}
m.allContacts.Store(contact.ID, contact)
return nil
// NOTE: does we need it?
chat, ok := m.allChats.Load(verifRequest.To)
if !ok {
publicKey, err := contact.PublicKey()
if err != nil {
return nil, err
}
chat = OneToOneFromPublicKey(publicKey, m.getTimesource())
// We don't want to show the chat to the user
chat.Active = false
}
m.allChats.Store(chat.ID, chat)
clock, _ := chat.NextClockAndTimestamp(m.getTimesource())
response := &MessengerResponse{}
response.AddVerificationRequest(verifRequest)
err = m.SyncVerificationRequest(context.Background(), verifRequest)
if err != nil {
return nil, err
}
request := &protobuf.CancelContactVerification{
Id: id,
Clock: clock,
}
encodedMessage, err := proto.Marshal(request)
if err != nil {
return nil, err
}
_, err = m.dispatchMessage(ctx, common.RawMessage{
LocalChatID: chat.ID,
Payload: encodedMessage,
MessageType: protobuf.ApplicationMetadataMessage_CANCEL_CONTACT_VERIFICATION,
ResendAutomatically: true,
})
if err != nil {
return nil, err
}
return response, nil
}
func (m *Messenger) AcceptContactVerificationRequest(ctx context.Context, id string, response string) (*MessengerResponse, error) {
verifRequest, err := m.verificationDatabase.GetVerificationRequest(id)
if err != nil {
return nil, err
@ -293,7 +338,6 @@ func (m *Messenger) AcceptContactVerificationRequest(ctx context.Context, id str
}
resp.AddActivityCenterNotification(notification)
}
return resp, nil
@ -370,7 +414,7 @@ func (m *Messenger) VerifiedTrusted(ctx context.Context, request *requests.Verif
return nil, err
}
verifRequest, err := m.verificationDatabase.GetVerificationRequestSentTo(contactID)
verifRequest, err := m.verificationDatabase.GetLatestVerificationRequestSentTo(contactID)
if err != nil {
return nil, err
}
@ -889,6 +933,59 @@ func (m *Messenger) HandleDeclineContactVerification(state *ReceivedMessageState
return m.createContactVerificationNotification(contact, state, persistedVR, msg, nil)
}
func (m *Messenger) HandleCancelContactVerification(state *ReceivedMessageState, request protobuf.CancelContactVerification) error {
myPubKey := hexutil.Encode(crypto.FromECDSAPub(&m.identity.PublicKey))
contactID := hexutil.Encode(crypto.FromECDSAPub(state.CurrentMessageState.PublicKey))
contact := state.CurrentMessageState.Contact
persistedVR, err := m.verificationDatabase.GetVerificationRequest(request.Id)
if err != nil {
m.logger.Debug("Error obtaining verification request", zap.Error(err))
return err
}
if persistedVR != nil && persistedVR.RequestStatus != verification.RequestStatusPENDING {
m.logger.Debug("Only pending verification request can be canceled", zap.String("contactID", contactID))
return errors.New("must be a pending verification request")
}
if persistedVR == nil {
// This is a response for which we have not received its request before
persistedVR = &verification.Request{}
persistedVR.From = contactID
persistedVR.To = myPubKey
}
persistedVR.RequestStatus = verification.RequestStatusCANCELED
persistedVR.RepliedAt = request.Clock
err = m.verificationDatabase.SaveVerificationRequest(persistedVR)
if err != nil {
m.logger.Debug("Error storing verification request", zap.Error(err))
return err
}
err = m.SyncVerificationRequest(context.Background(), persistedVR)
if err != nil {
return err
}
state.AllVerificationRequests = append(state.AllVerificationRequests, persistedVR)
msg, err := m.persistence.MessageByID(request.Id)
if err != nil {
return err
}
if msg != nil {
msg.ContactVerificationState = common.ContactVerificationStateCanceled
state.Response.AddMessage(msg)
}
return m.createContactVerificationNotification(contact, state, persistedVR, msg, nil)
}
func (m *Messenger) HandleContactVerificationTrusted(state *ReceivedMessageState, request protobuf.ContactVerificationTrusted) error {
if common.IsPubKeyEqual(state.CurrentMessageState.PublicKey, &m.identity.PublicKey) {
return nil // Is ours, do nothing

View File

@ -428,17 +428,17 @@ func (s *MessengerVerificationRequests) TestDeclineVerificationRequests() {
s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message)
s.Require().Equal(challenge, resp.ActivityCenterNotifications()[0].Message.Text)
s.Require().Equal(common.ContactVerificationStatePending, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState)
s.Require().Equal(resp.ActivityCenterNotifications()[0].Message.ContactVerificationState, common.ContactVerificationStatePending)
s.Require().Len(resp.Messages(), 1)
s.Require().Equal(challenge, resp.Messages()[0].Text)
s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState)
s.Require().Equal(resp.Messages()[0].ContactVerificationState, common.ContactVerificationStatePending)
// Make sure it's stored and retrieved correctly
notifications, err := theirMessenger.UnreadActivityCenterNotifications("", 4, ActivityCenterNotificationTypeContactVerification)
s.Require().NoError(err)
s.Require().Len(notifications.Notifications, 1)
s.Require().Equal(notifications.Notifications[0].ContactVerificationStatus, verification.RequestStatusPENDING)
s.Require().Equal(common.ContactVerificationStatePending, notifications.Notifications[0].Message.ContactVerificationState)
s.Require().Equal(notifications.Notifications[0].Message.ContactVerificationState, common.ContactVerificationStatePending)
resp, err = theirMessenger.DeclineContactVerificationRequest(context.Background(), verificationRequestID)
@ -455,16 +455,16 @@ func (s *MessengerVerificationRequests) TestDeclineVerificationRequests() {
s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID)
s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusDECLINED)
s.Require().Equal(common.ContactVerificationStateDeclined, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState)
s.Require().Equal(resp.ActivityCenterNotifications()[0].Message.ContactVerificationState, common.ContactVerificationStateDeclined)
s.Require().Len(resp.Messages(), 1)
s.Require().Equal(common.ContactVerificationStateDeclined, resp.Messages()[0].ContactVerificationState)
s.Require().Equal(resp.Messages()[0].ContactVerificationState, common.ContactVerificationStateDeclined)
// Make sure it's stored and retrieved correctly
notifications, err = theirMessenger.UnreadActivityCenterNotifications("", 4, ActivityCenterNotificationTypeContactVerification)
s.Require().NoError(err)
s.Require().Len(notifications.Notifications, 1)
s.Require().Equal(notifications.Notifications[0].ContactVerificationStatus, verification.RequestStatusDECLINED)
s.Require().Equal(common.ContactVerificationStateDeclined, notifications.Notifications[0].Message.ContactVerificationState)
s.Require().Equal(notifications.Notifications[0].Message.ContactVerificationState, common.ContactVerificationStateDeclined)
// Wait for the message to reach its destination
resp, err = WaitOnMessengerResponse(
@ -479,12 +479,91 @@ func (s *MessengerVerificationRequests) TestDeclineVerificationRequests() {
s.Require().Equal(resp.VerificationRequests[0].ID, verificationRequestID)
s.Require().Len(resp.Messages(), 1)
s.Require().Equal(common.ContactVerificationStateDeclined, resp.Messages()[0].ContactVerificationState)
s.Require().Equal(resp.Messages()[0].ContactVerificationState, common.ContactVerificationStateDeclined)
s.Require().Len(resp.ActivityCenterNotifications(), 1)
s.Require().Equal(resp.ActivityCenterNotifications()[0].ID.String(), verificationRequestID)
s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusDECLINED)
s.Require().Equal(common.ContactVerificationStateDeclined, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState)
s.Require().Equal(resp.ActivityCenterNotifications()[0].Message.ContactVerificationState, common.ContactVerificationStateDeclined)
}
func (s *MessengerVerificationRequests) TestCancelVerificationRequest() {
theirMessenger := s.newMessenger(s.shh)
_, err := theirMessenger.Start()
s.Require().NoError(err)
s.mutualContact(theirMessenger)
theirPk := types.EncodeHex(crypto.FromECDSAPub(&theirMessenger.identity.PublicKey))
challenge := "challenge"
resp, err := s.m.SendContactVerificationRequest(context.Background(), theirPk, challenge)
s.Require().NoError(err)
s.Require().Len(resp.VerificationRequests, 1)
verificationRequestID := resp.VerificationRequests[0].ID
s.Require().Len(resp.Messages(), 1)
s.Require().Equal(challenge, resp.Messages()[0].Text)
s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState)
// Wait for the message to reach its destination
resp, err = WaitOnMessengerResponse(
theirMessenger,
func(r *MessengerResponse) bool {
return len(r.VerificationRequests) > 0 && len(r.ActivityCenterNotifications()) > 0
},
"no messages",
)
s.Require().NoError(err)
s.Require().Len(resp.VerificationRequests, 1)
s.Require().Equal(resp.VerificationRequests[0].ID, verificationRequestID)
s.Require().Equal(resp.ActivityCenterNotifications()[0].Type, ActivityCenterNotificationTypeContactVerification)
s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusPENDING)
s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message)
s.Require().Equal(challenge, resp.ActivityCenterNotifications()[0].Message.Text)
s.Require().Equal(common.ContactVerificationStatePending, resp.ActivityCenterNotifications()[0].Message.ContactVerificationState)
s.Require().Len(resp.Messages(), 1)
s.Require().Equal(challenge, resp.Messages()[0].Text)
s.Require().Equal(common.ContactVerificationStatePending, resp.Messages()[0].ContactVerificationState)
// Make sure it's stored and retrieved correctly
notifications, err := theirMessenger.UnreadActivityCenterNotifications("", 4, ActivityCenterNotificationTypeContactVerification)
s.Require().NoError(err)
s.Require().Len(notifications.Notifications, 1)
s.Require().Equal(notifications.Notifications[0].ContactVerificationStatus, verification.RequestStatusPENDING)
s.Require().Equal(common.ContactVerificationStatePending, notifications.Notifications[0].Message.ContactVerificationState)
resp, err = s.m.CancelVerificationRequest(context.Background(), verificationRequestID)
s.Require().NoError(err)
s.Require().NotNil(resp)
s.Require().Len(resp.VerificationRequests, 1)
s.Require().Equal(resp.VerificationRequests[0].ID, verificationRequestID)
s.Require().Equal(resp.VerificationRequests[0].RequestStatus, verification.RequestStatusCANCELED)
// Check canceled state on the receiver's side
resp, err = WaitOnMessengerResponse(
theirMessenger,
func(r *MessengerResponse) bool {
return len(r.VerificationRequests) > 0 && len(r.ActivityCenterNotifications()) > 0
},
"no messages",
)
s.Require().NoError(err)
s.Require().Len(resp.VerificationRequests, 1)
s.Require().Equal(resp.VerificationRequests[0].ID, verificationRequestID)
s.Require().Equal(resp.ActivityCenterNotifications()[0].Type, ActivityCenterNotificationTypeContactVerification)
s.Require().Equal(resp.ActivityCenterNotifications()[0].ContactVerificationStatus, verification.RequestStatusCANCELED)
s.Require().NotNil(resp.ActivityCenterNotifications()[0].Message)
s.Require().Equal(challenge, resp.ActivityCenterNotifications()[0].Message.Text)
s.Require().Equal(resp.ActivityCenterNotifications()[0].Message.ContactVerificationState, common.ContactVerificationStateCanceled)
s.Require().Len(resp.Messages(), 1)
s.Require().Equal(challenge, resp.Messages()[0].Text)
s.Require().Equal(resp.Messages()[0].ContactVerificationState, common.ContactVerificationStateCanceled)
}
func (s *MessengerVerificationRequests) TearDownTest() {

View File

@ -84,6 +84,7 @@ const (
ApplicationMetadataMessage_SYNC_DELETE_FOR_ME_MESSAGE ApplicationMetadataMessage_Type = 58
ApplicationMetadataMessage_SYNC_SAVED_ADDRESS ApplicationMetadataMessage_Type = 59
ApplicationMetadataMessage_COMMUNITY_CANCEL_REQUEST_TO_JOIN ApplicationMetadataMessage_Type = 60
ApplicationMetadataMessage_CANCEL_CONTACT_VERIFICATION ApplicationMetadataMessage_Type = 61
)
var ApplicationMetadataMessage_Type_name = map[int32]string{
@ -148,6 +149,7 @@ var ApplicationMetadataMessage_Type_name = map[int32]string{
58: "SYNC_DELETE_FOR_ME_MESSAGE",
59: "SYNC_SAVED_ADDRESS",
60: "COMMUNITY_CANCEL_REQUEST_TO_JOIN",
61: "CANCEL_CONTACT_VERIFICATION",
}
var ApplicationMetadataMessage_Type_value = map[string]int32{
@ -212,6 +214,7 @@ var ApplicationMetadataMessage_Type_value = map[string]int32{
"SYNC_DELETE_FOR_ME_MESSAGE": 58,
"SYNC_SAVED_ADDRESS": 59,
"COMMUNITY_CANCEL_REQUEST_TO_JOIN": 60,
"CANCEL_CONTACT_VERIFICATION": 61,
}
func (x ApplicationMetadataMessage_Type) String() string {
@ -290,62 +293,63 @@ func init() {
}
var fileDescriptor_ad09a6406fcf24c7 = []byte{
// 908 bytes of a gzipped FileDescriptorProto
// 914 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x55, 0x5b, 0x77, 0x13, 0x37,
0x10, 0x6e, 0x20, 0x4d, 0x40, 0xb9, 0xa0, 0x88, 0x5c, 0x9c, 0xbb, 0x31, 0x34, 0x04, 0x68, 0x4d,
0x0b, 0xbd, 0xd3, 0x3e, 0xc8, 0xd2, 0xc4, 0x16, 0xde, 0x95, 0x16, 0x49, 0x6b, 0x8e, 0xfb, 0xa2,
0xb3, 0x14, 0x97, 0x93, 0x73, 0x80, 0xf8, 0x10, 0xf3, 0x90, 0x9f, 0xda, 0x5f, 0xd1, 0xbf, 0xd0,
0xa3, 0xbd, 0x3a, 0xb6, 0x43, 0x9e, 0x92, 0x9d, 0xf9, 0x34, 0xa3, 0xf9, 0xe6, 0xfb, 0x64, 0xd4,
0x48, 0x86, 0xc3, 0xf7, 0xa7, 0x7f, 0x27, 0xa3, 0xd3, 0xb3, 0x8f, 0xee, 0xc3, 0x60, 0x94, 0xbc,
0x4d, 0x46, 0x89, 0xfb, 0x30, 0x38, 0x3f, 0x4f, 0xde, 0x0d, 0x9a, 0xc3, 0x4f, 0x67, 0xa3, 0x33,
0x72, 0x2b, 0xfd, 0xf3, 0xe6, 0xf3, 0x3f, 0x8d, 0xff, 0x56, 0xd1, 0x0e, 0xad, 0x0e, 0x84, 0x39,
0x3e, 0xcc, 0xe0, 0x64, 0x0f, 0xdd, 0x3e, 0x3f, 0x7d, 0xf7, 0x31, 0x19, 0x7d, 0xfe, 0x34, 0xa8,
0xcd, 0xd5, 0xe7, 0x8e, 0x97, 0x75, 0x15, 0x20, 0x35, 0xb4, 0x38, 0x4c, 0x2e, 0xde, 0x9f, 0x25,
0x6f, 0x6b, 0x37, 0xd2, 0x5c, 0xf1, 0x49, 0xfe, 0x44, 0xf3, 0xa3, 0x8b, 0xe1, 0xa0, 0x76, 0xb3,
0x3e, 0x77, 0xbc, 0xfa, 0xec, 0x51, 0xb3, 0xe8, 0xd7, 0xbc, 0xba, 0x57, 0xd3, 0x5e, 0x0c, 0x07,
0x3a, 0x3d, 0xd6, 0xf8, 0x77, 0x05, 0xcd, 0xfb, 0x4f, 0xb2, 0x84, 0x16, 0x63, 0xd9, 0x95, 0xea,
0xb5, 0xc4, 0x5f, 0x11, 0x8c, 0x96, 0x59, 0x87, 0x5a, 0x17, 0x82, 0x31, 0xb4, 0x0d, 0x78, 0x8e,
0x10, 0xb4, 0xca, 0x94, 0xb4, 0x94, 0x59, 0x17, 0x47, 0x9c, 0x5a, 0xc0, 0x37, 0xc8, 0x3e, 0xda,
0x0e, 0x21, 0x6c, 0x81, 0x36, 0x1d, 0x11, 0xe5, 0xe1, 0xf2, 0xc8, 0x4d, 0xb2, 0x81, 0xd6, 0x22,
0x2a, 0xb4, 0x13, 0xd2, 0x58, 0x1a, 0x04, 0xd4, 0x0a, 0x25, 0xf1, 0xbc, 0x0f, 0x9b, 0xbe, 0x64,
0x97, 0xc3, 0x5f, 0x93, 0xfb, 0xe8, 0x50, 0xc3, 0xab, 0x18, 0x8c, 0x75, 0x94, 0x73, 0x0d, 0xc6,
0xb8, 0x13, 0xa5, 0x9d, 0xd5, 0x54, 0x1a, 0xca, 0x52, 0xd0, 0x02, 0x79, 0x8c, 0x8e, 0x28, 0x63,
0x10, 0x59, 0x77, 0x1d, 0x76, 0x91, 0x3c, 0x41, 0x0f, 0x39, 0xb0, 0x40, 0x48, 0xb8, 0x16, 0x7c,
0x8b, 0x6c, 0xa1, 0xbb, 0x05, 0x68, 0x3c, 0x71, 0x9b, 0xac, 0x23, 0x6c, 0x40, 0xf2, 0x4b, 0x51,
0x44, 0x0e, 0xd1, 0xee, 0x64, 0xed, 0x71, 0xc0, 0x92, 0xa7, 0x66, 0x6a, 0x48, 0x97, 0x13, 0x88,
0x97, 0x67, 0xa7, 0x29, 0x63, 0x2a, 0x96, 0x16, 0xaf, 0x90, 0x7b, 0x68, 0x7f, 0x3a, 0x1d, 0xc5,
0xad, 0x40, 0x30, 0xe7, 0xf7, 0x82, 0x57, 0xc9, 0x01, 0xda, 0x29, 0xf6, 0xc1, 0x14, 0x07, 0x47,
0x79, 0x0f, 0xb4, 0x15, 0x06, 0x42, 0x90, 0x16, 0xdf, 0x21, 0x0d, 0x74, 0x10, 0xc5, 0xa6, 0xe3,
0xa4, 0xb2, 0xe2, 0x44, 0xb0, 0xac, 0x84, 0x86, 0xb6, 0x30, 0x56, 0x67, 0x94, 0x63, 0xcf, 0xd0,
0x97, 0x31, 0x4e, 0x83, 0x89, 0x94, 0x34, 0x80, 0xd7, 0xc8, 0x2e, 0xda, 0x9a, 0x06, 0xbf, 0x8a,
0x41, 0xf7, 0x31, 0x21, 0x0f, 0x50, 0xfd, 0x8a, 0x64, 0x55, 0xe2, 0xae, 0x9f, 0x7a, 0x56, 0xbf,
0x94, 0x3f, 0xbc, 0xee, 0x47, 0x9a, 0x95, 0xce, 0x8f, 0x6f, 0x78, 0x09, 0x42, 0xa8, 0x5e, 0x0a,
0xa7, 0x21, 0xe7, 0x79, 0x93, 0x6c, 0xa3, 0x8d, 0xb6, 0x56, 0x71, 0x94, 0xd2, 0xe2, 0x84, 0xec,
0x09, 0x9b, 0x4d, 0xb7, 0x45, 0xd6, 0xd0, 0x4a, 0x16, 0xe4, 0x20, 0xad, 0xb0, 0x7d, 0x5c, 0xf3,
0x68, 0xa6, 0xc2, 0x30, 0x96, 0xc2, 0xf6, 0x1d, 0x07, 0xc3, 0xb4, 0x88, 0x52, 0xf4, 0x36, 0xa9,
0xa1, 0xf5, 0x2a, 0x35, 0x56, 0x67, 0xc7, 0xdf, 0xba, 0xca, 0x94, 0xdb, 0x56, 0xee, 0xa5, 0x12,
0x12, 0xef, 0x92, 0x3b, 0x68, 0x29, 0x12, 0xb2, 0x94, 0xfd, 0x9e, 0xf7, 0x0e, 0x70, 0x51, 0x79,
0x67, 0xdf, 0xdf, 0xc4, 0x58, 0x6a, 0x63, 0x53, 0x58, 0xe7, 0xc0, 0xcf, 0xc2, 0x21, 0x80, 0x31,
0xbf, 0x1c, 0x7a, 0x51, 0xcd, 0xd2, 0x4c, 0xde, 0x1a, 0xd7, 0xc9, 0x0e, 0xda, 0xa4, 0x52, 0xc9,
0x7e, 0xa8, 0x62, 0xe3, 0x42, 0xb0, 0x5a, 0x30, 0xd7, 0xa2, 0x96, 0x75, 0xf0, 0xbd, 0xd2, 0x55,
0xe9, 0xc8, 0x1a, 0x42, 0xd5, 0x03, 0x8e, 0x1b, 0x7e, 0x6b, 0x55, 0x38, 0x6f, 0x65, 0x3c, 0x81,
0x1c, 0xdf, 0x27, 0x08, 0x2d, 0xb4, 0x28, 0xeb, 0xc6, 0x11, 0x7e, 0x50, 0x2a, 0xd2, 0x33, 0xdb,
0xf3, 0x93, 0x32, 0x90, 0x16, 0x74, 0x06, 0xfd, 0xa6, 0x54, 0xe4, 0x64, 0x3a, 0x73, 0x23, 0x70,
0x7c, 0xe4, 0x15, 0x37, 0x13, 0xc2, 0x85, 0x09, 0x85, 0x31, 0xc0, 0xf1, 0xc3, 0x94, 0x09, 0x8f,
0x69, 0x29, 0xd5, 0x0d, 0xa9, 0xee, 0xe2, 0x63, 0xb2, 0x89, 0x48, 0x76, 0xc3, 0x00, 0xa8, 0x76,
0x1d, 0x61, 0xac, 0xd2, 0x7d, 0xfc, 0xc8, 0xd3, 0x98, 0xc6, 0x0d, 0x58, 0x2b, 0x64, 0x1b, 0x3f,
0x26, 0x75, 0xb4, 0x57, 0x2d, 0x82, 0x6a, 0xd6, 0x11, 0x3d, 0x70, 0x21, 0x6d, 0x4b, 0xb0, 0x81,
0x90, 0x5d, 0xfc, 0xc4, 0x2f, 0x31, 0x3d, 0x13, 0x69, 0x75, 0x22, 0x02, 0x70, 0x91, 0x60, 0x36,
0xd6, 0x80, 0xbf, 0xf5, 0xfe, 0x4e, 0x33, 0xaf, 0x69, 0x10, 0x80, 0x2d, 0xad, 0xf6, 0x5d, 0xca,
0x69, 0xf6, 0xa2, 0x14, 0x76, 0x2a, 0x04, 0xd9, 0xf4, 0xe4, 0x69, 0xb0, 0x3a, 0xf3, 0xd8, 0xe5,
0xe4, 0x53, 0x72, 0x84, 0x1a, 0x57, 0xca, 0xa2, 0x52, 0xed, 0xf7, 0xd5, 0x06, 0x4a, 0x70, 0x3e,
0x91, 0xc1, 0x3f, 0xf8, 0x91, 0x8a, 0xa3, 0x45, 0x87, 0x1e, 0xe8, 0x52, 0xfd, 0xf8, 0x99, 0x17,
0xc5, 0xc4, 0xfd, 0x2e, 0x01, 0x9e, 0xfb, 0x12, 0xc5, 0x53, 0x34, 0x13, 0xf1, 0x63, 0x29, 0x0d,
0xab, 0x63, 0x63, 0x81, 0xbb, 0xd8, 0x80, 0xc6, 0x3f, 0x95, 0x1b, 0x1f, 0x47, 0x97, 0xf3, 0xfd,
0x9c, 0xb1, 0x3d, 0x5d, 0xaf, 0xa8, 0x82, 0x7f, 0x29, 0x35, 0x31, 0xc1, 0x8d, 0xe3, 0xc0, 0x84,
0xf1, 0xad, 0x7f, 0xcd, 0x5e, 0xa9, 0x19, 0x24, 0x05, 0x40, 0x7b, 0x80, 0x7f, 0xf3, 0xf9, 0xb4,
0x44, 0xee, 0x05, 0xff, 0x2e, 0x87, 0x95, 0x25, 0x7e, 0x2f, 0xc5, 0x61, 0x68, 0x0f, 0x78, 0xf1,
0x7c, 0xe3, 0x17, 0xfe, 0xbd, 0xa9, 0xea, 0x32, 0x2a, 0x19, 0x04, 0x53, 0xd6, 0xfc, 0xa3, 0xb5,
0xf2, 0xd7, 0x52, 0xf3, 0xe9, 0x8b, 0xe2, 0x07, 0xf1, 0xcd, 0x42, 0xfa, 0xdf, 0xf3, 0xff, 0x03,
0x00, 0x00, 0xff, 0xff, 0xfb, 0xbe, 0x92, 0x1c, 0xb7, 0x07, 0x00, 0x00,
0x10, 0x6e, 0x20, 0x4d, 0x40, 0xb9, 0x29, 0x22, 0x17, 0xe7, 0x6e, 0x0c, 0x0d, 0x01, 0x5a, 0xd3,
0x42, 0xef, 0x94, 0x07, 0x59, 0x9a, 0xd8, 0xc2, 0xbb, 0xd2, 0x22, 0x69, 0xcd, 0x71, 0x5f, 0x74,
0x96, 0xe2, 0x72, 0x72, 0x0e, 0x10, 0x1f, 0x62, 0x1e, 0xf2, 0x2f, 0xfa, 0x7b, 0xfb, 0xd4, 0xa3,
0xbd, 0x3a, 0xb6, 0x53, 0x9e, 0x92, 0x9d, 0xf9, 0x34, 0xa3, 0xf9, 0xe6, 0xfb, 0x64, 0xd4, 0x48,
0x86, 0xc3, 0xf7, 0x67, 0x7f, 0x25, 0xa3, 0xb3, 0xf3, 0x8f, 0xee, 0xc3, 0x60, 0x94, 0xbc, 0x4d,
0x46, 0x89, 0xfb, 0x30, 0xb8, 0xb8, 0x48, 0xde, 0x0d, 0x9a, 0xc3, 0x4f, 0xe7, 0xa3, 0x73, 0x72,
0x2b, 0xfd, 0xf3, 0xe6, 0xf3, 0xdf, 0x8d, 0x7f, 0xd6, 0xd0, 0x2e, 0xad, 0x0e, 0x84, 0x39, 0x3e,
0xcc, 0xe0, 0x64, 0x1f, 0xdd, 0xbe, 0x38, 0x7b, 0xf7, 0x31, 0x19, 0x7d, 0xfe, 0x34, 0xa8, 0xcd,
0xd5, 0xe7, 0x4e, 0x96, 0x75, 0x15, 0x20, 0x35, 0xb4, 0x38, 0x4c, 0x2e, 0xdf, 0x9f, 0x27, 0x6f,
0x6b, 0x37, 0xd2, 0x5c, 0xf1, 0x49, 0x5e, 0xa0, 0xf9, 0xd1, 0xe5, 0x70, 0x50, 0xbb, 0x59, 0x9f,
0x3b, 0x59, 0x7d, 0xfa, 0xb0, 0x59, 0xf4, 0x6b, 0x5e, 0xdf, 0xab, 0x69, 0x2f, 0x87, 0x03, 0x9d,
0x1e, 0x6b, 0xfc, 0xbb, 0x82, 0xe6, 0xfd, 0x27, 0x59, 0x42, 0x8b, 0xb1, 0xec, 0x4a, 0xf5, 0x5a,
0xe2, 0xaf, 0x08, 0x46, 0xcb, 0xac, 0x43, 0xad, 0x0b, 0xc1, 0x18, 0xda, 0x06, 0x3c, 0x47, 0x08,
0x5a, 0x65, 0x4a, 0x5a, 0xca, 0xac, 0x8b, 0x23, 0x4e, 0x2d, 0xe0, 0x1b, 0xe4, 0x00, 0xed, 0x84,
0x10, 0xb6, 0x40, 0x9b, 0x8e, 0x88, 0xf2, 0x70, 0x79, 0xe4, 0x26, 0xd9, 0x44, 0xeb, 0x11, 0x15,
0xda, 0x09, 0x69, 0x2c, 0x0d, 0x02, 0x6a, 0x85, 0x92, 0x78, 0xde, 0x87, 0x4d, 0x5f, 0xb2, 0xab,
0xe1, 0xaf, 0xc9, 0x3d, 0x74, 0xa4, 0xe1, 0x55, 0x0c, 0xc6, 0x3a, 0xca, 0xb9, 0x06, 0x63, 0xdc,
0xa9, 0xd2, 0xce, 0x6a, 0x2a, 0x0d, 0x65, 0x29, 0x68, 0x81, 0x3c, 0x42, 0xc7, 0x94, 0x31, 0x88,
0xac, 0xfb, 0x12, 0x76, 0x91, 0x3c, 0x46, 0x0f, 0x38, 0xb0, 0x40, 0x48, 0xf8, 0x22, 0xf8, 0x16,
0xd9, 0x46, 0x77, 0x0a, 0xd0, 0x78, 0xe2, 0x36, 0xd9, 0x40, 0xd8, 0x80, 0xe4, 0x57, 0xa2, 0x88,
0x1c, 0xa1, 0xbd, 0xc9, 0xda, 0xe3, 0x80, 0x25, 0x4f, 0xcd, 0xd4, 0x90, 0x2e, 0x27, 0x10, 0x2f,
0xcf, 0x4e, 0x53, 0xc6, 0x54, 0x2c, 0x2d, 0x5e, 0x21, 0x77, 0xd1, 0xc1, 0x74, 0x3a, 0x8a, 0x5b,
0x81, 0x60, 0xce, 0xef, 0x05, 0xaf, 0x92, 0x43, 0xb4, 0x5b, 0xec, 0x83, 0x29, 0x0e, 0x8e, 0xf2,
0x1e, 0x68, 0x2b, 0x0c, 0x84, 0x20, 0x2d, 0x5e, 0x23, 0x0d, 0x74, 0x18, 0xc5, 0xa6, 0xe3, 0xa4,
0xb2, 0xe2, 0x54, 0xb0, 0xac, 0x84, 0x86, 0xb6, 0x30, 0x56, 0x67, 0x94, 0x63, 0xcf, 0xd0, 0xff,
0x63, 0x9c, 0x06, 0x13, 0x29, 0x69, 0x00, 0xaf, 0x93, 0x3d, 0xb4, 0x3d, 0x0d, 0x7e, 0x15, 0x83,
0xee, 0x63, 0x42, 0xee, 0xa3, 0xfa, 0x35, 0xc9, 0xaa, 0xc4, 0x1d, 0x3f, 0xf5, 0xac, 0x7e, 0x29,
0x7f, 0x78, 0xc3, 0x8f, 0x34, 0x2b, 0x9d, 0x1f, 0xdf, 0xf4, 0x12, 0x84, 0x50, 0xbd, 0x14, 0x4e,
0x43, 0xce, 0xf3, 0x16, 0xd9, 0x41, 0x9b, 0x6d, 0xad, 0xe2, 0x28, 0xa5, 0xc5, 0x09, 0xd9, 0x13,
0x36, 0x9b, 0x6e, 0x9b, 0xac, 0xa3, 0x95, 0x2c, 0xc8, 0x41, 0x5a, 0x61, 0xfb, 0xb8, 0xe6, 0xd1,
0x4c, 0x85, 0x61, 0x2c, 0x85, 0xed, 0x3b, 0x0e, 0x86, 0x69, 0x11, 0xa5, 0xe8, 0x1d, 0x52, 0x43,
0x1b, 0x55, 0x6a, 0xac, 0xce, 0xae, 0xbf, 0x75, 0x95, 0x29, 0xb7, 0xad, 0xdc, 0x4b, 0x25, 0x24,
0xde, 0x23, 0x6b, 0x68, 0x29, 0x12, 0xb2, 0x94, 0xfd, 0xbe, 0xf7, 0x0e, 0x70, 0x51, 0x79, 0xe7,
0xc0, 0xdf, 0xc4, 0x58, 0x6a, 0x63, 0x53, 0x58, 0xe7, 0xd0, 0xcf, 0xc2, 0x21, 0x80, 0x31, 0xbf,
0x1c, 0x79, 0x51, 0xcd, 0xd2, 0x4c, 0xde, 0x1a, 0xd7, 0xc9, 0x2e, 0xda, 0xa2, 0x52, 0xc9, 0x7e,
0xa8, 0x62, 0xe3, 0x42, 0xb0, 0x5a, 0x30, 0xd7, 0xa2, 0x96, 0x75, 0xf0, 0xdd, 0xd2, 0x55, 0xe9,
0xc8, 0x1a, 0x42, 0xd5, 0x03, 0x8e, 0x1b, 0x7e, 0x6b, 0x55, 0x38, 0x6f, 0x65, 0x3c, 0x81, 0x1c,
0xdf, 0x23, 0x08, 0x2d, 0xb4, 0x28, 0xeb, 0xc6, 0x11, 0xbe, 0x5f, 0x2a, 0xd2, 0x33, 0xdb, 0xf3,
0x93, 0x32, 0x90, 0x16, 0x74, 0x06, 0xfd, 0xa6, 0x54, 0xe4, 0x64, 0x3a, 0x73, 0x23, 0x70, 0x7c,
0xec, 0x15, 0x37, 0x13, 0xc2, 0x85, 0x09, 0x85, 0x31, 0xc0, 0xf1, 0x83, 0x94, 0x09, 0x8f, 0x69,
0x29, 0xd5, 0x0d, 0xa9, 0xee, 0xe2, 0x13, 0xb2, 0x85, 0x48, 0x76, 0xc3, 0x00, 0xa8, 0x76, 0x1d,
0x61, 0xac, 0xd2, 0x7d, 0xfc, 0xd0, 0xd3, 0x98, 0xc6, 0x0d, 0x58, 0x2b, 0x64, 0x1b, 0x3f, 0x22,
0x75, 0xb4, 0x5f, 0x2d, 0x82, 0x6a, 0xd6, 0x11, 0x3d, 0x70, 0x21, 0x6d, 0x4b, 0xb0, 0x81, 0x90,
0x5d, 0xfc, 0xd8, 0x2f, 0x31, 0x3d, 0x13, 0x69, 0x75, 0x2a, 0x02, 0x70, 0x91, 0x60, 0x36, 0xd6,
0x80, 0xbf, 0xf5, 0xfe, 0x4e, 0x33, 0xaf, 0x69, 0x10, 0x80, 0x2d, 0xad, 0xf6, 0x5d, 0xca, 0x69,
0xf6, 0xa2, 0x14, 0x76, 0x2a, 0x04, 0xd9, 0xf4, 0xe4, 0x69, 0xb0, 0x3a, 0xf3, 0xd8, 0xd5, 0xe4,
0x13, 0x72, 0x8c, 0x1a, 0xd7, 0xca, 0xa2, 0x52, 0xed, 0xf7, 0xd5, 0x06, 0x4a, 0x70, 0x3e, 0x91,
0xc1, 0x3f, 0xf8, 0x91, 0x8a, 0xa3, 0x45, 0x87, 0x1e, 0xe8, 0x52, 0xfd, 0xf8, 0xa9, 0x17, 0xc5,
0xc4, 0xfd, 0xae, 0x00, 0x9e, 0xf9, 0x12, 0xc5, 0x53, 0x34, 0x13, 0xf1, 0x63, 0x29, 0x0d, 0xab,
0x63, 0x63, 0x81, 0xbb, 0xd8, 0x80, 0xc6, 0x3f, 0x95, 0x1b, 0x1f, 0x47, 0x97, 0xf3, 0xfd, 0x9c,
0xb1, 0x3d, 0x5d, 0xaf, 0xa8, 0x82, 0x7f, 0x29, 0x35, 0x31, 0xc1, 0x8d, 0xe3, 0xc0, 0x84, 0xf1,
0xad, 0x7f, 0xcd, 0x5e, 0xa9, 0x19, 0x24, 0x05, 0x40, 0x7b, 0x80, 0x7f, 0xf3, 0xf9, 0xb4, 0x44,
0xee, 0x05, 0xff, 0x2e, 0x87, 0x95, 0x25, 0x7e, 0x2f, 0xc5, 0x61, 0x68, 0x0f, 0x78, 0xf1, 0x7c,
0xe3, 0xe7, 0xfe, 0xbd, 0xa9, 0xea, 0x32, 0x2a, 0x19, 0x04, 0x53, 0xd6, 0xfc, 0xc3, 0x73, 0x97,
0xe7, 0x66, 0x32, 0xf3, 0xa2, 0xb5, 0xf2, 0xe7, 0x52, 0xf3, 0xc9, 0xf3, 0xe2, 0x17, 0xf3, 0xcd,
0x42, 0xfa, 0xdf, 0xb3, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x1d, 0x3f, 0x82, 0xd8, 0x07,
0x00, 0x00,
}

View File

@ -74,5 +74,6 @@ message ApplicationMetadataMessage {
SYNC_DELETE_FOR_ME_MESSAGE = 58;
SYNC_SAVED_ADDRESS = 59;
COMMUNITY_CANCEL_REQUEST_TO_JOIN = 60;
CANCEL_CONTACT_VERIFICATION = 61;
}
}

View File

@ -825,6 +825,7 @@ type ChatMessage struct {
// The type of the content of the message
ContentType ChatMessage_ContentType `protobuf:"varint,8,opt,name=content_type,json=contentType,proto3,enum=protobuf.ChatMessage_ContentType" json:"content_type,omitempty"`
// Types that are valid to be assigned to Payload:
//
// *ChatMessage_Sticker
// *ChatMessage_Image
// *ChatMessage_Audio

View File

@ -216,11 +216,59 @@ func (m *DeclineContactVerification) GetId() string {
return ""
}
type CancelContactVerification struct {
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *CancelContactVerification) Reset() { *m = CancelContactVerification{} }
func (m *CancelContactVerification) String() string { return proto.CompactTextString(m) }
func (*CancelContactVerification) ProtoMessage() {}
func (*CancelContactVerification) Descriptor() ([]byte, []int) {
return fileDescriptor_d6997df64de39454, []int{4}
}
func (m *CancelContactVerification) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelContactVerification.Unmarshal(m, b)
}
func (m *CancelContactVerification) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_CancelContactVerification.Marshal(b, m, deterministic)
}
func (m *CancelContactVerification) XXX_Merge(src proto.Message) {
xxx_messageInfo_CancelContactVerification.Merge(m, src)
}
func (m *CancelContactVerification) XXX_Size() int {
return xxx_messageInfo_CancelContactVerification.Size(m)
}
func (m *CancelContactVerification) XXX_DiscardUnknown() {
xxx_messageInfo_CancelContactVerification.DiscardUnknown(m)
}
var xxx_messageInfo_CancelContactVerification proto.InternalMessageInfo
func (m *CancelContactVerification) GetClock() uint64 {
if m != nil {
return m.Clock
}
return 0
}
func (m *CancelContactVerification) GetId() string {
if m != nil {
return m.Id
}
return ""
}
func init() {
proto.RegisterType((*RequestContactVerification)(nil), "protobuf.RequestContactVerification")
proto.RegisterType((*AcceptContactVerification)(nil), "protobuf.AcceptContactVerification")
proto.RegisterType((*ContactVerificationTrusted)(nil), "protobuf.ContactVerificationTrusted")
proto.RegisterType((*DeclineContactVerification)(nil), "protobuf.DeclineContactVerification")
proto.RegisterType((*CancelContactVerification)(nil), "protobuf.CancelContactVerification")
}
func init() {
@ -228,7 +276,7 @@ func init() {
}
var fileDescriptor_d6997df64de39454 = []byte{
// 196 bytes of a gzipped FileDescriptorProto
// 208 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4a, 0xce, 0xcf, 0x2b,
0x49, 0x4c, 0x2e, 0x89, 0x2f, 0x4b, 0x2d, 0xca, 0x4c, 0xcb, 0x4c, 0x4e, 0x2c, 0xc9, 0xcc, 0xcf,
0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x00, 0x53, 0x49, 0xa5, 0x69, 0x4a, 0x01, 0x5c,
@ -239,7 +287,7 @@ var fileDescriptor_d6997df64de39454 = []byte{
0x06, 0xf2, 0x71, 0x31, 0x65, 0xa6, 0x48, 0x30, 0x81, 0x4d, 0x62, 0xca, 0x4c, 0x11, 0x92, 0xe2,
0xe2, 0x28, 0x4a, 0x2d, 0x2e, 0xc8, 0xcf, 0x2b, 0x86, 0x99, 0x0f, 0xe7, 0x2b, 0x39, 0x71, 0x49,
0x61, 0x31, 0x38, 0xa4, 0xa8, 0xb4, 0xb8, 0x24, 0x35, 0x85, 0x38, 0xf3, 0x41, 0x66, 0xb8, 0xa4,
0x26, 0xe7, 0x64, 0xe6, 0xa5, 0x92, 0xed, 0x46, 0x27, 0xde, 0x28, 0x6e, 0x3d, 0x7d, 0x6b, 0x58,
0x38, 0x26, 0xb1, 0x81, 0x59, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x70, 0x15, 0x72, 0xc2,
0x76, 0x01, 0x00, 0x00,
0x26, 0xe7, 0x64, 0xe6, 0xa5, 0x92, 0xed, 0x46, 0x25, 0x47, 0x2e, 0x49, 0xe7, 0xc4, 0xbc, 0xe4,
0xd4, 0x1c, 0xb2, 0x8d, 0x70, 0xe2, 0x8d, 0xe2, 0xd6, 0xd3, 0xb7, 0x86, 0x45, 0x45, 0x12, 0x1b,
0x98, 0x65, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x91, 0x98, 0xa6, 0xb9, 0x01, 0x00, 0x00,
}

View File

@ -23,3 +23,8 @@ message DeclineContactVerification {
uint64 clock = 1;
string id = 2;
}
message CancelContactVerification {
uint64 clock = 1;
string id = 2;
}

View File

@ -166,6 +166,7 @@ type MembershipUpdateMessage struct {
// An optional chat message
//
// Types that are valid to be assigned to ChatEntity:
//
// *MembershipUpdateMessage_Message
// *MembershipUpdateMessage_EmojiReaction
ChatEntity isMembershipUpdateMessage_ChatEntity `protobuf_oneof:"chat_entity"`

View File

@ -55,16 +55,16 @@ func (StatusUpdate_StatusType) EnumDescriptor() ([]byte, []int) {
}
// Specs:
//:AUTOMATIC
//To Send - "AUTOMATIC" status ping every 5 minutes
//Display - Online for up to 5 minutes from the last clock, after that Offline
//:ALWAYS_ONLINE
//To Send - "ALWAYS_ONLINE" status ping every 5 minutes
//Display - Online for up to 2 weeks from the last clock, after that Offline
//:INACTIVE
//To Send - A single "INACTIVE" status ping
//Display - Offline forever
//Note: Only send pings if the user interacted with the app in the last x minutes.
// :AUTOMATIC
// To Send - "AUTOMATIC" status ping every 5 minutes
// Display - Online for up to 5 minutes from the last clock, after that Offline
// :ALWAYS_ONLINE
// To Send - "ALWAYS_ONLINE" status ping every 5 minutes
// Display - Online for up to 2 weeks from the last clock, after that Offline
// :INACTIVE
// To Send - A single "INACTIVE" status ping
// Display - Offline forever
// Note: Only send pings if the user interacted with the app in the last x minutes.
type StatusUpdate struct {
Clock uint64 `protobuf:"varint,1,opt,name=clock,proto3" json:"clock,omitempty"`
StatusType StatusUpdate_StatusType `protobuf:"varint,2,opt,name=status_type,json=statusType,proto3,enum=protobuf.StatusUpdate_StatusType" json:"status_type,omitempty"`

View File

@ -82,6 +82,7 @@ type SyncSetting struct {
Type SyncSetting_Type `protobuf:"varint,1,opt,name=type,proto3,enum=protobuf.SyncSetting_Type" json:"type,omitempty"`
Clock uint64 `protobuf:"varint,2,opt,name=clock,proto3" json:"clock,omitempty"`
// Types that are valid to be assigned to Value:
//
// *SyncSetting_ValueString
// *SyncSetting_ValueBytes
// *SyncSetting_ValueBool

View File

@ -306,6 +306,8 @@ func (m *StatusMessage) HandleApplication() error {
return m.unmarshalProtobufData(new(protobuf.RequestContactVerification))
case protobuf.ApplicationMetadataMessage_ACCEPT_CONTACT_VERIFICATION:
return m.unmarshalProtobufData(new(protobuf.AcceptContactVerification))
case protobuf.ApplicationMetadataMessage_CANCEL_CONTACT_VERIFICATION:
return m.unmarshalProtobufData(new(protobuf.CancelContactVerification))
case protobuf.ApplicationMetadataMessage_CONTACT_VERIFICATION_TRUSTED:
return m.unmarshalProtobufData(new(protobuf.ContactVerificationTrusted))
case protobuf.ApplicationMetadataMessage_DECLINE_CONTACT_VERIFICATION:

View File

@ -127,9 +127,9 @@ func (p *Persistence) GetReceivedVerificationRequests(myPublicKey string) ([]*Re
return response, nil
}
func (p *Persistence) GetVerificationRequestSentTo(contactID string) (*Request, error) {
func (p *Persistence) GetLatestVerificationRequestSentTo(contactID string) (*Request, error) {
var vr Request
err := p.db.QueryRow(`SELECT id, from_user, to_user, challenge, response, requested_at, verification_status, replied_at FROM verification_requests_individual WHERE to_user = ?`, contactID).Scan(
err := p.db.QueryRow(`SELECT id, from_user, to_user, challenge, response, requested_at, verification_status, replied_at FROM verification_requests_individual WHERE to_user = ? ORDER BY requested_at DESC`, contactID).Scan(
&vr.ID,
&vr.From,
&vr.To,

View File

@ -820,16 +820,16 @@ func (api *PublicAPI) GetVerificationRequestSentTo(ctx context.Context, contactI
return api.service.messenger.GetVerificationRequestSentTo(ctx, contactID)
}
func (api *PublicAPI) CancelVerificationRequest(ctx context.Context, contactID string) error {
return api.service.messenger.CancelVerificationRequest(ctx, contactID)
func (api *PublicAPI) CancelVerificationRequest(ctx context.Context, id string) (*protocol.MessengerResponse, error) {
return api.service.messenger.CancelVerificationRequest(ctx, id)
}
func (api *PublicAPI) AcceptContactVerificationRequest(ctx context.Context, contactID string, response string) (*protocol.MessengerResponse, error) {
return api.service.messenger.AcceptContactVerificationRequest(ctx, contactID, response)
func (api *PublicAPI) AcceptContactVerificationRequest(ctx context.Context, id string, response string) (*protocol.MessengerResponse, error) {
return api.service.messenger.AcceptContactVerificationRequest(ctx, id, response)
}
func (api *PublicAPI) DeclineContactVerificationRequest(ctx context.Context, contactID string) (*protocol.MessengerResponse, error) {
return api.service.messenger.DeclineContactVerificationRequest(ctx, contactID)
func (api *PublicAPI) DeclineContactVerificationRequest(ctx context.Context, id string) (*protocol.MessengerResponse, error) {
return api.service.messenger.DeclineContactVerificationRequest(ctx, id)
}
func (api *PublicAPI) VerifiedTrusted(ctx context.Context, request *requests.VerifiedTrusted) (*protocol.MessengerResponse, error) {