Unverified Commit 51676f3a authored by Nugine's avatar Nugine
Browse files

s3s: sig_v4

parent b2c675ee
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ use crate::http::{Request, Response};
use crate::path::{ParseS3PathError, S3Path};
use crate::s3_trait::S3;
use crate::sig_v4;
use crate::sig_v4::PresignedUrl;
use crate::sig_v4::PresignedUrlV4;
use crate::sig_v4::{AmzContentSha256, AmzDate};
use crate::sig_v4::{AuthorizationV4, CredentialV4};
use crate::stream::aggregate_unlimited;
@@ -361,7 +361,7 @@ impl SignatureContext<'_> {
    async fn check_presigned_url(&mut self) -> S3Result<()> {
        let qs = self.qs.unwrap(); // assume: qs has "X-Amz-Signature"

        let presigned_url = PresignedUrl::parse(qs).map_err(|err| invalid_request!(err, "missing presigned fields"))?;
        let presigned_url = PresignedUrlV4::parse(qs).map_err(|err| invalid_request!(err, "missing presigned fields"))?;

        // ASK: how to use it?
        let _content_sha256: Option<AmzContentSha256<'_>> = extract_amz_content_sha256(&self.headers)?;
+2 −2
Original line number Diff line number Diff line
@@ -394,7 +394,7 @@ mod tests {

    use crate::http::OrderedHeaders;
    use crate::http::OrderedQs;
    use crate::sig_v4::PresignedUrl;
    use crate::sig_v4::PresignedUrlV4;

    #[test]
    fn example_get_object() {
@@ -759,7 +759,7 @@ mod tests {

        let qs = OrderedQs::from_vec_unchecked(query_strings.iter().map(|&(n, v)| (n.to_owned(), v.to_owned())).collect());

        let info = PresignedUrl::parse(&qs).unwrap();
        let info = PresignedUrlV4::parse(&qs).unwrap();

        let canonical_request = create_presigned_canonical_request(&method, uri.path(), query_strings, &headers);

+5 −2
Original line number Diff line number Diff line
@@ -5,8 +5,8 @@
//! See <https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html>
//!

mod presigned_url;
pub use self::presigned_url::*;
mod presigned_url_v4;
pub use self::presigned_url_v4::*;

mod authorization_v4;
pub use self::authorization_v4::*;
@@ -17,5 +17,8 @@ pub use self::amz_content_sha256::*;
mod amz_date;
pub use self::amz_date::*;

mod post_signature;
pub use self::post_signature::*;

mod methods;
pub use self::methods::*;
+26 −0
Original line number Diff line number Diff line
use crate::http::Multipart;

pub struct PostSignatureInfo<'a> {
    pub policy: &'a str,
    pub x_amz_algorithm: &'a str,
    pub x_amz_credential: &'a str,
    pub x_amz_date: &'a str,
    pub x_amz_signature: &'a str,
}

impl<'a> PostSignatureInfo<'a> {
    pub fn extract(m: &'a Multipart) -> Option<Self> {
        let policy = m.find_field_value("policy")?;
        let x_amz_algorithm = m.find_field_value("x-amz-algorithm")?;
        let x_amz_credential = m.find_field_value("x-amz-credential")?;
        let x_amz_date = m.find_field_value("x-amz-date")?;
        let x_amz_signature = m.find_field_value("x-amz-signature")?;
        Some(Self {
            policy,
            x_amz_algorithm,
            x_amz_credential,
            x_amz_date,
            x_amz_signature,
        })
    }
}
+3 −3
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@ use smallvec::SmallVec;

/// Presigned url information
#[derive(Debug)]
pub struct PresignedUrl<'a> {
pub struct PresignedUrlV4<'a> {
    /// algorithm
    pub algorithm: &'a str,
    /// credential
@@ -25,7 +25,7 @@ pub struct PresignedUrl<'a> {
    pub signature: &'a str,
}

/// [`PresignedUrl`]
/// [`PresignedUrlV4`]
#[derive(Debug, thiserror::Error)]
#[error("ParsePresignedUrlError")]
pub struct ParsePresignedUrlError {
@@ -63,7 +63,7 @@ impl<'a> PresignedQs<'a> {
    }
}

impl<'a> PresignedUrl<'a> {
impl<'a> PresignedUrlV4<'a> {
    /// Parses `PresignedUrl` from query
    ///
    /// # Errors