github.com/viant/toolbox@v0.34.5/storage/s3/provider.go (about)

     1  package s3
     2  
     3  import (
     4  	"github.com/viant/toolbox/cred"
     5  	"os"
     6  	"path"
     7  	"path/filepath"
     8  	"strings"
     9  
    10  	"github.com/viant/toolbox/storage"
    11  	"github.com/viant/toolbox/url"
    12  )
    13  
    14  const ProviderScheme = "s3"
    15  
    16  func init() {
    17  	SetDefaultProvider()
    18  }
    19  
    20  func serviceProvider(credentialFile string) (storage.Service, error) {
    21  	s3config := &cred.Config{}
    22  	if credentialFile != "" {
    23  		if !strings.HasPrefix(credentialFile, "/") {
    24  			dir, _ := filepath.Abs(filepath.Dir(os.Args[0]))
    25  			credentialFile = path.Join(dir, credentialFile)
    26  		}
    27  		resource := url.NewResource(credentialFile)
    28  		err := resource.Decode(s3config)
    29  		if err != nil {
    30  			return nil, err
    31  		}
    32  	}
    33  	return NewService(s3config), nil
    34  }
    35  
    36  //SetProvider set s3 provider with dynamic credentials
    37  func SetDefaultProvider() {
    38  	storage.Registry().Registry[ProviderScheme] = serviceProvider
    39  }
    40  
    41  //SetProvider set s3 provider with supplied config
    42  func SetProvider(config *cred.Config) {
    43  	storage.Registry().Registry[ProviderScheme] = func(string) (storage.Service, error) {
    44  		return NewService(config), nil
    45  	}
    46  }