🚚 Move callback to under api

This commit is contained in:
2025-10-06 13:01:15 +08:00
parent 8f71d7f9e5
commit 8ac0b28c66

View File

@@ -128,7 +128,7 @@ public class ConnectionController(
} }
[AllowAnonymous] [AllowAnonymous]
[Route("/auth/callback/{provider}")] [Route("/api/auth/callback/{provider}")]
[HttpGet, HttpPost] [HttpGet, HttpPost]
public async Task<IActionResult> HandleCallback([FromRoute] string provider) public async Task<IActionResult> HandleCallback([FromRoute] string provider)
{ {
@@ -142,10 +142,10 @@ public class ConnectionController(
// Get the state from the cache // Get the state from the cache
var stateKey = $"{StateCachePrefix}{callbackData.State}"; var stateKey = $"{StateCachePrefix}{callbackData.State}";
// Try to get the state as OidcState first (new format) // Try to get the state as OidcState first (new format)
var oidcState = await cache.GetAsync<OidcState>(stateKey); var oidcState = await cache.GetAsync<OidcState>(stateKey);
// If not found, try to get as string (legacy format) // If not found, try to get as string (legacy format)
if (oidcState == null) if (oidcState == null)
{ {
@@ -153,7 +153,7 @@ public class ConnectionController(
if (string.IsNullOrEmpty(stateValue) || !OidcState.TryParse(stateValue, out oidcState) || oidcState == null) if (string.IsNullOrEmpty(stateValue) || !OidcState.TryParse(stateValue, out oidcState) || oidcState == null)
return BadRequest("Invalid or expired state parameter"); return BadRequest("Invalid or expired state parameter");
} }
// Remove the state from cache to prevent replay attacks // Remove the state from cache to prevent replay attacks
await cache.RemoveAsync(stateKey); await cache.RemoveAsync(stateKey);
@@ -309,14 +309,14 @@ public class ConnectionController(
if (connection != null) if (connection != null)
{ {
// Login existing user // Login existing user
var deviceId = !string.IsNullOrEmpty(callbackData.State) ? var deviceId = !string.IsNullOrEmpty(callbackData.State) ?
callbackData.State.Split('|').FirstOrDefault() : callbackData.State.Split('|').FirstOrDefault() :
string.Empty; string.Empty;
var challenge = await oidcService.CreateChallengeForUserAsync( var challenge = await oidcService.CreateChallengeForUserAsync(
userInfo, userInfo,
connection.Account, connection.Account,
HttpContext, HttpContext,
deviceId ?? string.Empty); deviceId ?? string.Empty);
return Redirect($"/auth/callback?challenge={challenge.Id}"); return Redirect($"/auth/callback?challenge={challenge.Id}");
} }
@@ -355,18 +355,18 @@ public class ConnectionController(
data.State = Uri.UnescapeDataString(request.Query["state"].FirstOrDefault() ?? ""); data.State = Uri.UnescapeDataString(request.Query["state"].FirstOrDefault() ?? "");
break; break;
case "POST" when request.HasFormContentType: case "POST" when request.HasFormContentType:
{ {
var form = await request.ReadFormAsync(); var form = await request.ReadFormAsync();
data.Code = Uri.UnescapeDataString(form["code"].FirstOrDefault() ?? ""); data.Code = Uri.UnescapeDataString(form["code"].FirstOrDefault() ?? "");
data.IdToken = Uri.UnescapeDataString(form["id_token"].FirstOrDefault() ?? ""); data.IdToken = Uri.UnescapeDataString(form["id_token"].FirstOrDefault() ?? "");
data.State = Uri.UnescapeDataString(form["state"].FirstOrDefault() ?? ""); data.State = Uri.UnescapeDataString(form["state"].FirstOrDefault() ?? "");
if (form.ContainsKey("user")) if (form.ContainsKey("user"))
data.RawData = Uri.UnescapeDataString(form["user"].FirstOrDefault() ?? ""); data.RawData = Uri.UnescapeDataString(form["user"].FirstOrDefault() ?? "");
break; break;
} }
} }
return data; return data;
} }
} }