A fork of attic a self-hostable Nix Binary Cache server
1use anyhow::Result;
2use clap::Parser;
3
4use crate::cache::ServerName;
5use crate::cli::Opts;
6use crate::config::{Config, ServerConfig, ServerTokenConfig};
7
8/// Log into an Attic server.
9#[derive(Debug, Parser)]
10pub struct Login {
11 /// Name of the server.
12 name: ServerName,
13
14 /// Endpoint of the server.
15 endpoint: String,
16
17 /// Access token.
18 token: Option<String>,
19
20 /// Set the server as the default.
21 #[clap(long)]
22 set_default: bool,
23}
24
25pub async fn run(opts: Opts) -> Result<()> {
26 let sub = opts.command.as_login().unwrap();
27 let mut config = Config::load()?;
28 let mut config_m = config.as_mut();
29
30 if let Some(server) = config_m.servers.get_mut(&sub.name) {
31 eprintln!("✍️ Overwriting server \"{}\"", sub.name.as_str());
32
33 server.endpoint = sub.endpoint.to_owned();
34
35 if let Some(token) = &sub.token {
36 server.token = Some(ServerTokenConfig::Raw {
37 token: token.clone(),
38 });
39 }
40 } else {
41 eprintln!("✍️ Configuring server \"{}\"", sub.name.as_str());
42
43 config_m.servers.insert(
44 sub.name.to_owned(),
45 ServerConfig {
46 endpoint: sub.endpoint.to_owned(),
47 token: sub
48 .token
49 .to_owned()
50 .map(|token| ServerTokenConfig::Raw { token }),
51 },
52 );
53 }
54
55 if sub.set_default || config_m.servers.len() == 1 {
56 config_m.default_server = Some(sub.name.to_owned());
57 }
58
59 Ok(())
60}