kanidm_cli/system_config/
message.rs

1use kanidm_proto::cli::OpType;
2
3use crate::{KanidmClientParser, MessageOpt, OutputMode};
4// use kanidm_proto::scim_v1::{ScimEntryGetQuery};
5
6impl MessageOpt {
7    pub async fn exec(&self, opt: KanidmClientParser) {
8        match self {
9            MessageOpt::List => {
10                let client = opt.to_client(OpType::Read).await;
11                let query = None;
12
13                match client.idm_message_list(query).await {
14                    Ok(list) => match opt.output_mode {
15                        OutputMode::Json => {
16                            let json = serde_json::to_string(&list)
17                                .expect("Failed to serialise list to JSON!");
18                            println!("{json}");
19                        }
20                        OutputMode::Text => {
21                            // Print each entry on a new line
22                            list.resources.iter().for_each(|entry| {
23                                println!("message_id:   {}", entry.header.id);
24                                println!("send_after:   {}", entry.send_after.date_time);
25                                println!(
26                                    "sent_at:      {}",
27                                    entry
28                                        .sent_at
29                                        .as_ref()
30                                        .map(|sdt| sdt.date_time.to_string())
31                                        .unwrap_or_else(|| "queued".into())
32                                );
33                                println!("delete_after: {}", entry.delete_after.date_time);
34                                println!("template:     {}", entry.message_template.display_type());
35
36                                for mail in entry.mail_destination.iter() {
37                                    println!("to:           {}", mail.value);
38                                }
39
40                                println!();
41                            });
42                            eprintln!("--");
43                            eprintln!("Success");
44                        }
45                    },
46                    Err(e) => crate::handle_client_error(e, opt.output_mode),
47                }
48            }
49
50            MessageOpt::Get { message_id } => {
51                let client = opt.to_client(OpType::Read).await;
52
53                match client.idm_message_get(*message_id).await {
54                    Ok(entry) => match opt.output_mode {
55                        OutputMode::Json => {
56                            let json = serde_json::to_string(&entry)
57                                .expect("Failed to serialise entry to JSON!");
58                            println!("{json}");
59                        }
60                        OutputMode::Text => {
61                            println!("message_id:   {}", entry.header.id);
62                            println!("send_after:   {}", entry.send_after.date_time);
63                            println!(
64                                "sent_at:      {}",
65                                entry
66                                    .sent_at
67                                    .as_ref()
68                                    .map(|sdt| sdt.date_time.to_string())
69                                    .unwrap_or_else(|| "queued".into())
70                            );
71                            println!("delete_after: {}", entry.delete_after.date_time);
72
73                            println!("template:     {}", entry.message_template.display_type());
74
75                            for mail in entry.mail_destination.iter() {
76                                println!("to:           {}", mail.value);
77                            }
78                            println!();
79                            eprintln!("--");
80                            eprintln!("Success");
81                        }
82                    },
83                    Err(err) => {
84                        crate::handle_client_error(err, opt.output_mode);
85                    }
86                }
87            }
88
89            MessageOpt::MarkAsSent { message_id } => {
90                let client = opt.to_client(OpType::Write).await;
91
92                if let Err(e) = client.idm_message_mark_sent(*message_id).await {
93                    crate::handle_client_error(e, opt.output_mode);
94                } else {
95                    opt.output_mode.print_message("Message Marked as Sent");
96                }
97            }
98
99            MessageOpt::SendTestMessage { to } => {
100                let client = opt.to_client(OpType::Write).await;
101
102                if let Err(e) = client.idm_message_send_test(to).await {
103                    crate::handle_client_error(e, opt.output_mode);
104                } else {
105                    opt.output_mode.print_message("Message Queued");
106                }
107            }
108        }
109    }
110}