From cc4df96fe2b8bcd951cae20d1af6e70258a9eec0 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Fri, 23 Mar 2018 15:56:44 +0100
Subject: [PATCH] fix: return early if docker token acquisition fails

---
 lib/datasource/docker.js | 31 ++++++++++++++++++++++++-------
 1 file changed, 24 insertions(+), 7 deletions(-)

diff --git a/lib/datasource/docker.js b/lib/datasource/docker.js
index 23fb2efb17..4a115d0d49 100644
--- a/lib/datasource/docker.js
+++ b/lib/datasource/docker.js
@@ -38,13 +38,21 @@ async function getAuthHeaders(registry, repository) {
       Authorization: `Bearer ${token}`,
       Accept: 'application/vnd.docker.distribution.manifest.v2+json',
     };
-  } catch (err) {
-    // istanbul ignore if
+  } catch (err) /* istanbul ignore next */ {
+    if (err.statusCode === 401) {
+      logger.info({ registry, repository }, 'Unauthorized docker lookup');
+      logger.debug({
+        err,
+        message: err.message,
+        body: err.response ? err.response.body : undefined,
+      });
+      return null;
+    }
     if (err.statusCode >= 500 && err.statusCode < 600) {
       logger.warn({ err }, 'docker registry failure: internal error');
       throw new Error('registry-failure');
     }
-    logger.info('Error obtaining docker token');
+    logger.warn('Error obtaining docker token');
     return null;
   }
 }
@@ -56,6 +64,10 @@ async function getDigest(registry, name, tag = 'latest') {
   try {
     const url = `${massagedRegistry}/v2/${repository}/manifests/${tag}`;
     const headers = await getAuthHeaders(massagedRegistry, repository);
+    if (!headers) {
+      logger.info('No docker auth found - returning');
+      return null;
+    }
     headers.accept = 'application/vnd.docker.distribution.manifest.v2+json';
     const digest = (await got(url, { json: true, headers, timeout: 10000 }))
       .headers['docker-content-digest'];
@@ -63,10 +75,12 @@ async function getDigest(registry, name, tag = 'latest') {
     return digest;
   } catch (err) /* istanbul ignore next */ {
     if (err.statusCode === 401) {
-      logger.info(
-        { err, body: err.response ? err.response.body : undefined, name, tag },
-        'Lookup is unauthorized (private image)'
-      );
+      logger.info({ registry, repository }, 'Unauthorized docker lookup');
+      logger.debug({
+        err,
+        message: err.message,
+        body: err.response ? err.response.body : undefined,
+      });
       return null;
     }
     if (err.statusCode === 404) {
@@ -106,6 +120,9 @@ async function getTags(registry, name) {
   try {
     let url = `${massagedRegistry}/v2/${repository}/tags/list?n=10000`;
     const headers = await getAuthHeaders(massagedRegistry, repository);
+    if (!headers) {
+      return null;
+    }
     let tags = [];
     let page = 1;
     do {
-- 
GitLab