mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-26 07:28:45 -07:00
Use token response generator for legacy fields
This commit is contained in:
@@ -6,7 +6,9 @@ using System.Text;
|
|||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using Open.IdentityServer;
|
using Open.IdentityServer;
|
||||||
using Open.IdentityServer.Models;
|
using Open.IdentityServer.Models;
|
||||||
|
using Open.IdentityServer.ResponseHandling;
|
||||||
using Open.IdentityServer.Services;
|
using Open.IdentityServer.Services;
|
||||||
|
using Open.IdentityServer.Stores;
|
||||||
using Open.IdentityServer.Validation;
|
using Open.IdentityServer.Validation;
|
||||||
using Microsoft.AspNetCore.Http.Features;
|
using Microsoft.AspNetCore.Http.Features;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@@ -215,6 +217,8 @@ public static class RecRoomIdentityServerRegistration
|
|||||||
.AddResourceOwnerValidator<RecRoomPasswordValidator>()
|
.AddResourceOwnerValidator<RecRoomPasswordValidator>()
|
||||||
.AddExtensionGrantValidator<CachedLoginGrantValidator>()
|
.AddExtensionGrantValidator<CachedLoginGrantValidator>()
|
||||||
.AddProfileService<RecRoomProfileService>();
|
.AddProfileService<RecRoomProfileService>();
|
||||||
|
|
||||||
|
services.AddTransient<ITokenResponseGenerator, RecRoomTokenResponseGenerator>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -487,6 +491,67 @@ public sealed class IdentityServerGameTokenRequestMiddleware(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public sealed class RecRoomTokenResponseGenerator(
|
||||||
|
TimeProvider clock,
|
||||||
|
ITokenService tokenService,
|
||||||
|
IRefreshTokenService refreshTokenService,
|
||||||
|
IScopeParser scopeParser,
|
||||||
|
IResourceStore resources,
|
||||||
|
IClientStore clients,
|
||||||
|
ILogger<TokenResponseGenerator> logger) : ITokenResponseGenerator
|
||||||
|
{
|
||||||
|
private readonly TokenResponseGenerator _inner = new(
|
||||||
|
clock,
|
||||||
|
tokenService,
|
||||||
|
refreshTokenService,
|
||||||
|
scopeParser,
|
||||||
|
resources,
|
||||||
|
clients,
|
||||||
|
logger);
|
||||||
|
|
||||||
|
public async Task<TokenResponse> ProcessAsync(TokenRequestValidationResult request)
|
||||||
|
{
|
||||||
|
var response = await _inner.ProcessAsync(request);
|
||||||
|
AddLegacyGameFields(response);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddLegacyGameFields(TokenResponse response)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(response.AccessToken))
|
||||||
|
return;
|
||||||
|
|
||||||
|
response.Custom ??= new Dictionary<string, object>(StringComparer.Ordinal);
|
||||||
|
AddIfMissing(response.Custom, "Access_token", response.AccessToken);
|
||||||
|
AddIfMissing(response.Custom, "accessToken", response.AccessToken);
|
||||||
|
AddIfMissing(response.Custom, "AccessToken", response.AccessToken);
|
||||||
|
AddIfMissing(response.Custom, "token", response.AccessToken);
|
||||||
|
AddIfMissing(response.Custom, "Token", response.AccessToken);
|
||||||
|
|
||||||
|
AddIfMissing(response.Custom, "tokenType", "Bearer");
|
||||||
|
AddIfMissing(response.Custom, "TokenType", "Bearer");
|
||||||
|
AddIfMissing(response.Custom, "expiresIn", response.AccessTokenLifetime);
|
||||||
|
AddIfMissing(response.Custom, "ExpiresIn", response.AccessTokenLifetime);
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(response.RefreshToken))
|
||||||
|
{
|
||||||
|
AddIfMissing(response.Custom, "Refresh_token", response.RefreshToken);
|
||||||
|
AddIfMissing(response.Custom, "refreshToken", response.RefreshToken);
|
||||||
|
AddIfMissing(response.Custom, "RefreshToken", response.RefreshToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
var signingKey = Convert.ToBase64String(RandomNumberGenerator.GetBytes(32));
|
||||||
|
AddIfMissing(response.Custom, "key", signingKey);
|
||||||
|
AddIfMissing(response.Custom, "Key", signingKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void AddIfMissing(IDictionary<string, object> values, string key, object value)
|
||||||
|
{
|
||||||
|
if (!values.ContainsKey(key))
|
||||||
|
values[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public sealed class RecRoomPasswordValidator(
|
public sealed class RecRoomPasswordValidator(
|
||||||
PlayerService playerService,
|
PlayerService playerService,
|
||||||
LevelService level,
|
LevelService level,
|
||||||
|
|||||||
Reference in New Issue
Block a user