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