Fixes around the server admin #754

This commit is contained in:
Jamie.Rees 2016-12-09 15:34:35 +00:00
parent 662588b709
commit c0070868ab
2 changed files with 96 additions and 38 deletions

View file

@ -41,6 +41,7 @@ using PlexRequests.Core.SettingModels;
using PlexRequests.Core.Users; using PlexRequests.Core.Users;
using PlexRequests.Helpers; using PlexRequests.Helpers;
using PlexRequests.Helpers.Analytics; using PlexRequests.Helpers.Analytics;
using PlexRequests.Helpers.Permissions;
using PlexRequests.Store; using PlexRequests.Store;
using PlexRequests.Store.Models; using PlexRequests.Store.Models;
using PlexRequests.Store.Repository; using PlexRequests.Store.Repository;
@ -139,6 +140,7 @@ namespace PlexRequests.UI.Modules
} }
var authenticated = false; var authenticated = false;
var isOwner = false;
var settings = await AuthService.GetSettingsAsync(); var settings = await AuthService.GetSettingsAsync();
var plexSettings = await PlexSettings.GetSettingsAsync(); var plexSettings = await PlexSettings.GetSettingsAsync();
@ -173,6 +175,7 @@ namespace PlexRequests.UI.Modules
{ {
Log.Debug("User is the account owner"); Log.Debug("User is the account owner");
authenticated = true; authenticated = true;
isOwner = true;
} }
else else
{ {
@ -194,6 +197,7 @@ namespace PlexRequests.UI.Modules
{ {
Log.Debug("User is the account owner"); Log.Debug("User is the account owner");
authenticated = true; authenticated = true;
isOwner = true;
userId = GetOwnerId(plexSettings.PlexAuthToken, username); userId = GetOwnerId(plexSettings.PlexAuthToken, username);
} }
Log.Debug("Friends list result = {0}", authenticated); Log.Debug("Friends list result = {0}", authenticated);
@ -228,15 +232,26 @@ namespace PlexRequests.UI.Modules
{ {
var defaultSettings = UserManagementSettings.GetSettings(); var defaultSettings = UserManagementSettings.GetSettings();
loginGuid = Guid.NewGuid(); loginGuid = Guid.NewGuid();
var defaultPermissions = (Permissions)UserManagementHelper.GetPermissions(defaultSettings);
if (isOwner)
{
// If we are the owner, add the admin permission.
if (!defaultPermissions.HasFlag(Permissions.Administrator))
{
defaultPermissions += (int)Permissions.Administrator;
}
}
// Looks like we still don't have an entry, so this user does not exist // Looks like we still don't have an entry, so this user does not exist
await PlexUserRepository.InsertAsync(new PlexUsers await PlexUserRepository.InsertAsync(new PlexUsers
{ {
PlexUserId = GetUserIdIsInPlexFriends(username, plexSettings.PlexAuthToken) ?? string.Empty, PlexUserId = userId,
UserAlias = string.Empty, UserAlias = string.Empty,
Permissions = UserManagementHelper.GetPermissions(defaultSettings), Permissions = (int)defaultPermissions,
Features = UserManagementHelper.GetPermissions(defaultSettings), Features = UserManagementHelper.GetPermissions(defaultSettings),
Username = username, Username = username,
EmailAddress = string.Empty, // We don't have it, we will get it on the next scheduled job run EmailAddress = string.Empty, // We don't have it, we will get it on the next scheduled job run (in 30 mins)
LoginId = loginGuid.ToString() LoginId = loginGuid.ToString()
}); });
} }

View file

@ -91,6 +91,7 @@ namespace PlexRequests.UI.Modules
{ {
var dbUser = plexDbUsers.FirstOrDefault(x => x.PlexUserId == u.Id); var dbUser = plexDbUsers.FirstOrDefault(x => x.PlexUserId == u.Id);
var userDb = userLogins.FirstOrDefault(x => x.UserId == u.Id); var userDb = userLogins.FirstOrDefault(x => x.UserId == u.Id);
// We don't have the user in the database yet // We don't have the user in the database yet
if (dbUser == null) if (dbUser == null)
{ {
@ -102,6 +103,15 @@ namespace PlexRequests.UI.Modules
model.Add(MapPlexUser(u, dbUser, userDb?.LastLoggedIn ?? DateTime.MinValue)); model.Add(MapPlexUser(u, dbUser, userDb?.LastLoggedIn ?? DateTime.MinValue));
} }
} }
// Also get the server admin
var account = PlexApi.GetAccount(plexSettings.PlexAuthToken);
if (account != null)
{
var dbUser = plexDbUsers.FirstOrDefault(x => x.PlexUserId == account.Id);
var userDb = userLogins.FirstOrDefault(x => x.UserId == account.Id);
model.Add(MapPlexAdmin(account, dbUser, userDb?.LastLoggedIn ?? DateTime.MinValue));
}
} }
return Response.AsJson(model); return Response.AsJson(model);
} }
@ -231,6 +241,24 @@ namespace PlexRequests.UI.Modules
return Response.AsJson(retUser); return Response.AsJson(retUser);
} }
// So it could actually be the admin
var account = PlexApi.GetAccount(plexSettings.PlexAuthToken);
if (plexDbUser != null && account != null)
{
// We have a user in the DB for this Plex Account
plexDbUser.Permissions = permissionsValue;
plexDbUser.Features = featuresValue;
await UpdateRequests(plexDbUser.Username, plexDbUser.UserAlias, model.Alias);
plexDbUser.UserAlias = model.Alias;
await PlexUsersRepository.UpdateAsync(plexDbUser);
var retUser = MapPlexAdmin(account, plexDbUser, userLogin?.LastLoggedIn ?? DateTime.MinValue);
return Response.AsJson(retUser);
}
// We have a Plex Account but he's not in the DB // We have a Plex Account but he's not in the DB
if (plexUser != null) if (plexUser != null)
{ {
@ -369,35 +397,9 @@ namespace PlexRequests.UI.Modules
LastLoggedIn = lastLoggedIn, LastLoggedIn = lastLoggedIn,
}; };
// Add permissions
foreach (var p in Enum.GetValues(typeof(Permissions)))
{
var perm = (Permissions)p;
var displayValue = EnumHelper<Permissions>.GetDisplayValue(perm);
var pm = new CheckBox
{
Name = displayValue,
Selected = permissions.HasFlag(perm),
Value = (int)perm
};
m.Permissions.Add(pm); m.Permissions.AddRange(GetPermissions(permissions));
} m.Features.AddRange(GetFeatures(features));
// Add features
foreach (var p in Enum.GetValues(typeof(Features)))
{
var perm = (Features)p;
var displayValue = EnumHelper<Features>.GetDisplayValue(perm);
var pm = new CheckBox
{
Name = displayValue,
Selected = features.HasFlag(perm),
Value = (int)perm
};
m.Features.Add(pm);
}
return m; return m;
} }
@ -427,6 +429,42 @@ namespace PlexRequests.UI.Modules
}, },
}; };
m.Permissions.AddRange(GetPermissions(permissions));
m.Features.AddRange(GetFeatures(features));
return m;
}
private UserManagementUsersViewModel MapPlexAdmin(PlexAccount plexInfo, PlexUsers dbUser, DateTime lastLoggedIn)
{
if (dbUser == null)
{
dbUser = new PlexUsers();
}
var features = (Features)dbUser?.Features;
var permissions = (Permissions)dbUser?.Permissions;
var m = new UserManagementUsersViewModel
{
Id = plexInfo.Id,
PermissionsFormattedString = permissions == 0 ? "None" : permissions.ToString(),
FeaturesFormattedString = features.ToString(),
Username = plexInfo.Username,
Type = UserType.PlexUser,
EmailAddress = plexInfo.Email,
Alias = dbUser?.UserAlias ?? string.Empty,
LastLoggedIn = lastLoggedIn,
};
m.Permissions.AddRange(GetPermissions(permissions));
m.Features.AddRange(GetFeatures(features));
return m;
}
private List<CheckBox> GetPermissions(Permissions permissions)
{
var retVal = new List<CheckBox>();
// Add permissions // Add permissions
foreach (var p in Enum.GetValues(typeof(Permissions))) foreach (var p in Enum.GetValues(typeof(Permissions)))
{ {
@ -439,9 +477,15 @@ namespace PlexRequests.UI.Modules
Value = (int)perm Value = (int)perm
}; };
m.Permissions.Add(pm); retVal.Add(pm);
} }
return retVal;
}
private List<CheckBox> GetFeatures(Features features)
{
var retVal = new List<CheckBox>();
// Add features // Add features
foreach (var p in Enum.GetValues(typeof(Features))) foreach (var p in Enum.GetValues(typeof(Features)))
{ {
@ -454,10 +498,9 @@ namespace PlexRequests.UI.Modules
Value = (int)perm Value = (int)perm
}; };
m.Features.Add(pm); retVal.Add(pm);
} }
return retVal;
return m;
} }
} }
} }