From 37d8fab617cca740091207e9d3f541c82d2b2723 Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Tue, 14 Oct 2025 14:51:49 -0300 Subject: [PATCH] Refactor session handling and auth flow --- src/basic/keywords/hear_talk.rs | 22 +- src/bot/mod.rs | 50 +- .../annoucements.gbdialog/auth.bas | 1 + .../annoucements.gbdialog/start.bas | 5 +- web/index.html | 1242 +++++++++-------- 5 files changed, 674 insertions(+), 646 deletions(-) diff --git a/src/basic/keywords/hear_talk.rs b/src/basic/keywords/hear_talk.rs index 8e739e81..10518c90 100644 --- a/src/basic/keywords/hear_talk.rs +++ b/src/basic/keywords/hear_talk.rs @@ -136,19 +136,17 @@ pub fn set_user_keyword(state: Arc, user: UserSession, engine: &mut En let state_for_spawn = Arc::clone(&state_clone); let user_clone_spawn = user_clone.clone(); - tokio::spawn(async move { - let mut session_manager = state_for_spawn.session_manager.lock().await; + let mut session_manager = + futures::executor::block_on(state_for_spawn.session_manager.lock()); - if let Err(e) = session_manager.update_user_id(user_clone_spawn.id, user_id) - { - error!("Failed to update user ID in session: {}", e); - } else { - info!( - "Updated session {} to user ID: {}", - user_clone_spawn.id, user_id - ); - } - }); + if let Err(e) = session_manager.update_user_id(user_clone_spawn.id, user_id) { + error!("Failed to update user ID in session: {}", e); + } else { + info!( + "Updated session {} to user ID: {}", + user_clone_spawn.id, user_id + ); + } } Err(e) => { debug!("Invalid UUID format for SET USER: {}", e); diff --git a/src/bot/mod.rs b/src/bot/mod.rs index 882e2cf2..3afdaed3 100644 --- a/src/bot/mod.rs +++ b/src/bot/mod.rs @@ -305,7 +305,7 @@ impl BotOrchestrator { e })?; - let bot_id = if let Ok(bot_guid) = std::env::var("BOT_GUID") { + let _bot_id = if let Ok(bot_guid) = std::env::var("BOT_GUID") { Uuid::parse_str(&bot_guid).map_err(|e| { warn!("Invalid BOT_GUID from env: {}", e); e @@ -714,16 +714,6 @@ async fn websocket_handler( let session_id_clone = session_id.clone(); let user_id_clone = user_id.clone(); - tokio::spawn(async move { - tokio::time::sleep(tokio::time::Duration::from_millis(500)).await; - if let Err(e) = orchestrator_clone - .trigger_auto_welcome(&session_id_clone, &user_id_clone, &bot_id, None) - .await - { - error!("Failed to trigger auto welcome: {}", e); - } - }); - let web_adapter = data.web_adapter.clone(); let session_id_clone1 = session_id.clone(); let session_id_clone2 = session_id.clone(); @@ -855,7 +845,7 @@ async fn auth_handler( } } }; - + let session_id_clone = session.id.clone(); let auth_script_path = "./templates/annoucements.gbai/annoucements.gbdialog/auth.bas"; let auth_script = match std::fs::read_to_string(auth_script_path) { Ok(content) => content, @@ -863,16 +853,42 @@ async fn auth_handler( }; let script_service = crate::basic::ScriptService::new(Arc::clone(&data), session.clone()); - if let Err(e) = script_service + match script_service .compile(&auth_script) .and_then(|ast| script_service.run(&ast)) { - error!("Failed to run auth script: {}", e); - return Ok( - HttpResponse::InternalServerError().json(serde_json::json!({"error": "Auth failed"})) - ); + Ok(result) => { + if result.to_string() == "false" { + error!("Auth script returned false, authentication failed"); + return Ok(HttpResponse::Unauthorized() + .json(serde_json::json!({"error": "Authentication failed"}))); + } + } + Err(e) => { + error!("Failed to run auth script: {}", e); + return Ok(HttpResponse::InternalServerError() + .json(serde_json::json!({"error": "Auth failed"}))); + } } + let session = { + let mut sm = data.session_manager.lock().await; + + match sm.get_session_by_id(session_id_clone) { + Ok(Some(s)) => s, + Ok(None) => { + error!("Failed to retrieve session"); + return Ok(HttpResponse::InternalServerError() + .json(serde_json::json!({"error": "Failed to retrieve session"}))); + } + Err(e) => { + error!("Failed to retrieve session: {}", e); + return Ok(HttpResponse::InternalServerError() + .json(serde_json::json!({"error": e.to_string()}))); + } + } + }; + Ok(HttpResponse::Ok().json(serde_json::json!({ "user_id": session.user_id, "session_id": session.id, diff --git a/templates/annoucements.gbai/annoucements.gbdialog/auth.bas b/templates/annoucements.gbai/annoucements.gbdialog/auth.bas index bf35d684..ba36a0ca 100644 --- a/templates/annoucements.gbai/annoucements.gbdialog/auth.bas +++ b/templates/annoucements.gbai/annoucements.gbdialog/auth.bas @@ -6,3 +6,4 @@ REM user = FIND "users", "external_id=" + result.user_id REM SET_USER user.id SET_USER "92fcffaa-bf0a-41a9-8d99-5541709d695b" +return true; diff --git a/templates/annoucements.gbai/annoucements.gbdialog/start.bas b/templates/annoucements.gbai/annoucements.gbdialog/start.bas index 19b86467..02dac8b2 100644 --- a/templates/annoucements.gbai/annoucements.gbdialog/start.bas +++ b/templates/annoucements.gbai/annoucements.gbdialog/start.bas @@ -1,7 +1,6 @@ -TALK "Welcome to General Bots!" - +TALK "Oi from BASIC" REM text = GET "default.pdf" -REM resume = LLM "Build a resume from " + text +REM resume = LLM "Say Hello and present a a resume from " + text REM TALK resume REM SET_CONTEXT text diff --git a/web/index.html b/web/index.html index 5116bda4..c393e4c9 100644 --- a/web/index.html +++ b/web/index.html @@ -1,218 +1,218 @@ - - - General Bots 2400 - - - - - - - - - - -
- - - -
-
-
-
- D -
-

- General Bots -

+ + + General Bots 2400 + + + + + + + + + + +
+ + - -
- -
-
-
- D -
-

- Bem-vindo ao General Bots -

-

- Seu assistente de IA avançado -

+ +
+
+
+
+ D +
+

+ General Bots +

+
+ +
+ +
+
+
+ D +
+

+ Bem-vindo ao General Bots +

+

+ Seu assistente de IA avançado +

+
+
+
+
+ + +
+
-
-
-
- - -
-
-
- - + initializeAuth(); + +