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
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>
42 lines
1.4 KiB
Rust
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()),
|
|
}
|
|
}
|