mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-05 09:48:44 +00:00
wip, broke something
This commit is contained in:
1 parent
d0a489fe97
commit
ccbcf683f6
3 files changed
+120
-114
No files matched your search
@@ -1,3 +1,4 @@
|
||||
pub mod worldlabs_login_window_open;
|
||||
pub (super) mod worldlabs_login_window_thread;
|
||||
pub (super) mod worldlabs_login_webview_extract_cookies;
|
||||
pub (super) mod worldlabs_javascript;
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
|
||||
|
||||
|
||||
pub (super) const WORLDLABS_JAVASCRIPT_EXPORT_BEARER_TOKENS : &str = r#"
|
||||
(async () => {
|
||||
if (window.tokensExported) {
|
||||
console.error(">>> Tokens already gotten !");
|
||||
return;
|
||||
}
|
||||
|
||||
console.error(">>> Getting tokens...");
|
||||
|
||||
const request = indexedDB.open("firebaseLocalStorageDb");
|
||||
|
||||
request.onerror = (event) => {};
|
||||
|
||||
request.onsuccess = (event) => {
|
||||
const db = event.target.result;
|
||||
|
||||
console.error(">>> Start transaction...");
|
||||
|
||||
const tx = db.transaction("firebaseLocalStorage", "readonly");
|
||||
|
||||
console.error(">>> Object store open ...");
|
||||
|
||||
const store = tx.objectStore("firebaseLocalStorage");
|
||||
|
||||
console.error(">>> key request...");
|
||||
|
||||
const keysRequest = store.getAllKeys();
|
||||
|
||||
keysRequest.onerror = (event) => {};
|
||||
|
||||
keysRequest.onsuccess = () => {
|
||||
console.error(">>> keys array...");
|
||||
|
||||
const keys = keysRequest.result; // array of keys
|
||||
const key = keys[0];
|
||||
|
||||
console.error(">>> get key...");
|
||||
|
||||
const getKeyRequest = store.getKey(key);
|
||||
|
||||
getKeyRequest.onsuccess = () => {};
|
||||
|
||||
store.openCursor().onsuccess = (event) => {
|
||||
const cursor = event.target.result;
|
||||
if (cursor) {
|
||||
let tokens = cursor.value?.value?.stsTokenManager;
|
||||
|
||||
if (tokens?.accessToken && tokens?.refreshToken) {
|
||||
// Send to Tauri
|
||||
let result = await window.__TAURI__.core.invoke("worldlabs_receive_bearer_command", {
|
||||
request: {
|
||||
bearer_token: window.tokens.accessToken,
|
||||
refresh_token: window.tokens.refreshToken,
|
||||
}
|
||||
});
|
||||
|
||||
window.tokens = tokens;
|
||||
window.tokensExported = true;
|
||||
}
|
||||
cursor.continue();
|
||||
}
|
||||
}; // end cursor
|
||||
}; // end keyRequest
|
||||
}; // end DB
|
||||
})();
|
||||
"#;
|
||||
|
||||
|
||||
/// Take the Bearer tokens and send them to Tauri
|
||||
pub (super) const WORLDLABS_JAVASCRIPT_SEND_BEARER_TO_TAURI : &str = r#"
|
||||
(async () => {
|
||||
if (!(window.tokens?.accessToken && window.tokens?.refreshToken)) {
|
||||
console.error(">>> No tokens to export");
|
||||
return;
|
||||
}
|
||||
|
||||
console.error(">>> Sending to Tauri");
|
||||
|
||||
let result = await window.__TAURI__.core.invoke("worldlabs_receive_bearer_command", {
|
||||
request: {
|
||||
bearer_token: window.tokens.accessToken,
|
||||
refresh_token: window.tokens.refreshToken,
|
||||
}
|
||||
});
|
||||
|
||||
error.log('>>> result', result);
|
||||
|
||||
})();
|
||||
"#;
|
||||
|
||||
|
||||
/// See if the pricing button exists.
|
||||
/// This is only for the logged-in state.
|
||||
/// We can use redirection to detect completion.
|
||||
pub (super) const WORLDLABS_JAVASCRIPT_SEE_IF_PRICING_EXISTS : &str = r#"
|
||||
(() => {
|
||||
let pricing = document.querySelectorAll("a[href='/pricing']");
|
||||
if (pricing.length > 0) {
|
||||
window.location.href = "https://www.worldlabs.ai/about";
|
||||
}
|
||||
})();
|
||||
"#;
|
||||
+14
-114
@@ -12,6 +12,7 @@ use crate::services::sora::state::sora_credential_manager::SoraCredentialManager
|
||||
use crate::services::sora::windows::sora_login_window::extract_sora_webview_cookies::extract_sora_webview_cookies;
|
||||
use crate::services::worldlabs::state::worldlabs_bearer_bridge::WorldlabsBearerBridge;
|
||||
use crate::services::worldlabs::state::worldlabs_credential_manager::WorldlabsCredentialManager;
|
||||
use crate::services::worldlabs::windows::worldlabs_login_window::worldlabs_javascript::WORLDLABS_JAVASCRIPT_EXPORT_BEARER_TOKENS;
|
||||
use crate::services::worldlabs::windows::worldlabs_login_window::worldlabs_login_webview_extract_cookies::worldlabs_login_webview_extract_cookies;
|
||||
use crate::services::worldlabs::windows::worldlabs_login_window::worldlabs_login_window_open::WORLDLABS_LOGIN_WINDOW_NAME;
|
||||
use anyhow::anyhow;
|
||||
@@ -23,6 +24,7 @@ use openai_sora_client::creds::sora_credential_set::SoraCredentialSet;
|
||||
use openai_sora_client::recipes::maybe_upgrade_or_renew_session::maybe_upgrade_or_renew_session;
|
||||
use openai_sora_client::utils::has_session_cookie::{has_session_cookie, SessionCookiePresence};
|
||||
use tauri::{AppHandle, Manager, WebviewWindow};
|
||||
use world_labs_client::credentials::world_labs_bearer_token::WorldLabsBearerToken;
|
||||
|
||||
pub async fn worldlabs_login_window_thread(
|
||||
app: AppHandle,
|
||||
@@ -82,132 +84,31 @@ async fn check_login_window(
|
||||
|
||||
// World labs has no distinct login page. Everything is in a single SPA.
|
||||
|
||||
let mut is_logged_in = false;
|
||||
|
||||
// See if pricing exists.
|
||||
// We'll use redirection to detect if we're done.
|
||||
let pricing_script = r#"
|
||||
(() => {
|
||||
let pricing = document.querySelectorAll("a[href='/pricing']");
|
||||
console.log('pricing', pricing);
|
||||
if (pricing.length > 0) {
|
||||
window.location.href = "https://www.worldlabs.ai/about";
|
||||
}
|
||||
})();
|
||||
"#;
|
||||
|
||||
//webview_window.eval(pricing_script)?;
|
||||
|
||||
let extract_bearer_tokens= r#"
|
||||
(() => {
|
||||
if (window.tokens) {
|
||||
console.error(">>> Tokens already gotten !");
|
||||
return;
|
||||
}
|
||||
|
||||
console.error(">>> Getting tokens...");
|
||||
|
||||
const request = indexedDB.open("firebaseLocalStorageDb");
|
||||
request.onerror = (event) => {};
|
||||
|
||||
request.onsuccess = (event) => {
|
||||
const db = event.target.result;
|
||||
|
||||
const tx = db.transaction("firebaseLocalStorage", "readonly");
|
||||
const store = tx.objectStore("firebaseLocalStorage");
|
||||
|
||||
const keysRequest = store.getAllKeys();
|
||||
|
||||
keysRequest.onerror = (event) => {};
|
||||
|
||||
keysRequest.onsuccess = () => {
|
||||
const keys = keysRequest.result; // array of keys
|
||||
const key = keys[0];
|
||||
|
||||
const getKeyRequest = store.getKey(key);
|
||||
|
||||
getKeyRequest.onsuccess = () => {};
|
||||
|
||||
store.openCursor().onsuccess = (event) => {
|
||||
const cursor = event.target.result;
|
||||
if (cursor) {
|
||||
let tokens = cursor.value?.value?.stsTokenManager;
|
||||
if (tokens?.accessToken && tokens?.refreshToken) {
|
||||
window.tokens = tokens;
|
||||
}
|
||||
cursor.continue();
|
||||
}
|
||||
};
|
||||
};
|
||||
};
|
||||
})();
|
||||
"#;
|
||||
|
||||
webview_window.eval(extract_bearer_tokens)?;
|
||||
|
||||
let export_bearer_tokens= r#"
|
||||
(async () => {
|
||||
if (!(window.tokens?.accessToken && window.tokens?.refreshToken)) {
|
||||
console.error(">>> No tokens to export");
|
||||
return;
|
||||
}
|
||||
|
||||
console.error(">>> Sending to Tauri");
|
||||
|
||||
let result = await window.__TAURI__.core.invoke("worldlabs_receive_bearer_command", {
|
||||
request: {
|
||||
bearer_token: window.tokens.accessToken,
|
||||
refresh_token: window.tokens.refreshToken,
|
||||
}
|
||||
});
|
||||
|
||||
error.log('>>> result', result);
|
||||
|
||||
})();
|
||||
"#;
|
||||
|
||||
webview_window.eval(export_bearer_tokens)?;
|
||||
webview_window.eval(WORLDLABS_JAVASCRIPT_EXPORT_BEARER_TOKENS)?;
|
||||
|
||||
let maybe_bearer = worldlabs_bearer_bridge.get()?;
|
||||
|
||||
if let Some(bearer) = maybe_bearer {
|
||||
info!("Rust Got bearer: {:?}", bearer);
|
||||
}
|
||||
|
||||
|
||||
let hostname = get_webview_window_hostname(webview_window)?;
|
||||
let path = get_webview_window_url_path(webview_window)?;
|
||||
|
||||
match hostname.as_str() {
|
||||
"www.worldlabs.ai" => {
|
||||
is_logged_in = true;
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
|
||||
match path.as_str() {
|
||||
"/about" => {
|
||||
is_logged_in = true;
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
|
||||
is_logged_in = false;
|
||||
|
||||
if !is_logged_in {
|
||||
return Ok(false);
|
||||
}
|
||||
let bearer_info = match maybe_bearer {
|
||||
Some(bearer) => bearer,
|
||||
None => {
|
||||
return Ok(false); // Not logged in.
|
||||
}
|
||||
};
|
||||
|
||||
let cookie_store = worldlabs_login_webview_extract_cookies(webview_window)?;
|
||||
|
||||
info!("Current cookies (len {}): {:?}", cookie_store.len(), cookie_store.to_cookie_string());
|
||||
|
||||
worldlabs_creds_manager.replace_cookie_store(cookie_store)?;
|
||||
|
||||
let bearer_token = WorldLabsBearerToken::new(bearer_info.bearer_token);
|
||||
|
||||
worldlabs_creds_manager.replace_bearer_token(bearer_token)?;
|
||||
|
||||
let result = worldlabs_creds_manager.persist_to_disk();
|
||||
|
||||
if let Err(err) = result {
|
||||
error!("Error persisting grok cookies to disk: {:?}", err);
|
||||
error!("Error persisting WorldLabs credentials to disk: {:?}", err);
|
||||
return Ok(false);
|
||||
}
|
||||
|
||||
@@ -221,4 +122,3 @@ async fn check_login_window(
|
||||
|
||||
Ok(true)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user