Skip to content

Commit 709b6d0

Browse files
committed
fix: address review comments
1 parent 535fd7c commit 709b6d0

3 files changed

Lines changed: 56 additions & 7 deletions

File tree

config.example.toml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,13 +135,10 @@ keypair = "9Vo7TbA5YfC5a33JhAi9Fb41usA6JwecHNRw3f9MzzHAM8hFnXTzL5DcEHwsAFjuUZ8vN
135135
# - "replica-only": replicate without takeover
136136
# # specify the pubkey of the primary node, which we are replicating from
137137
#
138-
# [validator.replication-mode.stand-by]
138+
# [validator.replication-mode.replica-only]
139139
# url = "nats://0.0.0.0:4222"
140140
# secret = "SUAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
141141
# authority-override = "L12m1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo"
142-
[validator.replication-mode.stand-by]
143-
url = "nats://0.0.0.0:4222"
144-
secret = "SUAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
145142

146143
[aperture]
147144
# Network address to bind the main JSON RPC service to.

magicblock-config/src/config/validator.rs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
// src/config/validator.rs
1+
use std::fmt;
2+
23
use serde::{Deserialize, Serialize};
34
use solana_keypair::Keypair;
45
use solana_pubkey::Pubkey;
@@ -35,14 +36,47 @@ pub enum ReplicationMode {
3536
ReplicaOnly(ReplicationConfig),
3637
}
3738

38-
#[derive(Deserialize, Serialize, Debug, Clone)]
39+
#[derive(Deserialize, Clone)]
3940
#[serde(rename_all = "kebab-case")]
4041
pub struct ReplicationConfig {
4142
pub url: Url,
4243
pub secret: String,
4344
pub authority_override: Option<SerdePubkey>,
4445
}
4546

47+
impl fmt::Debug for ReplicationConfig {
48+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
49+
f.debug_struct("ReplicationConfig")
50+
.field("url", &self.url)
51+
.field("secret", &"<redacted>")
52+
.field("authority_override", &self.authority_override)
53+
.finish()
54+
}
55+
}
56+
57+
impl Serialize for ReplicationConfig {
58+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
59+
where
60+
S: serde::Serializer,
61+
{
62+
#[derive(Serialize)]
63+
#[serde(rename_all = "kebab-case")]
64+
struct Redacted<'a> {
65+
url: &'a Url,
66+
secret: &'static str,
67+
#[serde(skip_serializing_if = "Option::is_none")]
68+
authority_override: &'a Option<SerdePubkey>,
69+
}
70+
71+
Redacted {
72+
url: &self.url,
73+
secret: "<redacted>",
74+
authority_override: &self.authority_override,
75+
}
76+
.serialize(serializer)
77+
}
78+
}
79+
4680
impl Default for ValidatorConfig {
4781
fn default() -> Self {
4882
let keypair =

magicblock-config/src/tests.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use solana_keypair::Keypair;
66
use tempfile::TempDir;
77

88
use crate::{
9-
config::{BlockSize, LifecycleMode},
9+
config::{validator::ReplicationConfig, BlockSize, LifecycleMode},
1010
consts::{self, DEFAULT_VALIDATOR_KEYPAIR},
1111
types::network::{BindAddress, Remote},
1212
ValidatorParams,
@@ -404,6 +404,10 @@ fn test_example_config_full_coverage() {
404404
config.validator.keypair.0.to_base58_string(),
405405
DEFAULT_VALIDATOR_KEYPAIR
406406
);
407+
assert!(matches!(
408+
config.validator.replication_mode,
409+
crate::config::validator::ReplicationMode::Standalone
410+
));
407411

408412
// ========================================================================
409413
// 6. Chain Commitment
@@ -710,3 +714,17 @@ fn test_bind_address_toml_deserialize_port_out_of_range_errors() {
710714
msg
711715
);
712716
}
717+
718+
#[test]
719+
#[parallel]
720+
fn test_replication_config_debug_redacts_secret() {
721+
let cfg = ReplicationConfig {
722+
url: "nats://0.0.0.0:4222".parse().unwrap(),
723+
secret: "SUASECRET".into(),
724+
authority_override: None,
725+
};
726+
727+
let dbg = format!("{cfg:?}");
728+
assert!(dbg.contains("<redacted>"));
729+
assert!(!dbg.contains("SUASECRET"));
730+
}

0 commit comments

Comments
 (0)