feat: read publication dir config and serve it
This commit is contained in:
parent
d2c52cc62c
commit
9411c2ba9f
6 changed files with 55 additions and 16 deletions
36
Cargo.lock
generated
36
Cargo.lock
generated
|
@ -46,6 +46,29 @@ dependencies = [
|
||||||
"smallvec",
|
"smallvec",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "actix-files"
|
||||||
|
version = "0.6.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d832782fac6ca7369a70c9ee9a20554623c5e51c76e190ad151780ebea1cf689"
|
||||||
|
dependencies = [
|
||||||
|
"actix-http",
|
||||||
|
"actix-service",
|
||||||
|
"actix-utils",
|
||||||
|
"actix-web",
|
||||||
|
"askama_escape",
|
||||||
|
"bitflags",
|
||||||
|
"bytes",
|
||||||
|
"derive_more",
|
||||||
|
"futures-core",
|
||||||
|
"http-range",
|
||||||
|
"log",
|
||||||
|
"mime",
|
||||||
|
"mime_guess",
|
||||||
|
"percent-encoding",
|
||||||
|
"pin-project-lite",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "actix-http"
|
name = "actix-http"
|
||||||
version = "3.3.1"
|
version = "3.3.1"
|
||||||
|
@ -405,6 +428,12 @@ version = "0.7.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
|
checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "askama_escape"
|
||||||
|
version = "0.10.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-trait"
|
name = "async-trait"
|
||||||
version = "0.1.66"
|
version = "0.1.66"
|
||||||
|
@ -1298,6 +1327,12 @@ dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http-range"
|
||||||
|
version = "0.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "httparse"
|
name = "httparse"
|
||||||
version = "1.8.0"
|
version = "1.8.0"
|
||||||
|
@ -2529,6 +2564,7 @@ version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"actix-auth-middleware",
|
"actix-auth-middleware",
|
||||||
"actix-cors",
|
"actix-cors",
|
||||||
|
"actix-files",
|
||||||
"actix-http",
|
"actix-http",
|
||||||
"actix-identity",
|
"actix-identity",
|
||||||
"actix-rt",
|
"actix-rt",
|
||||||
|
|
|
@ -28,6 +28,7 @@ actix-session = { version = "0.6.1", features = ["cookie-session"]}
|
||||||
actix-http = "3.0.4"
|
actix-http = "3.0.4"
|
||||||
actix-rt = "2"
|
actix-rt = "2"
|
||||||
actix-cors = "0.6.1"
|
actix-cors = "0.6.1"
|
||||||
|
actix-files = "0.6.0"
|
||||||
actix-service = "2.0.0"
|
actix-service = "2.0.0"
|
||||||
#actix = "0.12"
|
#actix = "0.12"
|
||||||
actix-web-codegen-const-routes = { version = "0.1.0", tag = "0.1.0", git = "https://github.com/realaravinth/actix-web-codegen-const-routes" }
|
actix-web-codegen-const-routes = { version = "0.1.0", tag = "0.1.0", git = "https://github.com/realaravinth/actix-web-codegen-const-routes" }
|
||||||
|
|
|
@ -34,8 +34,8 @@ password = "password"
|
||||||
name = "postgres"
|
name = "postgres"
|
||||||
pool = 4
|
pool = 4
|
||||||
|
|
||||||
[archive]
|
[publish]
|
||||||
base_path = "/tmp/mcaptcha-survey"
|
dir = "/tmp/mcaptcha-survey"
|
||||||
|
|
||||||
[footer]
|
[footer]
|
||||||
about = "https://mcapthca.org/about"
|
about = "https://mcapthca.org/about"
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
use actix_files::Files;
|
||||||
use actix_identity::{CookieIdentityPolicy, IdentityService};
|
use actix_identity::{CookieIdentityPolicy, IdentityService};
|
||||||
use actix_session::{storage::CookieSessionStore, SessionMiddleware};
|
use actix_session::{storage::CookieSessionStore, SessionMiddleware};
|
||||||
use actix_web::{
|
use actix_web::{
|
||||||
|
@ -106,6 +107,7 @@ async fn main() -> std::io::Result<()> {
|
||||||
actix_middleware::TrailingSlash::Trim,
|
actix_middleware::TrailingSlash::Trim,
|
||||||
))
|
))
|
||||||
.configure(services)
|
.configure(services)
|
||||||
|
.service(Files::new("/download", &settings.publish.dir).show_files_listing())
|
||||||
.app_data(data.clone())
|
.app_data(data.clone())
|
||||||
})
|
})
|
||||||
.bind(ip)
|
.bind(ip)
|
||||||
|
|
|
@ -85,21 +85,20 @@ pub struct Footer {
|
||||||
pub thanks: Url,
|
pub thanks: Url,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
pub struct Publish {
|
||||||
pub struct Archive {
|
pub dir: String,
|
||||||
pub base_path: String,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Archive {
|
impl Publish {
|
||||||
fn create_archive_base_path(&self) {
|
fn create_root_dir(&self) {
|
||||||
let base_path = Path::new(&self.base_path);
|
let root = Path::new(&self.dir);
|
||||||
if base_path.exists() {
|
if root.exists() {
|
||||||
if !base_path.is_dir() {
|
if !root.is_dir() {
|
||||||
fs::remove_file(&base_path).unwrap();
|
std::fs::remove_file(&root).unwrap();
|
||||||
fs::create_dir_all(&base_path).unwrap();
|
std::fs::create_dir_all(&root).unwrap();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
fs::create_dir_all(&base_path).unwrap();
|
std::fs::create_dir_all(&root).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,7 +113,7 @@ pub struct Settings {
|
||||||
pub support_email: String,
|
pub support_email: String,
|
||||||
pub default_campaign: String,
|
pub default_campaign: String,
|
||||||
pub footer: Footer,
|
pub footer: Footer,
|
||||||
pub archive: Archive,
|
pub publish: Publish,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(tarpaulin_include))]
|
#[cfg(not(tarpaulin_include))]
|
||||||
|
@ -166,7 +165,7 @@ impl Settings {
|
||||||
|
|
||||||
match s.try_into::<Settings>() {
|
match s.try_into::<Settings>() {
|
||||||
Ok(val) => {
|
Ok(val) => {
|
||||||
val.archive.create_archive_base_path();
|
val.publish.create_root_dir();
|
||||||
Ok(val)
|
Ok(val)
|
||||||
},
|
},
|
||||||
Err(e) => Err(ConfigError::Message(format!("\n\nError: {}. If it says missing fields, then please refer to https://github.com/mCaptcha/mcaptcha#configuration to learn more about how mcaptcha reads configuration\n\n", e))),
|
Err(e) => Err(ConfigError::Message(format!("\n\nError: {}. If it says missing fields, then please refer to https://github.com/mCaptcha/mcaptcha#configuration to learn more about how mcaptcha reads configuration\n\n", e))),
|
||||||
|
|
|
@ -44,7 +44,7 @@ use crate::V1_API_ROUTES;
|
||||||
pub async fn get_test_data() -> Arc<Data> {
|
pub async fn get_test_data() -> Arc<Data> {
|
||||||
let mut settings = Settings::new().unwrap();
|
let mut settings = Settings::new().unwrap();
|
||||||
let tmp_dir = Temp::new_dir().unwrap();
|
let tmp_dir = Temp::new_dir().unwrap();
|
||||||
settings.archive.base_path = tmp_dir.join("base_path").to_str().unwrap().into();
|
settings.publish.dir = tmp_dir.join("base_path").to_str().unwrap().into();
|
||||||
settings.allow_registration = true;
|
settings.allow_registration = true;
|
||||||
Data::new(settings).await
|
Data::new(settings).await
|
||||||
}
|
}
|
||||||
|
@ -126,6 +126,7 @@ macro_rules! get_app {
|
||||||
.wrap(actix_web::middleware::NormalizePath::new(
|
.wrap(actix_web::middleware::NormalizePath::new(
|
||||||
actix_web::middleware::TrailingSlash::Trim,
|
actix_web::middleware::TrailingSlash::Trim,
|
||||||
))
|
))
|
||||||
|
.service(Files::new("/download", &$settings.publish.dir).show_files_listing())
|
||||||
.configure($crate::services)
|
.configure($crate::services)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue