mirror of
https://github.com/bitwarden/server.git
synced 2024-11-25 12:45:18 +01:00
97b3f3e7ee
* inital changes * add provider GatewayType migrations * db provider migrations * removed duo migrations added v2 metadata to duo response * removed helper scripts * remove signature from org duo * added backward compatibility for Duo v2 * added tests for duo request + response models * refactors to TwoFactorController * updated test methods to be compartmentalized by usage * fix organization add duo * Assert.Empty() fix for validator
123 lines
5.5 KiB
C#
123 lines
5.5 KiB
C#
using Bit.Api.Auth.Models.Request;
|
|
using Bit.Core.Auth.Enums;
|
|
using Bit.Core.Auth.Models;
|
|
using Bit.Core.Entities;
|
|
using Xunit;
|
|
|
|
namespace Bit.Api.Test.Auth.Models.Request;
|
|
|
|
public class UserTwoFactorDuoRequestModelTests
|
|
{
|
|
[Fact]
|
|
public void ShouldAddOrUpdateTwoFactorProvider_WhenExistingProviderDoesNotExist()
|
|
{
|
|
// Arrange
|
|
var existingUser = new User();
|
|
var model = new UpdateTwoFactorDuoRequestModel
|
|
{
|
|
ClientId = "clientId",
|
|
ClientSecret = "clientSecret",
|
|
IntegrationKey = "integrationKey",
|
|
SecretKey = "secretKey",
|
|
Host = "example.com"
|
|
};
|
|
|
|
// Act
|
|
var result = model.ToUser(existingUser);
|
|
|
|
// Assert
|
|
// IKey and SKey should be the same as ClientId and ClientSecret
|
|
Assert.True(result.GetTwoFactorProviders().ContainsKey(TwoFactorProviderType.Duo));
|
|
Assert.Equal("clientId", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["ClientId"]);
|
|
Assert.Equal("clientSecret", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["ClientSecret"]);
|
|
Assert.Equal("clientId", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["IKey"]);
|
|
Assert.Equal("clientSecret", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["SKey"]);
|
|
Assert.Equal("example.com", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["Host"]);
|
|
Assert.True(result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].Enabled);
|
|
}
|
|
|
|
[Fact]
|
|
public void ShouldUpdateTwoFactorProvider_WhenExistingProviderExists()
|
|
{
|
|
// Arrange
|
|
var existingUser = new User();
|
|
existingUser.SetTwoFactorProviders(new Dictionary<TwoFactorProviderType, TwoFactorProvider>
|
|
{
|
|
{ TwoFactorProviderType.Duo, new TwoFactorProvider() }
|
|
});
|
|
var model = new UpdateTwoFactorDuoRequestModel
|
|
{
|
|
ClientId = "newClientId",
|
|
ClientSecret = "newClientSecret",
|
|
IntegrationKey = "newIntegrationKey",
|
|
SecretKey = "newSecretKey",
|
|
Host = "newExample.com"
|
|
};
|
|
|
|
// Act
|
|
var result = model.ToUser(existingUser);
|
|
|
|
// Assert
|
|
// IKey and SKey should be the same as ClientId and ClientSecret
|
|
Assert.True(result.GetTwoFactorProviders().ContainsKey(TwoFactorProviderType.Duo));
|
|
Assert.Equal("newClientId", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["ClientId"]);
|
|
Assert.Equal("newClientSecret", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["ClientSecret"]);
|
|
Assert.Equal("newClientId", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["IKey"]);
|
|
Assert.Equal("newClientSecret", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["SKey"]);
|
|
Assert.Equal("newExample.com", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["Host"]);
|
|
Assert.True(result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].Enabled);
|
|
}
|
|
|
|
[Fact]
|
|
public void DuoV2ParamsSync_WhenExistingProviderDoesNotExist()
|
|
{
|
|
// Arrange
|
|
var existingUser = new User();
|
|
var model = new UpdateTwoFactorDuoRequestModel
|
|
{
|
|
IntegrationKey = "integrationKey",
|
|
SecretKey = "secretKey",
|
|
Host = "example.com"
|
|
};
|
|
|
|
// Act
|
|
var result = model.ToUser(existingUser);
|
|
|
|
// Assert
|
|
// IKey and SKey should be the same as ClientId and ClientSecret
|
|
Assert.True(result.GetTwoFactorProviders().ContainsKey(TwoFactorProviderType.Duo));
|
|
Assert.Equal("integrationKey", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["ClientId"]);
|
|
Assert.Equal("secretKey", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["ClientSecret"]);
|
|
Assert.Equal("integrationKey", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["IKey"]);
|
|
Assert.Equal("secretKey", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["SKey"]);
|
|
Assert.Equal("example.com", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["Host"]);
|
|
Assert.True(result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].Enabled);
|
|
}
|
|
|
|
[Fact]
|
|
public void DuoV4ParamsSync_WhenExistingProviderDoesNotExist()
|
|
{
|
|
// Arrange
|
|
var existingUser = new User();
|
|
var model = new UpdateTwoFactorDuoRequestModel
|
|
{
|
|
ClientId = "clientId",
|
|
ClientSecret = "clientSecret",
|
|
Host = "example.com"
|
|
};
|
|
|
|
// Act
|
|
var result = model.ToUser(existingUser);
|
|
|
|
// Assert
|
|
// IKey and SKey should be the same as ClientId and ClientSecret
|
|
Assert.True(result.GetTwoFactorProviders().ContainsKey(TwoFactorProviderType.Duo));
|
|
Assert.Equal("clientId", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["ClientId"]);
|
|
Assert.Equal("clientSecret", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["ClientSecret"]);
|
|
Assert.Equal("clientId", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["IKey"]);
|
|
Assert.Equal("clientSecret", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["SKey"]);
|
|
Assert.Equal("example.com", result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].MetaData["Host"]);
|
|
Assert.True(result.GetTwoFactorProviders()[TwoFactorProviderType.Duo].Enabled);
|
|
}
|
|
}
|