(
url: &Url,
aws_options: &AwsOptions,
resolve_region: bool,
)
| 76 | } |
| 77 | |
| 78 | async fn get_s3_object_store_builder_inner( |
| 79 | url: &Url, |
| 80 | aws_options: &AwsOptions, |
| 81 | resolve_region: bool, |
| 82 | ) -> Result<AmazonS3Builder> { |
| 83 | let AwsOptions { |
| 84 | access_key_id, |
| 85 | secret_access_key, |
| 86 | session_token, |
| 87 | region, |
| 88 | endpoint, |
| 89 | allow_http, |
| 90 | skip_signature, |
| 91 | } = aws_options; |
| 92 | |
| 93 | let bucket_name = get_bucket_name(url)?; |
| 94 | let mut builder = AmazonS3Builder::from_env().with_bucket_name(bucket_name); |
| 95 | |
| 96 | if let (Some(access_key_id), Some(secret_access_key)) = |
| 97 | (access_key_id, secret_access_key) |
| 98 | { |
| 99 | debug!("Using explicitly provided S3 access_key_id and secret_access_key"); |
| 100 | builder = builder |
| 101 | .with_access_key_id(access_key_id) |
| 102 | .with_secret_access_key(secret_access_key); |
| 103 | |
| 104 | if let Some(session_token) = session_token { |
| 105 | builder = builder.with_token(session_token); |
| 106 | } |
| 107 | } else { |
| 108 | debug!("Using AWS S3 SDK to determine credentials"); |
| 109 | let CredentialsFromConfig { |
| 110 | region, |
| 111 | credentials, |
| 112 | } = CredentialsFromConfig::try_new().await?; |
| 113 | if let Some(region) = region { |
| 114 | builder = builder.with_region(region); |
| 115 | } |
| 116 | if let Some(credentials) = credentials { |
| 117 | let credentials = Arc::new(S3CredentialProvider { credentials }); |
| 118 | builder = builder.with_credentials(credentials); |
| 119 | } else { |
| 120 | debug!("No credentials found, defaulting to skip signature "); |
| 121 | builder = builder.with_skip_signature(true); |
| 122 | } |
| 123 | } |
| 124 | |
| 125 | if let Some(region) = region { |
| 126 | builder = builder.with_region(region); |
| 127 | } |
| 128 | |
| 129 | // If the region is not set or auto_detect_region is true, resolve the region. |
| 130 | if builder |
| 131 | .get_config_value(&AmazonS3ConfigKey::Region) |
| 132 | .is_none() |
| 133 | || resolve_region |
| 134 | { |
| 135 | let region = resolve_bucket_region(bucket_name, &ClientOptions::new()).await?; |
no test coverage detected
searching dependent graphs…