- Set mode is now a number.
This commit is contained in:
parent
fa9f163971
commit
6779a13a29
5 changed files with 48 additions and 17 deletions
|
|
@ -2,12 +2,14 @@ use argon2::{
|
||||||
password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
|
password_hash::{rand_core::OsRng, PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
|
||||||
Argon2,
|
Argon2,
|
||||||
};
|
};
|
||||||
use diesel::prelude::*;
|
|
||||||
use diesel::pg::PgConnection;
|
use diesel::pg::PgConnection;
|
||||||
|
use diesel::prelude::*;
|
||||||
use redis::Client;
|
use redis::Client;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
use crate::shared;
|
||||||
|
|
||||||
pub struct AuthService {
|
pub struct AuthService {
|
||||||
pub conn: PgConnection,
|
pub conn: PgConnection,
|
||||||
pub redis: Option<Arc<Client>>,
|
pub redis: Option<Arc<Client>>,
|
||||||
|
|
@ -24,7 +26,7 @@ impl AuthService {
|
||||||
password: &str,
|
password: &str,
|
||||||
) -> Result<Option<Uuid>, Box<dyn std::error::Error + Send + Sync>> {
|
) -> Result<Option<Uuid>, Box<dyn std::error::Error + Send + Sync>> {
|
||||||
use crate::shared::models::users;
|
use crate::shared::models::users;
|
||||||
|
|
||||||
let user = users::table
|
let user = users::table
|
||||||
.filter(users::username.eq(username))
|
.filter(users::username.eq(username))
|
||||||
.filter(users::is_active.eq(true))
|
.filter(users::is_active.eq(true))
|
||||||
|
|
@ -54,15 +56,16 @@ impl AuthService {
|
||||||
) -> Result<Uuid, Box<dyn std::error::Error + Send + Sync>> {
|
) -> Result<Uuid, Box<dyn std::error::Error + Send + Sync>> {
|
||||||
use crate::shared::models::users;
|
use crate::shared::models::users;
|
||||||
use diesel::insert_into;
|
use diesel::insert_into;
|
||||||
|
|
||||||
let salt = SaltString::generate(&mut OsRng);
|
let salt = SaltString::generate(&mut OsRng);
|
||||||
let argon2 = Argon2::default();
|
let argon2 = Argon2::default();
|
||||||
let password_hash = argon2.hash_password(password.as_bytes(), &salt)
|
let password_hash = argon2
|
||||||
|
.hash_password(password.as_bytes(), &salt)
|
||||||
.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?
|
.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?
|
||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
let user_id = Uuid::new_v4();
|
let user_id = Uuid::new_v4();
|
||||||
|
|
||||||
insert_into(users::table)
|
insert_into(users::table)
|
||||||
.values((
|
.values((
|
||||||
users::id.eq(user_id),
|
users::id.eq(user_id),
|
||||||
|
|
@ -95,10 +98,11 @@ impl AuthService {
|
||||||
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||||
use crate::shared::models::users;
|
use crate::shared::models::users;
|
||||||
use diesel::update;
|
use diesel::update;
|
||||||
|
|
||||||
let salt = SaltString::generate(&mut OsRng);
|
let salt = SaltString::generate(&mut OsRng);
|
||||||
let argon2 = Argon2::default();
|
let argon2 = Argon2::default();
|
||||||
let password_hash = argon2.hash_password(new_password.as_bytes(), &salt)
|
let password_hash = argon2
|
||||||
|
.hash_password(new_password.as_bytes(), &salt)
|
||||||
.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?
|
.map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?
|
||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
|
|
@ -122,4 +126,18 @@ impl AuthService {
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
pub(crate) fn get_user_by_id(
|
||||||
|
&mut self,
|
||||||
|
uid: Uuid,
|
||||||
|
) -> Result<Option<shared::models::User>, Box<dyn std::error::Error + Send + Sync>> {
|
||||||
|
use crate::shared::models::users;
|
||||||
|
|
||||||
|
let user = users::table
|
||||||
|
.filter(users::id.eq(uid))
|
||||||
|
.filter(users::is_active.eq(true))
|
||||||
|
.first::<shared::models::User>(&mut self.conn)
|
||||||
|
.optional()?;
|
||||||
|
|
||||||
|
Ok(user)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -208,7 +208,7 @@ impl AutomationService {
|
||||||
user_id: Uuid::new_v4(),
|
user_id: Uuid::new_v4(),
|
||||||
bot_id: Uuid::new_v4(),
|
bot_id: Uuid::new_v4(),
|
||||||
title: "Automation".to_string(),
|
title: "Automation".to_string(),
|
||||||
answer_mode: "direct".to_string(),
|
answer_mode: 0,
|
||||||
current_tool: None,
|
current_tool: None,
|
||||||
context_data: serde_json::Value::Null,
|
context_data: serde_json::Value::Null,
|
||||||
created_at: Utc::now(),
|
created_at: Utc::now(),
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ impl BotOrchestrator {
|
||||||
&self,
|
&self,
|
||||||
user_id: &str,
|
user_id: &str,
|
||||||
bot_id: &str,
|
bot_id: &str,
|
||||||
mode: &str,
|
mode: i32,
|
||||||
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
||||||
let mut session_manager = self.session_manager.lock().await;
|
let mut session_manager = self.session_manager.lock().await;
|
||||||
session_manager.update_answer_mode(user_id, bot_id, mode)?;
|
session_manager.update_answer_mode(user_id, bot_id, mode)?;
|
||||||
|
|
@ -130,7 +130,7 @@ impl BotOrchestrator {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if session.answer_mode == "tool" && session.current_tool.is_some() {
|
if session.answer_mode == 1 && session.current_tool.is_some() {
|
||||||
self.tool_manager.provide_user_response(
|
self.tool_manager.provide_user_response(
|
||||||
&message.user_id,
|
&message.user_id,
|
||||||
&message.bot_id,
|
&message.bot_id,
|
||||||
|
|
@ -226,7 +226,7 @@ impl BotOrchestrator {
|
||||||
};
|
};
|
||||||
|
|
||||||
// If the session is awaiting tool input, forward the user's answer to the tool manager.
|
// If the session is awaiting tool input, forward the user's answer to the tool manager.
|
||||||
if session.answer_mode == "tool" && session.current_tool.is_some() {
|
if session.answer_mode == 1 && session.current_tool.is_some() {
|
||||||
self.tool_manager.provide_user_response(
|
self.tool_manager.provide_user_response(
|
||||||
&message.user_id,
|
&message.user_id,
|
||||||
&message.bot_id,
|
&message.bot_id,
|
||||||
|
|
@ -666,11 +666,13 @@ async fn set_mode_handler(
|
||||||
) -> Result<HttpResponse> {
|
) -> Result<HttpResponse> {
|
||||||
let default_user = "default_user".to_string();
|
let default_user = "default_user".to_string();
|
||||||
let default_bot = "default_bot".to_string();
|
let default_bot = "default_bot".to_string();
|
||||||
let default_mode = "direct".to_string();
|
let default_mode = "0".to_string();
|
||||||
|
|
||||||
let user_id = info.get("user_id").unwrap_or(&default_user);
|
let user_id = info.get("user_id").unwrap_or(&default_user);
|
||||||
let bot_id = info.get("bot_id").unwrap_or(&default_bot);
|
let bot_id = info.get("bot_id").unwrap_or(&default_bot);
|
||||||
let mode = info.get("mode").unwrap_or(&default_mode);
|
let mode_str = info.get("mode").unwrap_or(&default_mode);
|
||||||
|
|
||||||
|
let mode = mode_str.parse::<i32>().unwrap_or(0);
|
||||||
|
|
||||||
if let Err(e) = data
|
if let Err(e) = data
|
||||||
.orchestrator
|
.orchestrator
|
||||||
|
|
|
||||||
|
|
@ -115,7 +115,7 @@ impl SessionManager {
|
||||||
bot_id.eq(bid),
|
bot_id.eq(bid),
|
||||||
title.eq(session_title),
|
title.eq(session_title),
|
||||||
context_data.eq(serde_json::json!({})),
|
context_data.eq(serde_json::json!({})),
|
||||||
answer_mode.eq("direct"),
|
answer_mode.eq(0),
|
||||||
current_tool.eq(None::<String>),
|
current_tool.eq(None::<String>),
|
||||||
created_at.eq(now),
|
created_at.eq(now),
|
||||||
updated_at.eq(now),
|
updated_at.eq(now),
|
||||||
|
|
@ -191,7 +191,7 @@ impl SessionManager {
|
||||||
&mut self,
|
&mut self,
|
||||||
uid: &str,
|
uid: &str,
|
||||||
bid: &str,
|
bid: &str,
|
||||||
mode: &str,
|
mode: i32,
|
||||||
) -> Result<(), Box<dyn Error + Send + Sync>> {
|
) -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||||
use crate::shared::models::user_sessions::dsl::*;
|
use crate::shared::models::user_sessions::dsl::*;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,17 @@ pub struct Organization {
|
||||||
pub slug: String,
|
pub slug: String,
|
||||||
pub created_at: chrono::DateTime<chrono::Utc>,
|
pub created_at: chrono::DateTime<chrono::Utc>,
|
||||||
}
|
}
|
||||||
|
#[derive(Debug, Clone, Queryable, Serialize, Deserialize)]
|
||||||
|
#[diesel(table_name = users)]
|
||||||
|
pub struct User {
|
||||||
|
pub id: Uuid,
|
||||||
|
pub username: String,
|
||||||
|
pub email: String,
|
||||||
|
pub password_hash: String,
|
||||||
|
pub is_active: bool,
|
||||||
|
pub created_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
pub updated_at: chrono::DateTime<chrono::Utc>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize, Queryable)]
|
#[derive(Debug, Clone, Serialize, Deserialize, Queryable)]
|
||||||
#[diesel(table_name = bots)]
|
#[diesel(table_name = bots)]
|
||||||
|
|
@ -70,7 +81,7 @@ pub struct UserSession {
|
||||||
pub bot_id: Uuid,
|
pub bot_id: Uuid,
|
||||||
pub title: String,
|
pub title: String,
|
||||||
pub context_data: serde_json::Value,
|
pub context_data: serde_json::Value,
|
||||||
pub answer_mode: String,
|
pub answer_mode: i32,
|
||||||
pub current_tool: Option<String>,
|
pub current_tool: Option<String>,
|
||||||
pub created_at: chrono::DateTime<Utc>,
|
pub created_at: chrono::DateTime<Utc>,
|
||||||
pub updated_at: chrono::DateTime<Utc>,
|
pub updated_at: chrono::DateTime<Utc>,
|
||||||
|
|
@ -165,7 +176,7 @@ diesel::table! {
|
||||||
bot_id -> Uuid,
|
bot_id -> Uuid,
|
||||||
title -> Text,
|
title -> Text,
|
||||||
context_data -> Jsonb,
|
context_data -> Jsonb,
|
||||||
answer_mode -> Text,
|
answer_mode -> Int4,
|
||||||
current_tool -> Nullable<Text>,
|
current_tool -> Nullable<Text>,
|
||||||
created_at -> Timestamptz,
|
created_at -> Timestamptz,
|
||||||
updated_at -> Timestamptz,
|
updated_at -> Timestamptz,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue