first commit
This commit is contained in:
commit
2de83971b9
|
@ -0,0 +1,5 @@
|
||||||
|
DIRS_LOC=/srv/subdirs
|
||||||
|
INDEX_PATH=/build
|
||||||
|
ROOT_NAME=website
|
||||||
|
|
||||||
|
IP_ADDR=192.168.0.0:8080
|
|
@ -0,0 +1,2 @@
|
||||||
|
/target
|
||||||
|
.env
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,10 @@
|
||||||
|
[package]
|
||||||
|
name = "webserver"
|
||||||
|
version = "1.0.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
tide = "0.16.0"
|
||||||
|
async-std = { version = "1.8.0", features = ["attributes"] }
|
|
@ -0,0 +1,69 @@
|
||||||
|
use std::fs::read_dir;
|
||||||
|
|
||||||
|
#[async_std::main]
|
||||||
|
async fn main() -> tide::Result<()> {
|
||||||
|
let webdirs = get_env("DIRS_LOC").unwrap();
|
||||||
|
let index_paths = get_env("INDEX_PATH").unwrap();
|
||||||
|
let root_name = get_env("ROOT_NAME").unwrap();
|
||||||
|
let ip_addr = get_env("IP_ADDR").unwrap();
|
||||||
|
|
||||||
|
let mut subdirs = read_dir(webdirs.clone())
|
||||||
|
.unwrap()
|
||||||
|
.map(|p| {
|
||||||
|
p.unwrap()
|
||||||
|
.path()
|
||||||
|
.display()
|
||||||
|
.to_string()
|
||||||
|
.replace(format!("{webdirs}/").as_str(), "")
|
||||||
|
.trim()
|
||||||
|
.to_string()
|
||||||
|
})
|
||||||
|
.collect::<Vec<String>>();
|
||||||
|
|
||||||
|
let mut has_root = false;
|
||||||
|
if subdirs.contains(&root_name.trim().to_string()) {
|
||||||
|
subdirs = subdirs
|
||||||
|
.clone()
|
||||||
|
.into_iter()
|
||||||
|
.filter(|r| r != &root_name)
|
||||||
|
.collect::<Vec<String>>();
|
||||||
|
has_root = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut app = tide::new();
|
||||||
|
|
||||||
|
if has_root {
|
||||||
|
app.at("/").serve_file(format!(
|
||||||
|
"{}/{}/{}/index.html",
|
||||||
|
webdirs, root_name, index_paths
|
||||||
|
))?;
|
||||||
|
}
|
||||||
|
|
||||||
|
for d in subdirs {
|
||||||
|
app.at(d.as_str())
|
||||||
|
.serve_file(format!("{}/{}/{}/index.html", webdirs, d, index_paths))?;
|
||||||
|
}
|
||||||
|
app.listen(ip_addr).await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_env(option: &str) -> Option<String> {
|
||||||
|
/*
|
||||||
|
* Get the env var from .env, but if it isn't there, or if the file doesn't exist, get it from the actual env vars
|
||||||
|
*/
|
||||||
|
let text_some = std::fs::read_to_string("./.env").ok();
|
||||||
|
if let Some(text) = text_some {
|
||||||
|
for line in text.trim().lines().collect::<Vec<&str>>() {
|
||||||
|
if line.trim().starts_with(option) {
|
||||||
|
let mut val = line.split('=').collect::<Vec<&str>>();
|
||||||
|
val.reverse();
|
||||||
|
val.pop();
|
||||||
|
val.reverse();
|
||||||
|
return Some(val.join("=").trim().to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return std::env::var(option).ok();
|
||||||
|
} else {
|
||||||
|
return std::env::var(option).ok();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue