|
|
@ -1,7 +1,6 @@ |
|
|
package dash |
|
|
package dash |
|
|
|
|
|
|
|
|
import ( |
|
|
import ( |
|
|
"bytes" |
|
|
|
|
|
"context" |
|
|
"context" |
|
|
"fmt" |
|
|
"fmt" |
|
|
"net/http" |
|
|
"net/http" |
|
|
@ -14,11 +13,9 @@ import ( |
|
|
"github.com/seaweedfs/seaweedfs/weed/admin/maintenance" |
|
|
"github.com/seaweedfs/seaweedfs/weed/admin/maintenance" |
|
|
"github.com/seaweedfs/seaweedfs/weed/cluster" |
|
|
"github.com/seaweedfs/seaweedfs/weed/cluster" |
|
|
"github.com/seaweedfs/seaweedfs/weed/credential" |
|
|
"github.com/seaweedfs/seaweedfs/weed/credential" |
|
|
"github.com/seaweedfs/seaweedfs/weed/filer" |
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/iam_pb" |
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/master_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/master_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/schema_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/schema_pb" |
|
|
@ -518,24 +515,11 @@ func (s *AdminServer) DeleteS3Bucket(bucketName string) error { |
|
|
|
|
|
|
|
|
// GetObjectStoreUsers retrieves object store users from identity.json
|
|
|
// GetObjectStoreUsers retrieves object store users from identity.json
|
|
|
func (s *AdminServer) GetObjectStoreUsers(ctx context.Context) ([]ObjectStoreUser, error) { |
|
|
func (s *AdminServer) GetObjectStoreUsers(ctx context.Context) ([]ObjectStoreUser, error) { |
|
|
s3cfg := &iam_pb.S3ApiConfiguration{} |
|
|
|
|
|
|
|
|
|
|
|
// Load IAM configuration from filer
|
|
|
|
|
|
err := s.WithFilerClient(func(client filer_pb.SeaweedFilerClient) error { |
|
|
|
|
|
var buf bytes.Buffer |
|
|
|
|
|
if err := filer.ReadEntry(nil, client, filer.IamConfigDirectory, filer.IamIdentityFile, &buf); err != nil { |
|
|
|
|
|
if err == filer_pb.ErrNotFound { |
|
|
|
|
|
// If file doesn't exist, return empty configuration
|
|
|
|
|
|
return nil |
|
|
|
|
|
} |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
if buf.Len() > 0 { |
|
|
|
|
|
return filer.ParseS3ConfigurationFromBytes(buf.Bytes(), s3cfg) |
|
|
|
|
|
} |
|
|
|
|
|
return nil |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
if s.credentialManager == nil { |
|
|
|
|
|
return []ObjectStoreUser{}, nil |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
s3cfg, err := s.credentialManager.LoadConfiguration(ctx) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
glog.Errorf("Failed to load IAM configuration: %v", err) |
|
|
glog.Errorf("Failed to load IAM configuration: %v", err) |
|
|
return []ObjectStoreUser{}, nil // Return empty list instead of error for UI
|
|
|
return []ObjectStoreUser{}, nil // Return empty list instead of error for UI
|
|
|
@ -1827,6 +1811,11 @@ func (s *AdminServer) Shutdown() { |
|
|
glog.Errorf("Failed to stop worker gRPC server: %v", err) |
|
|
glog.Errorf("Failed to stop worker gRPC server: %v", err) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Shutdown credential manager
|
|
|
|
|
|
if s.credentialManager != nil { |
|
|
|
|
|
s.credentialManager.Shutdown() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
glog.V(1).Infof("Admin server shutdown complete") |
|
|
glog.V(1).Infof("Admin server shutdown complete") |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|