1
0
Fork 0
mirror of https://github.com/restic/restic.git synced 2025-03-23 00:00:04 +01:00
restic/backend/gcs/config.go

51 lines
1.1 KiB
Go
Raw Normal View History

package gcs
import (
"errors"
"strings"
)
// Config contains all configuration necessary to connect to an s3 compatible
// server.
type Config struct {
Endpoint string
UseHTTP bool
KeyID, Secret string
Bucket string
Prefix string
}
const Scheme = "gs"
const defaultPrefix = "restic"
const gcsEndpoint = "storage.googleapis.com"
// ParseConfig parses the string s and extracts the gcs config. The two
// supported configuration formats are gcs://bucketname/prefix and
// gcs:bucketname/prefix.
func ParseConfig(s string) (interface {}, error) {
if strings.HasPrefix(s, "gs://") {
s = s[5:]
} else if strings.HasPrefix(s, "gs:") {
s = s[3:]
} else {
return nil, errors.New(`gcs: config does not start with "gcs"`)
}
// be dfensive against wron user input and trim trailing slashes
data := strings.SplitN(strings.TrimRight(s, "/"), "/", 2)
if len(data) < 1 {
return nil, errors.New("gcs: invalid format, bucket name not found")
}
prefix := defaultPrefix
if len(data) > 1 {
prefix = data[1]
}
cfg := Config{
Endpoint: gcsEndpoint,
Bucket: data[0],
Prefix: prefix,
}
return cfg, nil
}