mirror of
https://github.com/bitwarden/server.git
synced 2025-06-30 15:42:48 -05:00
Feature/token service (#1785)
* Implement draft token service * Add tokenizer and factory * Handle expiring tokens through base class * Allow direct token validity checks * Add safe unprotect to tokenizer * Add interface to tokenizer factory * Use tokenizer * Fix rebase * Handle cleartext prefix in tokenizer base * Use epoch milliseconds for expiration in tokens * Use tokenizers * Test tokens * Linter fixes * Add TokenizerFactory to DI services * Test epoch milliseconds deserialization * Use separate injectables for each token type * Fix directory * Add functional unprotect to token * Fix namespace and correct object names * Remove Tokenable interface * Test remaining Tokens classes * Dotnet format * Fix sut provider errors with update * Remove useless property Co-authored-by: Hinton <oscar@oscarhinton.com>
This commit is contained in:
54
test/Core.Test/Tokens/DataProtectorTokenFactoryTests.cs
Normal file
54
test/Core.Test/Tokens/DataProtectorTokenFactoryTests.cs
Normal file
@ -0,0 +1,54 @@
|
||||
using AutoFixture;
|
||||
using Bit.Core.Tokens;
|
||||
using Bit.Test.Common.AutoFixture;
|
||||
using Bit.Test.Common.AutoFixture.Attributes;
|
||||
using Bit.Test.Common.Helpers;
|
||||
using Microsoft.AspNetCore.DataProtection;
|
||||
using Xunit;
|
||||
|
||||
namespace Bit.Core.Test.Tokens
|
||||
{
|
||||
[SutProviderCustomize]
|
||||
public class DataProtectorTokenFactoryTests
|
||||
{
|
||||
public static SutProvider<DataProtectorTokenFactory<TestTokenable>> GetSutProvider()
|
||||
{
|
||||
var fixture = new Fixture();
|
||||
return new SutProvider<DataProtectorTokenFactory<TestTokenable>>(fixture)
|
||||
.SetDependency<IDataProtectionProvider>(fixture.Create<EphemeralDataProtectionProvider>())
|
||||
.Create();
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public void CanRoundTripTokenables(TestTokenable tokenable)
|
||||
{
|
||||
var sutProvider = GetSutProvider();
|
||||
|
||||
var token = sutProvider.Sut.Protect(tokenable);
|
||||
var recoveredTokenable = sutProvider.Sut.Unprotect(token);
|
||||
|
||||
AssertHelper.AssertPropertyEqual(tokenable, recoveredTokenable);
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public void PrependsClearText(TestTokenable tokenable)
|
||||
{
|
||||
var sutProvider = GetSutProvider();
|
||||
|
||||
var token = sutProvider.Sut.Protect(tokenable);
|
||||
|
||||
Assert.StartsWith(sutProvider.GetDependency<string>("clearTextPrefix"), token);
|
||||
}
|
||||
|
||||
[Theory, BitAutoData]
|
||||
public void EncryptsToken(TestTokenable tokenable)
|
||||
{
|
||||
var sutProvider = GetSutProvider();
|
||||
var prefix = sutProvider.GetDependency<string>("clearTextPrefix");
|
||||
|
||||
var token = sutProvider.Sut.Protect(tokenable);
|
||||
|
||||
Assert.NotEqual(new Token(token).RemovePrefix(prefix), tokenable.ToToken());
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user