/ crates / auths-cli / src / commands / whoami.rs
whoami.rs
 1  use anyhow::{Result, anyhow};
 2  use auths_id::storage::identity::IdentityStorage;
 3  use auths_id::storage::layout;
 4  use auths_storage::git::RegistryIdentityStorage;
 5  use clap::Parser;
 6  use serde::Serialize;
 7  
 8  use crate::config::CliConfig;
 9  use crate::ux::format::{JsonResponse, Output, is_json_mode};
10  
11  /// Show the current identity on this machine.
12  #[derive(Parser, Debug, Clone)]
13  #[command(name = "whoami", about = "Show the current identity on this machine")]
14  pub struct WhoamiCommand {}
15  
16  #[derive(Debug, Serialize)]
17  struct WhoamiResponse {
18      identity_did: String,
19      #[serde(skip_serializing_if = "Option::is_none")]
20      label: Option<String>,
21  }
22  
23  pub fn handle_whoami(_cmd: WhoamiCommand, repo: Option<std::path::PathBuf>) -> Result<()> {
24      let repo_path = layout::resolve_repo_path(repo).map_err(|e| anyhow!(e))?;
25  
26      if crate::factories::storage::open_git_repo(&repo_path).is_err() {
27          if is_json_mode() {
28              JsonResponse::<()>::error(
29                  "whoami",
30                  "No identity found. Run `auths init` to get started.",
31              )
32              .print()?;
33          } else {
34              let out = Output::new();
35              out.print_error("No identity found. Run `auths init` to get started.");
36          }
37          return Ok(());
38      }
39  
40      let storage = RegistryIdentityStorage::new(&repo_path);
41      match storage.load_identity() {
42          Ok(identity) => {
43              let response = WhoamiResponse {
44                  identity_did: identity.controller_did.to_string(),
45                  label: None,
46              };
47  
48              if is_json_mode() {
49                  JsonResponse::success("whoami", &response).print()?;
50              } else {
51                  let out = Output::new();
52                  out.println(&format!("Identity: {}", out.info(&response.identity_did)));
53              }
54          }
55          Err(_) => {
56              if is_json_mode() {
57                  JsonResponse::<()>::error(
58                      "whoami",
59                      "No identity found. Run `auths init` to get started.",
60                  )
61                  .print()?;
62              } else {
63                  let out = Output::new();
64                  out.print_error("No identity found. Run `auths init` to get started.");
65              }
66          }
67      }
68  
69      Ok(())
70  }
71  
72  impl crate::commands::executable::ExecutableCommand for WhoamiCommand {
73      fn execute(&self, ctx: &CliConfig) -> Result<()> {
74          handle_whoami(self.clone(), ctx.repo_path.clone())
75      }
76  }