attach user ip to the file record

This commit is contained in:
blek 2023-10-26 23:54:47 +10:00
parent 50447597f1
commit e91e40e0fc
Signed by: blek
GPG Key ID: 14546221E3595D0C
2 changed files with 8 additions and 5 deletions

View File

@ -1,6 +1,6 @@
#![allow(unused)] #![allow(unused)]
use std::{sync::Arc, error::Error, ops::Add}; use std::{sync::Arc, error::Error, ops::Add, net::IpAddr};
use argon2::{PasswordHash, password_hash::SaltString, Params, PasswordHasher}; use argon2::{PasswordHash, password_hash::SaltString, Params, PasswordHasher};
use chrono::{DateTime, Local}; use chrono::{DateTime, Local};
@ -22,6 +22,7 @@ pub struct File {
pub delete_at: DateTime<Local>, pub delete_at: DateTime<Local>,
pub delete_mode: DeleteMode, pub delete_mode: DeleteMode,
pub password: Option<String>, // argon2id hash pub password: Option<String>, // argon2id hash
pub uploader_ip: Option<IpAddr>,
sha512: String sha512: String
} }
@ -101,7 +102,7 @@ impl File {
Ok(ndata) Ok(ndata)
} }
pub async fn create(data: Vec<u8>, mime: String, name: Option<String>, env: Env, delete_mode: DeleteMode, password: Option<String>) -> Result<File, Box<dyn Error>> { pub async fn create(data: Vec<u8>, mime: String, name: Option<String>, env: Env, delete_mode: DeleteMode, password: Option<String>, uploader_ip: Option<IpAddr>) -> 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();
@ -140,7 +141,8 @@ impl File {
Some(hash.serialize().to_string()) Some(hash.serialize().to_string())
}, },
None => None None => None
} },
uploader_ip
} }
) )
} }

View File

@ -146,7 +146,7 @@ fn bad_req_html(data: String) -> Box<dyn Reply> {
) )
} }
pub async fn upload(form: FormData, _ip: Option<IpAddr>, state: SharedState) -> Result<Box<dyn Reply>, Rejection> { pub async fn upload(form: FormData, ip: Option<IpAddr>, state: SharedState) -> Result<Box<dyn Reply>, Rejection> {
if ! state.config.files.allow_uploads { if ! state.config.files.allow_uploads {
return Ok( return Ok(
@ -205,7 +205,8 @@ pub async fn upload(form: FormData, _ip: Option<IpAddr>, state: SharedState) ->
formdata.filename.clone(), formdata.filename.clone(),
state.env.clone(), state.env.clone(),
formdata.delmode, formdata.delmode,
formdata.password formdata.password,
ip
).await ).await
.map_err(|x| HttpReject::StringError(x.to_string())) .map_err(|x| HttpReject::StringError(x.to_string()))
?; ?;