diff --git a/src/api/router.rs b/src/api/router.rs index 281aec22..9d737252 100644 --- a/src/api/router.rs +++ b/src/api/router.rs @@ -18,6 +18,10 @@ pub trait RpcEnvironment { fn get_result_attrib(&self, name: &str) -> Option<&Value>; fn env_type(&self) -> RpcEnvironmentType; + + fn set_user(&mut self, user: Option); + + fn get_user(&self) -> Option; } #[derive(Copy, Clone)] diff --git a/src/cli/environment.rs b/src/cli/environment.rs index 3227f870..cd4179d8 100644 --- a/src/cli/environment.rs +++ b/src/cli/environment.rs @@ -5,11 +5,15 @@ use serde_json::Value; pub struct CliEnvironment { result_attributes: HashMap, + user: Option, } impl CliEnvironment { pub fn new() -> Self { - Self { result_attributes: HashMap::new() } + Self { + result_attributes: HashMap::new(), + user: None, + } } } @@ -27,4 +31,11 @@ impl RpcEnvironment for CliEnvironment { RpcEnvironmentType::CLI } + fn set_user(&mut self, user: Option) { + self.user = user; + } + + fn get_user(&self) -> Option { + self.user.clone() + } } diff --git a/src/server/environment.rs b/src/server/environment.rs index 7345cc8d..2d6103f8 100644 --- a/src/server/environment.rs +++ b/src/server/environment.rs @@ -6,12 +6,14 @@ use serde_json::Value; pub struct RestEnvironment { env_type: RpcEnvironmentType, result_attributes: HashMap, + user: Option, } impl RestEnvironment { pub fn new(env_type: RpcEnvironmentType) -> Self { Self { result_attributes: HashMap::new(), + user: None, env_type, } } @@ -30,4 +32,12 @@ impl RpcEnvironment for RestEnvironment { fn env_type(&self) -> RpcEnvironmentType { self.env_type } + + fn set_user(&mut self, user: Option) { + self.user = user; + } + + fn get_user(&self) -> Option { + self.user.clone() + } } diff --git a/src/server/rest.rs b/src/server/rest.rs index eb938c53..ccadae47 100644 --- a/src/server/rest.rs +++ b/src/server/rest.rs @@ -397,7 +397,7 @@ pub fn handle_request(api: Arc, req: Request) -> BoxFut { println!("REQUEST {} {}", method, path); println!("COMPO {:?}", components); - let rpcenv = RestEnvironment::new(RpcEnvironmentType::PRIVILEDGED); + let mut rpcenv = RestEnvironment::new(RpcEnvironmentType::PRIVILEDGED); if comp_len >= 1 && components[0] == "api2" { println!("GOT API REQUEST"); @@ -414,6 +414,8 @@ pub fn handle_request(api: Arc, req: Request) -> BoxFut { let mut uri_param = HashMap::new(); // fixme: handle auth + rpcenv.set_user(Some(String::from("root@pam"))); + match api.find_method(&components[2..], method, &mut uri_param) { MethodDefinition::None => {} MethodDefinition::Simple(api_method) => {