iggy_cli/commands/binary_system/
logout.rs1use crate::commands::binary_system::session::ServerSession;
20use crate::commands::cli_command::{CliCommand, PRINT_TARGET};
21use anyhow::Context;
22use async_trait::async_trait;
23use iggy_common::Client;
24use tracing::{Level, event};
25
26pub struct LogoutCmd {
27 server_session: ServerSession,
28}
29
30impl LogoutCmd {
31 pub fn new(server_address: String) -> Self {
32 Self {
33 server_session: ServerSession::new(server_address),
34 }
35 }
36}
37
38#[async_trait]
39impl CliCommand for LogoutCmd {
40 fn explain(&self) -> String {
41 "logout command".to_owned()
42 }
43
44 async fn execute_cmd(&mut self, client: &dyn Client) -> anyhow::Result<(), anyhow::Error> {
45 if self.server_session.is_active() {
46 client
47 .delete_personal_access_token(&self.server_session.get_token_name())
48 .await
49 .with_context(|| {
50 format!(
51 "Problem deleting personal access token with name: {}",
52 self.server_session.get_token_name()
53 )
54 })?;
55
56 self.server_session.delete()?;
57 }
58 event!(target: PRINT_TARGET, Level::INFO, "Successfully logged out from Iggy server {}", self.server_session.get_server_address());
59
60 Ok(())
61 }
62}