RpcEnvironment: add environment type enum RpcEnvironmentType

This commit is contained in:
Dietmar Maurer 2019-01-27 10:33:42 +01:00
parent e82dad9700
commit 162b979394
4 changed files with 28 additions and 3 deletions

View File

@ -16,6 +16,18 @@ pub trait RpcEnvironment {
fn set_result_attrib(&mut self, name: &str, value: Value); fn set_result_attrib(&mut self, name: &str, value: Value);
fn get_result_attrib(&self, name: &str) -> Option<&Value>; fn get_result_attrib(&self, name: &str) -> Option<&Value>;
fn env_type(&self) -> RpcEnvironmentType;
}
#[derive(Copy, Clone)]
pub enum RpcEnvironmentType {
/// command started from command line
CLI,
/// access from public acessable server
PUBLIC,
/// ... access from priviledged server (run as root)
PRIVILEDGED,
} }
type ApiHandlerFn = fn(Value, &ApiMethod, &mut dyn RpcEnvironment) -> Result<Value, Error>; type ApiHandlerFn = fn(Value, &ApiMethod, &mut dyn RpcEnvironment) -> Result<Value, Error>;

View File

@ -22,4 +22,9 @@ impl RpcEnvironment for CliEnvironment {
fn get_result_attrib(&self, name: &str) -> Option<&Value> { fn get_result_attrib(&self, name: &str) -> Option<&Value> {
self.result_attributes.get(name) self.result_attributes.get(name)
} }
fn env_type(&self) -> RpcEnvironmentType {
RpcEnvironmentType::CLI
}
} }

View File

@ -4,12 +4,16 @@ use std::collections::HashMap;
use serde_json::Value; use serde_json::Value;
pub struct RestEnvironment { pub struct RestEnvironment {
env_type: RpcEnvironmentType,
result_attributes: HashMap<String, Value>, result_attributes: HashMap<String, Value>,
} }
impl RestEnvironment { impl RestEnvironment {
pub fn new() -> Self { pub fn new(env_type: RpcEnvironmentType) -> Self {
Self { result_attributes: HashMap::new() } Self {
result_attributes: HashMap::new(),
env_type,
}
} }
} }
@ -22,4 +26,8 @@ impl RpcEnvironment for RestEnvironment {
fn get_result_attrib(&self, name: &str) -> Option<&Value> { fn get_result_attrib(&self, name: &str) -> Option<&Value> {
self.result_attributes.get(name) self.result_attributes.get(name)
} }
fn env_type(&self) -> RpcEnvironmentType {
self.env_type
}
} }

View File

@ -397,7 +397,7 @@ pub fn handle_request(api: Arc<ApiConfig>, req: Request<Body>) -> BoxFut {
println!("REQUEST {} {}", method, path); println!("REQUEST {} {}", method, path);
println!("COMPO {:?}", components); println!("COMPO {:?}", components);
let mut rpcenv = RestEnvironment::new(); let rpcenv = RestEnvironment::new(RpcEnvironmentType::PRIVILEDGED);
if comp_len >= 1 && components[0] == "api2" { if comp_len >= 1 && components[0] == "api2" {
println!("GOT API REQUEST"); println!("GOT API REQUEST");