Skip to content
Open
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
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<Project>
<PropertyGroup>
<VersionPrefix>3.1.2</VersionPrefix>
<VersionPrefix>3.1.3</VersionPrefix>
<MinVerMinimumMajorMinor>3.1</MinVerMinimumMajorMinor>
<Company>RockSolidKnowledge</Company>
<WarningsAsErrors>CS1591;CS1570;CS1571;CS1572;CS1573;CS1574;CS1580;CS1581;CS1584;CS1587;CS1591;CS1658;CS1712;CS1734</WarningsAsErrors>
Expand Down
2 changes: 1 addition & 1 deletion src/Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<ExtensionsVersion>10.0.14</ExtensionsVersion>
<EntityFrameworkVersion>10.0.14</EntityFrameworkVersion>

<IdentityServerVersion>3.1.2-*</IdentityServerVersion>
<IdentityServerVersion>3.1.3-*</IdentityServerVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@

#nullable enable

using System;
using Open.IdentityServer.EntityFramework.Entities;
using Open.IdentityServer.Models;
using Open.IdentityServer.Stores.Serialization;

namespace Open.IdentityServer.EntityFramework.Mappers;

Expand All @@ -23,17 +25,19 @@ public static class IdentityServerServerSideSessionsExtensions
/// Mapper for <see cref="Entities.ServerSideSession"/> to convert into an instance of <see cref="Open.IdentityServer.Models.ServerSideSession"/>
/// </summary>
/// <returns>mapped instance of <see cref="Open.IdentityServer.Models.ServerSideSession"/></returns>
public Models.ServerSideSession ToModel() =>
sessionEntity.ToModel<Models.ServerSideSession>();
public Models.ServerSideSession ToModel(IAuthenticationTicketSerializer authTicketSerializer) =>
sessionEntity.ToModel<Models.ServerSideSession>(authTicketSerializer);

/// <summary>
/// Mapper for <see cref="Entities.ServerSideSession"/> to convert into an instance of <typeparamref name="TModel"/>.
/// </summary>
/// <typeparam name="TModel">The type of <see cref="Open.IdentityServer.Models.ServerSideSession"/> model to map to.</typeparam>
/// <returns>mapped instance of <typeparamref name="TModel"/>.</returns>
public TModel ToModel<TModel>()
public TModel ToModel<TModel>(IAuthenticationTicketSerializer authTicketSerializer)
where TModel: Models.ServerSideSession, new()
{
var authenticationTicket = authTicketSerializer.Deserialize(sessionEntity.Data);

return new TModel
{
Key = sessionEntity.Key,
Expand All @@ -44,7 +48,8 @@ public TModel ToModel<TModel>()
Created = sessionEntity.Created,
Renewed = sessionEntity.Renewed,
Expires = sessionEntity.Expires,
Data = sessionEntity.Data
Data = sessionEntity.Data,
AuthenticationTicket = authenticationTicket,
};
}
}
Expand All @@ -58,10 +63,11 @@ public TModel ToModel<TModel>()
/// <summary>
/// Mapper for <see cref="Open.IdentityServer.Models.ServerSideSession"/> to convert into an instance of <see cref="Entities.ServerSideSession"/>
/// </summary>
/// <param name="authTicketSerializer">authentication ticket serializer</param>
/// <returns>mapped instance of <see cref="Entities.ServerSideSession"/></returns>
public Entities.ServerSideSession ToEntity()
public Entities.ServerSideSession ToEntity(IAuthenticationTicketSerializer authTicketSerializer)
{
return new Entities.ServerSideSession
Entities.ServerSideSession newEntity = new()
{
Key = sessionModel.Key,
Scheme = sessionModel.Scheme,
Expand All @@ -71,15 +77,22 @@ public Entities.ServerSideSession ToEntity()
Created = sessionModel.Created,
Renewed = sessionModel.Renewed,
Expires = sessionModel.Expires,
Data = sessionModel.Data
};

if (sessionModel.AuthenticationTicket != null)
{
newEntity.Data = authTicketSerializer.Serialize(sessionModel.AuthenticationTicket);
}

return newEntity;
}

