diff options
Diffstat (limited to 'app/src/lib.rs')
-rw-r--r-- | app/src/lib.rs | 38 |
1 files changed, 4 insertions, 34 deletions
diff --git a/app/src/lib.rs b/app/src/lib.rs index 9823cdd..98ada19 100644 --- a/app/src/lib.rs +++ b/app/src/lib.rs @@ -23,46 +23,16 @@ pub fn run() { .plugin(tauri_plugin_deep_link::init()) .plugin(tauri_plugin_opener::init()) .setup(|app| { + let oauth_controller = OAuthController::new(tauri::async_runtime::handle()); app.manage(AppState { - oauth_controller: OAuthController::new(tauri::async_runtime::handle()) + oauth_controller: oauth_controller.clone() }); #[cfg(any(target_os = "linux", all(debug_assertions, windows)))] app.deep_link().register_all()?; - let app_handle = app.handle().clone(); app.deep_link().on_open_url(move |event| { - if let Some(oauth_callback) = event.urls().iter().find(|url| { - if let Some(Host::Domain(domain)) = url.host() { - domain == "oauth-response" - } else { - false - } - }) { - let mut query = oauth_callback.query_pairs(); - let query = ( - query.find(|(key, _)| key == "code").map(|(_, value)| value ), - query.find(|(key, _)| key == "state").map(|(_, value)| value ) - ); - let query = match query { - (Some(code), Some(state)) => Some((code, state)), - _ => None, - }; - - if let Some((auth_code, state)) = query { - if let Ok(state) = Uuid::try_parse(&state) { - let state = state.clone(); - let auth_code = auth_code.to_string().clone(); - let oauth_controller = &app_handle.state::<AppState>().oauth_controller; - - oauth_controller.resolve_code(state, auth_code); - } else { - println!("Invalid UUID format: {state}"); - return - } - } else { - println!("Missing either state or code in oauth callback"); - return - } + if oauth_controller.handle_deeplink(&event.urls()).is_some() { + return } }); Ok(()) |