Skip to content
This repository was archived by the owner on Sep 26, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 18 additions & 17 deletions source/DirectoryServices.Tests/CredentialValidatorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Octopus.Server.Extensibility.Authentication.HostServices;
using Octopus.Server.Extensibility.Results;
using Octopus.Server.MessageContracts;
using Octopus.Server.MessageContracts.Features.Users;
using Shouldly;

namespace DirectoryServices.Tests
Expand Down Expand Up @@ -67,14 +68,14 @@ public void ExistingUserWithMatchingIdentity()
directoryServicesService.ValidateCredentials("existingUser", "testPassword", CancellationToken.None)
.Returns(new UserValidationResult("existingUser@test.com", "existingUser", "TestDomain", string.Empty, String.Empty));

var user = new User("Users-100", "existingUser", identityCreator.Create(string.Empty, "existingUser@test.com", "TestDomain\\existingUser", string.Empty));
var user = new User("Users-100".ToUserId(), "existingUser", identityCreator.Create(string.Empty, "existingUser@test.com", "TestDomain\\existingUser", string.Empty));

updateableUserStore.GetByIdentity(Arg.Any<Identity>()).Returns(new [] { user });

var result = validator.ValidateCredentials("existingUser", "testPassword", CancellationToken.None);

result.ShouldBeOfType<ResultFromExtension<IUser>>();
updateableUserStore.DidNotReceive().UpdateIdentity(Arg.Any<string>(), Arg.Any<Identity>(), CancellationToken.None);
updateableUserStore.DidNotReceive().UpdateIdentity(Arg.Any<UserId>(), Arg.Any<Identity>(), CancellationToken.None);
}

[Test]
Expand All @@ -83,7 +84,7 @@ public void ExistingUserWithMultipleIdentities()
directoryServicesService.ValidateCredentials("existingUser1@test.com", "testPassword", CancellationToken.None)
.Returns(new UserValidationResult("existingUser1@test.com", "\\existingUser1", "TestDomain", string.Empty, String.Empty));

var user = new User("Users-100", "existingUser", identityCreator.Create(string.Empty, string.Empty, "TestDomain\\existingUser", string.Empty));
var user = new User("Users-100".ToUserId(), "existingUser", identityCreator.Create(string.Empty, string.Empty, "TestDomain\\existingUser", string.Empty));
user.Identities.Add(identityCreator.Create("existingUser@test.com", "existingUser1@test.com","TestDomain\\existingUser1", string.Empty));

updateableUserStore.GetByIdentity(Arg.Any<Identity>()).Returns(new [] { user });
Expand All @@ -92,7 +93,7 @@ public void ExistingUserWithMultipleIdentities()
var result = validator.ValidateCredentials("existingUser1@test.com", "testPassword", CancellationToken.None);

result.ShouldBeOfType<ResultFromExtension<IUser>>();
updateableUserStore.Received(1).UpdateIdentity(Arg.Any<string>(), Arg.Any<Identity>(), CancellationToken.None);
updateableUserStore.Received(1).UpdateIdentity(Arg.Any<UserId>(), Arg.Any<Identity>(), CancellationToken.None);
}

[Test]
Expand All @@ -103,7 +104,7 @@ public void NewUserWithNoMatchingIdentity()

updateableUserStore.GetByIdentity(Arg.Any<Identity>()).Returns(new IUser[0]);

var user = new User("Users-100", "newUser", identityCreator.Create(string.Empty, "newUser@test.com", "TestDomain\\newUser", string.Empty));
var user = new User("Users-100".ToUserId(), "newUser", identityCreator.Create(string.Empty, "newUser@test.com", "TestDomain\\newUser", string.Empty));
updateableUserStore.Create("newUser@test.com", Arg.Any<string>(), Arg.Any<string>(), CancellationToken.None, Arg.Any<ProviderUserGroups>(), Arg.Any<IEnumerable<Identity>>())
.Returns(ResultFromExtension<IUser>.Success(user));

Expand All @@ -119,7 +120,7 @@ public void NewUserWithPartialMatchOnExistingEmail()
directoryServicesService.ValidateCredentials("newUser", "testPassword", CancellationToken.None)
.Returns(new UserValidationResult("newUser@test.com", "newUser", "TestDomain", string.Empty, "tester@test.com"));

