mirror of
https://github.com/veeso/termscp.git
synced 2025-12-07 09:36:00 -08:00
new-path-style and endpoint s3 params
This commit is contained in:
committed by
Christian Visintin
parent
f28dba7660
commit
babbc5eadb
@@ -228,11 +228,12 @@ impl AuthActivity {
|
|||||||
fn load_bookmark_s3_into_gui(&mut self, params: AwsS3Params) {
|
fn load_bookmark_s3_into_gui(&mut self, params: AwsS3Params) {
|
||||||
self.mount_s3_bucket(params.bucket_name.as_str());
|
self.mount_s3_bucket(params.bucket_name.as_str());
|
||||||
self.mount_s3_region(params.region.as_deref().unwrap_or(""));
|
self.mount_s3_region(params.region.as_deref().unwrap_or(""));
|
||||||
|
self.mount_s3_endpoint(params.endpoint.as_deref().unwrap_or(""));
|
||||||
self.mount_s3_profile(params.profile.as_deref().unwrap_or(""));
|
self.mount_s3_profile(params.profile.as_deref().unwrap_or(""));
|
||||||
self.mount_s3_access_key(params.access_key.as_deref().unwrap_or(""));
|
self.mount_s3_access_key(params.access_key.as_deref().unwrap_or(""));
|
||||||
self.mount_s3_secret_access_key(params.secret_access_key.as_deref().unwrap_or(""));
|
self.mount_s3_secret_access_key(params.secret_access_key.as_deref().unwrap_or(""));
|
||||||
self.mount_s3_security_token(params.security_token.as_deref().unwrap_or(""));
|
self.mount_s3_security_token(params.security_token.as_deref().unwrap_or(""));
|
||||||
self.mount_s3_session_token(params.session_token.as_deref().unwrap_or(""));
|
self.mount_s3_session_token(params.session_token.as_deref().unwrap_or(""));
|
||||||
// TODO: add mount
|
self.mount_s3_new_path_style(params.new_path_style);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -328,6 +328,102 @@ impl Component<Msg, NoUserEvent> for InputS3Region {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- s3 endpoint
|
||||||
|
|
||||||
|
#[derive(MockComponent)]
|
||||||
|
pub struct InputS3Endpoint {
|
||||||
|
component: Input,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl InputS3Endpoint {
|
||||||
|
pub fn new(endpoint: &str, color: Color) -> Self {
|
||||||
|
Self {
|
||||||
|
component: Input::default()
|
||||||
|
.borders(
|
||||||
|
Borders::default()
|
||||||
|
.color(color)
|
||||||
|
.modifiers(BorderType::Rounded),
|
||||||
|
)
|
||||||
|
.foreground(color)
|
||||||
|
.placeholder(
|
||||||
|
"http://localhost:9000",
|
||||||
|
Style::default().fg(Color::Rgb(128, 128, 128)),
|
||||||
|
)
|
||||||
|
.title("Endpoint", Alignment::Left)
|
||||||
|
.input_type(InputType::Text)
|
||||||
|
.value(endpoint),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Component<Msg, NoUserEvent> for InputS3Endpoint {
|
||||||
|
fn on(&mut self, ev: Event<NoUserEvent>) -> Option<Msg> {
|
||||||
|
handle_input_ev(
|
||||||
|
self,
|
||||||
|
ev,
|
||||||
|
Msg::Ui(UiMsg::S3EndpointBlurDown),
|
||||||
|
Msg::Ui(UiMsg::S3EndpointBlurUp),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -- s3 new path style
|
||||||
|
|
||||||
|
#[derive(MockComponent)]
|
||||||
|
pub struct RadioS3NewPathStyle {
|
||||||
|
component: Radio,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RadioS3NewPathStyle {
|
||||||
|
pub fn new(new_path_style: bool, color: Color) -> Self {
|
||||||
|
Self {
|
||||||
|
component: Radio::default()
|
||||||
|
.borders(
|
||||||
|
Borders::default()
|
||||||
|
.color(color)
|
||||||
|
.modifiers(BorderType::Rounded),
|
||||||
|
)
|
||||||
|
.choices(&["Yes", "No"])
|
||||||
|
.foreground(color)
|
||||||
|
.rewind(true)
|
||||||
|
.title("New path style", Alignment::Left)
|
||||||
|
.value(if new_path_style { 0 } else { 1 }),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Component<Msg, NoUserEvent> for RadioS3NewPathStyle {
|
||||||
|
fn on(&mut self, ev: Event<NoUserEvent>) -> Option<Msg> {
|
||||||
|
match ev {
|
||||||
|
Event::Keyboard(KeyEvent {
|
||||||
|
code: Key::Left, ..
|
||||||
|
}) => {
|
||||||
|
self.perform(Cmd::Move(Direction::Left));
|
||||||
|
Some(Msg::None)
|
||||||
|
}
|
||||||
|
Event::Keyboard(KeyEvent {
|
||||||
|
code: Key::Right, ..
|
||||||
|
}) => {
|
||||||
|
self.perform(Cmd::Move(Direction::Right));
|
||||||
|
Some(Msg::None)
|
||||||
|
}
|
||||||
|
Event::Keyboard(KeyEvent {
|
||||||
|
code: Key::Enter, ..
|
||||||
|
}) => Some(Msg::Form(FormMsg::Connect)),
|
||||||
|
Event::Keyboard(KeyEvent {
|
||||||
|
code: Key::Down, ..
|
||||||
|
}) => Some(Msg::Ui(UiMsg::S3NewPathStyleBlurDown)),
|
||||||
|
Event::Keyboard(KeyEvent { code: Key::Up, .. }) => {
|
||||||
|
Some(Msg::Ui(UiMsg::S3NewPathStyleBlurUp))
|
||||||
|
}
|
||||||
|
Event::Keyboard(KeyEvent { code: Key::Tab, .. }) => {
|
||||||
|
Some(Msg::Ui(UiMsg::ParamsFormBlur))
|
||||||
|
}
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// -- s3 profile
|
// -- s3 profile
|
||||||
|
|
||||||
#[derive(MockComponent)]
|
#[derive(MockComponent)]
|
||||||
|
|||||||
@@ -37,9 +37,9 @@ pub use bookmarks::{
|
|||||||
RecentsList,
|
RecentsList,
|
||||||
};
|
};
|
||||||
pub use form::{
|
pub use form::{
|
||||||
InputAddress, InputPassword, InputPort, InputS3AccessKey, InputS3Bucket, InputS3Profile,
|
InputAddress, InputPassword, InputPort, InputS3AccessKey, InputS3Bucket, InputS3Endpoint,
|
||||||
InputS3Region, InputS3SecretAccessKey, InputS3SecurityToken, InputS3SessionToken,
|
InputS3Profile, InputS3Region, InputS3SecretAccessKey, InputS3SecurityToken,
|
||||||
InputUsername, ProtocolRadio,
|
InputS3SessionToken, InputUsername, ProtocolRadio, RadioS3NewPathStyle,
|
||||||
};
|
};
|
||||||
pub use popup::{
|
pub use popup::{
|
||||||
ErrorPopup, InfoPopup, InstallUpdatePopup, Keybindings, QuitPopup, ReleaseNotes, WaitPopup,
|
ErrorPopup, InfoPopup, InstallUpdatePopup, Keybindings, QuitPopup, ReleaseNotes, WaitPopup,
|
||||||
|
|||||||
@@ -68,6 +68,8 @@ pub enum Id {
|
|||||||
RecentsList,
|
RecentsList,
|
||||||
S3AccessKey,
|
S3AccessKey,
|
||||||
S3Bucket,
|
S3Bucket,
|
||||||
|
S3Endpoint,
|
||||||
|
S3NewPathStyle,
|
||||||
S3Profile,
|
S3Profile,
|
||||||
S3Region,
|
S3Region,
|
||||||
S3SecretAccessKey,
|
S3SecretAccessKey,
|
||||||
@@ -127,6 +129,10 @@ pub enum UiMsg {
|
|||||||
S3AccessKeyBlurUp,
|
S3AccessKeyBlurUp,
|
||||||
S3BucketBlurDown,
|
S3BucketBlurDown,
|
||||||
S3BucketBlurUp,
|
S3BucketBlurUp,
|
||||||
|
S3EndpointBlurDown,
|
||||||
|
S3EndpointBlurUp,
|
||||||
|
S3NewPathStyleBlurDown,
|
||||||
|
S3NewPathStyleBlurUp,
|
||||||
S3ProfileBlurDown,
|
S3ProfileBlurDown,
|
||||||
S3ProfileBlurUp,
|
S3ProfileBlurUp,
|
||||||
S3RegionBlurDown,
|
S3RegionBlurDown,
|
||||||
|
|||||||
@@ -203,7 +203,7 @@ impl AuthActivity {
|
|||||||
.app
|
.app
|
||||||
.active(match self.input_mask() {
|
.active(match self.input_mask() {
|
||||||
InputMask::Generic => &Id::Password,
|
InputMask::Generic => &Id::Password,
|
||||||
InputMask::AwsS3 => &Id::S3SessionToken,
|
InputMask::AwsS3 => &Id::S3NewPathStyle,
|
||||||
})
|
})
|
||||||
.is_ok());
|
.is_ok());
|
||||||
}
|
}
|
||||||
@@ -217,16 +217,22 @@ impl AuthActivity {
|
|||||||
assert!(self.app.active(&Id::Protocol).is_ok());
|
assert!(self.app.active(&Id::Protocol).is_ok());
|
||||||
}
|
}
|
||||||
UiMsg::S3RegionBlurDown => {
|
UiMsg::S3RegionBlurDown => {
|
||||||
assert!(self.app.active(&Id::S3Profile).is_ok());
|
assert!(self.app.active(&Id::S3Endpoint).is_ok());
|
||||||
}
|
}
|
||||||
UiMsg::S3RegionBlurUp => {
|
UiMsg::S3RegionBlurUp => {
|
||||||
assert!(self.app.active(&Id::S3Bucket).is_ok());
|
assert!(self.app.active(&Id::S3Bucket).is_ok());
|
||||||
}
|
}
|
||||||
|
UiMsg::S3EndpointBlurDown => {
|
||||||
|
assert!(self.app.active(&Id::S3Profile).is_ok());
|
||||||
|
}
|
||||||
|
UiMsg::S3EndpointBlurUp => {
|
||||||
|
assert!(self.app.active(&Id::S3Region).is_ok());
|
||||||
|
}
|
||||||
UiMsg::S3ProfileBlurDown => {
|
UiMsg::S3ProfileBlurDown => {
|
||||||
assert!(self.app.active(&Id::S3AccessKey).is_ok());
|
assert!(self.app.active(&Id::S3AccessKey).is_ok());
|
||||||
}
|
}
|
||||||
UiMsg::S3ProfileBlurUp => {
|
UiMsg::S3ProfileBlurUp => {
|
||||||
assert!(self.app.active(&Id::S3Region).is_ok());
|
assert!(self.app.active(&Id::S3Endpoint).is_ok());
|
||||||
}
|
}
|
||||||
UiMsg::S3AccessKeyBlurDown => {
|
UiMsg::S3AccessKeyBlurDown => {
|
||||||
assert!(self.app.active(&Id::S3SecretAccessKey).is_ok());
|
assert!(self.app.active(&Id::S3SecretAccessKey).is_ok());
|
||||||
@@ -247,11 +253,17 @@ impl AuthActivity {
|
|||||||
assert!(self.app.active(&Id::S3SecretAccessKey).is_ok());
|
assert!(self.app.active(&Id::S3SecretAccessKey).is_ok());
|
||||||
}
|
}
|
||||||
UiMsg::S3SessionTokenBlurDown => {
|
UiMsg::S3SessionTokenBlurDown => {
|
||||||
assert!(self.app.active(&Id::Protocol).is_ok());
|
assert!(self.app.active(&Id::S3NewPathStyle).is_ok());
|
||||||
}
|
}
|
||||||
UiMsg::S3SessionTokenBlurUp => {
|
UiMsg::S3SessionTokenBlurUp => {
|
||||||
assert!(self.app.active(&Id::S3SecurityToken).is_ok());
|
assert!(self.app.active(&Id::S3SecurityToken).is_ok());
|
||||||
}
|
}
|
||||||
|
UiMsg::S3NewPathStyleBlurDown => {
|
||||||
|
assert!(self.app.active(&Id::Protocol).is_ok());
|
||||||
|
}
|
||||||
|
UiMsg::S3NewPathStyleBlurUp => {
|
||||||
|
assert!(self.app.active(&Id::S3SessionToken).is_ok());
|
||||||
|
}
|
||||||
UiMsg::SaveBookmarkPasswordBlur => {
|
UiMsg::SaveBookmarkPasswordBlur => {
|
||||||
assert!(self.app.active(&Id::BookmarkName).is_ok());
|
assert!(self.app.active(&Id::BookmarkName).is_ok());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,10 +74,12 @@ impl AuthActivity {
|
|||||||
self.mount_s3_bucket("");
|
self.mount_s3_bucket("");
|
||||||
self.mount_s3_profile("");
|
self.mount_s3_profile("");
|
||||||
self.mount_s3_region("");
|
self.mount_s3_region("");
|
||||||
|
self.mount_s3_endpoint("");
|
||||||
self.mount_s3_access_key("");
|
self.mount_s3_access_key("");
|
||||||
self.mount_s3_secret_access_key("");
|
self.mount_s3_secret_access_key("");
|
||||||
self.mount_s3_security_token("");
|
self.mount_s3_security_token("");
|
||||||
self.mount_s3_session_token("");
|
self.mount_s3_session_token("");
|
||||||
|
self.mount_s3_new_path_style(false);
|
||||||
// Version notice
|
// Version notice
|
||||||
if let Some(version) = self
|
if let Some(version) = self
|
||||||
.context()
|
.context()
|
||||||
@@ -648,61 +650,85 @@ impl AuthActivity {
|
|||||||
.is_ok());
|
.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn mount_s3_profile(&mut self, profile: &str) {
|
pub(crate) fn mount_s3_endpoint(&mut self, endpoint: &str) {
|
||||||
let username_color = self.theme().auth_username;
|
let username_color = self.theme().auth_username;
|
||||||
|
assert!(self
|
||||||
|
.app
|
||||||
|
.remount(
|
||||||
|
Id::S3Endpoint,
|
||||||
|
Box::new(components::InputS3Endpoint::new(endpoint, username_color)),
|
||||||
|
vec![]
|
||||||
|
)
|
||||||
|
.is_ok());
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn mount_s3_profile(&mut self, profile: &str) {
|
||||||
|
let color = self.theme().auth_password;
|
||||||
assert!(self
|
assert!(self
|
||||||
.app
|
.app
|
||||||
.remount(
|
.remount(
|
||||||
Id::S3Profile,
|
Id::S3Profile,
|
||||||
Box::new(components::InputS3Profile::new(profile, username_color)),
|
Box::new(components::InputS3Profile::new(profile, color)),
|
||||||
vec![]
|
vec![]
|
||||||
)
|
)
|
||||||
.is_ok());
|
.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn mount_s3_access_key(&mut self, key: &str) {
|
pub(crate) fn mount_s3_access_key(&mut self, key: &str) {
|
||||||
let password_color = self.theme().auth_password;
|
let color = self.theme().auth_address;
|
||||||
assert!(self
|
assert!(self
|
||||||
.app
|
.app
|
||||||
.remount(
|
.remount(
|
||||||
Id::S3AccessKey,
|
Id::S3AccessKey,
|
||||||
Box::new(components::InputS3AccessKey::new(key, password_color)),
|
Box::new(components::InputS3AccessKey::new(key, color)),
|
||||||
vec![]
|
vec![]
|
||||||
)
|
)
|
||||||
.is_ok());
|
.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn mount_s3_secret_access_key(&mut self, key: &str) {
|
pub(crate) fn mount_s3_secret_access_key(&mut self, key: &str) {
|
||||||
let addr_color = self.theme().auth_address;
|
let color = self.theme().auth_port;
|
||||||
assert!(self
|
assert!(self
|
||||||
.app
|
.app
|
||||||
.remount(
|
.remount(
|
||||||
Id::S3SecretAccessKey,
|
Id::S3SecretAccessKey,
|
||||||
Box::new(components::InputS3SecretAccessKey::new(key, addr_color)),
|
Box::new(components::InputS3SecretAccessKey::new(key, color)),
|
||||||
vec![]
|
vec![]
|
||||||
)
|
)
|
||||||
.is_ok());
|
.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn mount_s3_security_token(&mut self, token: &str) {
|
pub(crate) fn mount_s3_security_token(&mut self, token: &str) {
|
||||||
let port_color = self.theme().auth_port;
|
let color = self.theme().auth_username;
|
||||||
assert!(self
|
assert!(self
|
||||||
.app
|
.app
|
||||||
.remount(
|
.remount(
|
||||||
Id::S3SecurityToken,
|
Id::S3SecurityToken,
|
||||||
Box::new(components::InputS3SecurityToken::new(token, port_color)),
|
Box::new(components::InputS3SecurityToken::new(token, color)),
|
||||||
vec![]
|
vec![]
|
||||||
)
|
)
|
||||||
.is_ok());
|
.is_ok());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn mount_s3_session_token(&mut self, token: &str) {
|
pub(crate) fn mount_s3_session_token(&mut self, token: &str) {
|
||||||
let username_color = self.theme().auth_username;
|
let color = self.theme().auth_password;
|
||||||
assert!(self
|
assert!(self
|
||||||
.app
|
.app
|
||||||
.remount(
|
.remount(
|
||||||
Id::S3SessionToken,
|
Id::S3SessionToken,
|
||||||
Box::new(components::InputS3SessionToken::new(token, username_color)),
|
Box::new(components::InputS3SessionToken::new(token, color)),
|
||||||
|
vec![]
|
||||||
|
)
|
||||||
|
.is_ok());
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn mount_s3_new_path_style(&mut self, new_path_style: bool) {
|
||||||
|
let color = self.theme().auth_address;
|
||||||
|
assert!(self
|
||||||
|
.app
|
||||||
|
.remount(
|
||||||
|
Id::S3NewPathStyle,
|
||||||
|
Box::new(components::RadioS3NewPathStyle::new(new_path_style, color)),
|
||||||
vec![]
|
vec![]
|
||||||
)
|
)
|
||||||
.is_ok());
|
.is_ok());
|
||||||
@@ -727,17 +753,20 @@ impl AuthActivity {
|
|||||||
pub(super) fn get_s3_params_input(&self) -> AwsS3Params {
|
pub(super) fn get_s3_params_input(&self) -> AwsS3Params {
|
||||||
let bucket: String = self.get_input_s3_bucket();
|
let bucket: String = self.get_input_s3_bucket();
|
||||||
let region: Option<String> = self.get_input_s3_region();
|
let region: Option<String> = self.get_input_s3_region();
|
||||||
|
let endpoint = self.get_input_s3_endpoint();
|
||||||
let profile: Option<String> = self.get_input_s3_profile();
|
let profile: Option<String> = self.get_input_s3_profile();
|
||||||
let access_key = self.get_input_s3_access_key();
|
let access_key = self.get_input_s3_access_key();
|
||||||
let secret_access_key = self.get_input_s3_secret_access_key();
|
let secret_access_key = self.get_input_s3_secret_access_key();
|
||||||
let security_token = self.get_input_s3_security_token();
|
let security_token = self.get_input_s3_security_token();
|
||||||
let session_token = self.get_input_s3_session_token();
|
let session_token = self.get_input_s3_session_token();
|
||||||
// TODO: collect
|
let new_path_style = self.get_input_s3_new_path_style();
|
||||||
AwsS3Params::new(bucket, region, profile)
|
AwsS3Params::new(bucket, region, profile)
|
||||||
|
.endpoint(endpoint)
|
||||||
.access_key(access_key)
|
.access_key(access_key)
|
||||||
.secret_access_key(secret_access_key)
|
.secret_access_key(secret_access_key)
|
||||||
.security_token(security_token)
|
.security_token(security_token)
|
||||||
.session_token(session_token)
|
.session_token(session_token)
|
||||||
|
.new_path_style(new_path_style)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn get_input_addr(&self) -> String {
|
pub(super) fn get_input_addr(&self) -> String {
|
||||||
@@ -785,6 +814,13 @@ impl AuthActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(super) fn get_input_s3_endpoint(&self) -> Option<String> {
|
||||||
|
match self.app.state(&Id::S3Endpoint) {
|
||||||
|
Ok(State::One(StateValue::String(x))) if !x.is_empty() => Some(x),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub(super) fn get_input_s3_profile(&self) -> Option<String> {
|
pub(super) fn get_input_s3_profile(&self) -> Option<String> {
|
||||||
match self.app.state(&Id::S3Profile) {
|
match self.app.state(&Id::S3Profile) {
|
||||||
Ok(State::One(StateValue::String(x))) if !x.is_empty() => Some(x),
|
Ok(State::One(StateValue::String(x))) if !x.is_empty() => Some(x),
|
||||||
@@ -820,6 +856,13 @@ impl AuthActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(super) fn get_input_s3_new_path_style(&self) -> bool {
|
||||||
|
matches!(
|
||||||
|
self.app.state(&Id::S3NewPathStyle),
|
||||||
|
Ok(State::One(StateValue::Usize(0)))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
/// Get new bookmark params
|
/// Get new bookmark params
|
||||||
pub(super) fn get_new_bookmark(&self) -> (String, bool) {
|
pub(super) fn get_new_bookmark(&self) -> (String, bool) {
|
||||||
let name = match self.app.state(&Id::BookmarkName) {
|
let name = match self.app.state(&Id::BookmarkName) {
|
||||||
@@ -888,13 +931,24 @@ impl AuthActivity {
|
|||||||
/// Get the visible element in the aws-s3 form, based on current focus
|
/// Get the visible element in the aws-s3 form, based on current focus
|
||||||
fn get_s3_view(&self) -> [Id; 4] {
|
fn get_s3_view(&self) -> [Id; 4] {
|
||||||
match self.app.focus() {
|
match self.app.focus() {
|
||||||
Some(&Id::S3SecretAccessKey | &Id::S3SecurityToken | &Id::S3SessionToken) => [
|
Some(&Id::S3AccessKey) => [
|
||||||
Id::S3AccessKey,
|
Id::S3AccessKey,
|
||||||
Id::S3SecretAccessKey,
|
Id::S3SecretAccessKey,
|
||||||
Id::S3SecurityToken,
|
Id::S3SecurityToken,
|
||||||
Id::S3SessionToken,
|
Id::S3SessionToken,
|
||||||
],
|
],
|
||||||
_ => [Id::S3Bucket, Id::S3Region, Id::S3Profile, Id::S3AccessKey],
|
Some(
|
||||||
|
&Id::S3SecretAccessKey
|
||||||
|
| &Id::S3SecurityToken
|
||||||
|
| &Id::S3SessionToken
|
||||||
|
| &Id::S3NewPathStyle,
|
||||||
|
) => [
|
||||||
|
Id::S3SecretAccessKey,
|
||||||
|
Id::S3SecurityToken,
|
||||||
|
Id::S3SessionToken,
|
||||||
|
Id::S3NewPathStyle,
|
||||||
|
],
|
||||||
|
_ => [Id::S3Bucket, Id::S3Region, Id::S3Endpoint, Id::S3Profile],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user