chore: bump deps
This commit is contained in:
parent
ad0be71557
commit
2064d7803a
4 changed files with 340 additions and 341 deletions
647
Cargo.lock
generated
647
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -21,11 +21,11 @@ percent-encoding = "2.1"
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
base64 = "0.13"
|
base64 = "0.21"
|
||||||
async_zip = { version = "0.0.8", default-features = false, features = ["deflate"] }
|
async_zip = { version = "0.0.12", default-features = false, features = ["deflate"] }
|
||||||
headers = "0.3"
|
headers = "0.3"
|
||||||
mime_guess = "2.0"
|
mime_guess = "2.0"
|
||||||
if-addrs = "0.7"
|
if-addrs = "0.8"
|
||||||
rustls = { version = "0.20", default-features = false, features = ["tls12"], optional = true }
|
rustls = { version = "0.20", default-features = false, features = ["tls12"], optional = true }
|
||||||
rustls-pemfile = { version = "1", optional = true }
|
rustls-pemfile = { version = "1", optional = true }
|
||||||
tokio-rustls = { version = "0.23", optional = true }
|
tokio-rustls = { version = "0.23", optional = true }
|
||||||
|
@ -51,7 +51,7 @@ assert_cmd = "2"
|
||||||
reqwest = { version = "0.11", features = ["blocking", "multipart", "rustls-tls"], default-features = false }
|
reqwest = { version = "0.11", features = ["blocking", "multipart", "rustls-tls"], default-features = false }
|
||||||
assert_fs = "1"
|
assert_fs = "1"
|
||||||
port_check = "0.1"
|
port_check = "0.1"
|
||||||
rstest = "0.15"
|
rstest = "0.16"
|
||||||
regex = "1"
|
regex = "1"
|
||||||
url = "2"
|
url = "2"
|
||||||
diqwest = { version = "1", features = ["blocking"] }
|
diqwest = { version = "1", features = ["blocking"] }
|
||||||
|
|
11
src/auth.rs
11
src/auth.rs
|
@ -1,3 +1,4 @@
|
||||||
|
use base64::{engine::general_purpose, Engine as _};
|
||||||
use headers::HeaderValue;
|
use headers::HeaderValue;
|
||||||
use hyper::Method;
|
use hyper::Method;
|
||||||
use lazy_static::lazy_static;
|
use lazy_static::lazy_static;
|
||||||
|
@ -215,8 +216,9 @@ impl AuthMethod {
|
||||||
pub fn get_user(&self, authorization: &HeaderValue) -> Option<String> {
|
pub fn get_user(&self, authorization: &HeaderValue) -> Option<String> {
|
||||||
match self {
|
match self {
|
||||||
AuthMethod::Basic => {
|
AuthMethod::Basic => {
|
||||||
let value: Vec<u8> =
|
let value: Vec<u8> = general_purpose::STANDARD_NO_PAD
|
||||||
base64::decode(strip_prefix(authorization.as_bytes(), b"Basic ")?).ok()?;
|
.decode(strip_prefix(authorization.as_bytes(), b"Basic ")?)
|
||||||
|
.ok()?;
|
||||||
let parts: Vec<&str> = std::str::from_utf8(&value).ok()?.split(':').collect();
|
let parts: Vec<&str> = std::str::from_utf8(&value).ok()?.split(':').collect();
|
||||||
Some(parts[0].to_string())
|
Some(parts[0].to_string())
|
||||||
}
|
}
|
||||||
|
@ -239,8 +241,9 @@ impl AuthMethod {
|
||||||
) -> Option<()> {
|
) -> Option<()> {
|
||||||
match self {
|
match self {
|
||||||
AuthMethod::Basic => {
|
AuthMethod::Basic => {
|
||||||
let basic_value: Vec<u8> =
|
let basic_value: Vec<u8> = general_purpose::STANDARD_NO_PAD
|
||||||
base64::decode(strip_prefix(authorization.as_bytes(), b"Basic ")?).ok()?;
|
.decode(strip_prefix(authorization.as_bytes(), b"Basic ")?)
|
||||||
|
.ok()?;
|
||||||
let parts: Vec<&str> = std::str::from_utf8(&basic_value).ok()?.split(':').collect();
|
let parts: Vec<&str> = std::str::from_utf8(&basic_value).ok()?.split(':').collect();
|
||||||
|
|
||||||
if parts[0] != auth_user {
|
if parts[0] != auth_user {
|
||||||
|
|
|
@ -4,8 +4,8 @@ use crate::{Args, BoxResult};
|
||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
use xml::escape::escape_str_pcdata;
|
use xml::escape::escape_str_pcdata;
|
||||||
|
|
||||||
use async_zip::write::{EntryOptions, ZipFileWriter};
|
use async_zip::write::ZipFileWriter;
|
||||||
use async_zip::Compression;
|
use async_zip::{Compression, ZipEntryBuilder};
|
||||||
use chrono::{TimeZone, Utc};
|
use chrono::{TimeZone, Utc};
|
||||||
use futures::TryStreamExt;
|
use futures::TryStreamExt;
|
||||||
use headers::{
|
use headers::{
|
||||||
|
@ -1140,7 +1140,10 @@ impl PathItem {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_dav_xml(&self, prefix: &str) -> String {
|
pub fn to_dav_xml(&self, prefix: &str) -> String {
|
||||||
let mtime = Utc.timestamp_millis(self.mtime as i64).to_rfc2822();
|
let mtime = Utc
|
||||||
|
.timestamp_millis_opt(self.mtime as i64)
|
||||||
|
.unwrap()
|
||||||
|
.to_rfc2822();
|
||||||
let mut href = encode_uri(&format!("{}{}", prefix, &self.name));
|
let mut href = encode_uri(&format!("{}{}", prefix, &self.name));
|
||||||
if self.is_dir() && !href.ends_with('/') {
|
if self.is_dir() && !href.ends_with('/') {
|
||||||
href.push('/');
|
href.push('/');
|
||||||
|
@ -1305,10 +1308,10 @@ async fn zip_dir<W: AsyncWrite + Unpin>(
|
||||||
Some(v) => v,
|
Some(v) => v,
|
||||||
None => continue,
|
None => continue,
|
||||||
};
|
};
|
||||||
let entry_options =
|
let builder =
|
||||||
EntryOptions::new(filename.to_owned(), Compression::Deflate).unix_permissions(0o644);
|
ZipEntryBuilder::new(filename.into(), Compression::Deflate).unix_permissions(0o644);
|
||||||
let mut file = File::open(&zip_path).await?;
|
let mut file = File::open(&zip_path).await?;
|
||||||
let mut file_writer = writer.write_entry_stream(entry_options).await?;
|
let mut file_writer = writer.write_entry_stream(builder).await?;
|
||||||
io::copy(&mut file, &mut file_writer).await?;
|
io::copy(&mut file, &mut file_writer).await?;
|
||||||
file_writer.close().await?;
|
file_writer.close().await?;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue