Added API token functionality

This commit is contained in:
2024-12-21 16:09:55 +01:00
parent c087dbdf2b
commit ba46147a74
17 changed files with 118 additions and 55 deletions

View File

@@ -58,13 +58,13 @@ public class AuthLogicTests {
tokens
.Setup(t => t.CreateToken(It.Is<int>(t => t == Token.RefreshTokenType), It.IsAny<User>()))
.ReturnsAsync(new Token {
Content = _refreshToken,
TokenId = _refreshToken,
Type = Token.RefreshTokenType
});
tokens
.Setup(t => t.CreateToken(It.Is<int>(t => t == Token.AccessTokenType), It.IsAny<User>()))
.ReturnsAsync(new Token {
Content = _accessToken,
TokenId = _accessToken,
Type = Token.AccessTokenType
});
tokens
@@ -229,11 +229,11 @@ public class AuthLogicTests {
// Arrange
var token = new Token {
Type = Token.RefreshTokenType,
Content = _refreshToken,
TokenId = _refreshToken,
CreatedAt = DateTime.Now,
Owner = CreateDummyUser()
};
var (auth, context) = SetupEnvironment(true, token, token.Content.ToString());
var (auth, context) = SetupEnvironment(true, token, token.TokenId.ToString());
// Act
var result = await auth.Authenticate();
@@ -277,11 +277,11 @@ public class AuthLogicTests {
// Arrange
var token = new Token {
Type = Token.AccessTokenType,
Content = _refreshToken,
TokenId = _refreshToken,
CreatedAt = DateTime.Now,
Owner = CreateDummyUser()
};
var (auth, context) = SetupEnvironment(true, token, token.Content.ToString());
var (auth, context) = SetupEnvironment(true, token, token.TokenId.ToString());
// Act
var result = await auth.Authenticate();
@@ -297,11 +297,11 @@ public class AuthLogicTests {
// Arrange
var token = new Token {
Type = Token.RefreshTokenType,
Content = _refreshToken,
TokenId = _refreshToken,
CreatedAt = DateTime.MinValue,
Owner = CreateDummyUser()
};
var (auth, context) = SetupEnvironment(true, token, token.Content.ToString());
var (auth, context) = SetupEnvironment(true, token, token.TokenId.ToString());
// Act
var result = await auth.Authenticate();

View File

@@ -14,7 +14,7 @@ public class TokenRepositoryTests {
for (int i = 0; i < count; i++) {
await context.Tokens.AddAsync(new() {
Content = Guid.NewGuid(),
TokenId = Guid.NewGuid(),
Owner = CreateTestUser(),
Type = Token.AccessTokenType
});
@@ -37,7 +37,7 @@ public class TokenRepositoryTests {
var token = context.Tokens.First();
// Act
var result = await repo.GetToken(token.Content.ToString());
var result = await repo.GetToken(token.TokenId.ToString());
// Assert
Assert.Equal(token, result);
@@ -64,12 +64,12 @@ public class TokenRepositoryTests {
var user = CreateTestUser();
await context.Tokens.AddRangeAsync(new List<Token> {
new() {
Content = Guid.NewGuid(),
TokenId = Guid.NewGuid(),
Owner = user,
Type = Token.AccessTokenType
},
new() {
Content = Guid.NewGuid(),
TokenId = Guid.NewGuid(),
Owner = user,
Type = Token.RefreshTokenType
}

View File

@@ -30,7 +30,7 @@ public class AuthenticationTests {
var provideCorrectToken = correctToken is null;
correctToken ??= new Token {
Content = Guid.NewGuid(),
TokenId = Guid.NewGuid(),
CreatedAt = DateTime.Now,
Type = Token.AccessTokenType,
Owner = new User {
@@ -39,7 +39,7 @@ public class AuthenticationTests {
};
tokens
.Setup(x => x.GetToken(It.Is<string>(t => t == correctToken.Content.ToString())))
.Setup(x => x.GetToken(It.Is<string>(t => t == correctToken.TokenId.ToString())))
.ReturnsAsync(correctToken);
perms
@@ -49,7 +49,7 @@ public class AuthenticationTests {
var auth = new HopFrameAuthentication(options.Object, logger.Object, encoder.Object, clock.Object, tokens.Object, perms.Object, new OptionsWrapper<HopFrameAuthenticationOptions>(new HopFrameAuthenticationOptions()));
var context = new DefaultHttpContext();
if (provideCorrectToken)
context.HttpContext.Request.Headers.Append(HopFrameAuthentication.SchemeName, correctToken.Content.ToString());
context.HttpContext.Request.Headers.Append(HopFrameAuthentication.SchemeName, correctToken.TokenId.ToString());
if (providedToken is not null)
context.HttpContext.Request.Headers.Append(HopFrameAuthentication.SchemeName, providedToken);
@@ -101,12 +101,12 @@ public class AuthenticationTests {
public async Task Authentication_With_ExpiredToken_Should_Fail() {
// Arrange
var token = new Token {
Content = Guid.NewGuid(),
TokenId = Guid.NewGuid(),
CreatedAt = DateTime.MinValue,
Type = Token.AccessTokenType,
Owner = new User()
};
var auth = await SetupEnvironment(token, token.Content.ToString());
var auth = await SetupEnvironment(token, token.TokenId.ToString());
// Act
var result = await auth.AuthenticateAsync();
@@ -121,12 +121,12 @@ public class AuthenticationTests {
public async Task Authentication_With_UnownedToken_Should_Fail() {
// Arrange
var token = new Token {
Content = Guid.NewGuid(),
TokenId = Guid.NewGuid(),
CreatedAt = DateTime.Now,
Type = Token.AccessTokenType,
Owner = null
};
var auth = await SetupEnvironment(token, token.Content.ToString());
var auth = await SetupEnvironment(token, token.TokenId.ToString());
// Act
var result = await auth.AuthenticateAsync();

View File

@@ -61,7 +61,7 @@ public class AuthMiddlewareTests {
public async Task InvokeAsync_With_InvalidLoginValidToken_Should_Succeed() {
// Arrange
var token = new Token {
Content = Guid.NewGuid(),
TokenId = Guid.NewGuid(),
CreatedAt = DateTime.Now,
Type = Token.AccessTokenType,
Owner = CreateDummyUser()
@@ -74,7 +74,7 @@ public class AuthMiddlewareTests {
// Assert
Assert.Equal(token.Owner.Id.ToString(), context.User.FindFirstValue(HopFrameClaimTypes.UserId));
Assert.Equal(token.Content.ToString(), context.User.FindFirstValue(HopFrameClaimTypes.AccessTokenId));
Assert.Equal(token.TokenId.ToString(), context.User.FindFirstValue(HopFrameClaimTypes.AccessTokenId));
Assert.Equal(token.Owner.Permissions.First().PermissionName, context.User.FindFirstValue(HopFrameClaimTypes.Permission));
}

View File

@@ -47,13 +47,13 @@ public class AuthServiceTests {
tokens
.Setup(t => t.CreateToken(It.Is<int>(t => t == Token.RefreshTokenType), It.IsAny<User>()))
.ReturnsAsync(new Token {
Content = _refreshToken,
TokenId = _refreshToken,
Type = Token.RefreshTokenType
});
tokens
.Setup(t => t.CreateToken(It.Is<int>(t => t == Token.AccessTokenType), It.IsAny<User>()))
.ReturnsAsync(new Token {
Content = _accessToken,
TokenId = _accessToken,
Type = Token.AccessTokenType
});
tokens
@@ -171,18 +171,18 @@ public class AuthServiceTests {
// Arrange
var token = new Token {
Type = Token.RefreshTokenType,
Content = _refreshToken,
TokenId = _refreshToken,
CreatedAt = DateTime.Now,
Owner = CreateDummyUser()
};
var (service, context) = SetupEnvironment(true, token, token.Content.ToString());
var (service, context) = SetupEnvironment(true, token, token.TokenId.ToString());
// Act
var result = await service.RefreshLogin();
// Assert
Assert.NotNull(result);
Assert.Equal(_accessToken, result.Content);
Assert.Equal(_accessToken, result.TokenId);
Assert.Equal(_accessToken.ToString(), context.Response.Headers.FindCookie(ITokenContext.AccessTokenType));
}
@@ -217,11 +217,11 @@ public class AuthServiceTests {
// Arrange
var token = new Token {
Type = Token.AccessTokenType,
Content = _refreshToken,
TokenId = _refreshToken,
CreatedAt = DateTime.Now,
Owner = CreateDummyUser()
};
var (service, context) = SetupEnvironment(true, token, token.Content.ToString());
var (service, context) = SetupEnvironment(true, token, token.TokenId.ToString());
// Act
var result = await service.RefreshLogin();
@@ -236,11 +236,11 @@ public class AuthServiceTests {
// Arrange
var token = new Token {
Type = Token.RefreshTokenType,
Content = _refreshToken,
TokenId = _refreshToken,
CreatedAt = DateTime.MinValue,
Owner = CreateDummyUser()
};
var (service, context) = SetupEnvironment(true, token, token.Content.ToString());
var (service, context) = SetupEnvironment(true, token, token.TokenId.ToString());
// Act
var result = await service.RefreshLogin();
@@ -255,7 +255,7 @@ public class AuthServiceTests {
// Arrange
var token = new Token {
Type = Token.AccessTokenType,
Content = _accessToken,
TokenId = _accessToken,
CreatedAt = DateTime.Now,
Owner = CreateDummyUser()
};
@@ -285,7 +285,7 @@ public class AuthServiceTests {
// Arrange
var token = new Token {
Type = Token.RefreshTokenType,
Content = _accessToken,
TokenId = _accessToken,
CreatedAt = DateTime.Now,
Owner = CreateDummyUser()
};
@@ -303,7 +303,7 @@ public class AuthServiceTests {
// Arrange
var token = new Token {
Type = Token.AccessTokenType,
Content = _accessToken,
TokenId = _accessToken,
CreatedAt = DateTime.MinValue,
Owner = CreateDummyUser()
};
@@ -321,7 +321,7 @@ public class AuthServiceTests {
// Arrange
var token = new Token {
Type = Token.AccessTokenType,
Content = _accessToken,
TokenId = _accessToken,
CreatedAt = DateTime.Now,
Owner = null
};