chore: checkpoint turso and ai runtime work

This commit is contained in:
Agent Board
2026-07-03 23:20:16 +08:00
parent a75b3d11f9
commit 36d027a4a1
67 changed files with 4224 additions and 914 deletions
+24 -24
View File
@@ -134,10 +134,10 @@ pub async fn auth_api(
.with_header(HEADER_MNOTE_WEB_OWNER, "mnote-web"));
}
if action == "auth:signOut" {
return Ok(build_sqlite_sign_out_response(&state, &context));
return Ok(build_control_plane_sign_out_response(&state, &context));
}
handle_sqlite_auth_action(&state, &context, &payload).await
handle_control_plane_auth_action(&state, &context, &payload).await
}
pub async fn auth_entry(
@@ -2070,7 +2070,7 @@ fn has_real_auth_context(state: &AppState, context: &RequestContext) -> bool {
|| extract_cookie_value(context, COOKIE_MNOTE_WEB_CONVEX_TOKEN).is_some()
}
async fn handle_sqlite_auth_action(
async fn handle_control_plane_auth_action(
state: &AppState,
context: &RequestContext,
payload: &serde_json::Value,
@@ -2131,7 +2131,7 @@ async fn handle_sqlite_auth_action(
role: None,
password_hash: None,
})
.map_err(|error| sqlite_auth_error(context, error))?;
.map_err(|error| control_plane_auth_error(context, error))?;
state
.control_plane()
.create_password_identity(CreatePasswordIdentityInput {
@@ -2140,11 +2140,11 @@ async fn handle_sqlite_auth_action(
username: user.username.clone(),
password: password.clone(),
})
.map_err(|error| sqlite_auth_error(context, error))?;
.map_err(|error| control_plane_auth_error(context, error))?;
state
.control_plane()
.ensure_default_workspace(&user.id)
.map_err(|error| sqlite_auth_error(context, error))?;
.map_err(|error| control_plane_auth_error(context, error))?;
state
.control_plane()
.authenticate_password(AuthenticatePasswordInput {
@@ -2156,7 +2156,7 @@ async fn handle_sqlite_auth_action(
ip_hash: None,
expires_at: None,
})
.map_err(|error| sqlite_auth_error(context, error))?
.map_err(|error| control_plane_auth_error(context, error))?
} else {
let account = params
.get("account")
@@ -2181,7 +2181,7 @@ async fn handle_sqlite_auth_action(
ip_hash: None,
expires_at: None,
})
.map_err(|error| sqlite_auth_error(context, error))?
.map_err(|error| control_plane_auth_error(context, error))?
};
let audit_action = if flow == "signUp" {
@@ -2202,7 +2202,7 @@ async fn handle_sqlite_auth_action(
.unwrap_or_else(|_| "{}".to_string()),
});
let provider_sync_results = if flow == "signUp" {
let provider_sync_results = if matches!(flow, "signUp" | "signIn") {
let directory_grants = state
.control_plane()
.list_directory_grants_for_actor(&resolved.user.id)
@@ -2233,13 +2233,13 @@ async fn handle_sqlite_auth_action(
None
};
let mut response = build_sqlite_auth_response(
let mut response = build_control_plane_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),
&effective_control_plane_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);
@@ -2253,7 +2253,7 @@ async fn handle_sqlite_auth_action(
Ok(response)
}
fn sqlite_auth_error(
fn control_plane_auth_error(
context: &RequestContext,
error: control_plane::ControlPlaneError,
) -> WebError {
@@ -2273,7 +2273,7 @@ fn sqlite_auth_error(
.with_header(HEADER_MNOTE_WEB_OWNER, "mnote-web")
}
fn build_sqlite_auth_response(
fn build_control_plane_auth_response(
context: &RequestContext,
session_token: &str,
user_id: &str,
@@ -2286,7 +2286,7 @@ fn build_sqlite_auth_response(
"userId": user_id,
"email": email,
"name": name,
"authMode": "sqliteSession",
"authMode": "controlPlaneSession",
"actorType": actor_type
}))
.into_response();
@@ -2307,7 +2307,7 @@ fn build_sqlite_auth_response(
response
}
fn effective_sqlite_auth_actor_type(user_id: &str, stored_role: &str) -> String {
fn effective_control_plane_auth_actor_type(user_id: &str, stored_role: &str) -> String {
let role = stored_role.trim();
let fallback_role = if role.is_empty() { "user" } else { role };
if crate::routes::local_folder_source::is_local_access_policy_admin_actor(
@@ -2320,7 +2320,7 @@ fn effective_sqlite_auth_actor_type(user_id: &str, stored_role: &str) -> String
}
}
fn build_sqlite_sign_out_response(state: &AppState, context: &RequestContext) -> Response {
fn build_control_plane_sign_out_response(state: &AppState, context: &RequestContext) -> Response {
if let Some(raw_token) = extract_cookie_value(context, COOKIE_MNOTE_SESSION) {
let token_hash = session_token_hash(&raw_token);
if let Ok(Some(resolved)) = state.control_plane().get_session_by_token_hash(&token_hash) {
@@ -3062,7 +3062,7 @@ mod tests {
}
#[tokio::test]
async fn root_entry_uses_sqlite_session_display_name_for_workspace_label() {
async fn root_entry_uses_control_plane_session_display_name_for_workspace_label() {
use control_plane::{session_token_hash, CreateSessionInput, UpsertUserInput};
let app_state = AppState::new(AppConfig {
@@ -3095,7 +3095,7 @@ mod tests {
role: None,
password_hash: None,
})
.expect("upsert sqlite user");
.expect("upsert control-plane user");
app_state
.control_plane()
.create_session(CreateSessionInput {
@@ -3106,7 +3106,7 @@ mod tests {
ip_hash: None,
expires_at: None,
})
.expect("create sqlite session");
.expect("create control-plane session");
let response = build_app(app_state)
.oneshot(
@@ -3745,7 +3745,7 @@ mod tests {
}
#[tokio::test]
async fn auth_api_signup_sets_sqlite_session_cookie_when_compat_disabled() {
async fn auth_api_signup_sets_control_plane_session_cookie_when_compat_disabled() {
let response = app_with_config("http://127.0.0.1:3100".into(), false)
.oneshot(
Request::builder()
@@ -3786,11 +3786,11 @@ mod tests {
let payload: serde_json::Value = serde_json::from_slice(&body).expect("json");
assert_eq!(payload["userId"], "new-user");
assert_eq!(payload["email"], "new-user@example.com");
assert_eq!(payload["authMode"], "sqliteSession");
assert_eq!(payload["authMode"], "controlPlaneSession");
}
#[tokio::test]
async fn auth_api_signin_accepts_sqlite_username_after_signup() {
async fn auth_api_signin_accepts_control_plane_username_after_signup() {
let app = app_with_config("http://127.0.0.1:3100".into(), false);
let signup = app
.clone()
@@ -3829,7 +3829,7 @@ mod tests {
let payload: serde_json::Value = serde_json::from_slice(&body).expect("json");
assert_eq!(payload["userId"], "mnote-e2e");
assert_eq!(payload["email"], "mnote.e2e@example.com");
assert_eq!(payload["authMode"], "sqliteSession");
assert_eq!(payload["authMode"], "controlPlaneSession");
}
#[tokio::test]
@@ -3865,7 +3865,7 @@ mod tests {
}
#[tokio::test]
async fn auth_api_signout_clears_sqlite_session_cookie() {
async fn auth_api_signout_clears_control_plane_session_cookie() {
let response = app_with_config("http://127.0.0.1:3100".into(), false)
.oneshot(
Request::builder()