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
}