summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Framework
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-07-19 17:01:22 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-09-14 18:53:31 -0400
commitec747b518b28184c440dcea7ce74f3e80b627505 (patch)
treeec13d4f842332aaf4266a5931d1047a71f32288b /src/SMAPI.Web/Framework
parent450cfc11c2f9139ce19eb44c579e653c7597771b (diff)
downloadSMAPI-ec747b518b28184c440dcea7ce74f3e80b627505.tar.gz
SMAPI-ec747b518b28184c440dcea7ce74f3e80b627505.tar.bz2
SMAPI-ec747b518b28184c440dcea7ce74f3e80b627505.zip
enable readonly access to job dashboard when deployed (#651)
Diffstat (limited to 'src/SMAPI.Web/Framework')
-rw-r--r--src/SMAPI.Web/Framework/JobDashboardAuthorizationFilter.cs34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/SMAPI.Web/Framework/JobDashboardAuthorizationFilter.cs b/src/SMAPI.Web/Framework/JobDashboardAuthorizationFilter.cs
new file mode 100644
index 00000000..9471d5fe
--- /dev/null
+++ b/src/SMAPI.Web/Framework/JobDashboardAuthorizationFilter.cs
@@ -0,0 +1,34 @@
+using Hangfire.Dashboard;
+
+namespace StardewModdingAPI.Web.Framework
+{
+ /// <summary>Authorises requests to access the Hangfire job dashboard.</summary>
+ internal class JobDashboardAuthorizationFilter : IDashboardAuthorizationFilter
+ {
+ /*********
+ ** Fields
+ *********/
+ /// <summary>An authorization filter that allows local requests.</summary>
+ private static readonly LocalRequestsOnlyAuthorizationFilter LocalRequestsOnlyFilter = new LocalRequestsOnlyAuthorizationFilter();
+
+
+ /*********
+ ** Public methods
+ *********/
+ /// <summary>Authorise a request.</summary>
+ /// <param name="context">The dashboard context.</param>
+ public bool Authorize(DashboardContext context)
+ {
+ return
+ context.IsReadOnly // always allow readonly access
+ || JobDashboardAuthorizationFilter.IsLocalRequest(context); // else allow access from localhost
+ }
+
+ /// <summary>Get whether a request originated from a user on the server machine.</summary>
+ /// <param name="context">The dashboard context.</param>
+ public static bool IsLocalRequest(DashboardContext context)
+ {
+ return JobDashboardAuthorizationFilter.LocalRequestsOnlyFilter.Authorize(context);
+ }
+ }
+}