autobounty/bot/github.js

56 lines
2.0 KiB
JavaScript
Raw Normal View History

2018-01-22 15:49:04 +00:00
'use strict'
const https = require('https');
const config = require('../config');
2018-01-22 16:23:35 +00:00
// Returns the url for getting the labels of a request (Github API v3)
2018-01-22 15:49:04 +00:00
// req has req.issue.labels_url
const getLabelsURL = function (req) {
2018-01-22 20:21:31 +00:00
let url = req.body.issue.labels_url;
2018-01-22 15:49:04 +00:00
// Make the URL generic removing the name of the label
return url.replace('{/name}', '');
}
// Returns the bounty labelNames of the request, only for testing motives
const getLabelsMock = function (req) {
return new Promise((resolve, reject) => { resolve(req.body.issue.labels) });
}
2018-01-22 15:49:04 +00:00
// Returns all the bounty labelNames of a given issue (Github API v3)
const getLabels = function (req) {
if (config.debug) {
return getLabelsMock(req);
} else {
2018-02-27 12:25:41 +00:00
const path = getLabelsURL(req).replace('https://api.github.com', '');
const options = {
hostname: 'api.github.com',
path: path,
2018-03-01 11:14:03 +00:00
headers: { 'User-Agent': config.githubUsername }
};
return new Promise((resolve, reject) => {
const request = https.get(options, (response) => {
// handle http errors
if (response.statusCode < 200 || response.statusCode > 299) {
bot.error(response, 'Failed to load page, status code: ' + response.statusCode);
reject(new Error('Failed to load page, status code: ' + response.statusCode));
}
// temporary data holder
const body = [];
// on every content chunk, push it to the data array
response.on('data', (chunk) => body.push(chunk));
// we are done, resolve promise with those joined chunks
response.on('end', () => {
2018-02-27 12:25:41 +00:00
const labels = JSON.parse(body.join('')).map(labelObj => labelObj.name);
resolve(labels);
});
2018-01-22 15:49:04 +00:00
});
// handle connection errors of the request
request.on('error', (err) => reject(err))
2018-01-22 15:49:04 +00:00
});
}
2018-01-22 15:49:04 +00:00
}
2018-01-22 20:21:31 +00:00
module.exports = {
2018-01-22 22:43:58 +00:00
getLabels: getLabels
2018-01-22 20:21:31 +00:00
}