feat: updates

This commit is contained in:
2023-09-03 18:00:07 +08:00
parent 191ff1df2e
commit a436a1f8a2
7 changed files with 37 additions and 17 deletions

View File

@@ -4,11 +4,11 @@ use std::time::SystemTime;
use rand::random;
use crate::util::BTreeMapAddKv;
use crate::common_util::{join_slices, percent_encode};
use crate::map_util::BTreeMapAddKv;
use crate::sign_algorithm::SignAlgorithm;
use crate::v4::access_key::{AccessKey, DerivedAccessKey};
use crate::v4::common_util::{join_slices, percent_encode};
use crate::v4::constant::{ALIYUN_V4, ALIYUN_V4_REQUEST, CONTENT_TYPE_APPLICATION_JSON, HEADER_ACCEPT, HEADER_AUTHORIZATION, HEADER_CONTENT_TYPE, HEADER_HOST, HEADER_USER_AGENT, HEADER_X_ACS_PREFIX, HEADER_X_ASC_ACCESS_KEY_ID, HEADER_X_ASC_ACTION, HEADER_X_ASC_CONTENT_SHA256, HEADER_X_ASC_CONTENT_SM3, HEADER_X_ASC_DATE, HEADER_X_ASC_SECURITY_TOKEN, HEADER_X_ASC_SIGNATURE_NONCE, HEADER_X_ASC_VERSION, REGION_CENTER};
use crate::v4::sign_algorithm::SignAlgorithm;
const SEQ: AtomicU64 = AtomicU64::new(0);
@@ -27,18 +27,21 @@ struct Request {
}
fn add_common_headers(header: &mut BTreeMap<String, String>, request: &Request) {
let (ymd, date) = get_timestamp();
header.insert_kv(HEADER_HOST, "endpoint"); // TODO
header.insert_kv(HEADER_X_ASC_VERSION, &request.version);
header.insert_kv(HEADER_X_ASC_ACTION, &request.action);
header.insert_kv(HEADER_USER_AGENT, &request.user_agent);
header.insert_kv(HEADER_X_ASC_DATE, get_timestamp());
header.insert_kv(HEADER_X_ASC_DATE, date);
header.insert_kv(HEADER_X_ASC_SIGNATURE_NONCE, get_nonce());
header.insert_kv(HEADER_ACCEPT, CONTENT_TYPE_APPLICATION_JSON);
// TODO BODY ...
// TODO signature ...
match &request.sign_algorithm {
// TODO ...
SignAlgorithm::Sha1 => panic!("SHA1 in V4 is NOT supported!"),
SignAlgorithm::Sha256 => {
header.insert_kv(HEADER_X_ASC_CONTENT_SHA256, "");
}
@@ -111,7 +114,7 @@ fn get_authorization(sign_algorithm: &SignAlgorithm,
let signed_headers_str = get_signed_headers(headers).iter().map(|(k, _)| k.as_str()).collect::<Vec<_>>().join(";");
let mut authorization = String::with_capacity(512);
authorization.push_str(sign_algorithm.as_aliyun_name());
authorization.push_str(sign_algorithm.as_aliyun_name_v4());
authorization.push_str(" Credential=");
authorization.push_str(&access_key.access_key_id);
authorization.push('/');
@@ -153,7 +156,7 @@ fn get_signature(sign_algorithm: &SignAlgorithm,
string_to_sign.push_str(payload);
let string_to_sign_digest_hex = sign_algorithm.digest(string_to_sign.as_bytes());
string_to_sign.push_str(sign_algorithm.as_aliyun_name());
string_to_sign.push_str(sign_algorithm.as_aliyun_name_v4());
string_to_sign.push('\n');
string_to_sign.push_str(&string_to_sign_digest_hex);