|
|
@ -14,6 +14,8 @@ import ( |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/remote_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/remote_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/remote_storage" |
|
|
"github.com/seaweedfs/seaweedfs/weed/remote_storage" |
|
|
"github.com/seaweedfs/seaweedfs/weed/util" |
|
|
"github.com/seaweedfs/seaweedfs/weed/util" |
|
|
|
|
|
"golang.org/x/oauth2" |
|
|
|
|
|
"golang.org/x/oauth2/google" |
|
|
"google.golang.org/api/iterator" |
|
|
"google.golang.org/api/iterator" |
|
|
"google.golang.org/api/option" |
|
|
"google.golang.org/api/option" |
|
|
) |
|
|
) |
|
|
@ -54,7 +56,27 @@ func (s gcsRemoteStorageMaker) Make(conf *remote_pb.RemoteConf) (remote_storage. |
|
|
|
|
|
|
|
|
googleApplicationCredentials = util.ResolvePath(googleApplicationCredentials) |
|
|
googleApplicationCredentials = util.ResolvePath(googleApplicationCredentials) |
|
|
|
|
|
|
|
|
c, err := storage.NewClient(context.Background(), option.WithCredentialsFile(googleApplicationCredentials)) |
|
|
|
|
|
|
|
|
var clientOpts []option.ClientOption |
|
|
|
|
|
if googleApplicationCredentials != "" { |
|
|
|
|
|
var data []byte |
|
|
|
|
|
var err error |
|
|
|
|
|
if strings.HasPrefix(googleApplicationCredentials, "{") { |
|
|
|
|
|
data = []byte(googleApplicationCredentials) |
|
|
|
|
|
} else { |
|
|
|
|
|
data, err = os.ReadFile(googleApplicationCredentials) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return nil, fmt.Errorf("failed to read credentials file %s: %v", googleApplicationCredentials, err) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
creds, err := google.CredentialsFromJSON(context.Background(), data, storage.ScopeFullControl) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
return nil, fmt.Errorf("failed to parse credentials: %v", err) |
|
|
|
|
|
} |
|
|
|
|
|
httpClient := oauth2.NewClient(context.Background(), creds.TokenSource) |
|
|
|
|
|
clientOpts = append(clientOpts, option.WithHTTPClient(httpClient), option.WithoutAuthentication()) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
c, err := storage.NewClient(context.Background(), clientOpts...) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return nil, fmt.Errorf("failed to create client: %w", err) |
|
|
return nil, fmt.Errorf("failed to create client: %w", err) |
|
|
} |
|
|
} |
|
|
|