add server configuration

This commit is contained in:
2022-09-21 11:17:37 +02:00
parent 15aa4ec967
commit d10eba033f
84 changed files with 226 additions and 44 deletions

62
src/conf/mod.rs Normal file
View File

@@ -0,0 +1,62 @@
use yaml_rust::yaml;
use std::fs::File;
use std::str::FromStr;
use std::io::prelude::*;
use std::collections::HashMap;
static file: &str = "mrprox.conf";
pub struct Servers{
l_servers : HashMap<String, String>,
}
impl Servers {
pub fn new() -> Servers {
Servers{
l_servers: Self::get_servers(),
}
}
fn get_servers() -> HashMap<String, String> {
let mut f = File::open(&file).unwrap();
let mut s = String::new();
let mut ret = HashMap::new();
f.read_to_string(&mut s).unwrap();
let docs = yaml::YamlLoader::load_from_str(&s).unwrap();
let docs2;
match &docs[0]["servers"] {
yaml::Yaml::Hash(ref h) => docs2 = h,
_ => return ret,
}
for (k, v) in docs2{
//println!("{}",String::from(doc.as_str().unwrap()));
ret.insert(String::from(k.as_str().unwrap()),
String::from(v.as_str().unwrap()));
}
ret
}
fn get_host(&self, host: &String) -> Option<(&String, &String)>{
self.l_servers.get_key_value(host)
}
pub fn get_server(&self, host: &String) -> Option<(String, u16)>{
let raw: Vec<&str>;
match self.get_host(host){
Some(h) => raw=h.1.split(":").collect(),
None => return None,
}
if raw.len() == 2 {
match FromStr::from_str(raw[1]) {
Ok(p) => return Some((String::from(raw[0]),p)),
Err(_e) => return None,
}
} else {
return None;
}
}
}