Skip to content

Commit 8c934b2

Browse files
committed
fs-storage backup
1 parent 704fc46 commit 8c934b2

3 files changed

Lines changed: 38 additions & 11 deletions

File tree

src-tauri/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ tauri-plugin-opener = "2"
2323
serde = { version = "1", features = ["derive"] }
2424
serde_json = "1"
2525
idevice = { version = "0.1.53", features = ["usbmuxd", "house_arrest", "afc"] }
26-
isideload = { version = "0.2.8" }
26+
isideload = { version = "0.2.9", features = ["fs-storage"]}
2727
keyring = { version = "3.6.3", features = ["apple-native", "windows-native", "linux-native-sync-persistent"] }
2828
tauri-plugin-store = "2"
2929
futures = "0.3.31"

src-tauri/src/account.rs

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@ use isideload::{
66
certificates::{CertificatesApi, DevelopmentCertificate},
77
developer_session::DeveloperSession,
88
},
9-
sideload::{builder::MaxCertsBehavior, sideloader::Sideloader, SideloaderBuilder},
10-
util::keyring_storage::KeyringStorage,
9+
sideload::{SideloaderBuilder, builder::MaxCertsBehavior, sideloader::Sideloader},
10+
util::{fs_storage::FsStorage, keyring_storage::KeyringStorage, storage::SideloadingStorage},
1111
};
1212
use keyring::Entry;
1313
use serde::{Deserialize, Serialize};
1414
use serde_json::Value;
15-
use std::time::Duration;
16-
use tauri::{AppHandle, Emitter, Listener, State, Window};
15+
use std::{path::PathBuf, time::Duration};
16+
use tauri::{AppHandle, Emitter, Listener, Manager, State, Window};
1717
use tauri_plugin_store::StoreExt;
18+
use tracing::warn;
1819

1920
use crate::sideload::{SideloaderGuard, SideloaderMutex};
2021

@@ -28,7 +29,7 @@ pub async fn login_new(
2829
anisette_server: String,
2930
save_credentials: bool,
3031
) -> Result<(), String> {
31-
let account = login(&window, &email, &password, anisette_server).await?;
32+
let account = login(&handle, &window, &email, &password, anisette_server).await?;
3233
let mut sideloader_guard = sideloader_state.lock().unwrap();
3334
*sideloader_guard = Some(account);
3435

@@ -58,6 +59,7 @@ pub async fn login_new(
5859

5960
#[tauri::command]
6061
pub async fn login_stored(
62+
handle: AppHandle,
6163
window: Window,
6264
email: String,
6365
anisette_server: String,
@@ -68,7 +70,7 @@ pub async fn login_stored(
6870
let password = pass_entry
6971
.get_password()
7072
.map_err(|e| format!("Failed to get credentials: {:?}", e))?;
71-
let account = login(&window, &email, &password, anisette_server).await?;
73+
let account = login(&handle, &window, &email, &password, anisette_server).await?;
7274
let mut sideloader_guard = sideloader_state.lock().unwrap();
7375
*sideloader_guard = Some(account);
7476

@@ -123,6 +125,7 @@ pub fn reset_anisette_state() -> Result<(), String> {
123125
}
124126

125127
async fn login(
128+
app: &AppHandle,
126129
window: &Window,
127130
email: &str,
128131
password: &str,
@@ -158,11 +161,31 @@ async fn login(
158161
anisette_server
159162
};
160163

164+
let (anisette_storage, sideloader_storage): (
165+
Box<dyn SideloadingStorage>,
166+
Box<dyn SideloadingStorage>,
167+
) = if keyring_available() {
168+
(
169+
Box::new(KeyringStorage::new("iloader".to_string())),
170+
Box::new(KeyringStorage::new("iloader".to_string())),
171+
)
172+
} else {
173+
warn!("Keyring storage is not available, falling back to file storage (less secure)");
174+
let data_dir = app
175+
.path()
176+
.app_data_dir()
177+
.unwrap_or_else(|_| PathBuf::from("Failed to get app data directory"));
178+
(
179+
Box::new(FsStorage::new(data_dir.clone())),
180+
Box::new(FsStorage::new(data_dir)),
181+
)
182+
};
183+
161184
let mut account = AppleAccount::builder(email)
162185
.anisette_provider(
163186
RemoteV3AnisetteProvider::default()
164187
.set_serial_number("0".to_string())
165-
.set_storage(Box::new(KeyringStorage::new("iloader".to_string())))
188+
.set_storage(anisette_storage)
166189
.set_url(&anisette_url),
167190
)
168191
.login(password, tfa_closure)
@@ -207,7 +230,7 @@ async fn login(
207230
// TODO: Team Selection
208231
SideloaderBuilder::new(dev_session, account.email)
209232
.machine_name("iloader".to_string())
210-
.storage(Box::new(KeyringStorage::new("iloader".to_string())))
233+
.storage(sideloader_storage)
211234
.max_certs_behavior(MaxCertsBehavior::Prompt(Box::new(max_certs_callback)))
212235
.build(),
213236
)
@@ -317,3 +340,7 @@ pub async fn delete_app_id(
317340

318341
Ok(())
319342
}
343+
344+
fn keyring_available() -> bool {
345+
keyring::Entry::new("iloader", "test").is_ok()
346+
}

0 commit comments

Comments
 (0)