private void OnSendSecretShareMessageReceived(object sender, SendEntrySecretsMessageReceivedEventArgs args) { if (args.Message.OriginalMessageIdentifier != _originalMessageIdentifier) { return; } _replyReceived = true; Reply = args.Message; _waitForReply.Set(); _waitForReplyProcess.WaitOne(Timeout); args.MessageHandledSuccessfully = _processedSuccessfully; }
private bool ProcessMessageRequestEntrySecrets( GetMessages.ResponseParamsMessage messageItem, DeviceToDeviceMessages.IMessage message) { var messageContents = (DeviceToDeviceMessages.RequestEntrySecrets)message; var accountSettings = _model.ServerAccountSettings.Query().First(); var entry = _model.Entries.Query().FirstOrDefault(r => r.Identifier == messageContents.EntryIdentifier); if (entry == null) return false; var linkedDeviceCryptoKeyId = accountSettings.LinkedDeviceCryptoKeyId; var linkedDeviceCryptoKey = _model.CryptoKeys.Query().First(r => r.Id == linkedDeviceCryptoKeyId); var entrySecrets = new Dictionary<string, string>(); foreach (var secretIdentifier in messageContents.SecretIdentifiers) { var entrySecretsResult = _model.EntriesSharedSecrets.Query() .FirstOrDefault(r => r.EntryId == entry.Id && r.SecretIdentifier == secretIdentifier); if (entrySecretsResult == null) continue; var entrySecretData = _model.EntriesSharedSecretsData.Query().First(r => r.Id == entrySecretsResult.EntrySecretDataId); entrySecrets.Add(entrySecretsResult.SecretIdentifier, entrySecretData.Secret); } if (entrySecrets.Count != messageContents.SecretIdentifiers.Count) { // We don't appear to have all the requested secrets. return false; } var requestConfirmed = _controller.PromptSecretShareRequestSafe(); var apiRequest = new SendLinkedDeviceMessage { //LinkIdentifier = link.Identifier, SecondsValidFor = 30 }; if (!requestConfirmed) { var deniedMessage = new DeviceToDeviceMessages.SendEntrySecrets { OriginalMessageIdentifier = messageItem.Identifier, RequestAccepted = false }; apiRequest.SetMessage(deniedMessage, linkedDeviceCryptoKey.PublicKeyPem); apiRequest.GetResponse(GetApiClient()); return true; } var acceptedMessage = new DeviceToDeviceMessages.SendEntrySecrets { OriginalMessageIdentifier = messageItem.Identifier, RequestAccepted = true, Secrets = entrySecrets }; apiRequest.SetMessage(acceptedMessage, linkedDeviceCryptoKey.PublicKeyPem); apiRequest.GetResponse(GetApiClient()); return true; }
private bool ProcessMessageRequestEntrySecrets( GetMessages.ResponseParamsMessage messageItem, DeviceToDeviceMessages.IMessage message) { var messageContents = (DeviceToDeviceMessages.RequestEntrySecrets)message; var accountSettings = _model.ServerAccountSettings.Query().First(); var entry = _model.Entries.Query().FirstOrDefault(r => r.Identifier == messageContents.EntryIdentifier); if (entry == null) { return(false); } var linkedDeviceCryptoKeyId = accountSettings.LinkedDeviceCryptoKeyId; var linkedDeviceCryptoKey = _model.CryptoKeys.Query().First(r => r.Id == linkedDeviceCryptoKeyId); var entrySecrets = new Dictionary <string, string>(); foreach (var secretIdentifier in messageContents.SecretIdentifiers) { var entrySecretsResult = _model.EntriesSharedSecrets.Query() .FirstOrDefault(r => r.EntryId == entry.Id && r.SecretIdentifier == secretIdentifier); if (entrySecretsResult == null) { continue; } var entrySecretData = _model.EntriesSharedSecretsData.Query().First(r => r.Id == entrySecretsResult.EntrySecretDataId); entrySecrets.Add(entrySecretsResult.SecretIdentifier, entrySecretData.Secret); } if (entrySecrets.Count != messageContents.SecretIdentifiers.Count) { // We don't appear to have all the requested secrets. return(false); } var requestConfirmed = _controller.PromptSecretShareRequestSafe(); var apiRequest = new SendLinkedDeviceMessage { //LinkIdentifier = link.Identifier, SecondsValidFor = 30 }; if (!requestConfirmed) { var deniedMessage = new DeviceToDeviceMessages.SendEntrySecrets { OriginalMessageIdentifier = messageItem.Identifier, RequestAccepted = false }; apiRequest.SetMessage(deniedMessage, linkedDeviceCryptoKey.PublicKeyPem); apiRequest.GetResponse(GetApiClient()); return(true); } var acceptedMessage = new DeviceToDeviceMessages.SendEntrySecrets { OriginalMessageIdentifier = messageItem.Identifier, RequestAccepted = true, Secrets = entrySecrets }; apiRequest.SetMessage(acceptedMessage, linkedDeviceCryptoKey.PublicKeyPem); apiRequest.GetResponse(GetApiClient()); return(true); }
public SendEntrySecretsMessageReceivedEventArgs(DeviceToDeviceMessages.SendEntrySecrets message) { Message = message; }