11use anyhow:: Result ;
22use mostro_core:: prelude:: * ;
3+ use nostr_sdk:: prelude:: Keys ;
34use uuid:: Uuid ;
45
56use crate :: {
@@ -9,6 +10,19 @@ use crate::{
910 util:: { admin_send_dm, send_dm, wait_for_dm} ,
1011} ;
1112
13+ /// Helper function to retrieve and validate admin keys from context
14+ fn get_admin_keys ( ctx : & Context ) -> Result < & Keys > {
15+ let admin_keys = ctx. context_keys . as_ref ( )
16+ . ok_or_else ( || anyhow:: anyhow!( "Admin keys not available. ADMIN_NSEC must be set for admin commands." ) ) ?;
17+
18+ // Only log admin public key in verbose mode
19+ if std:: env:: var ( "RUST_LOG" ) . is_ok ( ) {
20+ println ! ( "🔑 Admin Keys: {}" , admin_keys. public_key) ;
21+ }
22+
23+ Ok ( admin_keys)
24+ }
25+
1226pub async fn execute_admin_add_solver ( npubkey : & str , ctx : & Context ) -> Result < ( ) > {
1327 println ! ( "👑 Admin Add Solver" ) ;
1428 println ! ( "═══════════════════════════════════════" ) ;
@@ -22,6 +36,9 @@ pub async fn execute_admin_add_solver(npubkey: &str, ctx: &Context) -> Result<()
2236 ) ) ;
2337 println ! ( "{table}" ) ;
2438 println ! ( "💡 Adding new solver to Mostro...\n " ) ;
39+
40+ let _admin_keys = get_admin_keys ( ctx) ?;
41+
2542 // Create takebuy message
2643 let take_dispute_message = Message :: new_dispute (
2744 Some ( Uuid :: new_v4 ( ) ) ,
@@ -57,14 +74,15 @@ pub async fn execute_admin_cancel_dispute(dispute_id: &Uuid, ctx: &Context) -> R
5774 ) ) ;
5875 println ! ( "{table}" ) ;
5976 println ! ( "💡 Canceling dispute...\n " ) ;
77+
78+ let _admin_keys = get_admin_keys ( ctx) ?;
79+
6080 // Create takebuy message
6181 let take_dispute_message =
6282 Message :: new_dispute ( Some ( * dispute_id) , None , None , Action :: AdminCancel , None )
6383 . as_json ( )
6484 . map_err ( |_| anyhow:: anyhow!( "Failed to serialize message" ) ) ?;
6585
66- println ! ( "🔑 Admin PubKey: {}" , ctx. context_keys. public_key) ;
67-
6886 admin_send_dm ( ctx, take_dispute_message) . await ?;
6987
7088 println ! ( "✅ Dispute canceled successfully!" ) ;
@@ -89,13 +107,14 @@ pub async fn execute_admin_settle_dispute(dispute_id: &Uuid, ctx: &Context) -> R
89107 ) ) ;
90108 println ! ( "{table}" ) ;
91109 println ! ( "💡 Settling dispute...\n " ) ;
110+
111+ let _admin_keys = get_admin_keys ( ctx) ?;
112+
92113 // Create takebuy message
93114 let take_dispute_message =
94115 Message :: new_dispute ( Some ( * dispute_id) , None , None , Action :: AdminSettle , None )
95116 . as_json ( )
96117 . map_err ( |_| anyhow:: anyhow!( "Failed to serialize message" ) ) ?;
97-
98- println ! ( "🔑 Admin Keys: {}" , ctx. context_keys. public_key) ;
99118 admin_send_dm ( ctx, take_dispute_message) . await ?;
100119
101120 println ! ( "✅ Dispute settled successfully!" ) ;
@@ -119,6 +138,9 @@ pub async fn execute_take_dispute(dispute_id: &Uuid, ctx: &Context) -> Result<()
119138 ) ) ;
120139 println ! ( "{table}" ) ;
121140 println ! ( "💡 Taking dispute...\n " ) ;
141+
142+ let admin_keys = get_admin_keys ( ctx) ?;
143+
122144 // Create takebuy message
123145 let take_dispute_message = Message :: new_dispute (
124146 Some ( * dispute_id) ,
@@ -130,12 +152,10 @@ pub async fn execute_take_dispute(dispute_id: &Uuid, ctx: &Context) -> Result<()
130152 . as_json ( )
131153 . map_err ( |_| anyhow:: anyhow!( "Failed to serialize message" ) ) ?;
132154
133- println ! ( "🔑 Admin Keys: {}" , ctx. context_keys. public_key) ;
134-
135155 // Send the dispute message and wait for response
136156 let sent_message = send_dm (
137157 & ctx. client ,
138- Some ( & ctx . context_keys ) ,
158+ Some ( admin_keys ) ,
139159 & ctx. trade_keys ,
140160 & ctx. mostro_pubkey ,
141161 take_dispute_message,
@@ -144,10 +164,10 @@ pub async fn execute_take_dispute(dispute_id: &Uuid, ctx: &Context) -> Result<()
144164 ) ;
145165
146166 // Wait for incoming DM response
147- let recv_event = wait_for_dm ( ctx, Some ( & ctx . context_keys ) , sent_message) . await ?;
167+ let recv_event = wait_for_dm ( ctx, Some ( admin_keys ) , sent_message) . await ?;
148168
149169 // Parse the incoming DM
150- let messages = parse_dm_events ( recv_event, & ctx . context_keys , None ) . await ;
170+ let messages = parse_dm_events ( recv_event, admin_keys , None ) . await ;
151171 if let Some ( ( message, _, sender_pubkey) ) = messages. first ( ) {
152172 let message_kind = message. get_inner_message_kind ( ) ;
153173 if * sender_pubkey != ctx. mostro_pubkey {
0 commit comments