1
0

main.rs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #![allow(non_snake_case)]
  2. use dioxus::prelude::*;
  3. use fermi::*;
  4. use gloo_storage::{LocalStorage, Storage};
  5. use log::LevelFilter;
  6. pub(crate) mod constants;
  7. pub(crate) mod errors;
  8. pub(crate) mod model;
  9. pub(crate) mod oidc;
  10. pub(crate) mod props;
  11. pub(crate) mod router;
  12. pub(crate) mod storage;
  13. pub(crate) mod views;
  14. use oidc::{AuthRequestState, AuthTokenState};
  15. use router::Route;
  16. use dioxus_router::prelude::*;
  17. use crate::{
  18. constants::{DIOXUS_FRONT_AUTH_REQUEST, DIOXUS_FRONT_AUTH_TOKEN},
  19. oidc::ClientState,
  20. };
  21. pub static FERMI_CLIENT: fermi::AtomRef<ClientState> = AtomRef(|_| ClientState::default());
  22. // An option is required to prevent the component from being constantly refreshed
  23. pub static FERMI_AUTH_TOKEN: fermi::AtomRef<Option<AuthTokenState>> = AtomRef(|_| None);
  24. pub static FERMI_AUTH_REQUEST: fermi::AtomRef<Option<AuthRequestState>> = AtomRef(|_| None);
  25. pub static DIOXUS_FRONT_ISSUER_URL: &str = env!("DIOXUS_FRONT_ISSUER_URL");
  26. pub static DIOXUS_FRONT_CLIENT_ID: &str = env!("DIOXUS_FRONT_CLIENT_ID");
  27. pub static DIOXUS_FRONT_URL: &str = env!("DIOXUS_FRONT_URL");
  28. fn App(cx: Scope) -> Element {
  29. use_init_atom_root(cx);
  30. // Retrieve the value stored in the browser's storage
  31. let stored_auth_token = LocalStorage::get(DIOXUS_FRONT_AUTH_TOKEN)
  32. .ok()
  33. .unwrap_or(AuthTokenState::default());
  34. let fermi_auth_token = use_atom_ref(cx, &FERMI_AUTH_TOKEN);
  35. if fermi_auth_token.read().is_none() {
  36. *fermi_auth_token.write() = Some(stored_auth_token);
  37. }
  38. let stored_auth_request = LocalStorage::get(DIOXUS_FRONT_AUTH_REQUEST)
  39. .ok()
  40. .unwrap_or(AuthRequestState::default());
  41. let fermi_auth_request = use_atom_ref(cx, &FERMI_AUTH_REQUEST);
  42. if fermi_auth_request.read().is_none() {
  43. *fermi_auth_request.write() = Some(stored_auth_request);
  44. }
  45. render! { Router::<Route> {} }
  46. }
  47. fn main() {
  48. dioxus_logger::init(LevelFilter::Info).expect("failed to init logger");
  49. console_error_panic_hook::set_once();
  50. log::info!("starting app");
  51. dioxus_web::launch(App);
  52. }