67 lines
1.3 KiB
Go
67 lines
1.3 KiB
Go
package backend
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/snyk/driftctl/pkg/iac/config"
|
|
)
|
|
|
|
var supportedBackends = []string{
|
|
BackendKeyFile,
|
|
BackendKeyS3,
|
|
BackendKeyHTTP,
|
|
BackendKeyHTTPS,
|
|
BackendKeyTFCloud,
|
|
BackendKeyGS,
|
|
}
|
|
|
|
type Backend io.ReadCloser
|
|
|
|
type Options struct {
|
|
Headers map[string]string
|
|
TFCloudToken string
|
|
TFCloudEndpoint string
|
|
}
|
|
|
|
func IsSupported(backend string) bool {
|
|
for _, b := range supportedBackends {
|
|
if b == backend {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func GetBackend(config config.SupplierConfig, opts *Options) (Backend, error) {
|
|
backend := config.Backend
|
|
|
|
if !IsSupported(backend) {
|
|
return nil, errors.Errorf("Unsupported backend '%s'", backend)
|
|
}
|
|
|
|
switch backend {
|
|
case BackendKeyFile:
|
|
return NewFileReader(config.Path)
|
|
case BackendKeyS3:
|
|
return NewS3Reader(config.Path)
|
|
case BackendKeyHTTP:
|
|
fallthrough
|
|
case BackendKeyHTTPS:
|
|
return NewHTTPReader(&http.Client{}, fmt.Sprintf("%s://%s", config.Backend, config.Path), opts)
|
|
case BackendKeyTFCloud:
|
|
return NewTFCloudReader(config.Path, opts), nil
|
|
case BackendKeyGS:
|
|
return NewGSReader(config.Path)
|
|
default:
|
|
return nil, errors.Errorf("Unsupported backend '%s'", backend)
|
|
}
|
|
}
|
|
|
|
func GetSupportedBackends() []string {
|
|
return supportedBackends[1:]
|
|
}
|