From eba157039938cd864e19518fc7c99d6ff9dca9f1 Mon Sep 17 00:00:00 2001 From: tidusjar Date: Mon, 27 Jun 2016 15:55:44 +0100 Subject: [PATCH] Small bit of work for #359 --- PlexRequests.Store/Models/PlexUsers.cs | 34 +++++++ PlexRequests.Store/PlexRequests.Store.csproj | 1 + PlexRequests.Store/SqlTables.sql | 10 +- PlexRequests.UI/Bootstrapper.cs | 1 + PlexRequests.UI/Modules/PlexUsersModule.cs | 98 ++++++++++++++++++++ PlexRequests.UI/PlexRequests.UI.csproj | 1 + 6 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 PlexRequests.Store/Models/PlexUsers.cs create mode 100644 PlexRequests.UI/Modules/PlexUsersModule.cs diff --git a/PlexRequests.Store/Models/PlexUsers.cs b/PlexRequests.Store/Models/PlexUsers.cs new file mode 100644 index 000000000..884fe1d4d --- /dev/null +++ b/PlexRequests.Store/Models/PlexUsers.cs @@ -0,0 +1,34 @@ +#region Copyright +// /************************************************************************ +// Copyright (c) 2016 Jamie Rees +// File: PlexUsers.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.Store.Models +{ + public class PlexUsers : Entity + { + public int PlexUserId { get; set; } + public string UserAlias { get; set; } + } +} \ No newline at end of file diff --git a/PlexRequests.Store/PlexRequests.Store.csproj b/PlexRequests.Store/PlexRequests.Store.csproj index 196a48b4b..dba4d4ef1 100644 --- a/PlexRequests.Store/PlexRequests.Store.csproj +++ b/PlexRequests.Store/PlexRequests.Store.csproj @@ -64,6 +64,7 @@ + diff --git a/PlexRequests.Store/SqlTables.sql b/PlexRequests.Store/SqlTables.sql index 478599545..5a5ba22a9 100644 --- a/PlexRequests.Store/SqlTables.sql +++ b/PlexRequests.Store/SqlTables.sql @@ -91,4 +91,12 @@ CREATE TABLE IF NOT EXISTS RequestLimit RequestCount INTEGER NOT NULL, RequestType INTEGER NOT NULL ); -CREATE UNIQUE INDEX IF NOT EXISTS RequestLimit_Id ON RequestLimit (Id); \ No newline at end of file +CREATE UNIQUE INDEX IF NOT EXISTS RequestLimit_Id ON RequestLimit (Id); + +CREATE TABLE IF NOT EXISTS PlexUsers +( + Id INTEGER PRIMARY KEY AUTOINCREMENT, + PlexUserId INTEGER NOT NULL, + UserAlias varchar(100) NOT NULL +); +CREATE UNIQUE INDEX IF NOT EXISTS PlexUsers_Id ON RequestLimit (Id); \ No newline at end of file diff --git a/PlexRequests.UI/Bootstrapper.cs b/PlexRequests.UI/Bootstrapper.cs index 2e74e0900..d29c9c324 100644 --- a/PlexRequests.UI/Bootstrapper.cs +++ b/PlexRequests.UI/Bootstrapper.cs @@ -194,6 +194,7 @@ namespace PlexRequests.UI container.Register, GenericRepository>(); container.Register, GenericRepository>(); container.Register, GenericRepository>(); + container.Register, GenericRepository>(); container.Register(); container.Register(); container.Register(); diff --git a/PlexRequests.UI/Modules/PlexUsersModule.cs b/PlexRequests.UI/Modules/PlexUsersModule.cs new file mode 100644 index 000000000..901199505 --- /dev/null +++ b/PlexRequests.UI/Modules/PlexUsersModule.cs @@ -0,0 +1,98 @@ +#region Copyright +// /************************************************************************ +// Copyright (c) 2016 Jamie Rees +// File: PlexUsersModule.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.Linq; +using System.Threading.Tasks; + +using Nancy; +using Nancy.Responses.Negotiation; + +using PlexRequests.Api.Interfaces; +using PlexRequests.Api.Models.Music; +using PlexRequests.Core; +using PlexRequests.Core.SettingModels; +using PlexRequests.Store.Models; +using PlexRequests.Store.Repository; +using PlexRequests.UI.Models; + +namespace PlexRequests.UI.Modules +{ + public class PlexUsersModule : BaseAuthModule + { + public PlexUsersModule(ISettingsService pr, IPlexApi plexApi, ISettingsService auth, + IRepository repo) : base("plexusers", pr) + { + PlexApi = plexApi; + AuthSettings = auth; + Repo = repo; + + Get["/"] = x => Index(); + Get["/users", true] = async (x, ct) => await GetPlexUsers(); + + Post["/alias", true] = async (x, ct) => await Alias(); + } + + private IPlexApi PlexApi { get; } + private ISettingsService AuthSettings { get; } + private IRepository Repo { get; } + + + private Negotiator Index() + { + return View["Index"]; + } + + private async Task GetPlexUsers() + { + var authSettings = await AuthSettings.GetSettingsAsync(); + var users = PlexApi.GetUsers(authSettings.PlexAuthToken); + + return Response.AsJson(users.User); + } + + private async Task Alias() + { + var plexUserId = (int)Request.Form["plexid"]; + var alias = (string)Request.Form["alias"]; + var allUsers = await Repo.GetAllAsync(); + var existingUser = allUsers.FirstOrDefault(x => x.PlexUserId == plexUserId); + if (existingUser == null) + { + // Create a new mapping + existingUser = new PlexUsers { PlexUserId = plexUserId, UserAlias = alias }; + } + else + { + // Modify existing alias + existingUser.UserAlias = alias; + } + + await Repo.InsertAsync(existingUser); + + return Response.AsJson(new JsonResponseModel { Result = true }); + } + } +} \ No newline at end of file diff --git a/PlexRequests.UI/PlexRequests.UI.csproj b/PlexRequests.UI/PlexRequests.UI.csproj index 126f0754b..0495bb18b 100644 --- a/PlexRequests.UI/PlexRequests.UI.csproj +++ b/PlexRequests.UI/PlexRequests.UI.csproj @@ -200,6 +200,7 @@ + True