From 5610a5f0bf1a9df02bd3d5b55e2cdebef2440360 Mon Sep 17 00:00:00 2001 From: Vika Date: Tue, 24 May 2022 17:18:30 +0300 Subject: flake.nix: reorganize - Kittybox's source code is moved to a subfolder - This improves build caching by Nix since it doesn't take changes to other files into account - Package and test definitions were spun into separate files - This makes my flake.nix much easier to navigate - This also makes it somewhat possible to use without flakes (but it is still not easy, so use flakes!) - Some attributes were moved in compliance with Nix 2.8's changes to flake schema --- kittybox-rs/src/media/mod.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 kittybox-rs/src/media/mod.rs (limited to 'kittybox-rs/src/media') diff --git a/kittybox-rs/src/media/mod.rs b/kittybox-rs/src/media/mod.rs new file mode 100644 index 0000000..0d46e0c --- /dev/null +++ b/kittybox-rs/src/media/mod.rs @@ -0,0 +1,46 @@ +use futures_util::StreamExt; +use bytes::buf::Buf; +use warp::{Filter, Rejection, Reply, multipart::{FormData, Part}}; + +pub fn query() -> impl Filter + Clone { + warp::get() + .and(crate::util::require_host()) + .map(|host| "media endpoint query...") +} + +pub fn options() -> impl Filter + Clone { + warp::options() + .map(|| warp::reply::json::>(&None)) + .with(warp::reply::with::header("Allow", "GET, POST")) +} + +pub fn upload() -> impl Filter + Clone { + warp::post() + .and(crate::util::require_host()) + .and(warp::multipart::form().max_length(1024*1024*150/*mb*/)) + .and_then(|host, mut form: FormData| async move { + // TODO get rid of the double unwrap() here + let file: Part = form.next().await.unwrap().unwrap(); + log::debug!("Uploaded: {:?}, type: {:?}", file.filename(), file.content_type()); + + let mut data = file.stream(); + while let Some(buf) = data.next().await { + // TODO save it into a file + log::debug!("buffer length: {:?}", buf.map(|b| b.remaining())); + } + Ok::<_, warp::Rejection>(warp::reply::with_header( + warp::reply::with_status( + "", + warp::http::StatusCode::CREATED + ), + "Location", + "./awoo.png" + )) + }) +} + +pub fn media() -> impl Filter + Clone { + upload() + .or(query()) + .or(options()) +} -- cgit 1.4.1