From fb64df140bbd41d039eeb679aef252d9d1c673ee Mon Sep 17 00:00:00 2001 From: Bit38 <119065583+Bit38@users.noreply.github.com> Date: Sat, 27 Jun 2026 00:15:42 +0200 Subject: [PATCH 01/11] feat(server): add item_type to ListItem and include all types of pastes in /list response --- src/paste.rs | 4 +- src/server.rs | 120 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 76 insertions(+), 48 deletions(-) diff --git a/src/paste.rs b/src/paste.rs index ca7be56d..8fa30126 100644 --- a/src/paste.rs +++ b/src/paste.rs @@ -4,6 +4,7 @@ use crate::header::ContentDisposition; use crate::util; use actix_web::{error, web, Error}; use awc::Client; +use serde::{Deserialize, Serialize}; use std::fs::{self, File}; use std::io::{Error as IoError, Result as IoResult, Write}; use std::path::{Path, PathBuf}; @@ -16,7 +17,8 @@ use std::{ use url::Url; /// Type of the data to store. -#[derive(Clone, Copy, Debug, PartialEq, Eq)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] pub enum PasteType { /// Any type of file. File, diff --git a/src/server.rs b/src/server.rs index 6a88d630..4e18fd43 100644 --- a/src/server.rs +++ b/src/server.rs @@ -387,6 +387,8 @@ pub struct ListItem { pub file_name: PathBuf, /// Size of the file in bytes. pub file_size: u64, + /// Item type + pub item_type: PasteType, /// ISO8601 formatted date-time of the moment the file was created (uploaded). pub creation_date_utc: Option, /// ISO8601 formatted date-time string of the expiration timestamp if one exists for this file. @@ -405,59 +407,83 @@ async fn list(config: web::Data>) -> Result warn!("server is not configured to expose list endpoint"); Err(error::ErrorNotFound(""))?; } - let entries: Vec = fs::read_dir(config.server.upload_path)? - .filter_map(|entry| { - entry.ok().and_then(|e| { - let metadata = match e.metadata() { - Ok(metadata) => { - if metadata.is_dir() { + + let get_item_list = |item_type: PasteType| -> Result, Error> { + let dir = item_type.get_path(&config.server.upload_path)?; + Ok(fs::read_dir(dir.as_path())? + .filter_map(|entry| { + entry.ok().and_then(|e| { + let metadata = match e.metadata() { + Ok(metadata) => { + if metadata.is_dir() { + return None; + } + metadata + } + Err(e) => { + error!("failed to read metadata: {e}"); return None; } - metadata - } - Err(e) => { - error!("failed to read metadata: {e}"); - return None; - } - }; - let mut file_name = PathBuf::from(e.file_name()); - - let creation_date_utc = metadata.created().ok().map(|v| { - let millis = v - .duration_since(UNIX_EPOCH) - .expect("Time since UNIX epoch should be valid.") - .as_millis(); - uts2ts::uts2ts( - i64::try_from(millis).expect("UNIX time should be smaller than i64::MAX") - / 1000, - ) - .as_string() - }); - - let expires_at_utc = if let Some(expiration) = file_name - .extension() - .and_then(|ext| ext.to_str()) - .and_then(|v| v.parse::().ok()) - { - file_name.set_extension(""); - if util::get_system_time().ok()? - > Duration::from_millis(expiration.try_into().ok()?) + }; + let mut file_name = PathBuf::from(e.file_name()); + + let creation_date_utc = metadata.created().ok().map(|v| { + let millis = v + .duration_since(UNIX_EPOCH) + .expect("Time since UNIX epoch should be valid.") + .as_millis(); + uts2ts::uts2ts( + i64::try_from(millis) + .expect("UNIX time should be smaller than i64::MAX") + / 1000, + ) + .as_string() + }); + + let expires_at_utc = if let Some(expiration) = file_name + .extension() + .and_then(|ext| ext.to_str()) + .and_then(|v| v.parse::().ok()) { - return None; - } - Some(uts2ts::uts2ts(expiration / 1000).as_string()) - } else { - None - }; - Some(ListItem { - file_name, - file_size: metadata.len(), - creation_date_utc, - expires_at_utc, + file_name.set_extension(""); + if util::get_system_time().ok()? + > Duration::from_millis(expiration.try_into().ok()?) + { + return None; + } + Some(uts2ts::uts2ts(expiration / 1000).as_string()) + } else { + None + }; + Some(ListItem { + file_name, + + // TODO: For urls this will return url length. Not sure if desired behaviour + file_size: metadata.len(), + item_type: item_type, + creation_date_utc, + expires_at_utc, + }) }) }) - }) + .collect()) + }; + + const PASTE_VARIANTS: [PasteType; 4] = [ + PasteType::File, + PasteType::Oneshot, + PasteType::Url, + PasteType::OneshotUrl, + ]; + + let entries: Vec = PASTE_VARIANTS + .iter() + .map(|variant| get_item_list(*variant)) + .collect::>, Error>>()? + .into_iter() + .flatten() .collect(); + Ok(HttpResponse::Ok().json(entries)) } From 77efe97cdb5d11d02b995268656116593627e6cc Mon Sep 17 00:00:00 2001 From: Bit38 <119065583+Bit38@users.noreply.github.com> Date: Thu, 9 Jul 2026 14:29:23 +0200 Subject: [PATCH 02/11] test(server): add test for item_type in `/list` endpoint --- src/server.rs | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/src/server.rs b/src/server.rs index 4e18fd43..61e01ebd 100644 --- a/src/server.rs +++ b/src/server.rs @@ -410,6 +410,11 @@ async fn list(config: web::Data>) -> Result let get_item_list = |item_type: PasteType| -> Result, Error> { let dir = item_type.get_path(&config.server.upload_path)?; + + //FIX: When running tests other folders than "root" does not exists + if !fs::exists(&dir).unwrap_or(false) { + return Ok(Vec::default()); + } Ok(fs::read_dir(dir.as_path())? .filter_map(|entry| { entry.ok().and_then(|e| { @@ -815,6 +820,93 @@ mod tests { Ok(()) } + #[actix_web::test] + async fn test_list_item_type() -> Result<(), Error> { + let mut config = Config::default(); + config.server.expose_list = Some(true); + + let test_upload_dir = "test_upload"; + config.server.upload_path = PathBuf::from(test_upload_dir); + + const PASTE_VARIANTS: [PasteType; 4] = [ + PasteType::File, + PasteType::Oneshot, + PasteType::Url, + PasteType::OneshotUrl, + ]; + for variant in PASTE_VARIANTS { + fs::create_dir_all(variant.get_path(&config.server.upload_path).unwrap())?; + } + + let app = test::init_service( + App::new() + .app_data(Data::new(RwLock::new(config))) + .app_data(Data::new(Client::default())) + .configure(configure_routes), + ) + .await; + + let filename = "test_file.txt"; + let timestamp = util::get_system_time()?.as_secs().to_string(); + test::call_service( + &app, + get_multipart_request(×tamp, "file", filename).to_request(), + ) + .await; + let filename_oneshot = "oneshot.txt"; + test::call_service( + &app, + get_multipart_request(×tamp, "oneshot", filename_oneshot).to_request(), + ) + .await; + test::call_service( + &app, + get_multipart_request(env!("CARGO_PKG_HOMEPAGE"), "url", "").to_request(), + ) + .await; + let filename_oneshot_url = "oneshot_url"; + test::call_service( + &app, + get_multipart_request( + env!("CARGO_PKG_HOMEPAGE"), + filename_oneshot_url, + filename_oneshot_url, + ) + .to_request(), + ) + .await; + + let request = TestRequest::default() + .insert_header(("content-type", "text/plain")) + .uri("/list") + .to_request(); + let result: Vec = test::call_and_read_body_json(&app, request).await; + + assert_eq!(result.len(), 4); + + // Items returned from `/list` endpoint should be returned in this order: + // 1. PasteType::File + // 2. PasteType::Oneshot + // 3. PasteType::Url + // 4. PasteType::OneshotUrl + + assert_eq!(result[0].file_name, PathBuf::from(filename)); + assert_eq!(result[0].item_type, PasteType::File); + + assert_eq!(result[1].file_name, PathBuf::from(filename_oneshot)); + assert_eq!(result[1].item_type, PasteType::Oneshot); + + assert_eq!(result[2].file_name, PathBuf::from("url")); + assert_eq!(result[2].item_type, PasteType::Url); + + assert_eq!(result[3].file_name, PathBuf::from(filename_oneshot_url)); + assert_eq!(result[3].item_type, PasteType::OneshotUrl); + + fs::remove_dir_all(test_upload_dir)?; + + Ok(()) + } + #[actix_web::test] async fn test_list_expired() -> Result<(), Error> { let mut config = Config::default(); From 2c02cf8c7a0732f3b4000dad9270fe3356c4c422 Mon Sep 17 00:00:00 2001 From: Bit38 <119065583+Bit38@users.noreply.github.com> Date: Thu, 9 Jul 2026 17:27:52 +0200 Subject: [PATCH 03/11] refactor: extract PASTE_VARIANTS_LIST constant --- src/paste.rs | 10 ++++++++++ src/server.rs | 27 +++++++-------------------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/paste.rs b/src/paste.rs index 8fa30126..71672c2e 100644 --- a/src/paste.rs +++ b/src/paste.rs @@ -32,6 +32,16 @@ pub enum PasteType { OneshotUrl, } +/// Slice of all paste variants that may be returned by `/list` endpoint +/// NOTE: PasteType::RemoteFile is missing, because it cannot be distinguished +/// between itself and PasteType::File without storing additional information +pub const PASTE_VARIANTS_LIST: [PasteType; 4] = [ + PasteType::File, + PasteType::Oneshot, + PasteType::Url, + PasteType::OneshotUrl, +]; + impl<'a> TryFrom<&'a ContentDisposition> for PasteType { type Error = (); fn try_from(content_disposition: &'a ContentDisposition) -> Result { diff --git a/src/server.rs b/src/server.rs index 61e01ebd..b9ea72c0 100644 --- a/src/server.rs +++ b/src/server.rs @@ -3,7 +3,7 @@ use crate::config::{Config, LandingPageConfig, TokenType}; use crate::file::Directory; use crate::header::{self, ContentDisposition}; use crate::mime as mime_util; -use crate::paste::{Paste, PasteType}; +use crate::paste::{Paste, PasteType, PASTE_VARIANTS_LIST}; use crate::util::{self, safe_path_join}; use actix_files::NamedFile; use actix_multipart::Multipart; @@ -411,7 +411,7 @@ async fn list(config: web::Data>) -> Result let get_item_list = |item_type: PasteType| -> Result, Error> { let dir = item_type.get_path(&config.server.upload_path)?; - //FIX: When running tests other folders than "root" does not exists + //FIX: When running some tests (e.g. test_list) other folders than "root" does not exists if !fs::exists(&dir).unwrap_or(false) { return Ok(Vec::default()); } @@ -462,10 +462,9 @@ async fn list(config: web::Data>) -> Result }; Some(ListItem { file_name, - - // TODO: For urls this will return url length. Not sure if desired behaviour + // NOTE: For urls this will return url length. Not sure if desired behaviour file_size: metadata.len(), - item_type: item_type, + item_type, creation_date_utc, expires_at_utc, }) @@ -474,14 +473,7 @@ async fn list(config: web::Data>) -> Result .collect()) }; - const PASTE_VARIANTS: [PasteType; 4] = [ - PasteType::File, - PasteType::Oneshot, - PasteType::Url, - PasteType::OneshotUrl, - ]; - - let entries: Vec = PASTE_VARIANTS + let entries: Vec = PASTE_VARIANTS_LIST .iter() .map(|variant| get_item_list(*variant)) .collect::>, Error>>()? @@ -828,13 +820,7 @@ mod tests { let test_upload_dir = "test_upload"; config.server.upload_path = PathBuf::from(test_upload_dir); - const PASTE_VARIANTS: [PasteType; 4] = [ - PasteType::File, - PasteType::Oneshot, - PasteType::Url, - PasteType::OneshotUrl, - ]; - for variant in PASTE_VARIANTS { + for variant in PASTE_VARIANTS_LIST { fs::create_dir_all(variant.get_path(&config.server.upload_path).unwrap())?; } @@ -889,6 +875,7 @@ mod tests { // 2. PasteType::Oneshot // 3. PasteType::Url // 4. PasteType::OneshotUrl + // NOTE: The test won't pass if order in `PASTE_VARIANTS_LIST` changes assert_eq!(result[0].file_name, PathBuf::from(filename)); assert_eq!(result[0].item_type, PasteType::File); From 345d288d826d7273588c05592061bc72e53b1917 Mon Sep 17 00:00:00 2001 From: Bit38 <119065583+Bit38@users.noreply.github.com> Date: Thu, 9 Jul 2026 17:53:38 +0200 Subject: [PATCH 04/11] refactor: formatted with rustfmt --- src/paste.rs | 10 +++++++--- src/server.rs | 10 +++++----- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/paste.rs b/src/paste.rs index 71672c2e..f1a629b3 100644 --- a/src/paste.rs +++ b/src/paste.rs @@ -2,7 +2,7 @@ use crate::config::Config; use crate::file::Directory; use crate::header::ContentDisposition; use crate::util; -use actix_web::{error, web, Error}; +use actix_web::{Error, error, web}; use awc::Client; use serde::{Deserialize, Serialize}; use std::fs::{self, File}; @@ -544,7 +544,9 @@ mod tests { fs::remove_file(file_path)?; config.server.max_content_length = Byte::from_str("30k").expect("cannot parse byte"); - let url = String::from("https://raw.githubusercontent.com/orhun/rustypaste/refs/heads/master/img/rp_test_3b5eeeee7a7326cd6141f54820e6356a0e9d1dd4021407cb1d5e9de9f034ed2f.png"); + let url = String::from( + "https://raw.githubusercontent.com/orhun/rustypaste/refs/heads/master/img/rp_test_3b5eeeee7a7326cd6141f54820e6356a0e9d1dd4021407cb1d5e9de9f034ed2f.png", + ); let mut paste = Paste { data: url.as_bytes().to_vec(), type_: PasteType::RemoteFile, @@ -568,7 +570,9 @@ mod tests { fs::remove_file(file_path)?; config.server.max_content_length = Byte::from_str("30k").expect("cannot parse byte"); - let url = String::from("https://raw.githubusercontent.com/orhun/rustypaste/refs/heads/master/img/rp_test_3b5eeeee7a7326cd6141f54820e6356a0e9d1dd4021407cb1d5e9de9f034ed2f.png"); + let url = String::from( + "https://raw.githubusercontent.com/orhun/rustypaste/refs/heads/master/img/rp_test_3b5eeeee7a7326cd6141f54820e6356a0e9d1dd4021407cb1d5e9de9f034ed2f.png", + ); let mut paste = Paste { data: url.as_bytes().to_vec(), type_: PasteType::RemoteFile, diff --git a/src/server.rs b/src/server.rs index b9ea72c0..8633b258 100644 --- a/src/server.rs +++ b/src/server.rs @@ -3,17 +3,17 @@ use crate::config::{Config, LandingPageConfig, TokenType}; use crate::file::Directory; use crate::header::{self, ContentDisposition}; use crate::mime as mime_util; -use crate::paste::{Paste, PasteType, PASTE_VARIANTS_LIST}; +use crate::paste::{PASTE_VARIANTS_LIST, Paste, PasteType}; use crate::util::{self, safe_path_join}; use actix_files::NamedFile; use actix_multipart::Multipart; use actix_web::http::StatusCode; use actix_web::middleware::ErrorHandlers; -use actix_web::{delete, error, get, post, route, web, Error, HttpRequest, HttpResponse}; +use actix_web::{Error, HttpRequest, HttpResponse, delete, error, get, post, route, web}; use actix_web_grants::GrantsMiddleware; +use awc::Client; use awc::error::HeaderValue; use awc::http::header::{CONTENT_SECURITY_POLICY, X_CONTENT_TYPE_OPTIONS}; -use awc::Client; use byte_unit::{Byte, UnitType}; use futures_util::stream::StreamExt; use mime::TEXT_PLAIN_UTF_8; @@ -508,14 +508,14 @@ mod tests { use crate::config::LandingPageConfig; use crate::middleware::ContentLengthLimiter; use crate::random::{RandomURLConfig, RandomURLType}; + use actix_web::App; use actix_web::body::MessageBody; use actix_web::body::{BodySize, BoxBody}; use actix_web::error::Error; use actix_web::http::header::AUTHORIZATION; - use actix_web::http::{header, StatusCode}; + use actix_web::http::{StatusCode, header}; use actix_web::test::{self, TestRequest}; use actix_web::web::Data; - use actix_web::App; use awc::ClientBuilder; use glob::glob; use std::fs::File; From 684f4ea14c404bdcbf1ef4cb1981956c3cdc3cd6 Mon Sep 17 00:00:00 2001 From: Bit38 <119065583+Bit38@users.noreply.github.com> Date: Thu, 9 Jul 2026 18:29:14 +0200 Subject: [PATCH 05/11] fix(server): `PasteType` is now serialized with snake_case for better readability --- src/paste.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paste.rs b/src/paste.rs index f1a629b3..106c508a 100644 --- a/src/paste.rs +++ b/src/paste.rs @@ -18,7 +18,7 @@ use url::Url; /// Type of the data to store. #[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)] -#[serde(rename_all = "lowercase")] +#[serde(rename_all = "snake_case")] pub enum PasteType { /// Any type of file. File, From 0f311148ddd4461a3442ec3eb01ebbf62f8a6602 Mon Sep 17 00:00:00 2001 From: "Helmut K. C. Tessarek" Date: Sun, 12 Jul 2026 17:58:25 +0200 Subject: [PATCH 06/11] style: cargo fmt --- src/paste.rs | 2 +- src/server.rs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/paste.rs b/src/paste.rs index d64a5fb4..ef2e38e8 100644 --- a/src/paste.rs +++ b/src/paste.rs @@ -2,7 +2,7 @@ use crate::config::Config; use crate::file::Directory; use crate::header::ContentDisposition; use crate::util; -use actix_web::{Error, error, web}; +use actix_web::{error, web, Error}; use awc::Client; use serde::{Deserialize, Serialize}; use std::fs::{self, File}; diff --git a/src/server.rs b/src/server.rs index befa40c1..5cc8f58d 100644 --- a/src/server.rs +++ b/src/server.rs @@ -3,18 +3,18 @@ use crate::config::{Config, LandingPageConfig, TokenType}; use crate::file::Directory; use crate::header::{self, ContentDisposition}; use crate::mime as mime_util; -use crate::paste::{PASTE_VARIANTS_LIST, Paste, PasteType}; +use crate::paste::{Paste, PasteType, PASTE_VARIANTS_LIST}; use crate::util::{self, safe_path_join}; use actix_files::NamedFile; use actix_multipart::Multipart; use actix_web::http::StatusCode; use actix_web::middleware::ErrorHandlers; -use actix_web::{Error, HttpRequest, HttpResponse, delete, error, get, post, route, web}; +use actix_web::{delete, error, get, post, route, web, Error, HttpRequest, HttpResponse}; use actix_web_grants::GrantsMiddleware; -use awc::Client; use awc::error::HeaderValue; use awc::http::header::{CONTENT_SECURITY_POLICY, X_CONTENT_TYPE_OPTIONS}; use awc::Client; +use awc::Client; use base64::Engine; use byte_unit::{Byte, UnitType}; use futures_util::stream::StreamExt; @@ -573,14 +573,14 @@ mod tests { use crate::config::LandingPageConfig; use crate::middleware::ContentLengthLimiter; use crate::random::{RandomURLConfig, RandomURLType}; - use actix_web::App; use actix_web::body::MessageBody; use actix_web::body::{BodySize, BoxBody}; use actix_web::error::Error; use actix_web::http::header::AUTHORIZATION; - use actix_web::http::{StatusCode, header}; + use actix_web::http::{header, StatusCode}; use actix_web::test::{self, TestRequest}; use actix_web::web::Data; + use actix_web::App; use awc::ClientBuilder; use glob::glob; use std::fs::File; From e1adf4ba3151befa0dfaa23866ed94c5a73a1bf5 Mon Sep 17 00:00:00 2001 From: "Helmut K. C. Tessarek" Date: Sun, 12 Jul 2026 17:59:40 +0200 Subject: [PATCH 07/11] fix: previous merge conflict --- src/server.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server.rs b/src/server.rs index 5cc8f58d..e1f74b56 100644 --- a/src/server.rs +++ b/src/server.rs @@ -14,7 +14,6 @@ use actix_web_grants::GrantsMiddleware; use awc::error::HeaderValue; use awc::http::header::{CONTENT_SECURITY_POLICY, X_CONTENT_TYPE_OPTIONS}; use awc::Client; -use awc::Client; use base64::Engine; use byte_unit::{Byte, UnitType}; use futures_util::stream::StreamExt; From dc2dda2db489959912c3ca5f8b3192e8a088df65 Mon Sep 17 00:00:00 2001 From: "Helmut K. C. Tessarek" Date: Sun, 12 Jul 2026 18:11:47 +0200 Subject: [PATCH 08/11] test: unwrap -> expect --- src/server.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/server.rs b/src/server.rs index e1f74b56..bbd25cf0 100644 --- a/src/server.rs +++ b/src/server.rs @@ -885,7 +885,11 @@ mod tests { config.server.upload_path = PathBuf::from(test_upload_dir); for variant in PASTE_VARIANTS_LIST { - fs::create_dir_all(variant.get_path(&config.server.upload_path).unwrap())?; + fs::create_dir_all( + variant + .get_path(&config.server.upload_path) + .expect("Bad upload path"), + )?; } let app = test::init_service( From a0db39fcbbb4beb159461429e5e884ba8cb8d94e Mon Sep 17 00:00:00 2001 From: "Helmut K. C. Tessarek" Date: Sun, 12 Jul 2026 18:21:52 +0200 Subject: [PATCH 09/11] refactor: remove comment --- src/server.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server.rs b/src/server.rs index bbd25cf0..455e9040 100644 --- a/src/server.rs +++ b/src/server.rs @@ -526,7 +526,6 @@ async fn list(config: web::Data>) -> Result }; Some(ListItem { file_name, - // NOTE: For urls this will return url length. Not sure if desired behaviour file_size: metadata.len(), item_type, creation_date_utc, From dc5005ba683dc7fef28013129a4ccf5ddcc0869f Mon Sep 17 00:00:00 2001 From: Bit38 <119065583+Bit38@users.noreply.github.com> Date: Mon, 13 Jul 2026 23:48:48 +0200 Subject: [PATCH 10/11] feat: file_size returns null for URL and OneshotURL --- src/server.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/server.rs b/src/server.rs index 455e9040..a6454a90 100644 --- a/src/server.rs +++ b/src/server.rs @@ -450,7 +450,7 @@ pub struct ListItem { /// Uploaded file name. pub file_name: PathBuf, /// Size of the file in bytes. - pub file_size: u64, + pub file_size: Option, /// Item type pub item_type: PasteType, /// ISO8601 formatted date-time of the moment the file was created (uploaded). @@ -526,7 +526,10 @@ async fn list(config: web::Data>) -> Result }; Some(ListItem { file_name, - file_size: metadata.len(), + file_size: match item_type { + PasteType::Url | PasteType::OneshotUrl => None, + _ => Some(metadata.len()), + }, item_type, creation_date_utc, expires_at_utc, From 6d12b52f55de0fa6595ae8a412f312b3403e0cf7 Mon Sep 17 00:00:00 2001 From: Bit38 <119065583+Bit38@users.noreply.github.com> Date: Tue, 14 Jul 2026 00:22:05 +0200 Subject: [PATCH 11/11] refactor: swap file_size match to put happy path first Co-authored-by: Helmut K. C. Tessarek --- src/server.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server.rs b/src/server.rs index a6454a90..9e099513 100644 --- a/src/server.rs +++ b/src/server.rs @@ -527,8 +527,8 @@ async fn list(config: web::Data>) -> Result Some(ListItem { file_name, file_size: match item_type { - PasteType::Url | PasteType::OneshotUrl => None, - _ => Some(metadata.len()), + PasteType::File | PasteType::Oneshot => Some(metadata.len()), + _ => None, }, item_type, creation_date_utc,