/// <summary>
/// Updates <see cref="Entities.ServerSideSession"/> with instance of <see cref="Open.IdentityServer.Models.ServerSideSession"/>
/// </summary>
/// <param name="authTicketSerializer">authentication ticket serializer</param>
/// <param name="existingEntity">The entity.</param>
public void UpdateEntity(Entities.ServerSideSession existingEntity)
public void UpdateEntity(IAuthenticationTicketSerializer authTicketSerializer, Entities.ServerSideSession existingEntity)
{
existingEntity.Key = sessionModel.Key;
existingEntity.Scheme = sessionModel.Scheme;
Expand All @@ -89,7 +102,11 @@ public void UpdateEntity(Entities.ServerSideSession existingEntity)
existingEntity.Created = sessionModel.Created;
existingEntity.Renewed = sessionModel.Renewed;
existingEntity.Expires = sessionModel.Expires;
existingEntity.Data = sessionModel.Data;

if (sessionModel.AuthenticationTicket != null)
{
existingEntity.Data = authTicketSerializer.Serialize(sessionModel.AuthenticationTicket);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
using Open.IdentityServer.Models;
using Open.IdentityServer.Services;
using Open.IdentityServer.Stores;
using Open.IdentityServer.Stores.Serialization;

namespace Open.IdentityServer.EntityFramework.Stores;

Expand All @@ -23,6 +24,7 @@ namespace Open.IdentityServer.EntityFramework.Stores;
/// </summary>
public class IdentityServerServerSideSessionStore(
IPersistedGrantDbContext dbContext,
IAuthenticationTicketSerializer authTicketSerializer,
ITelemetryService telemetry,
TimeProvider timeProvider,
ILogger<IdentityServerServerSideSessionStore> logger) : IIdentityServerServerSideSessionStore
Expand All @@ -35,8 +37,12 @@ public class IdentityServerServerSideSessionStore(
/// <remarks>
/// Makes it possible to return an extended model.
/// </remarks>
protected virtual ServerSideSession? ToModel(Entities.ServerSideSession? entities) =>
entities?.ToModel();
protected virtual ServerSideSession? ToModel(Entities.ServerSideSession? entities)
{
var result = entities?.ToModel(authTicketSerializer);

return result;
}

/// <inheritdoc />
public async Task<ServerSideSession?> GetSession(string key)
Expand Down Expand Up @@ -68,7 +74,7 @@ public async Task CreateSession(ServerSideSession session)
return;
}

Entities.ServerSideSession sessionEntity = session.ToEntity();
Entities.ServerSideSession sessionEntity = session.ToEntity(authTicketSerializer);

await dbContext.ServerSideSessions.AddAsync(sessionEntity);

Expand Down Expand Up @@ -98,7 +104,7 @@ public async Task UpdateSession(ServerSideSession session)
return;
}

session.UpdateEntity(existing);
session.UpdateEntity(authTicketSerializer, existing);

try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,21 @@
using Open.IdentityServer.EntityFramework.Mappers;
using Open.IdentityServer.EntityFramework.Stores;
using Open.IdentityServer.Services;
using Open.IdentityServer.Stores.Serialization;

namespace Open.IdentityServer.EntityFramework.IntegrationTests.Stores.Compatibility;

public class ExtendedIdentityServerServerSideSessionStore(
IPersistedGrantDbContext dbContext,
IAuthenticationTicketSerializer authTicketSerializer,
ITelemetryService telemetry,
TimeProvider timeProvider,
ILogger<IdentityServerServerSideSessionStore> logger):
IdentityServerServerSideSessionStore(dbContext, telemetry, timeProvider, logger)
IdentityServerServerSideSessionStore(dbContext, authTicketSerializer, telemetry, timeProvider, logger)
{
protected override Models.ServerSideSession ToModel(Entities.ServerSideSession client)
{
var model = client.ToModel<ExtendedServerSideSession>();
var model = client.ToModel<ExtendedServerSideSession>(authTicketSerializer);

model.DataLength = model.Data.Length;
model.Lifetime = model.Expires?.Subtract(model.Renewed);
Expand Down
Loading
Loading