fix: preserve protocol service account claims (#7062)

This commit is contained in:
houseme
2026-09-02 22:16:15 +08:00
committed by GitHub
parent 2e2bc814b1
commit 2231633ae1
13 changed files with 522 additions and 866 deletions
+12 -99
View File
@@ -129,14 +129,7 @@ where
}
let mut list_result = Vec::new();
match self
.storage
.list_buckets(
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
match self.storage.list_buckets(session_context.credentials()).await {
Ok(output) => {
if let Some(buckets) = output.buckets {
for bucket in buckets {
@@ -190,15 +183,7 @@ where
Error::new(ErrorKind::PermanentFileNotAvailable, format!("Failed to build ListObjectsV2Input: {}", e))
})?;
if let Ok(output) = self
.storage
.list_objects_v2(
list_input,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
if let Ok(output) = self.storage.list_objects_v2(list_input, session_context.credentials()).await {
// Delete all objects in this page
if let Some(objects) = output.contents {
for obj in objects {
@@ -209,12 +194,7 @@ where
let _ = self
.storage
.delete_object(
bucket,
&obj_key,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.delete_object(bucket, &obj_key, session_context.credentials())
.await;
}
}
@@ -231,15 +211,7 @@ where
}
// Then delete the bucket
match self
.storage
.delete_bucket(
bucket,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
match self.storage.delete_bucket(bucket, session_context.credentials()).await {
Ok(_) => Ok(()),
Err(e) if e.to_string().contains("NoSuchBucket") => Ok(()),
Err(e) => {
@@ -277,16 +249,7 @@ where
.await
.map_err(|_| Error::new(ErrorKind::PermanentFileNotAvailable, "Access denied"))?;
match self
.storage
.head_object(
&bucket,
&key,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
match self.storage.head_object(&bucket, &key, session_context.credentials()).await {
Ok(output) => {
let size = output.content_length.unwrap_or(0) as u64;
let modified = output.last_modified.map(|dt| {
@@ -323,15 +286,7 @@ where
.map_err(|_| Error::new(ErrorKind::PermanentFileNotAvailable, "Access denied"))?;
let bucket_clone = bucket.clone();
match self
.storage
.head_bucket(
&bucket,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
match self.storage.head_bucket(&bucket, session_context.credentials()).await {
Ok(_) => Ok(FtpsMetadata {
size: 0,
modified: Some(std::time::SystemTime::now()),
@@ -390,15 +345,7 @@ where
Error::new(ErrorKind::PermanentFileNotAvailable, format!("Failed to build ListObjectsV2Input: {}", e))
})?;
match self
.storage
.list_objects_v2(
list_input,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
match self.storage.list_objects_v2(list_input, session_context.credentials()).await {
Ok(output) => {
let mut fileinfos = Vec::new();
@@ -515,8 +462,7 @@ where
.get_object(
&bucket,
&key,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
session_context.credentials(),
Some(start_pos), // Pass start_pos for range request
)
.await
@@ -624,15 +570,7 @@ where
.build()
.map_err(|_| Error::new(ErrorKind::PermanentFileNotAvailable, "Failed to build PutObjectInput"))?;
match self
.storage
.put_object(
put_input,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
match self.storage.put_object(put_input, session_context.credentials()).await {
Ok(_output) => {
Ok(file_size as u64) // Return the size of the uploaded object
}
@@ -681,16 +619,7 @@ where
.map_err(|_| Error::new(ErrorKind::PermanentFileNotAvailable, "Access denied"))?;
// Delete file
match self
.storage
.delete_object(
&bucket,
&key,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
match self.storage.delete_object(&bucket, &key, session_context.credentials()).await {
Ok(_) => Ok(()),
Err(e) => {
error!(
@@ -748,15 +677,7 @@ where
.map_err(|_| Error::new(ErrorKind::PermanentFileNotAvailable, "Access denied"))?;
// Create bucket for directory
match self
.storage
.create_bucket(
&bucket,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
match self.storage.create_bucket(&bucket, session_context.credentials()).await {
Ok(_) => {
debug!(
event = EVENT_FTPS_DIRECTORY_STATE,
@@ -856,15 +777,7 @@ where
.map_err(|_| Error::new(ErrorKind::PermanentFileNotAvailable, "Access denied"))?;
// Check if bucket exists
match self
.storage
.head_bucket(
&bucket,
&session_context.principal.user_identity.credentials.access_key,
&session_context.principal.user_identity.credentials.secret_key,
)
.await
{
match self.storage.head_bucket(&bucket, session_context.credentials()).await {
Ok(_) => Ok(()),
Err(e) => {
error!(