MCPcopy
hub / github.com/grafana/dskit / ParseWithMetadata

Function ParseWithMetadata

tenant/resolver.go:101–121  ·  view source on GitHub ↗

ParseWithMetadata returns the tenant ID and optional metadata from orgID(s). Metadata is nil if no metadata is present. The orgID format is "tenantID:key=value" or "tenantID:k1=v1:k2=v2". Examples: - 123456 (tenantID=123456, metadata=nil) - 123456:a=b (tenantID=123456, metadat

(orgIDs string)

Source from the content-addressed store, hash-verified

99// - 123456:a=b (tenantID=123456, metadata={a: b})
100// - 123456:a=b:c=d (tenantID=123456, metadata={a: b, c: d})
101func ParseWithMetadata(orgIDs string) (tenantID string, m Metadata, err error) {
102 orgID, remaining, hasMoreIDs := stringsCut(orgIDs, tenantIDsSeparator)
103 tenantID, metadataString := splitTenantAndMetadata(orgID)
104 if err := ValidTenantID(tenantID); err != nil {
105 return "", Metadata{}, err
106 }
107 var nextOrgID string
108 for hasMoreIDs {
109 nextOrgID, remaining, hasMoreIDs = stringsCut(remaining, tenantIDsSeparator)
110 // We can compare the entire orgID, no need to split into tenant/metadata.
111 // The orgID is already guaranteed to be valid.
112 if orgID != nextOrgID {
113 return "", Metadata{}, user.ErrTooManyOrgIDs
114 }
115 }
116 m, err = ParseMetadata(metadataString)
117 if err != nil {
118 return "", Metadata{}, err
119 }
120 return tenantID, m, nil
121}
122
123type Resolver interface {
124 // TenantID returns exactly a single tenant ID from the context. It should be

Callers 1

ExtractWithMetadataFunction · 0.85

Calls 4

stringsCutFunction · 0.85
splitTenantAndMetadataFunction · 0.85
ValidTenantIDFunction · 0.85
ParseMetadataFunction · 0.85

Tested by

no test coverage detected