summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Framework
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-12-02 22:48:00 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-12-02 22:48:00 -0500
commitd34f369d35290bca96cc7225d9765d1a8a66fa8b (patch)
tree141bc6b30760bf5745b7adb9ce60f0cf6c8fa720 /src/SMAPI.Web/Framework
parenta3f21685049cabf2d824c8060dc0b1de47e9449e (diff)
parent1128451acf56cf479864047c0bb8bb18e232fa00 (diff)
downloadSMAPI-d34f369d35290bca96cc7225d9765d1a8a66fa8b.tar.gz
SMAPI-d34f369d35290bca96cc7225d9765d1a8a66fa8b.tar.bz2
SMAPI-d34f369d35290bca96cc7225d9765d1a8a66fa8b.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI.Web/Framework')
-rw-r--r--src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs54
-rw-r--r--src/SMAPI.Web/Framework/Clients/Pastebin/PasteInfo.cs10
-rw-r--r--src/SMAPI.Web/Framework/Clients/Pastebin/PastebinClient.cs2
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/ApiClientsConfig.cs16
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs3
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs12
-rw-r--r--src/SMAPI.Web/Framework/Extensions.cs28
-rw-r--r--src/SMAPI.Web/Framework/RewriteRules/ConditionalRewriteSubdomainRule.cs48
8 files changed, 54 insertions, 119 deletions
diff --git a/src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs b/src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs
deleted file mode 100644
index fe27fe2f..00000000
--- a/src/SMAPI.Web/Framework/BeanstalkEnvPropsConfigProvider.cs
+++ /dev/null
@@ -1,54 +0,0 @@
-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
- {
- /*********
- ** Fields
- *********/
- /// <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];
- }
- }
- }
- }
-}
diff --git a/src/SMAPI.Web/Framework/Clients/Pastebin/PasteInfo.cs b/src/SMAPI.Web/Framework/Clients/Pastebin/PasteInfo.cs
index 955156eb..bb2de356 100644
--- a/src/SMAPI.Web/Framework/Clients/Pastebin/PasteInfo.cs
+++ b/src/SMAPI.Web/Framework/Clients/Pastebin/PasteInfo.cs
@@ -1,3 +1,5 @@
+using System;
+
namespace StardewModdingAPI.Web.Framework.Clients.Pastebin
{
/// <summary>The response for a get-paste request.</summary>
@@ -9,7 +11,13 @@ namespace StardewModdingAPI.Web.Framework.Clients.Pastebin
/// <summary>The fetched paste content (if <see cref="Success"/> is <c>true</c>).</summary>
public string Content { get; set; }
- /// <summary>The error message (if saving failed).</summary>
+ /// <summary>When the file will no longer be available.</summary>
+ public DateTime? Expiry { get; set; }
+
+ /// <summary>The error message if saving succeeded, but a non-blocking issue was encountered.</summary>
+ public string Warning { get; set; }
+
+ /// <summary>The error message if saving failed.</summary>
public string Error { get; set; }
}
}
diff --git a/src/SMAPI.Web/Framework/Clients/Pastebin/PastebinClient.cs b/src/SMAPI.Web/Framework/Clients/Pastebin/PastebinClient.cs
index 2e8a8c68..d695aab6 100644
--- a/src/SMAPI.Web/Framework/Clients/Pastebin/PastebinClient.cs
+++ b/src/SMAPI.Web/Framework/Clients/Pastebin/PastebinClient.cs
@@ -62,7 +62,7 @@ namespace StardewModdingAPI.Web.Framework.Clients.Pastebin
}
catch (Exception ex)
{
- return new PasteInfo { Error = ex.ToString() };
+ return new PasteInfo { Error = $"Pastebin error: {ex}" };
}
}
diff --git a/src/SMAPI.Web/Framework/ConfigModels/ApiClientsConfig.cs b/src/SMAPI.Web/Framework/ConfigModels/ApiClientsConfig.cs
index 121690c5..7119ef03 100644
--- a/src/SMAPI.Web/Framework/ConfigModels/ApiClientsConfig.cs
+++ b/src/SMAPI.Web/Framework/ConfigModels/ApiClientsConfig.cs
@@ -14,6 +14,22 @@ namespace StardewModdingAPI.Web.Framework.ConfigModels
/****
+ ** Amazon Web Services
+ ****/
+ /// <summary>The access key for AWS authentication.</summary>
+ public string AmazonAccessKey { get; set; }
+
+ /// <summary>The secret key for AWS authentication.</summary>
+ public string AmazonSecretKey { get; set; }
+
+ /// <summary>The AWS region endpoint (like 'us-east-1').</summary>
+ public string AmazonRegion { get; set; }
+
+ /// <summary>The AWS bucket in which to store temporary uploaded logs.</summary>
+ public string AmazonLogBucket { get; set; }
+
+
+ /****
** Chucklefish
****/
/// <summary>The base URL for the Chucklefish mod site.</summary>
diff --git a/src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs b/src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs
index ab935bb3..46073eb8 100644
--- a/src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs
+++ b/src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs
@@ -11,8 +11,5 @@ namespace StardewModdingAPI.Web.Framework.ConfigModels
/// <summary>The number of minutes failed update checks should be cached before refetching them.</summary>
public int ErrorCacheMinutes { get; set; }
-
- /// <summary>The web URL for the wiki compatibility list.</summary>
- public string CompatibilityPageUrl { get; set; }
}
}
diff --git a/src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs b/src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs
index bc6e868a..d379c423 100644
--- a/src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs
+++ b/src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs
@@ -6,18 +6,6 @@ namespace StardewModdingAPI.Web.Framework.ConfigModels
/*********
** Accessors
*********/
- /// <summary>The root URL for the app.</summary>
- public string RootUrl { get; set; }
-
- /// <summary>The root URL for the log parser.</summary>
- public string LogParserUrl { get; set; }
-
- /// <summary>The root URL for the JSON validator.</summary>
- public string JsonValidatorUrl { get; set; }
-
- /// <summary>The root URL for the mod list.</summary>
- public string ModListUrl { get; set; }
-
/// <summary>Whether to show SMAPI beta versions on the main page, if any.</summary>
public bool BetaEnabled { get; set; }
diff --git a/src/SMAPI.Web/Framework/Extensions.cs b/src/SMAPI.Web/Framework/Extensions.cs
new file mode 100644
index 00000000..d7707924
--- /dev/null
+++ b/src/SMAPI.Web/Framework/Extensions.cs
@@ -0,0 +1,28 @@
+using JetBrains.Annotations;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Routing;
+
+namespace StardewModdingAPI.Web.Framework
+{
+ /// <summary>Provides extensions on ASP.NET Core types.</summary>
+ public static class Extensions
+ {
+ /// <summary>Get a URL with the absolute path for an action method. Unlike <see cref="IUrlHelper.Action"/>, only the specified <paramref name="values"/> are added to the URL without merging values from the current HTTP request.</summary>
+ /// <param name="helper">The URL helper to extend.</param>
+ /// <param name="action">The name of the action method.</param>
+ /// <param name="controller">The name of the controller.</param>
+ /// <param name="values">An object that contains route values.</param>
+ /// <returns>The generated URL.</returns>
+ public static string PlainAction(this IUrlHelper helper, [AspMvcAction] string action, [AspMvcController] string controller, object values = null)
+ {
+ RouteValueDictionary valuesDict = new RouteValueDictionary(values);
+ foreach (var value in helper.ActionContext.RouteData.Values)
+ {
+ if (!valuesDict.ContainsKey(value.Key))
+ valuesDict[value.Key] = null; // explicitly remove it from the URL
+ }
+
+ return helper.Action(action, controller, valuesDict);
+ }
+ }
+}
diff --git a/src/SMAPI.Web/Framework/RewriteRules/ConditionalRewriteSubdomainRule.cs b/src/SMAPI.Web/Framework/RewriteRules/ConditionalRewriteSubdomainRule.cs
deleted file mode 100644
index 920632ab..00000000
--- a/src/SMAPI.Web/Framework/RewriteRules/ConditionalRewriteSubdomainRule.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System;
-using Microsoft.AspNetCore.Http;
-using Microsoft.AspNetCore.Rewrite;
-
-namespace StardewModdingAPI.Web.Framework.RewriteRules
-{
- /// <summary>Rewrite requests to prepend the subdomain portion (if any) to the path.</summary>
- /// <remarks>Derived from <a href="https://stackoverflow.com/a/44526747/262123" />.</remarks>
- internal class ConditionalRewriteSubdomainRule : IRule
- {
- /*********
- ** Accessors
- *********/
- /// <summary>A predicate which indicates when the rule should be applied.</summary>
- private readonly Func<HttpRequest, bool> ShouldRewrite;
-
-
- /*********
- ** Public methods
- *********/
- /// <summary>Construct an instance.</summary>
- /// <param name="shouldRewrite">A predicate which indicates when the rule should be applied.</param>
- public ConditionalRewriteSubdomainRule(Func<HttpRequest, bool> shouldRewrite = null)
- {
- this.ShouldRewrite = shouldRewrite ?? (req => true);
- }
-
- /// <summary>Applies the rule. Implementations of ApplyRule should set the value for <see cref="RewriteContext.Result" /> (defaults to RuleResult.ContinueRules).</summary>
- /// <param name="context">The rewrite context.</param>
- public void ApplyRule(RewriteContext context)
- {
- HttpRequest request = context.HttpContext.Request;
-
- // check condition
- if (!this.ShouldRewrite(request))
- return;
-
- // get host parts
- string host = request.Host.Host;
- string[] parts = host.Split('.');
- if (parts.Length < 2)
- return;
-
- // prepend to path
- request.Path = $"/{parts[0]}{request.Path}";
- }
- }
-}