Added command line to find config
This commit is contained in:
@@ -2,6 +2,8 @@ extern crate serde_derive;
|
|||||||
extern crate toml;
|
extern crate toml;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use toml::de::Error;
|
use toml::de::Error;
|
||||||
|
use std::io;
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
#[derive(Debug, Deserialize, Clone)]
|
#[derive(Debug, Deserialize, Clone)]
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
@@ -20,10 +22,10 @@ pub struct Server {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Config {
|
impl Config {
|
||||||
pub fn new(file: &str) -> Config {
|
pub fn new(file: &Path) -> Result<Config, Error> {
|
||||||
let fd = std::fs::read_to_string(file).unwrap();
|
let fd = std::fs::read_to_string(file).unwrap();
|
||||||
let config: Config = toml::from_str(&fd).unwrap();
|
let config: Config = toml::from_str(&fd).unwrap();
|
||||||
return config;
|
return Ok(config);
|
||||||
}
|
}
|
||||||
pub fn to_map(&self) -> HashMap<String, Server> {
|
pub fn to_map(&self) -> HashMap<String, Server> {
|
||||||
let mut map = HashMap::new();
|
let mut map = HashMap::new();
|
||||||
|
|||||||
19
src/main.rs
19
src/main.rs
@@ -16,6 +16,7 @@ use std::os::unix::fs::PermissionsExt;
|
|||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::process::Command;
|
use std::process::Command;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use std::env;
|
||||||
use tokio::io::AsyncWriteExt;
|
use tokio::io::AsyncWriteExt;
|
||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
use tokio::net::TcpStream;
|
use tokio::net::TcpStream;
|
||||||
@@ -112,11 +113,6 @@ async fn handle_connection(mut con: conn::Connection) -> Result<(), io::Error> {
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
if url.path().to_string().contains("..") {
|
|
||||||
con.send_status(status::Status::PermanentFailure, "Not in path!").await?;
|
|
||||||
return Ok(());
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut path = PathBuf::from(&con.dir);
|
let mut path = PathBuf::from(&con.dir);
|
||||||
if url.path() != "" || url.path() != "/" {
|
if url.path() != "" || url.path() != "/" {
|
||||||
path.push(url.path().trim_start_matches("/"));
|
path.push(url.path().trim_start_matches("/"));
|
||||||
@@ -167,7 +163,17 @@ async fn handle_connection(mut con: conn::Connection) -> Result<(), io::Error> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> io::Result<()> {
|
fn main() -> io::Result<()> {
|
||||||
let cfg = config::Config::new("config.toml");
|
let args: Vec<String> = env::args().collect();
|
||||||
|
if args.len() != 2 {
|
||||||
|
println!("Please run with the path to the config file.");
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
let p = Path::new(&args[1]);
|
||||||
|
if !p.exists() {
|
||||||
|
println!("Config file doesn't exist");
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
|
let cfg = config::Config::new(&p)?;
|
||||||
println!("Serving {} vhosts", cfg.server.len());
|
println!("Serving {} vhosts", cfg.server.len());
|
||||||
|
|
||||||
let addr = format!("{}:{}", cfg.host, cfg.port);
|
let addr = format!("{}:{}", cfg.host, cfg.port);
|
||||||
@@ -199,6 +205,7 @@ fn main() -> io::Result<()> {
|
|||||||
let mut dir = String::new();
|
let mut dir = String::new();
|
||||||
let mut cgi = String::new();
|
let mut cgi = String::new();
|
||||||
let mut hostname = String::new();
|
let mut hostname = String::new();
|
||||||
|
|
||||||
for server in &cfg.server {
|
for server in &cfg.server {
|
||||||
if Some(server.hostname.as_str()) == sni {
|
if Some(server.hostname.as_str()) == sni {
|
||||||
hostname = sni.unwrap().to_string();
|
hostname = sni.unwrap().to_string();
|
||||||
|
|||||||
@@ -29,16 +29,6 @@ pub enum Status {
|
|||||||
impl fmt::Display for Status {
|
impl fmt::Display for Status {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||||
write!(f, "{:?}", self)
|
write!(f, "{:?}", self)
|
||||||
// or, alternatively:
|
|
||||||
// fmt::Debug::fmt(self, f)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Status {
|
|
||||||
pub fn as_str(&self) -> &'static str {
|
|
||||||
match *self {
|
|
||||||
Status::Success => "20\t",
|
|
||||||
_ => "",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user