From fdba68bb3d989b3da53ccbc0d5a9a0c3431a9ece Mon Sep 17 00:00:00 2001 From: "Jamie.Rees" Date: Tue, 15 Nov 2016 16:11:07 +0000 Subject: [PATCH] More user management --- .../Migrations/Version1100.cs | 86 ++++++++++++++++++- .../PlexRequests.Core.Migration.csproj | 8 ++ PlexRequests.Core/PlexRequests.Core.csproj | 1 + .../SettingModels/UserManagementSettings.cs | 38 ++++++++ .../Modules/UserManagementModule.cs | 2 + 5 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 PlexRequests.Core/SettingModels/UserManagementSettings.cs diff --git a/PlexRequests.Core.Migration/Migrations/Version1100.cs b/PlexRequests.Core.Migration/Migrations/Version1100.cs index 525114ebb..dbbfab158 100644 --- a/PlexRequests.Core.Migration/Migrations/Version1100.cs +++ b/PlexRequests.Core.Migration/Migrations/Version1100.cs @@ -26,13 +26,16 @@ #endregion using System; +using System.Collections.Generic; using System.Data; using NLog; using System.Linq; +using PlexRequests.Api.Interfaces; using PlexRequests.Core.SettingModels; using PlexRequests.Helpers; using PlexRequests.Helpers.Permissions; using PlexRequests.Store; +using PlexRequests.Store.Models; using PlexRequests.Store.Repository; namespace PlexRequests.Core.Migration.Migrations @@ -40,16 +43,27 @@ namespace PlexRequests.Core.Migration.Migrations [Migration(11000, "v1.10.0.0")] public class Version1100 : BaseMigration, IMigration { - public Version1100(IUserRepository userRepo, IRequestService requestService, ISettingsService log) + public Version1100(IUserRepository userRepo, IRequestService requestService, ISettingsService log, IPlexApi plexApi, ISettingsService plexService, IRepository plexusers, + ISettingsService prSettings, ISettingsService umSettings) { UserRepo = userRepo; RequestService = requestService; Log = log; + PlexApi = plexApi; + PlexSettings = plexService; + PlexUsers = plexusers; + PlexRequestSettings = prSettings; + UserManagementSettings = umSettings; } public int Version => 11000; private IUserRepository UserRepo { get; } private IRequestService RequestService { get; } private ISettingsService Log { get; } + private IPlexApi PlexApi { get; } + private ISettingsService PlexSettings { get; } + private IRepository PlexUsers { get; } + private ISettingsService PlexRequestSettings { get; } + private ISettingsService UserManagementSettings { get; } public void Start(IDbConnection con) { @@ -58,9 +72,79 @@ namespace PlexRequests.Core.Migration.Migrations // Update the current admin permissions set UpdateAdmin(); ResetLogLevel(); + UpdatePlexUsers(); + PopulateDefaultUserManagementSettings(); + UpdateSchema(con, Version); } + private void PopulateDefaultUserManagementSettings() + { + var plexRequestSettings = PlexRequestSettings.GetSettings(); + + UserManagementSettings.SaveSettings(new UserManagementSettings + { + AutoApproveMovies = !plexRequestSettings.RequireMovieApproval, + SearchForTvShows = plexRequestSettings.SearchForTvShows, + SearchForMusic = plexRequestSettings.SearchForMusic, + SearchForMovies = plexRequestSettings.SearchForMovies, + AutoApproveMusic = !plexRequestSettings.RequireMusicApproval, + AutoApproveTvShows = !plexRequestSettings.RequireTvShowApproval + }); + } + + private void UpdatePlexUsers() + { + var settings = PlexSettings.GetSettings(); + var plexUsers = PlexApi.GetUsers(settings.PlexAuthToken); + var prSettings = PlexRequestSettings.GetSettings(); + + var dbUsers = PlexUsers.GetAll().ToList(); + foreach (var user in plexUsers.User) + { + if (dbUsers.FirstOrDefault(x => x.PlexUserId == user.Id) != null) + { + 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; + } + + var m = new PlexUsers + { + PlexUserId = user.Id, + Permissions = permissions, + Features = 0, + }; + + PlexUsers.Insert(m); + } + + } + private void ResetLogLevel() { var logSettings = Log.GetSettings(); diff --git a/PlexRequests.Core.Migration/PlexRequests.Core.Migration.csproj b/PlexRequests.Core.Migration/PlexRequests.Core.Migration.csproj index fa934dfc0..0b582b68b 100644 --- a/PlexRequests.Core.Migration/PlexRequests.Core.Migration.csproj +++ b/PlexRequests.Core.Migration/PlexRequests.Core.Migration.csproj @@ -74,6 +74,14 @@ + + {95834072-A675-415D-AA8F-877C91623810} + PlexRequests.Api.Interfaces + + + {CB37A5F8-6DFC-4554-99D3-A42B502E4591} + PlexRequests.Api.Models + {DD7DC444-D3BF-4027-8AB9-EFC71F5EC581} PlexRequests.Core diff --git a/PlexRequests.Core/PlexRequests.Core.csproj b/PlexRequests.Core/PlexRequests.Core.csproj index 5f093a928..cf47610b6 100644 --- a/PlexRequests.Core/PlexRequests.Core.csproj +++ b/PlexRequests.Core/PlexRequests.Core.csproj @@ -134,6 +134,7 @@ + diff --git a/PlexRequests.Core/SettingModels/UserManagementSettings.cs b/PlexRequests.Core/SettingModels/UserManagementSettings.cs new file mode 100644 index 000000000..2e6d7bc0c --- /dev/null +++ b/PlexRequests.Core/SettingModels/UserManagementSettings.cs @@ -0,0 +1,38 @@ +#region Copyright +// /************************************************************************ +// Copyright (c) 2016 Jamie Rees +// File: UserManagementSettings.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 +namespace PlexRequests.Core.SettingModels +{ + public class UserManagementSettings + { + public bool SearchForMovies { get; set; } + public bool SearchForTvShows { get; set; } + public bool SearchForMusic { get; set; } + public bool AutoApproveMovies { get; set; } + public bool AutoApproveTvShows { get; set; } + public bool AutoApproveMusic { get; set; } + } +} \ No newline at end of file diff --git a/PlexRequests.UI/Modules/UserManagementModule.cs b/PlexRequests.UI/Modules/UserManagementModule.cs index 9870d3533..0bfd73d65 100644 --- a/PlexRequests.UI/Modules/UserManagementModule.cs +++ b/PlexRequests.UI/Modules/UserManagementModule.cs @@ -33,6 +33,7 @@ namespace PlexRequests.UI.Modules PlexSettings = plex; UserLoginsRepo = userLogins; PlexUsersRepository = plexRepo; + PlexRequestSettings = pr; Get["/"] = x => Load(); @@ -51,6 +52,7 @@ namespace PlexRequests.UI.Modules private ISettingsService PlexSettings { get; } private IRepository UserLoginsRepo { get; } private IRepository PlexUsersRepository { get; } + private ISettingsService PlexRequestSettings { get; } private Negotiator Load() {