Ejemplo n.º 1
0
        /// <summary>
        /// Creates the SparkPost instance
        /// </summary>
        public SparkPost()
        {
            LoaderContext.RegisterSingletonInstance(this);
            var secrets = LoaderContext.EnsureSingletonInstance <SecretsHandler>();

            EndpointUrl = SecretsHandler.GetSecret("SPARKPOST_URL") ?? "https://api.sparkpost.com/api/v1/transmissions";
            APIKey      = SecretsHandler.GetSecret("SPARKPOST_KEY");
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the named secret, or returns null.
        /// Note that this method will clear the value, so it can only be obtained ONCE
        /// </summary>
        /// <param name="name">The name of the secret to get</param>
        /// <returns>The value or null</returns>
        public static string GetSecret(string name)
        {
            var self = LoaderContext.EnsureSingletonInstance <SecretsHandler>();

            lock (self.m_lock)
            {
                if (self.m_secrets == null)
                {
                    var secrets = new Dictionary <string, string>();
                    if (File.Exists(self.Filename))
                    {
                        foreach (var n in File.ReadAllLines(self.Filename))
                        {
                            if (string.IsNullOrWhiteSpace(n))
                            {
                                continue;
                            }

                            var parts = n.Split(new char[] { '=' }, 2);
                            if (parts.Length != 2)
                            {
                                continue;
                            }

                            var key   = parts[0].Trim();
                            var value = parts[1].Trim();
                            if (key.StartsWith("#"))
                            {
                                continue;
                            }

                            if (string.IsNullOrWhiteSpace(key) || string.IsNullOrWhiteSpace(value))
                            {
                                continue;
                            }

                            secrets[key] = value;
                        }
                    }

                    self.m_secrets = secrets;
                }

                self.m_secrets.TryGetValue(name, out var v);
                self.m_secrets.Remove(name);

                return(string.IsNullOrWhiteSpace(v)
                    ? null
                    : v);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Sends the transmission message as provided
        /// </summary>
        /// <param name="transmission">The transmission to send</param>
        /// <returns>An awaitable task</returns>
        public static async Task SendEmailAsync(Transmission transmission)
        {
            var inst = LoaderContext.EnsureSingletonInstance <SparkPost>();

            using (var client = new HttpClient())
                using (var request = new HttpRequestMessage(HttpMethod.Post, inst.EndpointUrl))
                {
                    request.Headers.Add("Authorization", inst.APIKey);
                    var json = JsonConvert.SerializeObject(transmission);
                    using (var stringContent = new StringContent(json, Encoding.UTF8, "application/json"))
                    {
                        request.Content = stringContent;

                        using (var response = await client
                                              .SendAsync(request, HttpCompletionOption.ResponseContentRead)
                                              .ConfigureAwait(false))
                        {
                            var cnt = await response.Content.ReadAsStringAsync();

                            try
                            {
                                var resp = JsonConvert.DeserializeObject <Response>(cnt);
                                if (resp.Results == null || resp.Results.Accepted != 1)
                                {
                                    throw new Exception("Bad response from SparkPost");
                                }
                                response.EnsureSuccessStatusCode();
                            }
                            catch (Exception sendex)
                            {
                                await Log.ErrorAsync($"Got error from SparkPost: {cnt}", sendex);

                                throw;
                            }
                        }
                    }
                }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Creates a new queue module instance
 /// </summary>
 /// <param name="name">The name of the module</param>
 public QueueModule(string name)
 {
     Name      = name;
     m_manager = LoaderContext.EnsureSingletonInstance <QueueManager>();
 }