diff --git a/src/data/mod.rs b/src/data/mod.rs index e8bde2c..b5a0e8c 100644 --- a/src/data/mod.rs +++ b/src/data/mod.rs @@ -21,7 +21,6 @@ impl FromStr for Claims { fn from_str(s: &str) -> Result { let token = *(s.split("Bearer ").collect::>().last().unwrap_or(&"")); - println!("Parsing token: '{}'", token); match decode::( &token, diff --git a/src/files.rs b/src/files.rs index b217140..67a0493 100644 --- a/src/files.rs +++ b/src/files.rs @@ -9,7 +9,9 @@ pub fn list_files(dir: PathBuf) -> io::Result> { .filter(|entry| is_image_or_video(&entry.path()) || entry.file_type().unwrap().is_dir()) .map(|entry| entry.path()) .map(|path: PathBuf| { - let relative = path.strip_prefix(dotenv::var("BASE_PATH").unwrap()).unwrap(); + let relative = path + .strip_prefix(dotenv::var("BASE_PATH").unwrap()) + .unwrap(); relative.to_path_buf() }) .collect::>(); diff --git a/src/main.rs b/src/main.rs index 057269f..992dc18 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,11 +2,12 @@ extern crate diesel; use actix_files::NamedFile; -use actix_web::web::{HttpResponse, HttpRequest, Json}; -use actix_web::{get, post, App, HttpServer, Responder}; +use actix_web::web::{HttpRequest, HttpResponse, Json}; +use actix_web::{get, post, web, App, HttpServer, Responder}; use chrono::{Duration, Utc}; use data::{LoginRequest, ThumbnailRequest}; use jsonwebtoken::{encode, EncodingKey, Header}; +use serde::Serialize; use std::path::PathBuf; use crate::data::{Claims, CreateAccountRequest, Token}; @@ -34,6 +35,7 @@ async fn register(user: Json) -> impl Responder { #[post("/login")] async fn login(creds: Json) -> impl Responder { + println!("Logging in: {}", creds.username); if let Some(user) = get_user(&creds.username, &creds.password) { let claims = Claims { sub: user.id.to_string(), @@ -51,18 +53,36 @@ async fn login(creds: Json) -> impl Responder { } } -#[get("/photos")] +#[post("/photos")] async fn list_photos(_claims: Claims, req: Json) -> impl Responder { println!("{}", req.path); let path = &req.path; if let Some(path) = is_valid_path(path) { - let files = list_files(path); - HttpResponse::Ok().json(files.unwrap_or_default()) + let files = list_files(path).unwrap_or_default(); + + let photos = &files + .iter() + .filter(|f| !f.extension().unwrap_or_default().is_empty()) + .map(|f| f.to_str().unwrap().to_string()) + .collect::>(); + + let dirs = &files + .iter() + .filter(|f| f.extension().unwrap_or_default().is_empty()) + .map(|f| f.to_str().unwrap().to_string()) + .collect::>(); + + HttpResponse::Ok().json(PhotosResponse { photos, dirs }) } else { HttpResponse::BadRequest().finish() } +} +#[derive(Serialize)] +struct PhotosResponse<'a> { + photos: &'a [String], + dirs: &'a [String], } fn is_valid_path(path: &str) -> Option { @@ -83,7 +103,11 @@ fn is_valid_path(path: &str) -> Option { } #[get("/image")] -async fn image(_claims: Claims, request: HttpRequest, req: Json) -> impl Responder { +async fn image( + _claims: Claims, + request: HttpRequest, + req: web::Query, +) -> impl Responder { if let Some(path) = is_valid_path(&req.path) { if let Ok(file) = NamedFile::open(path) { file.into_response(&request).unwrap() @@ -91,7 +115,7 @@ async fn image(_claims: Claims, request: HttpRequest, req: Json