A fork of attic a self-hostable Nix Binary Cache server
at main 60 lines 1.5 kB view raw
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}