mirror of
https://github.com/docker/compose.git
synced 2026-10-12 02:13:08 +00:00
refactor(registry): rename isExpectedMiss and trim comments
Rename isExpectedMiss to isSessionUnavailable, after what it reports, and shorten or drop doc comments in the Docker Desktop credentials provider. Signed-off-by: Alano Terblanche <[email protected]>
This commit is contained in:
committed by
Nicolas De loof
parent
dee031bb1d
commit
5ca76d57f8
@@ -34,14 +34,13 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
// desktopLookupTimeout bounds a lookup: the SDK has no default timeout and
|
||||
// containerd's credential callback has no context.
|
||||
// desktopLookupTimeout limits connection time in case of hanging or
|
||||
// unexpected request delay by the secrets engine.
|
||||
desktopLookupTimeout = 5 * time.Second
|
||||
sessionExpirySkew = 30 * time.Second
|
||||
// sessionTTL is how long a token without a readable expiry is reused.
|
||||
sessionTTL = time.Minute
|
||||
// retryInterval is how long Desktop is not asked again after a lookup
|
||||
// found no usable session, so a command does not wait on it per image.
|
||||
// retryInterval is how long Desktop is not asked again after a failed lookup.
|
||||
retryInterval = time.Minute
|
||||
)
|
||||
|
||||
@@ -57,10 +56,6 @@ type hubSessions interface {
|
||||
|
||||
var _ hubSessions = dockerhub.ClientAuth(nil)
|
||||
|
||||
// Sessions belong to the Desktop user, not to a config file, so every provider
|
||||
// in the process shares them. Each token is only sent to the registry of its
|
||||
// own environment: the engine resolves docker.io to production even when
|
||||
// Desktop runs in stage mode.
|
||||
var (
|
||||
sharedHubSession = newDesktopSession("Docker Hub", IndexServer)
|
||||
sharedStagingHubSession = newDesktopSession("Docker Hub staging", StagingIndexServer, dockerhub.Staging())
|
||||
@@ -215,8 +210,6 @@ func (s *desktopSession) fetch() (clitypes.AuthConfig, time.Time, error) {
|
||||
}, validUntil, nil
|
||||
}
|
||||
|
||||
// sessionExpiry reads the expiry from the session claims, or from the JWT when
|
||||
// the claims have none.
|
||||
func sessionExpiry(session dockerhub.UserSession) (time.Time, bool) {
|
||||
if exp := session.Claims.ExpiresAt; exp != nil {
|
||||
return exp.Time, true
|
||||
@@ -224,7 +217,6 @@ func sessionExpiry(session dockerhub.UserSession) (time.Time, bool) {
|
||||
return jwtExpiry(session.AccessToken)
|
||||
}
|
||||
|
||||
// jwtExpiry does not verify the signature: the registry verifies the token.
|
||||
func jwtExpiry(token string) (time.Time, bool) {
|
||||
parts := strings.Split(token, ".")
|
||||
if len(parts) != 3 {
|
||||
@@ -244,16 +236,16 @@ func jwtExpiry(token string) (time.Time, bool) {
|
||||
}
|
||||
|
||||
func logDesktopFallback(name string, err error) {
|
||||
if isExpectedMiss(err) {
|
||||
if isSessionUnavailable(err) {
|
||||
logrus.Debugf("no %s session available from Docker Desktop, using Docker CLI credentials: %v", name, err)
|
||||
return
|
||||
}
|
||||
logrus.Warnf("Could not use the %s session from Docker Desktop, using Docker CLI credentials instead: %v", name, err)
|
||||
}
|
||||
|
||||
// isExpectedMiss reports Desktop not running or nobody signed in. An expired
|
||||
// session is one: Desktop keeps the token fresh while the user is signed in.
|
||||
// dockerhub.ErrNoDefaultProfile wraps dockerhub.ErrNoSession.
|
||||
func isExpectedMiss(err error) bool {
|
||||
// isSessionUnavailable reports Desktop not running or nobody signed in. An
|
||||
// expired session counts too: Desktop keeps the token fresh while the user is
|
||||
// signed in. dockerhub.ErrNoDefaultProfile wraps dockerhub.ErrNoSession.
|
||||
func isSessionUnavailable(err error) bool {
|
||||
return errors.Is(err, seclient.ErrSecretsEngineNotAvailable) || errors.Is(err, dockerhub.ErrNoSession) || errors.Is(err, errSessionExpired)
|
||||
}
|
||||
|
||||
@@ -352,21 +352,21 @@ func TestDesktopAuthProvider_RetriesAfterInterval(t *testing.T) {
|
||||
assert.Equal(t, hub.sessionCalls.Load(), int32(2))
|
||||
}
|
||||
|
||||
func TestIsExpectedMiss(t *testing.T) {
|
||||
func TestIsSessionUnavailable(t *testing.T) {
|
||||
for _, err := range []error{
|
||||
fmt.Errorf("%w: dial unix engine.sock", seclient.ErrSecretsEngineNotAvailable),
|
||||
dockerhub.ErrNoSession,
|
||||
dockerhub.ErrNoDefaultProfile,
|
||||
errSessionExpired,
|
||||
} {
|
||||
assert.Assert(t, isExpectedMiss(err), err)
|
||||
assert.Assert(t, isSessionUnavailable(err), err)
|
||||
}
|
||||
for _, err := range []error{
|
||||
seclient.ErrAccessDenied,
|
||||
errNoUsername,
|
||||
context.DeadlineExceeded,
|
||||
} {
|
||||
assert.Assert(t, !isExpectedMiss(err), err)
|
||||
assert.Assert(t, !isSessionUnavailable(err), err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user