UserManagementSettings { get; }
public void Execute(IJobExecutionContext context)
@@ -75,7 +75,7 @@ namespace PlexRequests.Services.Jobs
return;
}
var plexUsers = PlexApi.GetUsers(settings.PlexAuthToken);
- var prSettings = PlexRequestSettings.GetSettings();
+ var userManagementSettings = UserManagementSettings.GetSettings();
var dbUsers = Repo.GetAll().ToList();
foreach (var user in plexUsers.User)
@@ -105,41 +105,11 @@ namespace PlexRequests.Services.Jobs
continue;
}
- int permissions = 0;
- if (prSettings.SearchForMovies)
- {
- permissions = (int)Permissions.RequestMovie;
- }
- if (prSettings.SearchForTvShows)
- {
- permissions += (int)Permissions.RequestTvShow;
- }
- if (prSettings.SearchForMusic)
- {
- permissions += (int)Permissions.RequestMusic;
- }
- if (!prSettings.RequireMovieApproval)
- {
- permissions += (int)Permissions.AutoApproveMovie;
- }
- if (!prSettings.RequireTvShowApproval)
- {
- permissions += (int)Permissions.AutoApproveTv;
- }
- if (!prSettings.RequireMusicApproval)
- {
- permissions += (int)Permissions.AutoApproveAlbum;
- }
-
- // Add report Issues
-
- permissions += (int)Permissions.ReportIssue;
-
- var m = new PlexUsers
+ var m = new PlexUsers
{
PlexUserId = user.Id,
- Permissions = permissions,
- Features = 0,
+ Permissions = UserManagementHelper.GetPermissions(userManagementSettings),
+ Features = UserManagementHelper.GetFeatures(userManagementSettings),
UserAlias = string.Empty,
EmailAddress = user.Email,
Username = user.Username,
diff --git a/PlexRequests.UI/Helpers/CustomHtmlHelper.cs b/PlexRequests.UI/Helpers/CustomHtmlHelper.cs
index a8fcf66c0..103421c60 100644
--- a/PlexRequests.UI/Helpers/CustomHtmlHelper.cs
+++ b/PlexRequests.UI/Helpers/CustomHtmlHelper.cs
@@ -24,10 +24,9 @@
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// ************************************************************************/
#endregion
-using System.Reflection;
+using System.Text;
using Nancy.ViewEngines.Razor;
-
using PlexRequests.Helpers;
namespace PlexRequests.UI.Helpers
@@ -41,5 +40,17 @@ namespace PlexRequests.UI.Helpers
return helper.Raw(htmlString);
}
+
+ public static IHtmlString Checkbox(this HtmlHelpers helper, bool check, string name, string display)
+ {
+ var sb = new StringBuilder();
+
+ sb.AppendLine("");
+ return helper.Raw(sb.ToString());
+ }
}
}
\ No newline at end of file
diff --git a/PlexRequests.UI/Modules/Admin/FaultQueueModule.cs b/PlexRequests.UI/Modules/Admin/FaultQueueModule.cs
index 996dbdcc6..22b916bc1 100644
--- a/PlexRequests.UI/Modules/Admin/FaultQueueModule.cs
+++ b/PlexRequests.UI/Modules/Admin/FaultQueueModule.cs
@@ -43,17 +43,15 @@ namespace PlexRequests.UI.Modules.Admin
{
public class FaultQueueModule : BaseModule
{
- public FaultQueueModule(ISettingsService settingsService, ICacheProvider cache, IRepository requestQueue, ISecurityExtensions security) : base("admin", settingsService, security)
+ public FaultQueueModule(ISettingsService settingsService, IRepository requestQueue, ISecurityExtensions security) : base("admin", settingsService, security)
{
- Cache = cache;
RequestQueue = requestQueue;
Before += (ctx) => Security.AdminLoginRedirect(Permissions.Administrator, ctx);
Get["Index", "/faultqueue"] = x => Index();
}
-
- private ICacheProvider Cache { get; }
+
private IRepository RequestQueue { get; }
private Negotiator Index()
diff --git a/PlexRequests.UI/Modules/Admin/UserManagementSettingsModule.cs b/PlexRequests.UI/Modules/Admin/UserManagementSettingsModule.cs
new file mode 100644
index 000000000..84bede852
--- /dev/null
+++ b/PlexRequests.UI/Modules/Admin/UserManagementSettingsModule.cs
@@ -0,0 +1,85 @@
+#region Copyright
+// /************************************************************************
+// Copyright (c) 2016 Jamie Rees
+// File: SystemStatusModule.cs
+// Created By: Jamie Rees
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+// ************************************************************************/
+#endregion
+
+using System.Threading.Tasks;
+using Nancy;
+using Nancy.ModelBinding;
+using Nancy.Responses.Negotiation;
+using Nancy.Validation;
+using NLog;
+using NLog.Fluent;
+using PlexRequests.Core;
+using PlexRequests.Core.SettingModels;
+using PlexRequests.Helpers;
+using PlexRequests.Helpers.Permissions;
+using PlexRequests.UI.Helpers;
+using PlexRequests.UI.Models;
+using ISecurityExtensions = PlexRequests.Core.ISecurityExtensions;
+
+namespace PlexRequests.UI.Modules.Admin
+{
+ public class UserManagementSettingsModule : BaseModule
+ {
+ public UserManagementSettingsModule(ISettingsService settingsService, ISettingsService umSettings, ISecurityExtensions security) : base("admin", settingsService, security)
+ {
+ UserManagementSettings = umSettings;
+
+ Before += (ctx) => Security.AdminLoginRedirect(Permissions.Administrator, ctx);
+
+ Get["UserManagementSettings","/usermanagementsettings", true] = async(x,ct) => await Index();
+ Post["/usermanagementsettings", true] = async(x,ct) => await Update();
+ }
+
+ private ISettingsService UserManagementSettings { get; }
+ private static readonly Logger Log = LogManager.GetCurrentClassLogger();
+
+ private async Task Index()
+ {
+ var model = await UserManagementSettings.GetSettingsAsync();
+
+ return View["UserManagementSettings", model];
+ }
+
+
+ private async Task Update()
+ {
+ var settings = this.Bind();
+ var valid = this.Validate(settings);
+ if (!valid.IsValid)
+ {
+ var error = valid.SendJsonError();
+ Log.Info("Error validating User Management settings, message: {0}", error.Message);
+ return Response.AsJson(error);
+ }
+
+ var result = await UserManagementSettings.SaveSettingsAsync(settings);
+ return Response.AsJson(result
+ ? new JsonResponseModel { Result = true, Message = "Successfully Updated the Settings for User Management!" }
+ : new JsonResponseModel { Result = false, Message = "Could not update the settings, take a look at the logs." });
+ }
+ }
+}
\ No newline at end of file
diff --git a/PlexRequests.UI/Modules/UserLoginModule.cs b/PlexRequests.UI/Modules/UserLoginModule.cs
index 547b902f7..46a76de47 100644
--- a/PlexRequests.UI/Modules/UserLoginModule.cs
+++ b/PlexRequests.UI/Modules/UserLoginModule.cs
@@ -38,11 +38,15 @@ using PlexRequests.Api.Interfaces;
using PlexRequests.Api.Models.Plex;
using PlexRequests.Core;
using PlexRequests.Core.SettingModels;
+using PlexRequests.Core.Users;
using PlexRequests.Helpers;
using PlexRequests.Helpers.Analytics;
+using PlexRequests.Helpers.Permissions;
using PlexRequests.Store;
+using PlexRequests.Store.Models;
using PlexRequests.Store.Repository;
using PlexRequests.UI.Authentication;
+using PlexRequests.UI.Helpers;
using ISecurityExtensions = PlexRequests.Core.ISecurityExtensions;
@@ -51,7 +55,8 @@ namespace PlexRequests.UI.Modules
public class UserLoginModule : BaseModule
{
public UserLoginModule(ISettingsService auth, IPlexApi api, ISettingsService plexSettings, ISettingsService pr,
- ISettingsService lp, IAnalytics a, IResourceLinker linker, IRepository userLogins, IPlexUserRepository plexUsers, ICustomUserMapper custom, ISecurityExtensions security)
+ ISettingsService lp, IAnalytics a, IResourceLinker linker, IRepository userLogins, IPlexUserRepository plexUsers, ICustomUserMapper custom,
+ ISecurityExtensions security, ISettingsService userManagementSettings)
: base("userlogin", pr, security)
{
AuthService = auth;
@@ -63,6 +68,7 @@ namespace PlexRequests.UI.Modules
UserLogins = userLogins;
PlexUserRepository = plexUsers;
CustomUserMapper = custom;
+ UserManagementSettings = userManagementSettings;
Get["UserLoginIndex", "/", true] = async (x, ct) =>
{
@@ -88,6 +94,7 @@ namespace PlexRequests.UI.Modules
private IRepository UserLogins { get; }
private IPlexUserRepository PlexUserRepository { get; }
private ICustomUserMapper CustomUserMapper { get; }
+ private ISettingsService UserManagementSettings {get;}
private static Logger Log = LogManager.GetCurrentClassLogger();
@@ -190,6 +197,23 @@ namespace PlexRequests.UI.Modules
{
loginGuid = Guid.Parse(dbUser.UserGuid);
}
+
+ if(loginGuid == Guid.Empty && settings.UserAuthentication)
+ {
+ var defaultSettings = UserManagementSettings.GetSettings();
+ loginGuid = Guid.NewGuid();
+ // Looks like we still don't have an entry, so this user does not exist
+ await PlexUserRepository.InsertAsync(new PlexUsers
+ {
+ PlexUserId = GetUserIdIsInPlexFriends(username, plexSettings.PlexAuthToken) ?? string.Empty,
+ UserAlias = string.Empty,
+ Permissions = UserManagementHelper.GetPermissions(defaultSettings),
+ Features = UserManagementHelper.GetPermissions(defaultSettings),
+ Username = username,
+ EmailAddress = string.Empty, // We don't have it, we will get it on the next scheduled job run
+ LoginId = loginGuid.ToString()
+ });
+ }
}
if (!authenticated)
diff --git a/PlexRequests.UI/PlexRequests.UI.csproj b/PlexRequests.UI/PlexRequests.UI.csproj
index 9e02ae2f6..de957640d 100644
--- a/PlexRequests.UI/PlexRequests.UI.csproj
+++ b/PlexRequests.UI/PlexRequests.UI.csproj
@@ -244,6 +244,7 @@
+
@@ -729,6 +730,9 @@
Always
+
+ Always
+
web.config
diff --git a/PlexRequests.UI/Views/Admin/UserManagementSettings.cshtml b/PlexRequests.UI/Views/Admin/UserManagementSettings.cshtml
new file mode 100644
index 000000000..4138e1f98
--- /dev/null
+++ b/PlexRequests.UI/Views/Admin/UserManagementSettings.cshtml
@@ -0,0 +1,70 @@
+@using PlexRequests.UI.Helpers
+@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase
+@Html.Partial("_Sidebar")
+
+
+
+
\ No newline at end of file