public async Task <ListSuppressionResponse> Retrieve(string email)
        {
            var request = new Request
            {
                Url    = $"/api/{client.Version}/suppression-list/{HttpUtility.UrlEncode(email)}",
                Method = "GET"
            };

            var response = await requestSender.Send(request);

            if (new[] { HttpStatusCode.OK, HttpStatusCode.NotFound }.Contains(response.StatusCode) == false)
            {
                throw new ResponseException(response);
            }

            dynamic results = response.StatusCode == HttpStatusCode.OK
                ? Jsonification.DeserializeObject <dynamic>(response.Content).results
                : null;

            return(new ListSuppressionResponse
            {
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content,
                Suppressions = ConvertResultsToAListOfSuppressions(results)
            });
        }
        public async Task <UpdateSubaccountResponse> Update(SubaccountUpdate subaccount)
        {
            var request = new Request
            {
                Url    = $"api/{client.Version}/subaccounts/{subaccount.Id}",
                Method = "PUT JSON",
                Data   = new
                {
                    name   = subaccount.Name,
                    status = subaccount.Status.ToString().ToLowerInvariant()
                }
            };

            var response = await requestSender.Send(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ResponseException(response);
            }

            var results = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            return(new UpdateSubaccountResponse
            {
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content
            });
        }
        public async Task <ListSuppressionResponse> List(object query = null)
        {
            if (query == null)
            {
                query = new {}
            }
            ;
            var request = new Request
            {
                Url    = $"/api/{client.Version}/suppression-list",
                Method = "GET",
                Data   = query
            };

            var response = await requestSender.Send(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ResponseException(response);
            }

            var results = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            return(new ListSuppressionResponse
            {
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content,
                Suppressions = ConvertResultsToAListOfSuppressions(results)
            });
        }
Пример #4
0
        public async Task <ListSuppressionResponse> List(string url, SuppressionsQuery supppressionsQuery)
        {
            var request = new Request
            {
                Url    = url,
                Method = "GET",
                Data   = (object)supppressionsQuery ?? new { }
            };

            var response = await requestSender.Send(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ResponseException(response);
            }

            var content = Jsonification.DeserializeObject <dynamic>(response.Content);

            return(new ListSuppressionResponse
            {
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content,
                Suppressions = ConvertResultsToAListOfSuppressions(content.results),
                TotalCount = content.total_count,
                Links = ConvertToLinks(content.links)
            });
        }
Пример #5
0
        public async Task <SendTransmissionResponse> Send(Transmission transmission)
        {
            var request = new Request
            {
                Url    = $"api/{client.Version}/transmissions",
                Method = "POST",
                Data   = dataMapper.ToDictionary(transmission)
            };

            var response = await requestSender.Send(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ResponseException(response);
            }

            var results = Jsonification.DeserializeObject <JsonSendResponse>(response.Content).Results;

            return(new SendTransmissionResponse()
            {
                Id = results.Id,
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content,
                TotalAcceptedRecipients = results.TotalAcceptedRecipients,
                TotalRejectedRecipients = results.TotalRejectedRecipients,
            });
        }
Пример #6
0
        public async Task <VerifySendingDomainResponse> Verify(VerifySendingDomain verifySendingDomain)
        {
            var request = new Request
            {
                Url    = $"/api/{client.Version}/sending-domains/{verifySendingDomain.Domain}/verify",
                Method = "POST",
                Data   = dataMapper.ToDictionary(verifySendingDomain)
            };

            var response = await requestSender.Send(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ResponseException(response);
            }

            var result = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            return(new VerifySendingDomainResponse
            {
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content,
                Status = VerifySendingDomainStatus.ConvertToVerifySendingDomainStatus(result)
            });
        }
