Files
certifai/src/infrastructure/auth_check.rs
Sharang Parnerkar 5c7ab71edc
Some checks failed
CI / Format (push) Failing after 2s
CI / Tests (push) Has been cancelled
CI / Security Audit (push) Has been cancelled
CI / Deploy (push) Has been cancelled
CI / Deploy (pull_request) Has been cancelled
CI / Clippy (push) Has been cancelled
CI / Clippy (pull_request) Has been cancelled
CI / Security Audit (pull_request) Has been cancelled
CI / Tests (pull_request) Has been cancelled
CI / Format (pull_request) Has been cancelled
feat(sidebar): read LibreChat URL from LIBRECHAT_URL env var
Replace hardcoded localhost:3080 chat link with configurable
LIBRECHAT_URL environment variable, passed through AuthInfo to
the sidebar component.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 12:41:20 +01:00

42 lines
1.4 KiB
Rust

use crate::models::AuthInfo;
use dioxus::prelude::*;
/// Check the current user's authentication state.
///
/// Reads the tower-sessions session on the server and returns an
/// [`AuthInfo`] describing the logged-in user. When no valid session
/// exists, `authenticated` is `false` and all other fields are empty.
///
/// # Errors
///
/// Returns `ServerFnError` if the session store cannot be read.
#[server(endpoint = "check-auth")]
pub async fn check_auth() -> Result<AuthInfo, ServerFnError> {
use crate::infrastructure::auth::LOGGED_IN_USER_SESS_KEY;
use crate::infrastructure::state::UserStateInner;
use dioxus_fullstack::FullstackContext;
let session: tower_sessions::Session = FullstackContext::extract().await?;
let user_state: Option<UserStateInner> = session
.get(LOGGED_IN_USER_SESS_KEY)
.await
.map_err(|e| ServerFnError::new(format!("session read failed: {e}")))?;
match user_state {
Some(u) => {
let librechat_url = std::env::var("LIBRECHAT_URL")
.unwrap_or_else(|_| "http://localhost:3080".into());
Ok(AuthInfo {
authenticated: true,
sub: u.sub,
email: u.user.email,
name: u.user.name,
avatar_url: u.user.avatar_url,
librechat_url,
})
}
None => Ok(AuthInfo::default()),
}
}