var user = new User("Users-100", "existingUser", identityCreator.Create("tester@test.com", "existingUser@test.com", "TestDomain\\existingUser", ""));
var user = new User("Users-100".ToUserId(), "existingUser", identityCreator.Create("tester@test.com", "existingUser@test.com", "TestDomain\\existingUser", ""));

updateableUserStore.GetByIdentity(Arg.Any<Identity>()).Returns(new[] { user });

Expand All @@ -140,8 +141,8 @@ public void ExistingUsersWithPartialMatchOnEmailButMatchingIdentity()
directoryServicesService.ValidateCredentials("existingUser2", "testPassword", CancellationToken.None)
.Returns(new UserValidationResult("existingUser2@test.com", "existingUser2", "TestDomain", string.Empty, "tester@test.com"));

var user1 = new User("Users-100", "existingUser1", identityCreator.Create("tester@test.com", "existingUser1@test.com", "TestDomain\\existingUser1", ""));
var user2 = new User("Users-101", "existingUser2", identityCreator.Create("tester@test.com", "existingUser2@test.com", "TestDomain\\existingUser2", ""));
var user1 = new User("Users-100".ToUserId(), "existingUser1", identityCreator.Create("tester@test.com", "existingUser1@test.com", "TestDomain\\existingUser1", ""));
var user2 = new User("Users-101".ToUserId(), "existingUser2", identityCreator.Create("tester@test.com", "existingUser2@test.com", "TestDomain\\existingUser2", ""));

updateableUserStore.GetByIdentity(Arg.Any<Identity>()).Returns(new[] { user1, user2 });

Expand Down Expand Up @@ -175,7 +176,7 @@ public void NewUserFromAnotherDomain()

updateableUserStore.GetByIdentity(Arg.Any<Identity>()).Returns(new IUser[0]);

var user = new User("Users-100", "newUser", identityCreator.Create(string.Empty, "newUser@domain2.com", "Domain2\\newUser", string.Empty));
var user = new User("Users-100".ToUserId(), "newUser", identityCreator.Create(string.Empty, "newUser@domain2.com", "Domain2\\newUser", string.Empty));
updateableUserStore.Create("newUser@domain2.com", Arg.Any<string>(), Arg.Any<string>(), CancellationToken.None, Arg.Any<ProviderUserGroups>(), Arg.Any<IEnumerable<Identity>>())
.Returns(ResultFromExtension<IUser>.Success(user));

Expand All @@ -191,14 +192,14 @@ public void ExistingUserWhoHadTheirUpnChanged()
directoryServicesService.ValidateCredentials("existingUser", "testPassword", CancellationToken.None)
.Returns(new UserValidationResult("existingUser@new.test.com", "existingUser", "TestDomain", string.Empty, String.Empty));

var user = new User("Users-100", "existingUser", identityCreator.Create(string.Empty, "existingUser@test.com", "TestDomain\\existingUser", string.Empty));
var user = new User("Users-100".ToUserId(), "existingUser", identityCreator.Create(string.Empty, "existingUser@test.com", "TestDomain\\existingUser", string.Empty));

updateableUserStore.GetByIdentity(Arg.Any<Identity>()).Returns(new[] { user });

var result = validator.ValidateCredentials("existingUser", "testPassword", CancellationToken.None);

result.ShouldBeOfType<ResultFromExtension<IUser>>();
updateableUserStore.Received(1).UpdateIdentity("Users-100", Arg.Any<Identity>(), CancellationToken.None);
updateableUserStore.Received(1).UpdateIdentity("Users-100".ToUserId(), Arg.Any<Identity>(), CancellationToken.None);
updateableUserStore.DidNotReceive().Create(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>(), CancellationToken.None);
}

Expand All @@ -208,14 +209,14 @@ public void ExistingUserWhoHadTheirSamAccountNameChanged()
directoryServicesService.ValidateCredentials("existingUserWithNewSam", "testPassword", CancellationToken.None)
.Returns(new UserValidationResult("existingUser@test.com", "existingUserWithNewSam", "TestDomain", string.Empty, String.Empty));

