From 917e2d539319f352a1ac215e2ab59b24356b062e Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 16 Aug 2025 11:59:29 +0800 Subject: [PATCH] :bug: Fix post get API missing the reference post --- DysonNetwork.Pass/AppDatabase.cs | 50 ++++---- .../Controllers/OidcProviderController.cs | 119 +++++++++--------- DysonNetwork.Sphere/Post/PostController.cs | 4 + 3 files changed, 88 insertions(+), 85 deletions(-) diff --git a/DysonNetwork.Pass/AppDatabase.cs b/DysonNetwork.Pass/AppDatabase.cs index a5aa467..fed1f47 100644 --- a/DysonNetwork.Pass/AppDatabase.cs +++ b/DysonNetwork.Pass/AppDatabase.cs @@ -18,35 +18,35 @@ public class AppDatabase( IConfiguration configuration ) : DbContext(options) { - public DbSet PermissionNodes { get; set; } - public DbSet PermissionGroups { get; set; } - public DbSet PermissionGroupMembers { get; set; } + public DbSet PermissionNodes { get; set; } = null!; + public DbSet PermissionGroups { get; set; } = null!; + public DbSet PermissionGroupMembers { get; set; } = null!; - public DbSet MagicSpells { get; set; } - public DbSet Accounts { get; set; } - public DbSet AccountConnections { get; set; } - public DbSet AccountProfiles { get; set; } - public DbSet AccountContacts { get; set; } - public DbSet AccountAuthFactors { get; set; } - public DbSet AccountRelationships { get; set; } - public DbSet AccountStatuses { get; set; } - public DbSet AccountCheckInResults { get; set; } - public DbSet Badges { get; set; } - public DbSet ActionLogs { get; set; } - public DbSet AbuseReports { get; set; } + public DbSet MagicSpells { get; set; } = null!; + public DbSet Accounts { get; set; } = null!; + public DbSet AccountConnections { get; set; } = null!; + public DbSet AccountProfiles { get; set; } = null!; + public DbSet AccountContacts { get; set; } = null!; + public DbSet AccountAuthFactors { get; set; } = null!; + public DbSet AccountRelationships { get; set; } = null!; + public DbSet AccountStatuses { get; set; } = null!; + public DbSet AccountCheckInResults { get; set; } = null!; + public DbSet Badges { get; set; } = null!; + public DbSet ActionLogs { get; set; } = null!; + public DbSet AbuseReports { get; set; } = null!; - public DbSet AuthSessions { get; set; } - public DbSet AuthChallenges { get; set; } - public DbSet AuthClients { get; set; } + public DbSet AuthSessions { get; set; } = null!; + public DbSet AuthChallenges { get; set; } = null!; + public DbSet AuthClients { get; set; } = null!; - public DbSet Wallets { get; set; } - public DbSet WalletPockets { get; set; } - public DbSet PaymentOrders { get; set; } - public DbSet PaymentTransactions { get; set; } - public DbSet WalletSubscriptions { get; set; } - public DbSet WalletCoupons { get; set; } + public DbSet Wallets { get; set; } = null!; + public DbSet WalletPockets { get; set; } = null!; + public DbSet PaymentOrders { get; set; } = null!; + public DbSet PaymentTransactions { get; set; } = null!; + public DbSet WalletSubscriptions { get; set; } = null!; + public DbSet WalletCoupons { get; set; } = null!; - public DbSet Punishments { get; set; } + public DbSet Punishments { get; set; } = null!; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { diff --git a/DysonNetwork.Pass/Auth/OidcProvider/Controllers/OidcProviderController.cs b/DysonNetwork.Pass/Auth/OidcProvider/Controllers/OidcProviderController.cs index 6c1605a..601dabf 100644 --- a/DysonNetwork.Pass/Auth/OidcProvider/Controllers/OidcProviderController.cs +++ b/DysonNetwork.Pass/Auth/OidcProvider/Controllers/OidcProviderController.cs @@ -20,7 +20,6 @@ public class OidcProviderController( OidcProviderService oidcService, IConfiguration configuration, IOptions options, - ILogger logger ) : ControllerBase { @@ -36,74 +35,74 @@ public class OidcProviderController( case "authorization_code" when request.Code == null: return BadRequest("Authorization code is required"); case "authorization_code": - { - var client = await oidcService.FindClientByIdAsync(request.ClientId.Value); - if (client == null || - !await oidcService.ValidateClientCredentialsAsync(request.ClientId.Value, request.ClientSecret)) - return BadRequest(new ErrorResponse + { + var client = await oidcService.FindClientByIdAsync(request.ClientId.Value); + if (client == null || + !await oidcService.ValidateClientCredentialsAsync(request.ClientId.Value, request.ClientSecret)) + return BadRequest(new ErrorResponse { Error = "invalid_client", ErrorDescription = "Invalid client credentials" }); - // Generate tokens - var tokenResponse = await oidcService.GenerateTokenResponseAsync( - clientId: request.ClientId.Value, - authorizationCode: request.Code!, - redirectUri: request.RedirectUri, - codeVerifier: request.CodeVerifier - ); - - return Ok(tokenResponse); - } - case "refresh_token" when string.IsNullOrEmpty(request.RefreshToken): - return BadRequest(new ErrorResponse - { Error = "invalid_request", ErrorDescription = "Refresh token is required" }); - case "refresh_token": - { - try - { - // Decode the base64 refresh token to get the session ID - var sessionIdBytes = Convert.FromBase64String(request.RefreshToken); - var sessionId = new Guid(sessionIdBytes); - - // Find the session and related data - var session = await oidcService.FindSessionByIdAsync(sessionId); - var now = SystemClock.Instance.GetCurrentInstant(); - if (session?.AppId is null || session.ExpiredAt < now) - { - return BadRequest(new ErrorResponse - { - Error = "invalid_grant", - ErrorDescription = "Invalid or expired refresh token" - }); - } - - // Get the client - var client = await oidcService.FindClientByIdAsync(session.AppId.Value); - if (client == null) - { - return BadRequest(new ErrorResponse - { - Error = "invalid_client", - ErrorDescription = "Client not found" - }); - } - - // Generate new tokens + // Generate tokens var tokenResponse = await oidcService.GenerateTokenResponseAsync( - clientId: session.AppId!.Value, - sessionId: session.Id + clientId: request.ClientId.Value, + authorizationCode: request.Code!, + redirectUri: request.RedirectUri, + codeVerifier: request.CodeVerifier ); return Ok(tokenResponse); } - catch (FormatException) + case "refresh_token" when string.IsNullOrEmpty(request.RefreshToken): + return BadRequest(new ErrorResponse + { Error = "invalid_request", ErrorDescription = "Refresh token is required" }); + case "refresh_token": { - return BadRequest(new ErrorResponse + try { - Error = "invalid_grant", - ErrorDescription = "Invalid refresh token format" - }); + // Decode the base64 refresh token to get the session ID + var sessionIdBytes = Convert.FromBase64String(request.RefreshToken); + var sessionId = new Guid(sessionIdBytes); + + // Find the session and related data + var session = await oidcService.FindSessionByIdAsync(sessionId); + var now = SystemClock.Instance.GetCurrentInstant(); + if (session?.AppId is null || session.ExpiredAt < now) + { + return BadRequest(new ErrorResponse + { + Error = "invalid_grant", + ErrorDescription = "Invalid or expired refresh token" + }); + } + + // Get the client + var client = await oidcService.FindClientByIdAsync(session.AppId.Value); + if (client == null) + { + return BadRequest(new ErrorResponse + { + Error = "invalid_client", + ErrorDescription = "Client not found" + }); + } + + // Generate new tokens + var tokenResponse = await oidcService.GenerateTokenResponseAsync( + clientId: session.AppId!.Value, + sessionId: session.Id + ); + + return Ok(tokenResponse); + } + catch (FormatException) + { + return BadRequest(new ErrorResponse + { + Error = "invalid_grant", + ErrorDescription = "Invalid refresh token format" + }); + } } - } default: return BadRequest(new ErrorResponse { Error = "unsupported_grant_type" }); } @@ -238,4 +237,4 @@ public class TokenRequest [JsonPropertyName("code_verifier")] [FromForm(Name = "code_verifier")] public string? CodeVerifier { get; set; } -} \ No newline at end of file +} diff --git a/DysonNetwork.Sphere/Post/PostController.cs b/DysonNetwork.Sphere/Post/PostController.cs index 6661807..1aed35b 100644 --- a/DysonNetwork.Sphere/Post/PostController.cs +++ b/DysonNetwork.Sphere/Post/PostController.cs @@ -144,6 +144,8 @@ public class PostController( .Where(e => e.Slug == slug && e.Publisher.Name == publisherName) .Include(e => e.Tags) .Include(e => e.Categories) + .Include(e => e.RepliedPost) + .Include(e => e.ForwardedPost) .FilterWithVisibility(currentUser, userFriends, userPublishers) .FirstOrDefaultAsync(); if (post is null) return NotFound(); @@ -175,6 +177,8 @@ public class PostController( .Include(e => e.Publisher) .Include(e => e.Tags) .Include(e => e.Categories) + .Include(e => e.RepliedPost) + .Include(e => e.ForwardedPost) .FilterWithVisibility(currentUser, userFriends, userPublishers) .FirstOrDefaultAsync(); if (post is null) return NotFound();