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 }