aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api/filer_util.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/s3api/filer_util.go')
-rw-r--r--weed/s3api/filer_util.go101
1 files changed, 101 insertions, 0 deletions
diff --git a/weed/s3api/filer_util.go b/weed/s3api/filer_util.go
index b6ac52c80..e4d7eb04f 100644
--- a/weed/s3api/filer_util.go
+++ b/weed/s3api/filer_util.go
@@ -7,6 +7,9 @@ import (
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
+ "github.com/chrislusf/seaweedfs/weed/pb/iam_pb"
+ proto "github.com/golang/protobuf/proto"
+ "google.golang.org/grpc"
"github.com/chrislusf/seaweedfs/weed/util"
)
@@ -81,6 +84,104 @@ func (s3a *S3ApiServer) getEntry(parentDirectoryPath, entryName string) (entry *
return filer_pb.GetEntry(s3a, fullPath)
}
+func loadS3config(iam *IdentityAccessManagement, option *S3ApiServerOption) error {
+ return pb.WithCachedGrpcClient(func(grpcConnection *grpc.ClientConn) error {
+ client := filer_pb.NewSeaweedFilerClient(grpcConnection)
+ resp, err := filer_pb.LookupEntry(client, &filer_pb.LookupDirectoryEntryRequest{
+ Directory: "/.configs",
+ Name: "s3identities",
+ })
+ if err != nil {
+ return err
+ }
+ for name, ident := range resp.Entry.Extended {
+ t := &Identity{
+ Name: name,
+ Credentials: nil,
+ Actions: nil,
+ }
+ identity := &iam_pb.Identity{}
+ if err := proto.Unmarshal(ident, identity); err != nil {
+ return err
+ }
+ for _, action := range identity.Actions {
+ t.Actions = append(t.Actions, Action(action))
+ }
+ for _, cred := range identity.Credentials {
+ t.Credentials = append(t.Credentials, &Credential{
+ AccessKey: cred.AccessKey,
+ SecretKey: cred.SecretKey,
+ })
+ glog.V(0).Infof("AccessKey %s, SecretKey: %s", cred.AccessKey, cred.SecretKey)
+ }
+ iam.identities = append(iam.identities, t)
+ }
+ return nil
+ }, option.FilerGrpcAddress, option.GrpcDialOption)
+}
+
+/* testing save
+func saveS3config(iam *IdentityAccessManagement, option *S3ApiServerOption) (error) {
+ return pb.WithCachedGrpcClient(func(grpcConnection *grpc.ClientConn) error {
+ client := filer_pb.NewSeaweedFilerClient(grpcConnection)
+ entry := &filer_pb.Entry{
+ Name: "s3identities",
+ IsDirectory: false,
+ Attributes: &filer_pb.FuseAttributes{
+ Mtime: time.Now().Unix(),
+ Crtime: time.Now().Unix(),
+ FileMode: uint32(0644),
+ Collection: "",
+ Replication: "",
+ },
+ Extended: make(map[string][]byte),
+ }
+ for _, identity := range iam.identities {
+ glog.V(0).Infof("get iam identities %s", identity.Name)
+ i := &iam_pb.Identity{
+ Name: identity.Name,
+ Credentials: []*iam_pb.Credential{},
+ Actions: []string{},
+ }
+ for _, cred := range identity.Credentials {
+ i.Credentials = append(i.Credentials, &iam_pb.Credential{
+ AccessKey: cred.AccessKey,
+ SecretKey: cred.SecretKey,
+ })
+ }
+ for _, action := range identity.Actions {
+ i.Actions = append(i.Actions, string(action))
+ }
+ ident, err := proto.Marshal(i)
+ if err != nil {
+ return err
+ }
+ entry.Extended[identity.Name] = ident
+ }
+ _, err := filer_pb.LookupEntry(client, &filer_pb.LookupDirectoryEntryRequest{
+ Directory: "/.configs",
+ Name: "s3identities",
+ })
+ if err == filer_pb.ErrNotFound {
+ err = filer_pb.CreateEntry(client, &filer_pb.CreateEntryRequest{
+ Directory: "/.configs",
+ Entry: entry,
+ IsFromOtherCluster: false,
+ Signatures: nil,
+ })
+ } else {
+ err = filer_pb.UpdateEntry(client, &filer_pb.UpdateEntryRequest{
+ Directory: "/.configs",
+ Entry: entry,
+ IsFromOtherCluster: false,
+ Signatures: nil,
+ })
+ }
+ return err
+ },option.FilerGrpcAddress, option.GrpcDialOption)
+}
+*/
+
func objectKey(key *string) *string {
if strings.HasPrefix(*key, "/") {
t := (*key)[1:]