diff --git a/src/api/mod.rs b/src/api/mod.rs index 6157638..1de4c04 100644 --- a/src/api/mod.rs +++ b/src/api/mod.rs @@ -56,6 +56,10 @@ pub fn new_rpc_module(state: RpcState) -> RpcModule { .register_method("system.create_user", system::create_user) .unwrap(); + module + .register_method("system.delete_user", system::delete_user) + .unwrap(); + module .register_method("network.get_static_routes", network::get_static_routes) .unwrap(); diff --git a/src/api/system.rs b/src/api/system.rs index 3a65015..d0516d7 100644 --- a/src/api/system.rs +++ b/src/api/system.rs @@ -48,3 +48,23 @@ pub fn create_user(p: Params, state: &RpcState) -> Result<(), ApiError> { Err(ApiError::InvalidParams) } } + +#[derive(Deserialize)] +struct DeleteUser { + name: String, +} + +pub fn delete_user(p: Params, state: &RpcState) -> Result<(), ApiError> { + let u: DeleteUser = p.parse().unwrap(); + + let mut cm = state.config_manager.clone(); + let mut tx = cm.start_transaction(); + + match tx.changes.system.users.remove(&u.name) { + Some(_) => return tx.commit().map_err(|source| ApiError::InvalidParams), + None => { + tx.revert(); + Err(ApiError::InvalidParams) + } + } +}