mirror of https://github.com/PiyushXCoder/lupt.git
redirect
This commit is contained in:
parent
7569e222fc
commit
e49d0df690
|
|
@ -1,2 +1,4 @@
|
||||||
/target
|
/target
|
||||||
/config.json
|
/config.json
|
||||||
|
/localhost-key.pem
|
||||||
|
/localhost.pem
|
||||||
|
|
@ -358,6 +358,17 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "actix-web-middleware-redirect-https"
|
||||||
|
version = "3.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3ce1464786203c29120f6d1e4dcdc9c3975506e70b89c3a56c5389f265256dc6"
|
||||||
|
dependencies = [
|
||||||
|
"actix-service",
|
||||||
|
"actix-web",
|
||||||
|
"futures",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "actix_derive"
|
name = "actix_derive"
|
||||||
version = "0.5.0"
|
version = "0.5.0"
|
||||||
|
|
@ -1202,6 +1213,7 @@ dependencies = [
|
||||||
"actix-ratelimit",
|
"actix-ratelimit",
|
||||||
"actix-web",
|
"actix-web",
|
||||||
"actix-web-actors",
|
"actix-web-actors",
|
||||||
|
"actix-web-middleware-redirect-https",
|
||||||
"base64",
|
"base64",
|
||||||
"clap",
|
"clap",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
|
|
@ -2060,6 +2072,18 @@ dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
"pin-project-lite 0.2.4",
|
"pin-project-lite 0.2.4",
|
||||||
|
"tokio-macros",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tokio-macros"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "caf7b11a536f46a809a8a9f0bb4237020f70ecbf115b842360afb127ea2fda57"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ description = "Chat app for lupt(लुप्त) users!"
|
||||||
authors = ["Piyush Raj <piyush.raj.kit@gmail.com>"]
|
authors = ["Piyush Raj <piyush.raj.kit@gmail.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
license = "GPL 3.0"
|
license = "GPL 3.0"
|
||||||
license-file = "LICENSE"
|
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
repository = "https://github.com/PiyushXCoder/lupt"
|
repository = "https://github.com/PiyushXCoder/lupt"
|
||||||
homepage = "luptchat.in"
|
homepage = "luptchat.in"
|
||||||
|
|
@ -21,6 +20,7 @@ actix-web-actors = "3"
|
||||||
actix-broker = "0.3.1"
|
actix-broker = "0.3.1"
|
||||||
actix-files = "0.5.0"
|
actix-files = "0.5.0"
|
||||||
actix-ratelimit = "0.3.1"
|
actix-ratelimit = "0.3.1"
|
||||||
|
actix-web-middleware-redirect-https = "3.0.1"
|
||||||
env_logger = "0.8.3"
|
env_logger = "0.8.3"
|
||||||
openssl = "0.10.28"
|
openssl = "0.10.28"
|
||||||
|
|
||||||
|
|
@ -30,7 +30,7 @@ lazy_static = "1.4.0"
|
||||||
serde = "1.0.123"
|
serde = "1.0.123"
|
||||||
serde_json = "1.0.62"
|
serde_json = "1.0.62"
|
||||||
rand = "0.8.3"
|
rand = "0.8.3"
|
||||||
tokio = { version = "1.5.0", features = ['rt', 'rt-multi-thread']}
|
tokio = { version = "1.5.0", features = ['rt', 'rt-multi-thread', 'macros']}
|
||||||
|
|
||||||
sha1 = "0.6.0"
|
sha1 = "0.6.0"
|
||||||
base64 = "0.13.0"
|
base64 = "0.13.0"
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ use serde::{Deserialize, Serialize};
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub static_path: String,
|
pub static_path: String,
|
||||||
pub bind_address: String,
|
pub bind_address: String,
|
||||||
|
pub port: String,
|
||||||
|
pub port_x: String,
|
||||||
pub config: ConfigFile
|
pub config: ConfigFile
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -39,13 +41,6 @@ impl Config {
|
||||||
.version(env!("CARGO_PKG_VERSION"))
|
.version(env!("CARGO_PKG_VERSION"))
|
||||||
.author(env!("CARGO_PKG_AUTHORS"))
|
.author(env!("CARGO_PKG_AUTHORS"))
|
||||||
.about(env!("CARGO_PKG_DESCRIPTION"))
|
.about(env!("CARGO_PKG_DESCRIPTION"))
|
||||||
.arg(Arg::with_name("static_path")
|
|
||||||
.short("s")
|
|
||||||
.long("static_path")
|
|
||||||
.value_name("DIR")
|
|
||||||
.help("Path of directory with index.html")
|
|
||||||
.required(true)
|
|
||||||
.takes_value(true))
|
|
||||||
.arg(Arg::with_name("bind_address")
|
.arg(Arg::with_name("bind_address")
|
||||||
.short("a")
|
.short("a")
|
||||||
.long("bind_address")
|
.long("bind_address")
|
||||||
|
|
@ -53,6 +48,27 @@ impl Config {
|
||||||
.help("Address to bind for server")
|
.help("Address to bind for server")
|
||||||
.required(true)
|
.required(true)
|
||||||
.takes_value(true))
|
.takes_value(true))
|
||||||
|
.arg(Arg::with_name("port")
|
||||||
|
.short("p")
|
||||||
|
.long("port")
|
||||||
|
.value_name("PORT")
|
||||||
|
.help("Port to bind for server")
|
||||||
|
.required(true)
|
||||||
|
.takes_value(true))
|
||||||
|
.arg(Arg::with_name("port_x")
|
||||||
|
.short("x")
|
||||||
|
.long("port_x")
|
||||||
|
.value_name("PORT")
|
||||||
|
.help("Port to bind for http if ssl is enabled to redirect to https")
|
||||||
|
.required(false)
|
||||||
|
.takes_value(true))
|
||||||
|
.arg(Arg::with_name("static_path")
|
||||||
|
.short("s")
|
||||||
|
.long("static_path")
|
||||||
|
.value_name("DIR")
|
||||||
|
.help("Path of directory with index.html")
|
||||||
|
.required(true)
|
||||||
|
.takes_value(true))
|
||||||
.arg(Arg::with_name("config")
|
.arg(Arg::with_name("config")
|
||||||
.short("c")
|
.short("c")
|
||||||
.long("config")
|
.long("config")
|
||||||
|
|
@ -80,6 +96,8 @@ Config file must have following fields
|
||||||
Config {
|
Config {
|
||||||
static_path: matches.value_of("static_path").unwrap().to_owned(),
|
static_path: matches.value_of("static_path").unwrap().to_owned(),
|
||||||
bind_address: matches.value_of("bind_address").unwrap().to_owned(),
|
bind_address: matches.value_of("bind_address").unwrap().to_owned(),
|
||||||
|
port: matches.value_of("port").unwrap().to_owned(),
|
||||||
|
port_x: matches.value_of("port_x").unwrap_or("").to_owned(),
|
||||||
config
|
config
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
39
src/main.rs
39
src/main.rs
|
|
@ -54,7 +54,6 @@ lazy_static! {
|
||||||
async fn main() -> std::io::Result<()> {
|
async fn main() -> std::io::Result<()> {
|
||||||
std::env::set_var("RUST_LOG", "actix_web=info");
|
std::env::set_var("RUST_LOG", "actix_web=info");
|
||||||
env_logger::init();
|
env_logger::init();
|
||||||
let store = MemoryStore::new();
|
|
||||||
let config = config::Config::new();
|
let config = config::Config::new();
|
||||||
|
|
||||||
*SALT.write().unwrap() = config.config.salt;
|
*SALT.write().unwrap() = config.config.salt;
|
||||||
|
|
@ -63,11 +62,33 @@ async fn main() -> std::io::Result<()> {
|
||||||
let ssl_builder = generate_ssl_builder(config.config.ssl_key, config.config.ssl_cert);
|
let ssl_builder = generate_ssl_builder(config.config.ssl_key, config.config.ssl_cert);
|
||||||
let logger_pattern = config.config.logger_pattern;
|
let logger_pattern = config.config.logger_pattern;
|
||||||
let static_path = config.static_path;
|
let static_path = config.static_path;
|
||||||
|
|
||||||
|
let mut redirect = None;
|
||||||
|
let port_x = config.port_x.clone();
|
||||||
|
let port = config.port.clone();
|
||||||
|
if ssl_builder.is_some() {
|
||||||
|
redirect = Some(HttpServer::new(move || {
|
||||||
|
App::new()
|
||||||
|
.wrap(
|
||||||
|
RateLimiter::new(
|
||||||
|
MemoryStoreActor::from(MemoryStore::new().clone()).start())
|
||||||
|
.with_interval(std::time::Duration::from_secs(60))
|
||||||
|
.with_max_requests(100)
|
||||||
|
)
|
||||||
|
.wrap(actix_web_middleware_redirect_https::RedirectHTTPS::with_replacements(&[(port_x.clone(), port.clone())]))
|
||||||
|
.route("/", web::get().to(|| HttpResponse::Ok()
|
||||||
|
.content_type("text/plain")
|
||||||
|
.body("Always HTTPS on non-default ports!")))
|
||||||
|
})
|
||||||
|
.bind(format!("{}:{}", config.bind_address, config.port_x))?
|
||||||
|
.run());
|
||||||
|
}
|
||||||
|
|
||||||
let server = HttpServer::new(move || {
|
let server = HttpServer::new(move || {
|
||||||
App::new()
|
App::new()
|
||||||
.wrap(
|
.wrap(
|
||||||
RateLimiter::new(
|
RateLimiter::new(
|
||||||
MemoryStoreActor::from(store.clone()).start())
|
MemoryStoreActor::from(MemoryStore::new().clone()).start())
|
||||||
.with_interval(std::time::Duration::from_secs(60))
|
.with_interval(std::time::Duration::from_secs(60))
|
||||||
.with_max_requests(200)
|
.with_max_requests(200)
|
||||||
)
|
)
|
||||||
|
|
@ -79,10 +100,16 @@ async fn main() -> std::io::Result<()> {
|
||||||
});
|
});
|
||||||
|
|
||||||
match ssl_builder {
|
match ssl_builder {
|
||||||
Some(b) => server.bind_openssl(config.bind_address, b),
|
Some(b) => {
|
||||||
None => server.bind(config.bind_address)
|
let srv = server.bind_openssl(format!("{}:{}", config.bind_address, config.port), b)?.run();
|
||||||
}?.run()
|
tokio::try_join!(redirect.unwrap(), srv)?;
|
||||||
.await
|
},
|
||||||
|
None => {
|
||||||
|
server.bind(format!("{}:{}", config.bind_address, config.port))?.run().await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn ws_index(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {
|
async fn ws_index(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue