in pkg/berglas/reference.go [197:233]
func storageParseReference(s string) (*Reference, error) {
// Remove any leading slashes (it messes up bucket names)
s = strings.TrimPrefix(s, "/")
// Parse the remainder as a URL to extract any query params
u, err := url.Parse(s)
if err != nil {
return nil, fmt.Errorf("failed to parse secrets reference as url: %w", err)
}
// Separate bucket from path
ss := strings.SplitN(u.Path, "/", 2)
if len(ss) < 2 {
return nil, fmt.Errorf("invalid secret format %q", s)
}
// Create the reference
var r Reference
r.typ = ReferenceTypeStorage
r.bucket = ss[0]
r.object = ss[1]
if u.Fragment != "" {
if generation, err := strconv.ParseInt(u.Fragment, 0, 64); err == nil {
r.generation = generation
}
}
// Parse destination
path, err := refExtractFilepath(r.object, u.Query().Get("destination"))
if err != nil {
return nil, err
}
r.filepath = path
return &r, nil
}