mirror of
https://codeberg.org/slatian/service.echoip-slatecave.git
synced 2024-11-10 00:27:21 +01:00
Added the possibility to serve static files
This commit is contained in:
parent
a48050b234
commit
97507634df
60
Cargo.lock
generated
60
Cargo.lock
generated
@ -67,7 +67,7 @@ dependencies = [
|
|||||||
"sync_wrapper",
|
"sync_wrapper",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tower",
|
"tower",
|
||||||
"tower-http",
|
"tower-http 0.3.5",
|
||||||
"tower-layer",
|
"tower-layer",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
]
|
]
|
||||||
@ -378,6 +378,7 @@ dependencies = [
|
|||||||
"tokio",
|
"tokio",
|
||||||
"toml",
|
"toml",
|
||||||
"tower",
|
"tower",
|
||||||
|
"tower-http 0.4.0",
|
||||||
"trust-dns-proto",
|
"trust-dns-proto",
|
||||||
"trust-dns-resolver",
|
"trust-dns-resolver",
|
||||||
]
|
]
|
||||||
@ -978,6 +979,16 @@ version = "0.3.16"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
|
checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "mime_guess"
|
||||||
|
version = "2.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
|
||||||
|
dependencies = [
|
||||||
|
"mime",
|
||||||
|
"unicase",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mio"
|
name = "mio"
|
||||||
version = "0.8.5"
|
version = "0.8.5"
|
||||||
@ -1664,6 +1675,19 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-util"
|
||||||
|
version = "0.7.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml"
|
name = "toml"
|
||||||
version = "0.7.2"
|
version = "0.7.2"
|
||||||
@ -1733,6 +1757,31 @@ dependencies = [
|
|||||||
"tower-service",
|
"tower-service",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tower-http"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"bytes",
|
||||||
|
"futures-core",
|
||||||
|
"futures-util",
|
||||||
|
"http",
|
||||||
|
"http-body",
|
||||||
|
"http-range-header",
|
||||||
|
"httpdate",
|
||||||
|
"mime",
|
||||||
|
"mime_guess",
|
||||||
|
"percent-encoding",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio",
|
||||||
|
"tokio-util",
|
||||||
|
"tower-layer",
|
||||||
|
"tower-service",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tower-layer"
|
name = "tower-layer"
|
||||||
version = "0.3.2"
|
version = "0.3.2"
|
||||||
@ -1900,6 +1949,15 @@ dependencies = [
|
|||||||
"unic-common",
|
"unic-common",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicase"
|
||||||
|
version = "2.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
|
||||||
|
dependencies = [
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-bidi"
|
name = "unicode-bidi"
|
||||||
version = "0.3.10"
|
version = "0.3.10"
|
||||||
|
@ -18,7 +18,8 @@ serde = { version = "1", features = ["derive"] }
|
|||||||
tokio = { version = "1", features = ["full"] }
|
tokio = { version = "1", features = ["full"] }
|
||||||
tera = "1"
|
tera = "1"
|
||||||
toml = "0.7"
|
toml = "0.7"
|
||||||
tower = "*"
|
tower = "0.4"
|
||||||
|
tower-http = { version = "0.4", features = ["fs"] }
|
||||||
trust-dns-proto = "0.22"
|
trust-dns-proto = "0.22"
|
||||||
trust-dns-resolver = "0.22"
|
trust-dns-resolver = "0.22"
|
||||||
maxminddb = "0.23"
|
maxminddb = "0.23"
|
||||||
|
@ -11,6 +11,10 @@ ip_header = "RightmostXForwardedFor"
|
|||||||
# When you don't want to use a proxy server:
|
# When you don't want to use a proxy server:
|
||||||
#ip_header = "ConnectInfo"
|
#ip_header = "ConnectInfo"
|
||||||
|
|
||||||
|
# You can specify a custom location for static files here
|
||||||
|
# Defaults to the static directory in the templete direcotry
|
||||||
|
# Acts as an "underlay"
|
||||||
|
#static_location = ""
|
||||||
|
|
||||||
# Allow querying of private range ips
|
# Allow querying of private range ips
|
||||||
# enable if you want to use this service
|
# enable if you want to use this service
|
||||||
|
@ -17,6 +17,7 @@ pub struct ServerConfig {
|
|||||||
pub ip_header: SecureClientIpSource,
|
pub ip_header: SecureClientIpSource,
|
||||||
|
|
||||||
pub allow_private_ip_lookup: bool,
|
pub allow_private_ip_lookup: bool,
|
||||||
|
pub static_location: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(serde::Deserialize, Clone)]
|
#[derive(serde::Deserialize, Clone)]
|
||||||
@ -52,6 +53,7 @@ impl Default for ServerConfig {
|
|||||||
listen_on: "127.0.0.1:3000".parse().unwrap(),
|
listen_on: "127.0.0.1:3000".parse().unwrap(),
|
||||||
ip_header: SecureClientIpSource::ConnectInfo,
|
ip_header: SecureClientIpSource::ConnectInfo,
|
||||||
allow_private_ip_lookup: false,
|
allow_private_ip_lookup: false,
|
||||||
|
static_location: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
src/main.rs
27
src/main.rs
@ -7,6 +7,7 @@ use axum::{
|
|||||||
},
|
},
|
||||||
headers,
|
headers,
|
||||||
http::Request,
|
http::Request,
|
||||||
|
handler::Handler,
|
||||||
middleware::{self, Next},
|
middleware::{self, Next},
|
||||||
response::Response,
|
response::Response,
|
||||||
Router,
|
Router,
|
||||||
@ -19,6 +20,7 @@ use lazy_static::lazy_static;
|
|||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use tera::Tera;
|
use tera::Tera;
|
||||||
use tower::ServiceBuilder;
|
use tower::ServiceBuilder;
|
||||||
|
use tower_http::services::ServeDir;
|
||||||
use trust_dns_resolver::{
|
use trust_dns_resolver::{
|
||||||
TokioAsyncResolver,
|
TokioAsyncResolver,
|
||||||
// config::ResolverOpts,
|
// config::ResolverOpts,
|
||||||
@ -103,9 +105,11 @@ struct CliArgs {
|
|||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
listen_on: Option<String>,
|
listen_on: Option<String>,
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
templates: Option<String>,
|
template_location: Option<String>,
|
||||||
#[arg(short,long)]
|
#[arg(short,long)]
|
||||||
extra_config: Option<String>,
|
extra_config: Option<String>,
|
||||||
|
#[arg(short,long)]
|
||||||
|
static_location: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn match_domain_hidden_list(domain: &String, hidden_list: &Vec<String>) -> bool {
|
fn match_domain_hidden_list(domain: &String, hidden_list: &Vec<String>) -> bool {
|
||||||
@ -155,7 +159,10 @@ async fn main() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Initalize Tera templates
|
// Initalize Tera templates
|
||||||
let mut template_base_dir = (&config.template.template_location).to_owned();
|
let mut template_base_dir = match cli_args.template_location {
|
||||||
|
Some(template_base_dir) => template_base_dir,
|
||||||
|
None => (&config.template.template_location).to_owned(),
|
||||||
|
};
|
||||||
if !template_base_dir.ends_with("/") {
|
if !template_base_dir.ends_with("/") {
|
||||||
template_base_dir = template_base_dir + "/";
|
template_base_dir = template_base_dir + "/";
|
||||||
}
|
}
|
||||||
@ -170,7 +177,7 @@ async fn main() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
let template_glob = template_base_dir+"*.html";
|
let template_glob = template_base_dir.clone()+"*.html";
|
||||||
println!("Parsing Templates from '{}' ...", &template_glob);
|
println!("Parsing Templates from '{}' ...", &template_glob);
|
||||||
let res = Tera::new((template_glob).as_str());
|
let res = Tera::new((template_glob).as_str());
|
||||||
let tera = match res {
|
let tera = match res {
|
||||||
@ -186,8 +193,13 @@ async fn main() {
|
|||||||
template_config: template_extra_config,
|
template_config: template_extra_config,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initalize Rate Limiter
|
// Static file directory
|
||||||
|
|
||||||
|
let static_file_directory = cli_args.static_location.unwrap_or(
|
||||||
|
config.server.static_location.clone().unwrap_or(
|
||||||
|
template_base_dir+"/static"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
// Initalize GeoIP Database
|
// Initalize GeoIP Database
|
||||||
|
|
||||||
@ -243,8 +255,11 @@ async fn main() {
|
|||||||
.route("/ip/:address", get(handle_ip_route_with_path))
|
.route("/ip/:address", get(handle_ip_route_with_path))
|
||||||
.route("/ua", get(user_agent_handler))
|
.route("/ua", get(user_agent_handler))
|
||||||
.route("/hi", get(hello_world_handler))
|
.route("/hi", get(hello_world_handler))
|
||||||
.fallback(not_found_handler)
|
.fallback_service(
|
||||||
.with_state(shared_state)
|
ServeDir::new(static_file_directory)
|
||||||
|
.fallback(not_found_handler.with_state(shared_state.clone()))
|
||||||
|
)
|
||||||
|
.with_state(shared_state)
|
||||||
.layer(
|
.layer(
|
||||||
ServiceBuilder::new()
|
ServiceBuilder::new()
|
||||||
.layer(ip_header.into_extension())
|
.layer(ip_header.into_extension())
|
||||||
|
2
templates/static/robots.txt
Normal file
2
templates/static/robots.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
User-agent: *
|
||||||
|
Disallow: /*?
|
Loading…
Reference in New Issue
Block a user