mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-03 01:40:21 +08:00
fix: align provider oauth refresh redirects
This commit is contained in:
@@ -21,12 +21,20 @@ pub(super) async fn execute_admin_provider_oauth_refresh(
|
||||
key,
|
||||
provider,
|
||||
provider_type,
|
||||
trace_id,
|
||||
transport,
|
||||
} = request;
|
||||
|
||||
let refreshed_entry = match state.force_local_oauth_refresh_entry(&transport).await {
|
||||
Ok(Some(entry)) => Some(entry),
|
||||
Ok(None) => {
|
||||
tracing::warn!(
|
||||
trace_id = %trace_id,
|
||||
key_id = %key_id,
|
||||
provider_id = %provider.id,
|
||||
provider_type = %provider_type,
|
||||
"gateway manual provider oauth refresh did not run"
|
||||
);
|
||||
return Ok(RefreshDispatch::Respond(response::control_error_response(
|
||||
http::StatusCode::BAD_REQUEST,
|
||||
"Token 刷新未执行,请检查授权配置",
|
||||
@@ -41,6 +49,15 @@ pub(super) async fn execute_admin_provider_oauth_refresh(
|
||||
Some(status_code),
|
||||
Some(body_excerpt.as_str()),
|
||||
);
|
||||
tracing::warn!(
|
||||
trace_id = %trace_id,
|
||||
key_id = %key_id,
|
||||
provider_id = %provider.id,
|
||||
provider_type = %provider_type,
|
||||
status_code,
|
||||
reason = %error_reason,
|
||||
"gateway manual provider oauth refresh failed"
|
||||
);
|
||||
if matches!(status_code, 400 | 401 | 403) {
|
||||
let failure_reason = format!(
|
||||
"{OAUTH_REFRESH_FAILED_PREFIX}Token 续期失败 ({status_code}): {error_reason}"
|
||||
@@ -66,11 +83,27 @@ pub(super) async fn execute_admin_provider_oauth_refresh(
|
||||
));
|
||||
}
|
||||
Err(AdminLocalOAuthRefreshError::Transport { source, .. }) => {
|
||||
tracing::warn!(
|
||||
trace_id = %trace_id,
|
||||
key_id = %key_id,
|
||||
provider_id = %provider.id,
|
||||
provider_type = %provider_type,
|
||||
error = %source,
|
||||
"gateway manual provider oauth refresh transport failed"
|
||||
);
|
||||
return Ok(RefreshDispatch::Respond(
|
||||
response::oauth_refresh_failed_service_unavailable_response(source.to_string()),
|
||||
));
|
||||
}
|
||||
Err(AdminLocalOAuthRefreshError::InvalidResponse { message, .. }) => {
|
||||
tracing::warn!(
|
||||
trace_id = %trace_id,
|
||||
key_id = %key_id,
|
||||
provider_id = %provider.id,
|
||||
provider_type = %provider_type,
|
||||
reason = %message,
|
||||
"gateway manual provider oauth refresh returned invalid response"
|
||||
);
|
||||
return Ok(RefreshDispatch::Respond(
|
||||
response::oauth_refresh_failed_bad_request_response(&message),
|
||||
));
|
||||
|
||||
@@ -17,6 +17,7 @@ pub(super) struct RefreshRequestContext {
|
||||
pub(super) key: StoredProviderCatalogKey,
|
||||
pub(super) provider: StoredProviderCatalogProvider,
|
||||
pub(super) provider_type: String,
|
||||
pub(super) trace_id: String,
|
||||
pub(super) transport: AdminGatewayProviderTransportSnapshot,
|
||||
}
|
||||
|
||||
|
||||
@@ -101,6 +101,7 @@ pub(super) async fn parse_admin_provider_oauth_refresh_request(
|
||||
key,
|
||||
provider,
|
||||
provider_type,
|
||||
trace_id: request_context.trace_id().to_string(),
|
||||
transport,
|
||||
}))
|
||||
}
|
||||
|
||||
@@ -123,7 +123,14 @@ pub(crate) async fn create_provider_oauth_catalog_key(
|
||||
record.circuit_breaker_by_format = Some(json!({}));
|
||||
record.created_at_unix_ms = Some(now_unix_secs);
|
||||
record.updated_at_unix_secs = Some(now_unix_secs);
|
||||
state.create_provider_catalog_key(&record).await
|
||||
let created = state.create_provider_catalog_key(&record).await?;
|
||||
if let Some(key) = created.as_ref() {
|
||||
let _ = state
|
||||
.app()
|
||||
.invalidate_local_oauth_refresh_entry(&key.id)
|
||||
.await;
|
||||
}
|
||||
Ok(created)
|
||||
}
|
||||
|
||||
pub(crate) async fn update_existing_provider_oauth_catalog_key(
|
||||
@@ -166,7 +173,14 @@ pub(crate) async fn update_existing_provider_oauth_catalog_key(
|
||||
updated.proxy = Some(proxy);
|
||||
}
|
||||
updated.updated_at_unix_secs = Some(now_unix_secs);
|
||||
state.update_provider_catalog_key(&updated).await
|
||||
let persisted = state.update_provider_catalog_key(&updated).await?;
|
||||
if let Some(key) = persisted.as_ref() {
|
||||
let _ = state
|
||||
.app()
|
||||
.invalidate_local_oauth_refresh_entry(&key.id)
|
||||
.await;
|
||||
}
|
||||
Ok(persisted)
|
||||
}
|
||||
|
||||
fn provider_oauth_catalog_key_api_formats(
|
||||
|
||||
Reference in New Issue
Block a user