diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-10-29 19:40:47 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-10-29 19:40:47 -0400 |
commit | ef90bdbde5b473d866c74053a7dd23fbd0691b53 (patch) | |
tree | db8067999193769a53eacc1b5fa225cfd1a3e45f /src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs | |
parent | 3d8bdacc8cb5c9d5514e052d5d4c1d5f2dbc6e9e (diff) | |
parent | 650d729bc3e58ec1ecbb554805f8600f63b59a13 (diff) | |
download | SMAPI-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.cs | 54 |
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]; + } + } + } + } +} |