diff --git a/lib/datasource/docker.js b/lib/datasource/docker.js index 899cfb8716c207b5fcce305c566d6d9fc3daa266..b2be4d11b509c01dde63543c11b991fae108c554 100644 --- a/lib/datasource/docker.js +++ b/lib/datasource/docker.js @@ -1,8 +1,10 @@ const dockerRegistryClient = require('docker-registry-client'); const got = require('got'); +const URL = require('url'); const parseLinkHeader = require('parse-link-header'); const wwwAuthenticate = require('www-authenticate'); const { isVersion, sortVersions } = require('../versioning/docker'); +const endpoints = require('../util/endpoints'); module.exports = { getDigest, @@ -38,10 +40,18 @@ async function getAuthHeaders(registry, repository) { // prettier-ignore const authUrl = `${authenticateHeader.parms.realm}?service=${authenticateHeader.parms.service}&scope=repository:${repository}:pull`; + const { host } = URL.parse(registry); + const opts = endpoints.find({ platform: 'docker', host }, { json: true }); + if (opts.username && opts.password) { + const auth = Buffer.from(`${opts.username}:${opts.password}`).toString( + 'base64' + ); + opts.headers = { Authorization: `Basic ${auth}` }; + } logger.debug( `Obtaining docker registry token for ${repository} using url ${authUrl}` ); - const { token } = (await got(authUrl, { json: true })).body; + const { token } = (await got(authUrl, opts)).body; // istanbul ignore if if (!token) { logger.warn('Failed to obtain docker registry token'); diff --git a/test/datasource/docker.spec.js b/test/datasource/docker.spec.js index b4da603993ac72e1d7b7887474dfeb6189272f4d..99768ff4bafd0cbb7e9fbfc46741c1cceeae14bf 100644 --- a/test/datasource/docker.spec.js +++ b/test/datasource/docker.spec.js @@ -1,12 +1,18 @@ const got = require('got'); const docker = require('../../lib/datasource/docker'); +const endpoints = require('../../lib/util/endpoints'); jest.mock('got'); +jest.mock('../../lib/util/endpoints'); describe('api/docker', () => { describe('getDigest', () => { beforeEach(() => { jest.resetAllMocks(); + endpoints.find.mockReturnValue({ + username: 'some-username', + password: 'some-password', + }); }); it('returns null if no token', async () => { got.mockReturnValueOnce({ body: {} });