elsa-core/test/unit/Elsa.Identity.UnitTests/Providers/AdminCredentialProviderTests.cs
Sipke Schoorstra 746ba96a1f
[codex] Remove production-usable default admin credentials (#7500)
* Remove default admin credentials

* Fix shell admin API key configuration
2026-05-20 20:58:03 +02:00

92 lines
2.8 KiB
C#

using Elsa.Identity.Options;
using Elsa.Identity.Providers;
using Elsa.Identity.Services;
using OptionsFactory = Microsoft.Extensions.Options.Options;
namespace Elsa.Identity.UnitTests.Providers;
public class AdminCredentialProviderTests
{
private readonly DefaultSecretHasher _secretHasher = new();
[Fact]
public async Task AdminApiKeyProviderDeniesDevelopmentApiKeyByDefault()
{
var provider = CreateAdminApiKeyProvider();
var apiKey = await provider.ProvideAsync(AdminApiKeyProvider.DevelopmentApiKey);
Assert.Null(apiKey);
}
[Fact]
public async Task AdminApiKeyProviderAcceptsDevelopmentApiKeyWhenExplicitlyConfigured()
{
var provider = CreateAdminApiKeyProvider(options => options.ApiKey = AdminApiKeyProvider.DevelopmentApiKey);
var apiKey = await provider.ProvideAsync(AdminApiKeyProvider.DevelopmentApiKey);
Assert.NotNull(apiKey);
Assert.Equal("admin", apiKey.OwnerName);
Assert.Contains(apiKey.Claims, claim => claim.Type == "permissions" && claim.Value == "*");
}
[Theory]
[InlineData("admin")]
[InlineData("anyone")]
public async Task AdminUserProviderDeniesStaticPasswordByDefault(string userName)
{
var validator = CreateCredentialsValidator();
var user = await validator.ValidateAsync(userName, "password");
Assert.Null(user);
}
[Fact]
public async Task AdminUserProviderAcceptsDevelopmentCredentialsWhenExplicitlyConfigured()
{
var validator = CreateCredentialsValidator(options =>
{
options.UserName = "admin";
options.Password = "password";
});
var user = await validator.ValidateAsync("admin", "password");
Assert.NotNull(user);
Assert.Equal("admin", user.Name);
}
[Fact]
public async Task AdminUserProviderDeniesArbitraryUsernameWhenDevelopmentCredentialsAreConfigured()
{
var validator = CreateCredentialsValidator(options =>
{
options.UserName = "admin";
options.Password = "password";
});
var user = await validator.ValidateAsync("anyone", "password");
Assert.Null(user);
}
private static AdminApiKeyProvider CreateAdminApiKeyProvider(Action<AdminApiKeyOptions>? configure = null)
{
var options = new AdminApiKeyOptions();
configure?.Invoke(options);
return new(OptionsFactory.Create(options));
}
private DefaultUserCredentialsValidator CreateCredentialsValidator(Action<AdminUserProviderOptions>? configure = null)
{
var options = new AdminUserProviderOptions();
configure?.Invoke(options);
var userProvider = new AdminUserProvider(_secretHasher, OptionsFactory.Create(options));
return new(userProvider, _secretHasher);
}
}