func()

in azkustoingest/internal/resources/resources.go [170:213]


func (m *Manager) AuthContext(ctx context.Context) (string, error) {
	m.authLock.Lock()
	defer m.authLock.Unlock()
	if m.authTokenCacheExpiration.After(time.Now().UTC()) {
		return m.kustoToken.AuthContext, nil
	}

	var dataset v1.Dataset
	retryCtx := backoff.WithContext(initBackoff(), ctx)
	err := backoff.Retry(func() error {
		var err error
		dataset, err = m.client.Mgmt(ctx, "NetDefaultDB", kql.New(".get kusto identity token"))
		if err == nil {
			return nil
		}
		if httpErr, ok := err.(*kustoErrors.HttpError); ok {
			// only retry in case of throttling
			if httpErr.IsThrottled() {
				return err
			}
		}
		return backoff.Permanent(err)
	}, retryCtx)

	if err != nil {
		return "", fmt.Errorf("problem getting authorization context from Kusto via Mgmt: %s", err)
	}

	tokens, err := query.ToStructs[token](dataset)
	if err != nil {
		return "", err
	}
	if tokens == nil {
		return "", fmt.Errorf("call for AuthContext returned no Rows")
	}

	if len(tokens) != 1 {
		return "", fmt.Errorf("call for AuthContext returned more than 1 Row")
	}

	m.kustoToken = tokens[0]
	m.authTokenCacheExpiration = time.Now().UTC().Add(time.Hour)
	return tokens[0].AuthContext, nil
}