save delete mode
This commit is contained in:
parent
cbe4f379da
commit
b281934203
|
@ -18,10 +18,21 @@ pub struct File {
|
||||||
pub name: Option<String>,
|
pub name: Option<String>,
|
||||||
pub mime: String,
|
pub mime: String,
|
||||||
pub delete_at: DateTime<Local>,
|
pub delete_at: DateTime<Local>,
|
||||||
|
pub delete_mode: DeleteMode,
|
||||||
sha512: String
|
sha512: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
pub enum DeleteMode {
|
||||||
|
Time,
|
||||||
|
TimeOrDownload
|
||||||
|
}
|
||||||
|
|
||||||
impl File {
|
impl File {
|
||||||
|
pub fn expired(self: &Self) -> bool {
|
||||||
|
self.delete_at < chrono::Local::now()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn comp_hash(self: &Self, other: &Sha512) -> bool {
|
pub fn comp_hash(self: &Self, other: &Sha512) -> bool {
|
||||||
let mut hash = other.clone();
|
let mut hash = other.clone();
|
||||||
hex::encode(hash.finalize_fixed()) == self.sha512
|
hex::encode(hash.finalize_fixed()) == self.sha512
|
||||||
|
@ -63,7 +74,7 @@ impl File {
|
||||||
Ok(ndata)
|
Ok(ndata)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn create(data: Vec<u8>, mime: String, name: Option<String>, env: Env) -> Result<File, Box<dyn Error>> {
|
pub async fn create(data: Vec<u8>, mime: String, name: Option<String>, env: Env, delete_mode: DeleteMode) -> Result<File, Box<dyn Error>> {
|
||||||
|
|
||||||
let mut filename = String::new();
|
let mut filename = String::new();
|
||||||
let mut hash = Sha512::new();
|
let mut hash = Sha512::new();
|
||||||
|
@ -90,6 +101,7 @@ impl File {
|
||||||
name: Some(filename),
|
name: Some(filename),
|
||||||
mime,
|
mime,
|
||||||
delete_at: expires,
|
delete_at: expires,
|
||||||
|
delete_mode,
|
||||||
sha512: hash
|
sha512: hash
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -11,7 +11,7 @@ use futures_util::TryStreamExt;
|
||||||
use bytes::BufMut;
|
use bytes::BufMut;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
|
|
||||||
use crate::files::{File, lookup::LookupKind};
|
use crate::files::{File, lookup::LookupKind, DeleteMode};
|
||||||
|
|
||||||
use super::{state::SharedState, pages::{BadActionReq, UploadSuccessPage}, rejection::HttpReject};
|
use super::{state::SharedState, pages::{BadActionReq, UploadSuccessPage}, rejection::HttpReject};
|
||||||
|
|
||||||
|
@ -64,10 +64,15 @@ pub async fn upload(form: FormData, state: SharedState) -> Result<Box<dyn Reply>
|
||||||
}
|
}
|
||||||
|
|
||||||
let data = params.get("file").unwrap();
|
let data = params.get("file").unwrap();
|
||||||
let _delmode = params.get("delmode").unwrap();
|
let delmode = params.get("delmode").unwrap();
|
||||||
let named = params.get("named");
|
let named = params.get("named");
|
||||||
let filename = params.get("filename").unwrap();
|
let filename = params.get("filename").unwrap();
|
||||||
let mut is_named = named.is_none();
|
let mut is_named = named.is_none();
|
||||||
|
|
||||||
|
let delmode = delmode.as_str_or_reject()?;
|
||||||
|
if delmode != "30" && delmode != "dl" {
|
||||||
|
return Err(warp::reject::custom(HttpReject::StringError("delmode is neither 30 or dl!".into())));
|
||||||
|
}
|
||||||
|
|
||||||
if named.is_some() {
|
if named.is_some() {
|
||||||
is_named = named.unwrap().as_str_or_reject()? == "on";
|
is_named = named.unwrap().as_str_or_reject()? == "on";
|
||||||
|
@ -87,7 +92,14 @@ pub async fn upload(form: FormData, state: SharedState) -> Result<Box<dyn Reply>
|
||||||
},
|
},
|
||||||
None => None
|
None => None
|
||||||
},
|
},
|
||||||
state.env.clone()
|
state.env.clone(),
|
||||||
|
{
|
||||||
|
if delmode == "30" {
|
||||||
|
DeleteMode::Time
|
||||||
|
} else {
|
||||||
|
DeleteMode::TimeOrDownload
|
||||||
|
}
|
||||||
|
}
|
||||||
).await
|
).await
|
||||||
.map_err(|err| warp::reject::custom(HttpReject::StringError(err.to_string())))?;
|
.map_err(|err| warp::reject::custom(HttpReject::StringError(err.to_string())))?;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue