예제 #1
0
        public async Task Send(PublishContext <T> context, IPipe <PublishContext <T> > next)
        {
            if (context.Message is PublishMessage publishMessage)
            {
                var secretKey = publishMessage.SecretKey;
                if (secretKey != null && TryGetDecryptParameter(publishMessage, out var decryptFormat))
                {
                    var encryptedMessage  = EncryptedMessage.CreateFromBase(publishMessage.Message);
                    var decryptedResponse = await _decryptMessageClient.GetResponse <DecryptedMessage>(new {
                        EncryptedMessage = encryptedMessage,
                        SecretKey        = secretKey
                    });

                    if (decryptFormat != null)
                    {
                        var formattedResponse = await _formatMessageClient.GetResponse <FormattedMessage, DummyResponse>(new {
                            DecryptedMessage = decryptedResponse.Message,
                            Format           = decryptFormat
                        });

                        if (formattedResponse.Is(out Response <FormattedMessage> response))
                        {
                            publishMessage.Message = response.Message;
                        }
                        else
                        {
                            publishMessage.Message = decryptedResponse.Message;
                        }
                    }
                    else
                    {
                        publishMessage.Message = decryptedResponse.Message;
                    }

                    context.AddOrUpdatePayload(() => publishMessage, _ => publishMessage);
                }
            }

            await next.Send(context);
        }