get it to run with docker
This commit is contained in:
parent
5cdfd6135c
commit
6b99a872ec
|
@ -0,0 +1 @@
|
||||||
|
docker-compose.yml
|
|
@ -0,0 +1,3 @@
|
||||||
|
:80 {
|
||||||
|
reverse_proxy http://filed
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
version: '3.7'
|
||||||
|
services:
|
||||||
|
filed:
|
||||||
|
build:
|
||||||
|
context: filed
|
||||||
|
dockerfile: Dockerfile.dev
|
||||||
|
networks:
|
||||||
|
bfile:
|
||||||
|
volumes:
|
||||||
|
- './filed:/opt/code'
|
||||||
|
caddy:
|
||||||
|
image: caddy:alpine
|
||||||
|
volumes:
|
||||||
|
- './conf/caddy:/etc/caddy:ro'
|
||||||
|
ports:
|
||||||
|
- 80:80
|
||||||
|
networks:
|
||||||
|
bfile:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
bfile:
|
|
@ -1,2 +1,2 @@
|
||||||
APP_LOGGING=true
|
APP_LOGGING=true
|
||||||
APP_HOST=0.0.0.0:8080
|
APP_HOST=0.0.0.0:80
|
||||||
|
|
|
@ -210,8 +210,10 @@ name = "filed"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"askama",
|
"askama",
|
||||||
|
"bytes",
|
||||||
"dotenvy",
|
"dotenvy",
|
||||||
"femme",
|
"femme",
|
||||||
|
"futures-util",
|
||||||
"log",
|
"log",
|
||||||
"tokio",
|
"tokio",
|
||||||
"warp",
|
"warp",
|
||||||
|
@ -248,6 +250,17 @@ version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
|
checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-macro"
|
||||||
|
version = "0.3.28"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-sink"
|
name = "futures-sink"
|
||||||
version = "0.3.28"
|
version = "0.3.28"
|
||||||
|
@ -267,6 +280,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
|
checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
"futures-macro",
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
|
|
|
@ -7,8 +7,10 @@ edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
askama = "0.12.0"
|
askama = "0.12.0"
|
||||||
|
bytes = "1.5.0"
|
||||||
dotenvy = "0.15.7"
|
dotenvy = "0.15.7"
|
||||||
femme = "2.2.1"
|
femme = "2.2.1"
|
||||||
|
futures-util = "0.3.28"
|
||||||
log = "0.4.20"
|
log = "0.4.20"
|
||||||
tokio = { version = "1.32.0", features = ["rt", "macros", "rt-multi-thread"] }
|
tokio = { version = "1.32.0", features = ["rt", "macros", "rt-multi-thread"] }
|
||||||
warp = "0.3.6"
|
warp = "0.3.6"
|
||||||
|
|
|
@ -4,11 +4,14 @@ FROM rust as builder
|
||||||
WORKDIR /opt/code
|
WORKDIR /opt/code
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
# No build or install is done during this step
|
# No build is done during this step
|
||||||
# since the directory will be mounted anyways
|
# since the directory will be mounted anyways
|
||||||
# to the dev's machine.
|
# to the dev's machine.
|
||||||
|
|
||||||
# Therefore installing & compiling in the dockerfile
|
# Therefore installing & compiling in the dockerfile
|
||||||
# would be moronic, to say at least
|
# would be moronic, to say at least
|
||||||
|
|
||||||
CMD [ "dev-entry.sh" ]
|
# However, cargo watch needs to be installed
|
||||||
|
RUN cargo install cargo-watch
|
||||||
|
|
||||||
|
CMD [ "/opt/code/dev-entry.sh" ]
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
cd /opt/code
|
||||||
|
|
||||||
cargo check
|
cargo check
|
||||||
cargo build
|
cargo build
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
forms.rs - All the forms
|
||||||
|
*/
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
use warp::{Filter, reply::{Html, Reply}, reject::Rejection, filters::multipart::FormData};
|
||||||
|
use futures_util::TryStreamExt;
|
||||||
|
use bytes::BufMut;
|
||||||
|
|
||||||
|
pub async fn upload(form: FormData) -> Result<Box<dyn Reply>, Rejection> {
|
||||||
|
|
||||||
|
let params: HashMap<String, String> = form.and_then(|mut field| async move {
|
||||||
|
let mut bytes: Vec<u8> = vec![];
|
||||||
|
while let Some(byte) = field.data().await {
|
||||||
|
bytes.put(byte.unwrap())
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok((field.name().into(), String::from_utf8_lossy(&bytes).to_string()))
|
||||||
|
}).try_collect().await.unwrap();
|
||||||
|
|
||||||
|
Ok(Box::new(warp::reply::json(¶ms)))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_routes() -> impl Filter<Extract = impl Reply, Error = Rejection> + Clone {
|
||||||
|
warp::post().and(
|
||||||
|
warp::multipart::form().and_then(upload)
|
||||||
|
)
|
||||||
|
}
|
|
@ -9,11 +9,15 @@ use warp::{Filter, reply::Reply, reject::Rejection};
|
||||||
use crate::env::Env;
|
use crate::env::Env;
|
||||||
|
|
||||||
mod pages;
|
mod pages;
|
||||||
|
mod forms;
|
||||||
|
|
||||||
pub fn routes() -> impl Filter<Extract = impl Reply, Error = Rejection> + Clone {
|
pub fn routes() -> impl Filter<Extract = impl Reply, Error = Rejection> + Clone {
|
||||||
let staticpath = current_dir().unwrap();
|
let staticpath = current_dir().unwrap();
|
||||||
let staticpath = staticpath.to_str().unwrap().to_string() + "/static";
|
let staticpath = staticpath.to_str().unwrap().to_string() + "/static";
|
||||||
pages::get_routes().or(warp::fs::dir(staticpath.to_string()))
|
|
||||||
|
pages::get_routes()
|
||||||
|
.or(forms::get_routes())
|
||||||
|
.or(warp::fs::dir(staticpath.to_string()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -7,9 +7,7 @@ use askama::Template;
|
||||||
|
|
||||||
#[derive(Template)]
|
#[derive(Template)]
|
||||||
#[template( path = "index.html" )]
|
#[template( path = "index.html" )]
|
||||||
struct Index {
|
struct Index {}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn index() -> Html<String> {
|
pub fn index() -> Html<String> {
|
||||||
let rendered = Index {};
|
let rendered = Index {};
|
||||||
|
|
|
@ -31,4 +31,10 @@
|
||||||
padding: 2px 4px;
|
padding: 2px 4px;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
input[type=text],
|
||||||
|
input[type=password],
|
||||||
|
input[type=email] {
|
||||||
|
padding: 4px 6px;
|
||||||
|
border-radius: 6px;
|
||||||
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
<label class="fancycheckbox">
|
<label>
|
||||||
<input type="checkbox" name="named">
|
<input type="checkbox" name="named">
|
||||||
</label>
|
</label>
|
||||||
<label for="bfile-formupload-file-name">
|
<label for="bfile-formupload-file-name">
|
||||||
|
@ -42,6 +42,15 @@
|
||||||
<input style="max-width:100px" id='bfile-formupload-file-name' type="text" name="filename" placeholder="file.txt"></input>
|
<input style="max-width:100px" id='bfile-formupload-file-name' type="text" name="filename" placeholder="file.txt"></input>
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" name="passworded">
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
I want to add a password to the file:
|
||||||
|
<input type="password" name="password" style="max-width:90px">
|
||||||
|
</label>
|
||||||
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<input type="file" name="file" id="bfile-formupload-file" style="display: none" />
|
<input type="file" name="file" id="bfile-formupload-file" style="display: none" />
|
||||||
<label for="bfile-formupload-file">
|
<label for="bfile-formupload-file">
|
||||||
|
|
Loading…
Reference in New Issue