diff --git a/src/utils/RegHubUtil.js b/src/utils/RegHubUtil.js index bcf0136560..c68e171f08 100644 --- a/src/utils/RegHubUtil.js +++ b/src/utils/RegHubUtil.js @@ -6,7 +6,7 @@ import hubUtil from '../utils/HubUtil'; import repositoryServerActions from '../actions/RepositoryServerActions'; import tagServerActions from '../actions/TagServerActions'; -let REGHUB2_ENDPOINT = process.env.REGHUB2_ENDPOINT || 'https://registry.hub.docker.com/v2'; +let REGHUB2_ENDPOINT = process.env.REGHUB2_ENDPOINT || 'https://hub.docker.com/v2'; let searchReq = null; module.exports = { @@ -73,7 +73,7 @@ module.exports = { } request.get({ - url: `${REGHUB2_ENDPOINT}/repositories/${name}`, + url: `${REGHUB2_ENDPOINT}/repositories/${name}` }, (error, response, body) => { if (error) { repositoryServerActions.error({error}); @@ -104,10 +104,14 @@ module.exports = { if (response.statusCode === 200) { let data = JSON.parse(body); tagServerActions.tagsUpdated({repo, tags: data.results || []}); - if (callback) { callback(null, data.results || []); } + if (callback) { + return callback(null, data.results || []); + } } else { repositoryServerActions.error({repo}); - if (callback) { callback(new Error('Failed to fetch tags for repo')); } + if (callback) { + return callback(new Error('Failed to fetch tags for repo')); + } } }); }, @@ -115,61 +119,84 @@ module.exports = { // Returns the base64 encoded index token or null if no token exists repos: function (callback) { repositoryServerActions.reposLoading({repos: []}); - + let namespaces = []; + // Get Orgs for user hubUtil.request({ - url: `${REGHUB2_ENDPOINT}/namespaces/`, - }, (error, response, body) => { - if (error) { - repositoryServerActions.error({error}); - if (callback) { callback(error); } - return; + url: `${REGHUB2_ENDPOINT}/user/orgs/?page_size=50` + }, (orgError, orgResponse, orgBody) => { + if (orgError) { + repositoryServerActions.error({orgError}); + if (callback) { + return callback(orgError); + } + return null; } - - if (response.statusCode !== 200) { + if (orgResponse.statusCode !== 200) { let generalError = new Error('Failed to fetch repos'); repositoryServerActions.error({error: generalError}); - if (callback) { callback({error: generalError}); } - return; + if (callback) { + callback({error: generalError}); + } + return null; + } + try { + let orgs = JSON.parse(orgBody); + orgs.results.map((org) => { + namespaces.push(org.orgname); + }); + // Add current user + namespaces.push(hubUtil.username()); + } catch(jsonError) { + repositoryServerActions.error({jsonError}); + if (callback) { + return callback(jsonError); + } } - let data = JSON.parse(body); - let namespaces = data.namespaces; + async.map(namespaces, (namespace, cb) => { hubUtil.request({ url: `${REGHUB2_ENDPOINT}/repositories/${namespace}` }, (error, response, body) => { - if (error) { - repositoryServerActions.error({error}); - if (callback) { callback(error); } - return; - } - - if (response.statusCode !== 200) { - repositoryServerActions.error({error: new Error('Could not fetch repository information from Docker Hub.')}); - return; - } - - let data = JSON.parse(body); - cb(null, data.results); - }); - }, (error, lists) => { if (error) { repositoryServerActions.error({error}); - if (callback) { callback(error); } - return; + if (callback) { + callback(error); + } + return null; } - let repos = []; - for (let list of lists) { - repos = repos.concat(list); + if (response.statusCode !== 200) { + repositoryServerActions.error({error: new Error('Could not fetch repository information from Docker Hub.')}); + return null; } - _.each(repos, repo => { - repo.is_user_repo = true; - }); + let data = JSON.parse(body); + cb(null, data.results); + }); + }, (error, lists) => { + if (error) { + repositoryServerActions.error({error}); + if (callback) { + callback(error); + } + return null; + } - repositoryServerActions.reposUpdated({repos}); - if (callback) { callback(null, repos); } + let repos = []; + for (let list of lists) { + repos = repos.concat(list); + } + + _.each(repos, repo => { + repo.is_user_repo = true; + }); + + repositoryServerActions.reposUpdated({repos}); + if (callback) { + return callback(null, repos); + } + return null; }); }); }