summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-10-29 19:40:47 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-10-29 19:40:47 -0400
commitef90bdbde5b473d866c74053a7dd23fbd0691b53 (patch)
treedb8067999193769a53eacc1b5fa225cfd1a3e45f /src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs
parent3d8bdacc8cb5c9d5514e052d5d4c1d5f2dbc6e9e (diff)
parent650d729bc3e58ec1ecbb554805f8600f63b59a13 (diff)
downloadSMAPI-ef90bdbde5b473d866c74053a7dd23fbd0691b53.tar.gz
SMAPI-ef90bdbde5b473d866c74053a7dd23fbd0691b53.tar.bz2
SMAPI-ef90bdbde5b473d866c74053a7dd23fbd0691b53.zip
Merge branch 'add-log-parser' into develop
Diffstat (limited to 'src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs')
-rw-r--r--src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs b/src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs
new file mode 100644
index 00000000..b39a3b61
--- /dev/null
+++ b/src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using Microsoft.Extensions.Configuration;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace StardewModdingAPI.Web.Framework
+{
+ /// <summary>Reads configuration values from the AWS Beanstalk environment properties file (if present).</summary>
+ /// <remarks>This is a workaround for AWS Beanstalk injection not working with .NET Core apps.</remarks>
+ internal class BeanstalkEnvPropsConfigProvider : ConfigurationProvider, IConfigurationSource
+ {
+ /*********
+ ** Properties
+ *********/
+ /// <summary>The absolute path to the container configuration file on an Amazon EC2 instance.</summary>
+ private const string ContainerConfigPath = @"C:\Program Files\Amazon\ElasticBeanstalk\config\containerconfiguration";
+
+
+ /*********
+ ** Public methods
+ *********/
+ /// <summary>Build the configuration provider for this source.</summary>
+ /// <param name="builder">The configuration builder.</param>
+ public IConfigurationProvider Build(IConfigurationBuilder builder)
+ {
+ return new BeanstalkEnvPropsConfigProvider();
+ }
+
+ /// <summary>Load the environment properties.</summary>
+ public override void Load()
+ {
+ this.Data = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+
+ // get Beanstalk config file
+ FileInfo file = new FileInfo(BeanstalkEnvPropsConfigProvider.ContainerConfigPath);
+ if (!file.Exists)
+ return;
+
+ // parse JSON
+ JObject jsonRoot = (JObject)JsonConvert.DeserializeObject(File.ReadAllText(file.FullName));
+ if (jsonRoot["iis"]?["env"] is JArray jsonProps)
+ {
+ foreach (string prop in jsonProps.Values<string>())
+ {
+ string[] parts = prop.Split('=', 2); // key=value
+ if (parts.Length == 2)
+ this.Data[parts[0]] = parts[1];
+ }
+ }
+ }
+ }
+}