集成 OpenHub 与 WeKnora Page AI
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
use crate::app::AppState;
|
||||
use crate::context::RequestContext;
|
||||
use crate::error::WebError;
|
||||
use crate::provider_identity_sync::sync_provider_identities;
|
||||
use crate::routes::local_folder_source::{
|
||||
control_plane_db_path_display, create_default_local_workspace_for_actor,
|
||||
ensure_local_workspace_read_access_with_state, is_local_access_policy_admin_context,
|
||||
@@ -136,7 +137,7 @@ pub async fn auth_api(
|
||||
return Ok(build_sqlite_sign_out_response(&state, &context));
|
||||
}
|
||||
|
||||
handle_sqlite_auth_action(&state, &context, &payload)
|
||||
handle_sqlite_auth_action(&state, &context, &payload).await
|
||||
}
|
||||
|
||||
pub async fn auth_entry(
|
||||
@@ -2069,7 +2070,7 @@ fn has_real_auth_context(state: &AppState, context: &RequestContext) -> bool {
|
||||
|| extract_cookie_value(context, COOKIE_MNOTE_WEB_CONVEX_TOKEN).is_some()
|
||||
}
|
||||
|
||||
fn handle_sqlite_auth_action(
|
||||
async fn handle_sqlite_auth_action(
|
||||
state: &AppState,
|
||||
context: &RequestContext,
|
||||
payload: &serde_json::Value,
|
||||
@@ -2098,6 +2099,7 @@ fn handle_sqlite_auth_action(
|
||||
})?;
|
||||
let session_token = new_session_token();
|
||||
let token_hash = session_token_hash(&session_token);
|
||||
let password_for_provider_sync = password.clone();
|
||||
let resolved = if flow == "signUp" {
|
||||
let email = params
|
||||
.get("email")
|
||||
@@ -2200,14 +2202,46 @@ fn handle_sqlite_auth_action(
|
||||
.unwrap_or_else(|_| "{}".to_string()),
|
||||
});
|
||||
|
||||
Ok(build_sqlite_auth_response(
|
||||
let provider_sync_results = if flow == "signUp" {
|
||||
let results = sync_provider_identities(&resolved.user, &password_for_provider_sync).await;
|
||||
let _ = state.control_plane().append_audit(AppendAuditInput {
|
||||
actor_user_id: Some(resolved.user.id.clone()),
|
||||
action: "control.auth.provider_identities_synced".to_string(),
|
||||
target_kind: "user".to_string(),
|
||||
target_id: Some(resolved.user.id.clone()),
|
||||
metadata_json: serde_json::to_string(&json!({
|
||||
"providers": results.iter().map(|item| json!({
|
||||
"provider": item.provider,
|
||||
"ok": item.ok,
|
||||
"message": item.message,
|
||||
"providerUserId": item.provider_user_id,
|
||||
})).collect::<Vec<_>>(),
|
||||
}))
|
||||
.unwrap_or_else(|_| "{}".to_string()),
|
||||
});
|
||||
Some(results)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let mut response = build_sqlite_auth_response(
|
||||
context,
|
||||
&session_token,
|
||||
&resolved.user.id,
|
||||
resolved.user.email.as_deref().unwrap_or_default(),
|
||||
&resolved.user.display_name,
|
||||
&effective_sqlite_auth_actor_type(&resolved.user.id, &resolved.user.role),
|
||||
))
|
||||
);
|
||||
if let Some(results) = provider_sync_results {
|
||||
let all_ok = results.iter().all(|item| item.ok);
|
||||
let header_value = if all_ok { "ok" } else { "partial" };
|
||||
if let Ok(value) = HeaderValue::from_str(header_value) {
|
||||
response
|
||||
.headers_mut()
|
||||
.insert("x-mnote-provider-identity-sync", value);
|
||||
}
|
||||
}
|
||||
Ok(response)
|
||||
}
|
||||
|
||||
fn sqlite_auth_error(
|
||||
|
||||
Reference in New Issue
Block a user