var user = new User("Users-100", "existingUser", identityCreator.Create(string.Empty, "existingUser@test.com", "TestDomain\\existingUser", string.Empty));
var user = new User("Users-100".ToUserId(), "existingUser", identityCreator.Create(string.Empty, "existingUser@test.com", "TestDomain\\existingUser", string.Empty));

updateableUserStore.GetByIdentity(Arg.Any<Identity>()).Returns(new[] { user });

var result = validator.ValidateCredentials("existingUserWithNewSam", "testPassword", CancellationToken.None);

result.ShouldBeOfType<ResultFromExtension<IUser>>();
updateableUserStore.Received(1).UpdateIdentity("Users-100", Arg.Any<Identity>(), CancellationToken.None);
updateableUserStore.Received(1).UpdateIdentity("Users-100".ToUserId(), Arg.Any<Identity>(), CancellationToken.None);
updateableUserStore.DidNotReceive().Create(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>(), CancellationToken.None);
}

Expand All @@ -225,7 +226,7 @@ public void ExistingUserWhoHadTheirUpnAndSamAccountNameChanged()
directoryServicesService.ValidateCredentials("existingUserWithNewSam", "testPassword", CancellationToken.None)
.Returns(new UserValidationResult("existingUser@new.test.com", "existingUserWithNewSam", "TestDomain", string.Empty, String.Empty));

var user = new User("Users-100", "existingUser", identityCreator.Create(string.Empty, "existingUser@test.com", "TestDomain\\existingUser", string.Empty));
var user = new User("Users-100".ToUserId(), "existingUser", identityCreator.Create(string.Empty, "existingUser@test.com", "TestDomain\\existingUser", string.Empty));

updateableUserStore.GetByIdentity(Arg.Any<Identity>()).Returns(new[] { user });

Expand All @@ -234,20 +235,20 @@ public void ExistingUserWhoHadTheirUpnAndSamAccountNameChanged()
var result = validator.ValidateCredentials("existingUserWithNewSam", "testPassword", CancellationToken.None);

result.ShouldBeOfType<ResultFromExtension<IUser>>();
updateableUserStore.Received(1).UpdateIdentity("Users-100", Arg.Any<Identity>(), CancellationToken.None);
updateableUserStore.Received(1).UpdateIdentity("Users-100".ToUserId(), Arg.Any<Identity>(), CancellationToken.None);
updateableUserStore.DidNotReceive().Create(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<string>(), CancellationToken.None);
}

private class User : IUser
{
public User(string id, string username, Identity identity)
public User(UserId id, string username, Identity identity)
{
Id = id;
Username = username;
Identities = new HashSet<Identity>(new [] {identity});
}

public string Id { get; }
public UserId Id { get; }
public string Username { get; }
public Guid IdentificationToken { get; }
public string DisplayName { get; set; }
Expand Down
9 changes: 4 additions & 5 deletions source/Server/Server.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,12 @@
<PackageReference Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="5.0.6" />
<PackageReference Include="System.DirectoryServices.AccountManagement" Version="4.5.0" />
<PackageReference Include="System.DirectoryServices" Version="4.5.0" />
<PackageReference Include="Octopus.Time" Version="1.1.6" />
<PackageReference Include="Octopus.Server.Extensibility.Authentication" Version="10.0.3" />
<PackageReference Include="Octopus.Configuration" Version="4.0.0" />
<PackageReference Include="Octopus.Diagnostics" Version="2.1.1" />
<PackageReference Include="Octopus.Server.Extensibility.Authentication" Version="11.0.0" />
<PackageReference Include="Octopus.Server.Extensibility" Version="14.0.5" />
<PackageReference Include="Octopus.Server.Extensibility.Web" Version="0.0.24" />
<PackageReference Include="Octopus.Diagnostics" Version="2.1.1" />
<PackageReference Include="Octopus.Data" Version="6.0.0" />
<PackageReference Include="Octopus.Configuration" Version="3.0.0" />
<PackageReference Include="Octopus.Time" Version="1.1.6" />
<PackageReference Include="Microsoft.AspNetCore.Server.HttpSys" Version="2.2.6" />
</ItemGroup>
<ItemGroup>
Expand Down