blob: 5a2e40449a22273f77e91bfcc6f625f51e28f3b5 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
use eyre::{Result, bail};
use atuin_client::settings::Settings;
use super::DEFAULT_HUB_ENDPOINT;
pub async fn run(settings: &Settings) -> Result<()> {
let meta = Settings::meta_store().await?;
let cli_token = meta.session_token().await?;
let hub_token = meta.hub_session_token().await?;
let Some(cli_token) = cli_token else {
bail!("No CLI session found. Please log in first with 'atuin login'.");
};
let hub_address = settings
.active_hub_endpoint()
.unwrap_or_else(|| DEFAULT_HUB_ENDPOINT.to_string());
if hub_token.is_some() {
println!("Found both Hub and CLI sessions. Linking accounts...");
} else {
println!("Found CLI session but no Hub session. Logging in to Hub first...");
let session = atuin_client::hub::HubAuthSession::start(&hub_address).await?;
println!("Open this URL to authenticate with Atuin Hub:");
println!("{}", session.auth_url);
let token = session
.wait_for_completion(
atuin_client::hub::DEFAULT_AUTH_TIMEOUT,
atuin_client::hub::DEFAULT_POLL_INTERVAL,
)
.await?;
atuin_client::hub::save_session(&token).await?;
println!("Hub authentication complete.");
}
atuin_client::hub::link_account(&hub_address, &cli_token).await?;
println!("Successfully linked CLI account to Hub.");
Ok(())
}
|