//инициализация
        public static bool TryCreate(string jsonMessage, out AmazonSnsMessage amazonSnsMessage)
        {
            amazonSnsMessage = null;
            bool result = false;

            if (string.IsNullOrEmpty(jsonMessage))
                return false;

            try
            {
                using (TextReader reader = new StringReader(jsonMessage))
                using (var jsonRreader = new Newtonsoft.Json.JsonTextReader(reader))
                {
                    var serializer = new Newtonsoft.Json.JsonSerializer();
                    amazonSnsMessage = serializer.Deserialize<AmazonSnsMessage>(jsonRreader);
                }

                result = true;
            }
            catch (Exception ex)
            {
            }

            return result;       
        }
        // parse request message
        public bool ParseRequest(Stream request, out AmazonSnsMessage message)
        {
            string requestMessage = null;

            try
            {
                using (StreamReader reader = new StreamReader(request))
                {
                    requestMessage = reader.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                if(_logger != null)
                    _logger.Exception(ex, "Ошибка при получении потока данных Amazon SNS.");
            }

            if (requestMessage == null)
            {
                message = null;
                return false;
            }
            else
            {
                return ParseRequest(requestMessage, out message);
            }
        }
        public bool ParseRequest(string request, out AmazonSnsMessage message)
        {
            message = null;
            bool isValid = false;

            // разбор json сообщения
            AmazonSnsMessage amazonSnsMessage;
            bool created = AmazonSnsMessage.TryCreate(request, out amazonSnsMessage);
            if (!created)
            {
                if (_logger != null)
                    _logger.Error("Ошибка при разборе json сообщения Amazon Sns: {0}", request);
                return false;
            }

            // проверить подпись сообщения
            bool verified = _signatureVerification.VerifySignature(amazonSnsMessage);
            if (!verified)
            {
                if (_logger != null)
                    _logger.Error("Не удалось подтвердить подпись сообщения Amazon Sns: {0}", request);
                return false;
            }

            
            // обработать сообщение в зависимости от типа
            if (amazonSnsMessage.AmazonSnsMessageType == AmazonSnsMessageType.Notification)
            {
                message = amazonSnsMessage;
                isValid = message.Message != null;
            }

            // подписаться
            else if (amazonSnsMessage.AmazonSnsMessageType == AmazonSnsMessageType.SubscriptionConfirmation
                && ConfirmSubsription)
            {
                isValid = _subscription.ConfirmSubscription(amazonSnsMessage);
            }

            // неизвестный тип
            else
            {
                if (_logger != null)
                    _logger.Error("Получен неизвестный тип сообщения Amazon Sns: {0}", request);
                isValid = false;
            }

            return isValid;
        }
Example #4
0
        //подписаться
        public bool ConfirmSubscription(AmazonSnsMessage amazonSnsMessage)
        {
            string subscribeURL = amazonSnsMessage.SubscribeURL;

            Uri confirmUri;
            bool uriIsValid = Uri.TryCreate(subscribeURL, UriKind.Absolute, out confirmUri);
            if (!uriIsValid)
            {
                if(_logger != null)
                    _logger.Error("Неверный адрес подтверждения подписки Amazon Sns {0}", subscribeURL);
                return false;
            }

            string response;
            try
            {
                using (WebClient webClient = new WebClient())
                {
                    response = webClient.DownloadString(confirmUri);
                }
            }
            catch (Exception ex)
            {
                if (_logger != null)
                    _logger.Exception(ex, "Ошибка при получении ответа на подтверждение подписки Amazon Sns.");
                return false;
            }

            if (_logger != null)
                _logger.Debug("Получен ответ на подтверждение подписки Amazon Sns: {0}", response);

            bool confirmed = CheckSubscribeResponse(response);
            
            if (_logger != null)
                _logger.Info("Подтверждение подписки Amazon Sns закончилось с результатом {0}", confirmed);

            return confirmed;
        }
Example #5
0
        //отписаться
        public bool Unsubscribe(AmazonSnsMessage amazonSnsMessage)
        {
            string unsubscribeURL = amazonSnsMessage.UnsubscribeURL;

            Uri confirmUri;
            bool uriIsValid = Uri.TryCreate(unsubscribeURL, UriKind.Absolute, out confirmUri);
            if (!uriIsValid)
            {
                if (_logger != null)
                    _logger.Error("Неверный адрес отказа от подписки Amazon Sns {0}", unsubscribeURL);
                return false;
            }

            string response;
            try
            {
                using (WebClient webClient = new WebClient())
                {
                    response = webClient.DownloadString(confirmUri);
                }
            }
            catch (Exception ex)
            {
                if (_logger != null)
                    _logger.Exception(ex, "Ошибка при получении ответа на отказ от подписки Amazon Sns.");
                return false;
            }

            if (_logger != null)
                _logger.Debug("Получен ответ на отказ от подписки Amazon Sns: {0}", response);

            return CheckUnsubscribeResponse(response);
        }