func()

in internal/conn/storage/credcache.go [157:193]


func (c *credCache) refreshCred(ctx context.Context, now time.Time) error {
	if c.fakeRefreshCred != nil {
		return c.fakeRefreshCred(ctx, now)
	}
	start := now.Truncate(time.Second)
	expiry := start.Add(7 * 24 * time.Hour)

	cred, err := c.cli.GetUserDelegationCredential(
		ctx,
		service.KeyInfo{
			Expiry: toPtr(expiry.UTC().Format(sas.TimeFormat)),
			Start:  toPtr(start.UTC().Format(sas.TimeFormat)),
		},
		nil,
	)
	if err != nil {
		current := c.cred.Load()
		if current == nil {
			current = &credData{}
		}
		if current.expires.Before(c.now()) {
			cd := &credData{
				expires: current.expires,
				err:     err,
			}
			c.cred.Store(cd)
		}
		return err
	}
	cd := &credData{
		cred:    cred,
		expires: expiry,
	}

	c.cred.Store(cd)
	return nil
}