mirror of
https://github.com/Ombi-app/Ombi.git
synced 2025-07-06 05:01:13 -07:00
fix(user-importer): don't delete admins in the cleanup
This commit is contained in:
parent
a34a4f7f78
commit
895b9bf6a0
2 changed files with 28 additions and 10 deletions
|
@ -32,6 +32,7 @@ namespace Ombi.Schedule.Tests
|
||||||
new OmbiUser { Id = Guid.NewGuid().ToString("N"), UserName="abc", NormalizedUserName = "ABC", UserType = UserType.LocalUser},
|
new OmbiUser { Id = Guid.NewGuid().ToString("N"), UserName="abc", NormalizedUserName = "ABC", UserType = UserType.LocalUser},
|
||||||
new OmbiUser { Id = Guid.NewGuid().ToString("N"), UserName="sys", NormalizedUserName = "SYS", UserType = UserType.SystemUser},
|
new OmbiUser { Id = Guid.NewGuid().ToString("N"), UserName="sys", NormalizedUserName = "SYS", UserType = UserType.SystemUser},
|
||||||
new OmbiUser { Id = Guid.NewGuid().ToString("N"), UserName="plex", NormalizedUserName = "PLEX", UserType = UserType.PlexUser, ProviderUserId = "PLEX_ID", Email = "dupe"},
|
new OmbiUser { Id = Guid.NewGuid().ToString("N"), UserName="plex", NormalizedUserName = "PLEX", UserType = UserType.PlexUser, ProviderUserId = "PLEX_ID", Email = "dupe"},
|
||||||
|
new OmbiUser { Id = Guid.NewGuid().ToString("N"), UserName="Admin", NormalizedUserName = "ADMIN", UserType = UserType.PlexUser, ProviderUserId = "ADMIN_ID", Email = "ADMIN@ADMIN.CO"},
|
||||||
};
|
};
|
||||||
private AutoMocker _mocker;
|
private AutoMocker _mocker;
|
||||||
private PlexUserImporter _subject;
|
private PlexUserImporter _subject;
|
||||||
|
@ -368,9 +369,9 @@ namespace Ombi.Schedule.Tests
|
||||||
|
|
||||||
_mocker.Verify<IUserDeletionEngine>(x => x.DeleteUser(It.Is<OmbiUser>(x => x.ProviderUserId == "PLEX_ID" && x.Email == "dupe" && x.UserName == "plex")), Times.Once);
|
_mocker.Verify<IUserDeletionEngine>(x => x.DeleteUser(It.Is<OmbiUser>(x => x.ProviderUserId == "PLEX_ID" && x.Email == "dupe" && x.UserName == "plex")), Times.Once);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public async Task Import_Cleanup_Missing_Plex_Admin()
|
public async Task Import_Cleanup_Missing_Plex_Admin_Dont_Delete()
|
||||||
{
|
{
|
||||||
_mocker.Setup<ISettingsService<UserManagementSettings>, Task<UserManagementSettings>>(x => x.GetSettingsAsync())
|
_mocker.Setup<ISettingsService<UserManagementSettings>, Task<UserManagementSettings>>(x => x.GetSettingsAsync())
|
||||||
.ReturnsAsync(new UserManagementSettings
|
.ReturnsAsync(new UserManagementSettings
|
||||||
|
@ -387,22 +388,25 @@ namespace Ombi.Schedule.Tests
|
||||||
{
|
{
|
||||||
user = new User
|
user = new User
|
||||||
{
|
{
|
||||||
email = "diff_email",
|
email = "ADMIN@ADMIN.CO",
|
||||||
authentication_token = "user_token",
|
authentication_token = "Admin",
|
||||||
title = "user_title",
|
title = "Admin",
|
||||||
username = "diff_username",
|
username = "Admin",
|
||||||
id = "diff_user_id",
|
id = "ADMIN_ID",
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
_mocker.Setup<OmbiUserManager, Task<IdentityResult>>(x => x.CreateAsync(It.Is<OmbiUser>(x => x.UserName == "diff_username" && x.Email == "diff_email" && x.ProviderUserId == "diff_user_id" && x.UserType == UserType.PlexUser)))
|
_mocker.Setup<OmbiUserManager, Task<IdentityResult>>(x => x.CreateAsync(It.Is<OmbiUser>(x => x.UserName == "diff_username" && x.Email == "diff_email" && x.ProviderUserId == "diff_user_id" && x.UserType == UserType.PlexUser)))
|
||||||
.ReturnsAsync(IdentityResult.Success);
|
.ReturnsAsync(IdentityResult.Success);
|
||||||
_mocker.Setup<OmbiUserManager, Task<IdentityResult>>(x => x.AddToRoleAsync(It.Is<OmbiUser>(x => x.UserName == "diff_username"), It.Is<string>(x => x == OmbiRoles.Admin)))
|
_mocker.Setup<OmbiUserManager, Task<IdentityResult>>(x => x.AddToRoleAsync(It.Is<OmbiUser>(x => x.UserName == "diff_username"), It.Is<string>(x => x == OmbiRoles.Admin)))
|
||||||
.ReturnsAsync(IdentityResult.Success);
|
.ReturnsAsync(IdentityResult.Success);
|
||||||
|
|
||||||
|
_mocker.Setup<OmbiUserManager, Task<bool>>(x => x.IsInRoleAsync(It.Is<OmbiUser>(x => x.UserName == "Admin"), OmbiRoles.Admin)).ReturnsAsync(true);
|
||||||
|
|
||||||
await _subject.Execute(null);
|
await _subject.Execute(null);
|
||||||
|
|
||||||
_mocker.Verify<IUserDeletionEngine>(x => x.DeleteUser(It.Is<OmbiUser>(x => x.ProviderUserId == "PLEX_ID" && x.Email == "dupe" && x.UserName == "plex")), Times.Once);
|
_mocker.Verify<IUserDeletionEngine>(x => x.DeleteUser(It.Is<OmbiUser>(x => x.ProviderUserId == "ADMIN_ID" && x.Email == "ADMIN@ADMIN.CO" && x.UserName == "Admin")), Times.Never);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,8 +84,22 @@ namespace Ombi.Schedule.Jobs.Plex
|
||||||
// Refresh users from updates
|
// Refresh users from updates
|
||||||
allUsers = await _userManager.Users.Where(x => x.UserType == UserType.PlexUser)
|
allUsers = await _userManager.Users.Where(x => x.UserType == UserType.PlexUser)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
var missingUsers = allUsers
|
|
||||||
.Where(x => !newOrUpdatedUsers.Contains(x));
|
var missingUsers = allUsers
|
||||||
|
.Where(x => !newOrUpdatedUsers.Contains(x)).ToList();
|
||||||
|
|
||||||
|
// Don't delete any admins
|
||||||
|
for (int i = missingUsers.Count() - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
var isAdmin = await _userManager.IsInRoleAsync(missingUsers[i], OmbiRoles.Admin);
|
||||||
|
if (!isAdmin)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
missingUsers.RemoveAt(i);
|
||||||
|
}
|
||||||
|
|
||||||
foreach (var ombiUser in missingUsers)
|
foreach (var ombiUser in missingUsers)
|
||||||
{
|
{
|
||||||
_log.LogInformation("Deleting user {0} not found in Plex Server.", ombiUser.UserName);
|
_log.LogInformation("Deleting user {0} not found in Plex Server.", ombiUser.UserName);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue