From 57e428a49b5651870c3207efe2ab77663e300fcf Mon Sep 17 00:00:00 2001 From: Paul Melnikow Date: Wed, 29 Mar 2017 19:29:33 -0400 Subject: [PATCH] Fetch Bower data using libraries.io - Avoid downloading bower packages via git - Service is well resourced: https://libraries.io/team - Same service used by https://bower.io/search/ --- package.json | 1 - server.js | 97 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 60 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index c37363f76a151..d47af95b29e09 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "url": "https://github.com/badges/shields" }, "dependencies": { - "bower": "~1.7.9", "camp": "~16.2.3", "chrome-web-store-item-property": "~1.1.2", "dot": "~1.0.3", diff --git a/server.js b/server.js index 6ae0fe7d3adeb..857c16afbe13c 100644 --- a/server.js +++ b/server.js @@ -4280,51 +4280,74 @@ cache(function(data, match, sendBadge, request) { // Bower version integration. camp.route(/^\/bower\/v\/(.*)\.(svg|png|gif|jpg|json)$/, -cache(function(data, match, sendBadge, request) { - var repo = match[1]; // eg, `bootstrap`. - var format = match[2]; - var badgeData = getBadgeData('bower', data); - var bower = require('bower'); - bower.commands.info(repo, 'version') - .on('error', function() { +cache((data, match, sendBadge, request) => { + const repo = match[1]; // eg, `bootstrap`. + const format = match[2]; + const badgeData = getBadgeData('bower', data); + + // API doc: https://libraries.io/api#project + const options = { + method: 'GET', + json: true, + uri: `https://libraries.io/api/bower/${repo}`, + }; + if (serverSecrets && serverSecrets.libraries_io_api_key) { + options.qs = { + api_key: serverSecrets.libraries_io_api_key, + }; + } + request(options, (err, res, data) => { + if (err != null) { badgeData.text[1] = 'inaccessible'; sendBadge(format, badgeData); - }) - .on('end', function(version) { - try { - var vdata = versionColor(version); - badgeData.text[1] = vdata.version; - badgeData.colorscheme = vdata.color; - sendBadge(format, badgeData); - } catch(e) { - badgeData.text[1] = 'void'; - sendBadge(format, badgeData); - } - }); + return; + } + try { + const version = data.latest_stable_release.name; + const vdata = versionColor(version); + badgeData.text[1] = vdata.version; + badgeData.colorscheme = vdata.color; + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'void'; + sendBadge(format, badgeData); + } + }); })); // Bower license integration. camp.route(/^\/bower\/l\/(.*)\.(svg|png|gif|jpg|json)$/, -cache(function(data, match, sendBadge, request) { - var repo = match[1]; // eg, `bootstrap`. - var format = match[2]; - var badgeData = getBadgeData('bower', data); - var bower = require('bower'); - bower.commands.info(repo, 'license') - .on('error', function() { +cache((data, match, sendBadge, request) => { + const repo = match[1]; // eg, `bootstrap`. + const format = match[2]; + const badgeData = getBadgeData('bower', data); + // API doc: https://libraries.io/api#project + const options = { + method: 'GET', + json: true, + uri: `https://libraries.io/api/bower/${repo}`, + }; + if (serverSecrets && serverSecrets.libraries_io_api_key) { + options.qs = { + api_key: serverSecrets.libraries_io_api_key, + }; + } + request(options, (err, res, data) => { + if (err != null) { badgeData.text[1] = 'inaccessible'; sendBadge(format, badgeData); - }) - .on('end', function(license) { - try { - badgeData.text[1] = license; - badgeData.colorscheme = 'blue'; - sendBadge(format, badgeData); - } catch(e) { - badgeData.text[1] = 'void'; - sendBadge(format, badgeData); - } - }); + return; + } + try { + const license = data.normalized_licenses[0]; + badgeData.text[1] = license; + badgeData.colorscheme = 'blue'; + sendBadge(format, badgeData); + } catch(e) { + badgeData.text[1] = 'void'; + sendBadge(format, badgeData); + } + }); })); // Wheelmap integration.