Пример #7
0
        public async Task <UpdateSendingDomainResponse> Update(SendingDomain sendingDomain)
        {
            var request = new Request
            {
                Url    = $"/api/{client.Version}/sending-domains/{sendingDomain.Domain}",
                Method = "PUT",
                Data   = dataMapper.ToDictionary(sendingDomain)
            };

            var response = await requestSender.Send(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ResponseException(response);
            }

            var result = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            return(result != null ? new UpdateSendingDomainResponse
            {
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content,
                Domain = result.domain,
                TrackingDomain = result.tracking_domain,
                Dkim = Dkim.ConvertToDkim(result.dkim),
            }
                : null);
        }
        public async Task <CreateSubaccountResponse> Create(SubaccountCreate subaccount)
        {
            var request = new Request
            {
                Url    = $"api/{client.Version}/subaccounts",
                Method = "POST",
                Data   = new
                {
                    name       = subaccount.Name,
                    key_label  = subaccount.KeyLabel,
                    key_grants = subaccount.KeyGrants
                }
            };

            var response = await requestSender.Send(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ResponseException(response);
            }

            var results = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            return(new CreateSubaccountResponse
            {
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content,
                Key = results.key,
                Label = results.label,
                ShortKey = results.short_key,
                SubaccountId = results.subaccount_id
            });
        }
        private static IEnumerable <MessageEvent> ConvertResultsToAListOfMessageEvents(dynamic results)
        {
            var messageEvents = new List <MessageEvent>();

            if (results == null)
            {
                return(messageEvents);
            }

            foreach (var result in results)
            {
                var metadata =
                    Jsonification.DeserializeObject <Dictionary <string, string> >(
                        Jsonification.SerializeObject(result.rcpt_meta));
                var tags =
                    Jsonification.DeserializeObject <List <string> >(
                        Jsonification.SerializeObject(result.rcpt_tags));
                messageEvents.Add(new MessageEvent
                {
                    Type            = result.type,
                    BounceClass     = result.bounce_class,
                    CampaignId      = result.campaign_id,
                    CustomerId      = result.customer_id,
                    DeliveryMethod  = result.delv_method,
                    DeviceToken     = result.device_token,
                    ErrorCode       = result.error_code,
                    IpAddress       = result.ip_address,
                    MessageId       = result.message_id,
                    MessageFrom     = result.msg_from,
                    MessageSize     = result.msg_size,
                    NumberOfRetries = result.num_retries,
                    RecipientTo     = result.rcpt_to,
                    RecipientType   = result.rcpt_type,
                    RawReason       = result.raw_reason,
                    Reason          = result.reason,
                    RoutingDomain   = result.routing_domain,
                    Subject         = result.subject,
                    TemplateId      = result.template_id,
                    TemplateVersion = result.template_version,
                    Timestamp       = result.timestamp,
                    TransmissionId  = result.transmission_id,
                    EventId         = result.event_id,
                    FriendlyFrom    = result.friendly_from,
                    IpPool          = result.ip_pool,
                    QueueTime       = result.queue_time,
                    RawRecipientTo  = result.raw_rcpt_to,
                    SendingIp       = result.sending_ip,
                    TDate           = result.tdate,
                    Transactional   = result.transactional,
                    RemoteAddress   = result.remote_addr,
                    Metadata        = metadata,
                    TargetLinkUrl   = result.target_link_url,
                    Tags            = tags
                });
            }
            return(messageEvents);
        }
Пример #10
0
        public static ListSendingDomainResponse CreateFromResponse(Response response)
        {
            var result = new ListSendingDomainResponse();

            LeftRight.SetValuesToMatch(result, response);

            var results = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            result.SendingDomains = BuildTheSendingDomains(results);
            return(result);
        }
Пример #11
0
        private async Task <GetMetricsResourceResponse> GetMetricsResource(string resourceName, object query)
        {
            var response = await GetApiResponse(resourceName, query);

            dynamic content = Jsonification.DeserializeObject <dynamic>(response.Content);

            var result = new GetMetricsResourceResponse(response);

            result.Results = ConvertToStrings(content.results, resourceName);

            return(result);
        }
Пример #12
0
        public static RetrieveRelayWebhookResponse CreateFromResponse(Response response)
        {
            var result = new RetrieveRelayWebhookResponse();

            LeftRight.SetValuesToMatch(result, response);

            var results = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            result.RelayWebhook = ListRelayWebhookResponse.ConvertToARelayWebhook(results);

            return(result);
        }
Пример #13
0
        public static InboundDomainResponse CreateFromResponse(Response response)
        {
            var result = new InboundDomainResponse();

            LeftRight.SetValuesToMatch(result, response);

            var results = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            result.InboundDomain = ListInboundDomainResponse.ConvertToAInboundDomain(results);

            return(result);
        }
Пример #14
0
        private async Task <GetMetricsResponse> GetMetrics(string relUrl, object query)
        {
            var response = await GetApiResponse(relUrl, query);

            dynamic content = Jsonification.DeserializeObject <dynamic>(response.Content);

            var result = new GetMetricsResponse(response);

            result.Results = ConvertToDictionaries(content.results);

            return(result);
        }
Пример #15
0
        private static IEnumerable <RelayWebhook> BuildTheRelayWebhooksFrom(Response response)
        {
            var results = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            var relayWebhooks = new List <RelayWebhook>();

            foreach (var r in results)
            {
                relayWebhooks.Add(ConvertToARelayWebhook(r));
            }

            return(relayWebhooks);
        }
