func secretManagerParseReference()

in pkg/berglas/reference.go [159:195]


func secretManagerParseReference(s string) (*Reference, error) {
	// 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 project from secret
	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 = ReferenceTypeSecretManager
	r.project = ss[0]
	r.name = ss[1]

	if u.Fragment != "" {
		r.version = u.Fragment
	}

	// Secrets cannot be nested
	if strings.Contains(r.name, "/") {
		return nil, fmt.Errorf("invalid secret name %q", r.name)
	}

	// Parse destination
	path, err := refExtractFilepath(r.name, u.Query().Get("destination"))
	if err != nil {
		return nil, err
	}
	r.filepath = path

	return &r, nil
}