func storageParseReference()

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
}