avam-client and oauth2
This commit is contained in:
@@ -11,16 +11,23 @@ use pages::{
|
||||
},
|
||||
dashboard::DashboardPage,
|
||||
error::{AppError, ErrorTemplate},
|
||||
oauth2::authorize::AuthorizePage,
|
||||
};
|
||||
|
||||
use crate::domain::api::prelude::User;
|
||||
|
||||
#[component]
|
||||
pub fn App() -> impl IntoView {
|
||||
provide_meta_context();
|
||||
|
||||
let trigger_user = create_rw_signal(true);
|
||||
let trigger_update = create_rw_signal(false);
|
||||
let trigger_direct = create_rw_signal(None::<String>);
|
||||
|
||||
let user = create_resource(trigger_user, move |_| async move {
|
||||
super::check_user().await.unwrap()
|
||||
let user_signal = create_rw_signal(None::<User>);
|
||||
|
||||
let user_resource = create_local_resource(trigger_update, move |_| async move {
|
||||
let user = super::check_user().await.unwrap();
|
||||
user_signal.set(user);
|
||||
});
|
||||
|
||||
view! {
|
||||
@@ -47,17 +54,17 @@ pub fn App() -> impl IntoView {
|
||||
}>
|
||||
<main class="h-screen overflow-auto dark:base-100 dark:text-white">
|
||||
<Routes>
|
||||
<Route path="/auth" view=move || {
|
||||
<Route path="auth" view=move || {
|
||||
view! {
|
||||
<Suspense>
|
||||
<Show when=move || user().is_some_and(|u| u.is_some())>
|
||||
<Redirect path="/" />
|
||||
<Show when=move || user_resource().is_some_and(|_|user_signal().is_some())>
|
||||
<Redirect path={ trigger_direct().unwrap_or(String::from("/")) } />
|
||||
</Show>
|
||||
</Suspense>
|
||||
<Outlet />
|
||||
}
|
||||
}>
|
||||
<Route path="login" view=move || view! { <LoginPage user_signal=trigger_user /> } />
|
||||
<Route path="login" view=move || view! { <LoginPage trigger_signal=trigger_update direct_signal=trigger_direct /> } />
|
||||
<Route path="register" view=RegisterPage />
|
||||
<Route path="forgot" view=ForgotPage />
|
||||
<Route path="reset/:token" view=ResetPage />
|
||||
@@ -66,8 +73,11 @@ pub fn App() -> impl IntoView {
|
||||
<Route path="" view=move || {
|
||||
view! {
|
||||
<Suspense>
|
||||
<Show when=move || user().is_some_and(|u| u.is_none())>
|
||||
<Redirect path="/auth/login" />
|
||||
<Show when=move || user_resource().is_some_and(|_|user_signal().is_none())>
|
||||
<Redirect path={
|
||||
use base64::prelude::*;
|
||||
format!("/auth/login?c={}", BASE64_URL_SAFE_NO_PAD.encode(format!("{}{}", (leptos_router::use_location().pathname)(), (leptos_router::use_location().query)().to_query_string())))
|
||||
} />
|
||||
</Show>
|
||||
</Suspense>
|
||||
<Outlet />
|
||||
@@ -75,13 +85,22 @@ pub fn App() -> impl IntoView {
|
||||
}>
|
||||
<Route path="" view=move || view! {
|
||||
<Suspense>
|
||||
<Show when=move || user().is_some_and(|u| u.is_some())>
|
||||
<DashboardPage user={ user().unwrap().unwrap() } />
|
||||
<Show when=move || user_signal().is_some()>
|
||||
<DashboardPage user={ user_signal().unwrap() } />
|
||||
</Show>
|
||||
</Suspense>
|
||||
} />
|
||||
</Route> // dashboard
|
||||
<Route path="/auth/logout" view=move || view! { <LogoutPage user_signal=trigger_user /> } />
|
||||
|
||||
<Route path="oauth2/authorize" view=move || view! {
|
||||
<Suspense>
|
||||
<Show when=move || user_signal().is_some()>
|
||||
<AuthorizePage user={ user_signal } />
|
||||
</Show>
|
||||
</Suspense>
|
||||
} />
|
||||
|
||||
</Route> // Logged in
|
||||
<Route path="auth/logout" view=move || view! { <LogoutPage trigger_signal=trigger_update user_signal /> } />
|
||||
</Routes>
|
||||
</main>
|
||||
</Router>
|
||||
|
Reference in New Issue
Block a user