Пример #16
0
        private static IEnumerable <InboundDomain> BuildTheInboundDomainsFrom(Response response)
        {
            dynamic results = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            var inboundDomains = new List <InboundDomain>();

            foreach (var r in results)
            {
                inboundDomains.Add(ConvertToAInboundDomain(r));
            }

            return(inboundDomains);
        }
        public static ListWebhookResponse CreateFromResponse(Response response)
        {
            var result = new ListWebhookResponse();

            LeftRight.SetValuesToMatch(result, response);

            var results  = Jsonification.DeserializeObject <dynamic>(result.Content).results;
            var webhooks = new List <Webhook>();

            foreach (var r in results)
            {
                webhooks.Add(ConvertToAWebhook(r));
            }

            result.Webhooks = webhooks;
            return(result);
        }
        public static ListSubaccountResponse CreateFromResponse(Response response)
        {
            var result = new ListSubaccountResponse();

            LeftRight.SetValuesToMatch(result, response);

            var results     = Jsonification.DeserializeObject <dynamic>(response.Content).results;
            var subaccounts = new List <Subaccount>();

            foreach (var r in results)
            {
                subaccounts.Add(ConvertToSubaccount(r));
            }

            result.Subaccounts = subaccounts;
            return(result);
        }
Пример #19
0
        public async Task <RetrieveTransmissionResponse> Retrieve(string transmissionId)
        {
            var request = new Request
            {
                Url    = $"api/{client.Version}/transmissions/" + transmissionId,
                Method = "GET",
            };

            var response = await requestSender.Send(request);

            if (new[] { HttpStatusCode.OK, HttpStatusCode.NotFound }.Contains(response.StatusCode) == false)
            {
                throw new ResponseException(response);
            }

            var transmissionResponse = new RetrieveTransmissionResponse()
            {
                ReasonPhrase = response.ReasonPhrase,
                StatusCode   = response.StatusCode,
                Content      = response.Content,
            };

            try
            {
                var results = Jsonification.DeserializeObject <dynamic>(response.Content).results;
                if (results.transmission == null)
                {
                    return(transmissionResponse);
                }

                transmissionResponse.Id                       = results.transmission.id;
                transmissionResponse.Description              = results.transmission.description;
                transmissionResponse.GenerationEndTime        = results.transmission.generation_end_time;
                transmissionResponse.RecipientListTotalChunks = results.transmission.rcpt_list_total_chunks ?? 0;
                transmissionResponse.RecipientListTotalSize   = results.transmission.rcpt_list_chunk_size ?? 0;
                transmissionResponse.NumberRecipients         = results.transmission.num_rcpts ?? 0;
                transmissionResponse.NumberGenerated          = results.transmission.num_generated ?? 0;
            }
            catch
            {
                // ignored
            }

            return(transmissionResponse);
        }
Пример #20
0
        public async Task <GetSendingDomainResponse> Retrieve(string domain)
        {
            var request = new Request
            {
                Url    = $"/api/{client.Version}/sending-domains/{domain}",
                Method = "GET",
            };

            var response = await requestSender.Send(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ResponseException(response);
            }
            var result = Jsonification.DeserializeObject <dynamic>(response.Content).results;

            return(new GetSendingDomainResponse
            {
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content,
                SendingDomain = SendingDomain.ConvertToSendingDomain(result)
            });
        }
Пример #21
0
        public async Task <ListMessageEventsResponse> List(object messageEventsQuery)
        {
            if (messageEventsQuery == null)
            {
                messageEventsQuery = new { }
            }
            ;

            var request = new Request
            {
                Url    = $"/api/{client.Version}/message-events",
                Method = "GET",
                Data   = messageEventsQuery
            };

            var response = await requestSender.Send(request);

            if (response.StatusCode != HttpStatusCode.OK)
            {
                throw new ResponseException(response);
            }

            dynamic content = Jsonification.DeserializeObject <dynamic>(response.Content);

            var listMessageEventsResponse = new ListMessageEventsResponse
            {
                ReasonPhrase  = response.ReasonPhrase,
                StatusCode    = response.StatusCode,
                Content       = response.Content,
                MessageEvents = ConvertResultsToAListOfMessageEvents(content.results),
                TotalCount    = content.total_count,
                Links         = ConvertToLinks(content.links)
            };

            return(listMessageEventsResponse);
        }
Пример #22
0
 public string ToJson()
 {
     return(Jsonification.SerializeObject(this));
 }
 private static string SerializeObject(object data)
 {
     return(Jsonification.SerializeObject(data));
 }