dioxus_oauth/
component.rs1#![allow(non_snake_case)]
2use dioxus::prelude::*;
3
4#[component]
5pub fn OAuthPopup() -> Element {
6 #[cfg(feature = "web")]
7 {
8 use url::Url;
9 let window = match web_sys::window() {
10 Some(window) => window,
11 None => {
12 tracing::error!("Window not found");
13 return rsx! {
14 div { "Window not found" }
15 };
16 }
17 };
18 let url = window.location().href().unwrap_or_default();
19 tracing::debug!("url={:?}", url);
20 let opener: web_sys::Window = match window.opener() {
21 Ok(opener) => opener.into(),
22 Err(e) => {
23 tracing::debug!("e={e:?}");
24 return rsx! {
25 div { "opener not found" }
26 };
27 }
28 };
29 let url = Url::parse(&url).expect("Failed to parse URL");
30 if let Some(code) = url.query_pairs().find(|(key, _)| key == "code") {
31 tracing::debug!("Code query parameter: {}", code.1);
32
33 if let Err(e) = opener.post_message(
34 &wasm_bindgen::JsValue::from_str(&format!("code={}", code.1)),
35 "*",
36 ) {
37 tracing::error!("");
38 return rsx! { "{e:?}" };
39 } else {
40 let _ = window.close();
41 };
42 }
43 }
44
45 rsx! {
46 div { "" }
47 }
48}