Skip to content

Commit e32dd06

Browse files
committed
opt: optimize code
1 parent cb5ecfe commit e32dd06

File tree

10 files changed

+95
-103
lines changed

10 files changed

+95
-103
lines changed

src/core.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ impl Default for Core {
119119
module_manager: ModuleManager::new(),
120120
mount_entry_hmac_level: MountEntryHMACLevel::None,
121121
mounts_monitor: ArcSwapOption::empty(),
122-
mounts_monitor_interval: 5,
122+
mounts_monitor_interval: 0,
123123
state: ArcSwap::from_pointee(CoreState::default()),
124124
}
125125
}

src/http/logical.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,15 @@ async fn logical_request_handler(
4242
path: web::Path<String>,
4343
core: web::Data<Arc<Core>>,
4444
) -> Result<HttpResponse, RvError> {
45-
let conn = req.conn_data::<Connection>().unwrap();
45+
let Some(conn) = req.conn_data::<Connection>() else {
46+
return Err(RvError::ErrRequestInvalid);
47+
};
4648
log::debug!("logical request, connection info: {conn:?}, method: {method:?}, path: {path:?}");
4749

4850
let mut req_conn = ReqConnection::default();
4951
req_conn.peer_addr = conn.peer.to_string();
50-
if conn.tls.is_some() {
51-
req_conn.peer_tls_cert.clone_from(&conn.tls.as_ref().unwrap().client_cert_chain);
52+
if let Some(tls) = &conn.tls {
53+
req_conn.peer_tls_cert.clone_from(&tls.client_cert_chain);
5254
}
5355

5456
let mut r = request_auth(&req);

src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ impl RustyVault {
100100

101101
let core = core.wrap();
102102

103-
core.mounts_monitor.store(Some(Arc::new(MountsMonitor::new(core.clone(), core.mounts_monitor_interval))));
103+
if core.mounts_monitor_interval > 0 {
104+
core.mounts_monitor.store(Some(Arc::new(MountsMonitor::new(core.clone(), core.mounts_monitor_interval))));
105+
}
104106

105107
core.module_manager.set_default_modules(core.clone())?;
106108

src/logical/backend.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,12 +126,12 @@ impl LogicalBackend {
126126
}
127127

128128
pub fn handle_auth_renew(&self, req: &mut Request) -> Result<Option<Response>, RvError> {
129-
if self.auth_renew_handler.is_none() {
129+
let Some(auth_renew_handler) = self.auth_renew_handler.as_ref() else {
130130
log::error!("this auth type doesn't support renew");
131131
return Err(RvError::ErrLogicalOperationUnsupported);
132-
}
132+
};
133133

134-
(self.auth_renew_handler.as_ref().unwrap())(self, req)
134+
auth_renew_handler(self, req)
135135
}
136136

137137
pub fn handle_revoke_renew(&self, req: &mut Request) -> Result<Option<Response>, RvError> {

src/logical/request.rs

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -89,27 +89,28 @@ impl Request {
8989
}
9090

9191
fn get_data_raw(&self, key: &str, default: bool) -> Result<Value, RvError> {
92-
let field = self.match_path.as_ref().unwrap().get_field(key);
93-
if field.is_none() {
92+
let Some(match_path) = self.match_path.as_ref() else {
93+
return Err(RvError::ErrRequestNotReady);
94+
};
95+
let Some(field) = match_path.get_field(key) else {
9496
return Err(RvError::ErrRequestNoDataField);
95-
}
96-
let field = field.unwrap();
97+
};
9798

98-
if self.data.is_some() {
99-
if let Some(data) = self.data.as_ref().unwrap().get(key) {
100-
if !field.check_data_type(data) {
99+
if let Some(data) = self.data.as_ref() {
100+
if let Some(value) = data.get(key) {
101+
if !field.check_data_type(value) {
101102
return Err(RvError::ErrRequestFieldInvalid);
102103
}
103-
return Ok(data.clone());
104+
return Ok(value.clone());
104105
}
105106
}
106107

107-
if self.body.is_some() {
108-
if let Some(data) = self.body.as_ref().unwrap().get(key) {
109-
if !field.check_data_type(data) {
108+
if let Some(body) = self.body.as_ref() {
109+
if let Some(value) = body.get(key) {
110+
if !field.check_data_type(value) {
110111
return Err(RvError::ErrRequestFieldInvalid);
111112
}
112-
return Ok(data.clone());
113+
return Ok(value.clone());
113114
}
114115
}
115116

@@ -184,10 +185,12 @@ impl Request {
184185
}
185186

186187
pub fn get_field_default_or_zero(&self, key: &str) -> Result<Value, RvError> {
187-
if self.match_path.is_none() {
188+
let Some(match_path) = self.match_path.as_ref() else {
188189
return Err(RvError::ErrRequestNotReady);
189-
}
190-
let field = self.match_path.as_ref().unwrap().get_field(key).ok_or(RvError::ErrRequestNoDataField)?;
190+
};
191+
let Some(field) = match_path.get_field(key) else {
192+
return Err(RvError::ErrRequestNoDataField);
193+
};
191194
field.get_default()
192195
}
193196

@@ -199,16 +202,16 @@ impl Request {
199202

200203
//TODO: the sensitive data is still in the memory. Need to totally resolve this in `serde_json` someday.
201204
pub fn clear_data(&mut self, key: &str) {
202-
if self.data.is_some() {
203-
if let Some(secret_str) = self.data.as_mut().unwrap().get_mut(key) {
205+
if let Some(data) = self.data.as_mut() {
206+
if let Some(secret_str) = data.get_mut(key) {
204207
if let Value::String(ref mut s) = *secret_str {
205208
"".clone_into(s);
206209
}
207210
}
208211
}
209212

210-
if self.body.is_some() {
211-
if let Some(secret_str) = self.body.as_mut().unwrap().get_mut(key) {
213+
if let Some(body) = self.body.as_mut() {
214+
if let Some(secret_str) = body.get_mut(key) {
212215
if let Value::String(ref mut s) = *secret_str {
213216
"".clone_into(s);
214217
}
@@ -217,34 +220,34 @@ impl Request {
217220
}
218221

219222
pub fn storage_list(&self, prefix: &str) -> Result<Vec<String>, RvError> {
220-
if self.storage.is_none() {
223+
let Some(storage) = self.storage.as_ref() else {
221224
return Err(RvError::ErrRequestNotReady);
222-
}
225+
};
223226

224-
self.storage.as_ref().unwrap().list(prefix)
227+
storage.list(prefix)
225228
}
226229

227230
pub fn storage_get(&self, key: &str) -> Result<Option<StorageEntry>, RvError> {
228-
if self.storage.is_none() {
231+
let Some(storage) = self.storage.as_ref() else {
229232
return Err(RvError::ErrRequestNotReady);
230-
}
233+
};
231234

232-
self.storage.as_ref().unwrap().get(key)
235+
storage.get(key)
233236
}
234237

235238
pub fn storage_put(&self, entry: &StorageEntry) -> Result<(), RvError> {
236-
if self.storage.is_none() {
239+
let Some(storage) = self.storage.as_ref() else {
237240
return Err(RvError::ErrRequestNotReady);
238-
}
241+
};
239242

240-
self.storage.as_ref().unwrap().put(entry)
243+
storage.put(entry)
241244
}
242245

243246
pub fn storage_delete(&self, key: &str) -> Result<(), RvError> {
244-
if self.storage.is_none() {
247+
let Some(storage) = self.storage.as_ref() else {
245248
return Err(RvError::ErrRequestNotReady);
246-
}
249+
};
247250

248-
self.storage.as_ref().unwrap().delete(key)
251+
storage.delete(key)
249252
}
250253
}

src/modules/auth/mod.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,12 +196,11 @@ impl AuthModule {
196196
return Err(RvError::ErrMountPathExist);
197197
}
198198

199-
let src_match = mounts_router.router.matching_mount_entry(&src)?;
200-
if src_match.is_none() {
199+
let Some(src_match) = mounts_router.router.matching_mount_entry(&src)? else {
201200
return Err(RvError::ErrMountNotMatch);
202-
}
201+
};
203202

204-
let mut src_entry = src_match.as_ref().unwrap().write()?;
203+
let mut src_entry = src_match.write()?;
205204
src_entry.tainted = true;
206205

207206
mounts_router.router.taint(&src)?;
@@ -217,7 +216,7 @@ impl AuthModule {
217216
std::mem::drop(src_entry);
218217

219218
if let Err(e) = mounts_router.mounts.persist(self.barrier.as_storage()) {
220-
let mut src_entry = src_match.as_ref().unwrap().write()?;
219+
let mut src_entry = src_match.write()?;
221220
src_entry.path = src_path;
222221
src_entry.tainted = true;
223222
return Err(e);
@@ -336,7 +335,9 @@ impl Module for AuthModule {
336335
self.load_auth(Some(&core.state.load().hmac_key), core.mount_entry_hmac_level)?;
337336
self.setup_auth()?;
338337

339-
core.mounts_monitor.load().as_ref().unwrap().add_mounts_router(self.mounts_router.clone());
338+
if let Some(mounts_monitor) = core.mounts_monitor.load().as_ref() {
339+
mounts_monitor.add_mounts_router(self.mounts_router.clone());
340+
}
340341

341342
expiration.restore()?;
342343
expiration.start_check_expired_lease_entries();
@@ -347,7 +348,9 @@ impl Module for AuthModule {
347348
}
348349

349350
fn cleanup(&self, core: &Core) -> Result<(), RvError> {
350-
core.mounts_monitor.load().as_ref().unwrap().remove_mounts_router(self.mounts_router.clone());
351+
if let Some(mounts_monitor) = core.mounts_monitor.load().as_ref() {
352+
mounts_monitor.remove_mounts_router(self.mounts_router.clone());
353+
}
351354
core.delete_handler(self.token_store.load().as_ref().unwrap().clone() as Arc<dyn Handler>)?;
352355
self.delete_auth_backend("token")?;
353356
self.teardown_auth()?;

src/modules/auth/token_store.rs

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -307,11 +307,9 @@ impl TokenStore {
307307

308308
/// Creates a token entry in the storage.
309309
pub fn create(&self, entry: &mut TokenEntry) -> Result<(), RvError> {
310-
if self.view.is_none() {
310+
let Some(view) = self.view.as_ref() else {
311311
return Err(RvError::ErrModuleNotInit);
312-
}
313-
314-
let view = self.view.as_ref().unwrap();
312+
};
315313

316314
if entry.id.is_empty() {
317315
entry.id = generate_uuid();
@@ -338,11 +336,9 @@ impl TokenStore {
338336

339337
/// Uses the token and decrements its use count.
340338
pub fn use_token(&self, entry: &mut TokenEntry) -> Result<(), RvError> {
341-
if self.view.is_none() {
339+
let Some(view) = self.view.as_ref() else {
342340
return Err(RvError::ErrModuleNotInit);
343-
}
344-
345-
let view = self.view.as_ref().unwrap();
341+
};
346342

347343
if entry.num_uses == 0 {
348344
return Ok(());
@@ -403,11 +399,9 @@ impl TokenStore {
403399
}
404400

405401
pub fn lookup_salted(&self, salted_id: &str) -> Result<Option<TokenEntry>, RvError> {
406-
if self.view.is_none() {
402+
let Some(view) = self.view.as_ref() else {
407403
return Err(RvError::ErrModuleNotInit);
408-
}
409-
410-
let view = self.view.as_ref().unwrap();
404+
};
411405

412406
let path = format!("{TOKEN_LOOKUP_PREFIX}{salted_id}");
413407
let raw = view.get(&path)?;
@@ -429,11 +423,9 @@ impl TokenStore {
429423
}
430424

431425
pub fn revoke_salted(&self, salted_id: &str) -> Result<(), RvError> {
432-
if self.view.is_none() {
426+
let Some(view) = self.view.as_ref() else {
433427
return Err(RvError::ErrModuleNotInit);
434-
}
435-
436-
let view = self.view.as_ref().unwrap();
428+
};
437429

438430
let entry = self.lookup_salted(salted_id)?;
439431

@@ -470,11 +462,9 @@ impl TokenStore {
470462
}
471463

472464
pub fn revoke_tree_salted(&self, salted_id: &str) -> Result<(), RvError> {
473-
if self.view.is_none() {
465+
let Some(view) = self.view.as_ref() else {
474466
return Err(RvError::ErrModuleNotInit);
475-
}
476-
477-
let view = self.view.as_ref().unwrap();
467+
};
478468

479469
let path = format!("{TOKEN_PARENT_PREFIX}{salted_id}/");
480470

src/modules/credential/approle/path_role.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -941,12 +941,11 @@ impl AppRoleBackendInner {
941941
}
942942

943943
pub fn set_role_id(&self, req: &mut Request, role_id: &str, role_id_entry: &RoleIdEntry) -> Result<(), RvError> {
944-
let salt = self.salt.load();
945-
if salt.is_none() {
944+
let Some(salt) = self.salt.load_full() else {
946945
return Err(RvError::ErrResponse("salt not found".to_string()));
947-
}
946+
};
948947

949-
let salt_id = salt.as_ref().unwrap().salt_id(role_id)?;
948+
let salt_id = salt.salt_id(role_id)?;
950949

951950
let entry = StorageEntry::new(format!("role_id/{salt_id}").as_str(), role_id_entry)?;
952951

@@ -958,12 +957,11 @@ impl AppRoleBackendInner {
958957
return Err(RvError::ErrResponse("missing role_id".to_string()));
959958
}
960959

961-
let salt = self.salt.load();
962-
if salt.is_none() {
960+
let Some(salt) = self.salt.load_full() else {
963961
return Err(RvError::ErrResponse("salt not found".to_string()));
964-
}
962+
};
965963

966-
let salt_id = salt.as_ref().unwrap().salt_id(role_id)?;
964+
let salt_id = salt.salt_id(role_id)?;
967965

968966
req.storage_delete(format!("role_id/{salt_id}").as_str())?;
969967

src/modules/system/mod.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -597,18 +597,16 @@ impl SystemBackend {
597597
let policy_module = self.get_module::<PolicyModule>("policy")?;
598598
let auth_module = self.get_module::<AuthModule>("auth")?;
599599

600-
if auth_module.token_store.load().is_none() {
600+
let Some(token_store) = auth_module.token_store.load_full() else {
601601
return Err(RvError::ErrPermissionDenied);
602-
}
602+
};
603603

604604
let mut secret_mounts = Map::new();
605605
let mut auth_mounts = Map::new();
606606

607607
let mut is_authed = false;
608608

609-
let acl: Option<ACL> = if let Some(auth) =
610-
auth_module.token_store.load().as_ref().unwrap().check_token(&req.path, &req.client_token)?
611-
{
609+
let acl: Option<ACL> = if let Some(auth) = token_store.check_token(&req.path, &req.client_token)? {
612610
if auth.policies.is_empty() {
613611
None
614612
} else {
@@ -624,10 +622,14 @@ impl SystemBackend {
624622
return false;
625623
}
626624

625+
let Some(acl) = acl.as_ref() else {
626+
return false;
627+
};
628+
627629
if me.table == AUTH_TABLE_TYPE {
628-
acl.as_ref().unwrap().has_mount_access(&format!("{}/{}", AUTH_TABLE_TYPE, me.path))
630+
acl.has_mount_access(&format!("{}/{}", AUTH_TABLE_TYPE, me.path))
629631
} else {
630-
acl.as_ref().unwrap().has_mount_access(me.path.as_str())
632+
acl.has_mount_access(me.path.as_str())
631633
}
632634
};
633635

0 commit comments

Comments
 (0)