Skip to content

Commit 5b8c4db

Browse files
committed
Receive module jwts and admin secrets from body in reload endpoint
1 parent 03e034a commit 5b8c4db

3 files changed

Lines changed: 36 additions & 8 deletions

File tree

crates/common/src/commit/request.rs

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use std::{
2+
collections::HashMap,
23
fmt::{self, Debug, Display},
34
str::FromStr,
45
};
@@ -9,11 +10,12 @@ use alloy::{
910
rpc::types::beacon::BlsSignature,
1011
};
1112
use derive_more::derive::From;
12-
use serde::{Deserialize, Serialize};
13+
use serde::{Deserialize, Deserializer, Serialize};
1314
use tree_hash::TreeHash;
1415
use tree_hash_derive::TreeHash;
1516

1617
use crate::{
18+
config::decode_string_to_map,
1719
constants::COMMIT_BOOST_DOMAIN,
1820
error::BlstErrorWrapper,
1921
signature::verify_signed_message,
@@ -202,7 +204,27 @@ pub struct GetPubkeysResponse {
202204
}
203205

204206
#[derive(Debug, Clone, Serialize, Deserialize)]
205-
pub struct RevokeJWTRequest {
207+
pub struct ReloadRequest {
208+
#[serde(default, deserialize_with = "deserialize_jwt_secrets")]
209+
pub jwt_secrets: Option<HashMap<ModuleId, String>>,
210+
pub admin_secret: Option<String>,
211+
}
212+
213+
pub fn deserialize_jwt_secrets<'de, D>(
214+
deserializer: D,
215+
) -> Result<Option<HashMap<ModuleId, String>>, D::Error>
216+
where
217+
D: Deserializer<'de>,
218+
{
219+
let raw: String = Deserialize::deserialize(deserializer)?;
220+
221+
decode_string_to_map(&raw)
222+
.map(|x| Some(x))
223+
.map_err(|_| serde::de::Error::custom("Invalid format".to_string()))
224+
}
225+
226+
#[derive(Debug, Clone, Serialize, Deserialize)]
227+
pub struct RevokeModuleRequest {
206228
pub module_id: ModuleId,
207229
}
208230

crates/common/src/config/utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub fn load_jwt_secrets() -> Result<(String, HashMap<ModuleId, String>)> {
3131
decode_string_to_map(&jwt_secrets).map(|secrets| (admin_jwt, secrets))
3232
}
3333

34-
fn decode_string_to_map(raw: &str) -> Result<HashMap<ModuleId, String>> {
34+
pub fn decode_string_to_map(raw: &str) -> Result<HashMap<ModuleId, String>> {
3535
// trim the string and split for comma
3636
raw.trim()
3737
.split(',')

crates/signer/src/service.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ use cb_common::{
1616
REVOKE_MODULE_PATH, STATUS_PATH,
1717
},
1818
request::{
19-
EncryptionScheme, GenerateProxyRequest, GetPubkeysResponse, RevokeJWTRequest,
20-
SignConsensusRequest, SignProxyRequest, SignRequest,
19+
EncryptionScheme, GenerateProxyRequest, GetPubkeysResponse, ReloadRequest,
20+
RevokeModuleRequest, SignConsensusRequest, SignProxyRequest, SignRequest,
2121
},
2222
},
2323
config::StartSignerConfig,
@@ -282,6 +282,7 @@ async fn handle_generate_proxy(
282282

283283
async fn handle_reload(
284284
State(mut state): State<SigningState>,
285+
Json(request): Json<ReloadRequest>,
285286
) -> Result<impl IntoResponse, SignerModuleError> {
286287
let req_id = Uuid::new_v4();
287288

@@ -295,8 +296,13 @@ async fn handle_reload(
295296
}
296297
};
297298

298-
state.jwts = Arc::new(RwLock::new(config.jwts.clone()));
299-
state.admin_secret = Arc::new(RwLock::new(config.admin_secret.clone()));
299+
if let Some(jwt_secrets) = request.jwt_secrets {
300+
*state.jwts.write().await = jwt_secrets;
301+
}
302+
303+
if let Some(admin_secret) = request.admin_secret {
304+
*state.admin_secret.write().await = admin_secret;
305+
}
300306

301307
let new_manager = match start_manager(config).await {
302308
Ok(manager) => manager,
@@ -313,7 +319,7 @@ async fn handle_reload(
313319

314320
async fn handle_revoke_module(
315321
State(state): State<SigningState>,
316-
Json(request): Json<RevokeJWTRequest>,
322+
Json(request): Json<RevokeModuleRequest>,
317323
) -> Result<impl IntoResponse, SignerModuleError> {
318324
let mut guard = state.jwts.write().await;
319325
guard

0 commit comments

Comments
 (0)