mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-11 07:46:05 -07:00
Fixes around the server admin #754
This commit is contained in:
parent
662588b709
commit
c0070868ab
2 changed files with 96 additions and 38 deletions
|
@ -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()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace PlexRequests.UI.Modules
|
||||||
Get["/"] = x => Load();
|
Get["/"] = x => Load();
|
||||||
|
|
||||||
Get["/users", true] = async (x, ct) => await LoadUsers();
|
Get["/users", true] = async (x, ct) => await LoadUsers();
|
||||||
Post["/createuser", true] = async (x,ct) => await CreateUser();
|
Post["/createuser", true] = async (x, ct) => await CreateUser();
|
||||||
Get["/local/{id}"] = x => LocalDetails((Guid)x.id);
|
Get["/local/{id}"] = x => LocalDetails((Guid)x.id);
|
||||||
Get["/plex/{id}", true] = async (x, ct) => await PlexDetails(x.id);
|
Get["/plex/{id}", true] = async (x, ct) => await PlexDetails(x.id);
|
||||||
Get["/permissions"] = x => GetEnum<Permissions>();
|
Get["/permissions"] = x => GetEnum<Permissions>();
|
||||||
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue