summaryrefslogtreecommitdiff
path: root/dichroism
diff options
context:
space:
mode:
Diffstat (limited to 'dichroism')
-rw-r--r--dichroism/Cargo.lock26
-rw-r--r--dichroism/Cargo.toml9
-rw-r--r--dichroism/src/handlers.rs14
-rw-r--r--dichroism/src/main.rs17
4 files changed, 44 insertions, 22 deletions
diff --git a/dichroism/Cargo.lock b/dichroism/Cargo.lock
index 06bae04..1fe4b81 100644
--- a/dichroism/Cargo.lock
+++ b/dichroism/Cargo.lock
@@ -36,6 +36,20 @@ dependencies = [
]
[[package]]
+name = "actix-cors"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaf0c4345c9663a2822d42602391418fd5766f269109ec6bf1784b056a9356a7"
+dependencies = [
+ "actix-web",
+ "derive_more",
+ "futures-util",
+ "log",
+ "once_cell",
+ "tinyvec 1.0.1",
+]
+
+[[package]]
name = "actix-http"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -738,6 +752,7 @@ dependencies = [
name = "dichroism"
version = "0.1.0"
dependencies = [
+ "actix-cors",
"actix-multipart",
"actix-web",
"async-std",
@@ -830,9 +845,9 @@ dependencies = [
[[package]]
name = "env_logger"
-version = "0.7.1"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
+checksum = "54532e3223c5af90a6a757c90b5c5521564b07e5e7a958681bcd2afad421cdcd"
dependencies = [
"atty",
"humantime",
@@ -1132,12 +1147,9 @@ checksum = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9"
[[package]]
name = "humantime"
-version = "1.3.0"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
-dependencies = [
- "quick-error",
-]
+checksum = "3c1ad908cc71012b7bea4d0c53ba96a8cba9962f048fa68d143376143d863b7a"
[[package]]
name = "idna"
diff --git a/dichroism/Cargo.toml b/dichroism/Cargo.toml
index 7dd6036..22b8a42 100644
--- a/dichroism/Cargo.toml
+++ b/dichroism/Cargo.toml
@@ -5,17 +5,18 @@ authors = ["Adam T. Carpenter <atc@53hor.net>"]
edition = "2018"
[dependencies]
-actix-web = "3"
+actix-cors = "0.5"
actix-multipart = "0.3"
-mime = "0.3"
-futures = "0.3"
+actix-web = "3"
async-std = "1"
base64 = "0.13"
diesel = { version = "1", features = [ "sqlite", "r2d2" ] }
-env_logger = "0.7"
+env_logger = "0.8"
+futures = "0.3"
image = "0.23"
listenfd = "0.3"
log = "0.4"
+mime = "0.3"
once_cell = "1"
regex = "1"
serde = { version = "1.0", features = ["derive"] }
diff --git a/dichroism/src/handlers.rs b/dichroism/src/handlers.rs
index 43c11d2..ccaf347 100644
--- a/dichroism/src/handlers.rs
+++ b/dichroism/src/handlers.rs
@@ -106,17 +106,15 @@ async fn post_photo(
) -> Result<HttpResponse, Error> {
let mut responses: Vec<PhotoSetGet> = Vec::new();
- if let Ok(Some(mut field)) = payload.try_next().await {
- // bail if a non-JPEG file was going to be uploaded
- if field.content_type() != &mime::IMAGE_JPEG {
- return Ok(HttpResponse::BadRequest().body("File must be a JPEG image."));
- }
-
+ while let Some(mut field) = payload
+ .try_next()
+ .await
+ .map_err(|e| HttpResponse::BadRequest().body(e.to_string()))?
+ {
// grab all bytes
let mut data: Vec<u8> = Vec::new();
while let Some(chunk) = field.next().await {
- let chunk = chunk?;
- data.extend(chunk);
+ data.extend(chunk?);
}
// create new photo_set
diff --git a/dichroism/src/main.rs b/dichroism/src/main.rs
index 68b7091..6c76f0a 100644
--- a/dichroism/src/main.rs
+++ b/dichroism/src/main.rs
@@ -3,7 +3,8 @@ extern crate serde;
#[macro_use]
extern crate diesel;
-use actix_web::{App, HttpServer};
+use actix_cors::Cors;
+use actix_web::{middleware::Logger, App, HttpServer};
use config::CONFIG_INSTANCE as CONFIG;
use diesel::prelude::SqliteConnection;
use diesel::r2d2::ConnectionManager;
@@ -25,18 +26,28 @@ mod types;
#[actix_web::main]
async fn main() -> Result<()> {
- // Initialize DB connection pool.
+ // Init logging
+ std::env::set_var("RUST_LOG", "actix_web=info");
+ env_logger::init();
+
+ // Init DB connection pool
let manager = ConnectionManager::<SqliteConnection>::new(&CONFIG.db_url);
let pool = Pool::builder().build(manager)?;
- // Initialize application server.
+ // Init application server
let mut server = HttpServer::new(move || {
+ // Init CORS policy
+ let cors = Cors::permissive();
+
App::new()
.data(pool.clone())
+ .wrap(cors)
+ .wrap(Logger::default())
.service(handlers::hello)
.service(handlers::get_products)
.service(handlers::patch_product)
.service(handlers::post_product)
+ .service(handlers::post_photo)
});
// If using listenfd, bind to it instead of the configured address to allow for cargo watch