tyr-cli
Version:
A command line interface for hammer-io.
206 lines (148 loc) • 12.9 kB
JavaScript
;Object.defineProperty(exports, "__esModule", { value: true });exports.createRepository = exports.getRepositories = exports.getCurrentUser = exports.deleteGitHubToken = undefined;
/**
* Delete GitHub OAuth token.
*
* @param githubUrl
* @param username
* @param password
* @returns {Promise}
*/let deleteGitHubToken = exports.deleteGitHubToken = (() => {var _ref = _asyncToGenerator(
function* (githubUrl, username, password) {
log.verbose('Github Client deleteGithubToken()');
if (githubUrl) {
log.http(`DELETE ${githubUrl} - deleting github token for ${username}`);
return new Promise(function (resolve, reject) {
_superagent2.default.
delete(githubUrl).
set({ Authorization: authorizationUtil.basicAuthorization(username, password) }).
end(function (err) {
if (err) {
log.debug(`ERROR: DELETE ${githubUrl} - error deleting github token for ${username} -
${JSON.stringify({ status: err.status, message: err.message })}`);
if (err.response.status !== 404) {
reject(err);
} else {
resolve();
}
} else {
log.debug(`RESPONSE: DELETE DELETE ${githubUrl} - successfully deleted github token for ${username}`);
resolve();
}
});
});
}
return undefined;
});return function deleteGitHubToken(_x, _x2, _x3) {return _ref.apply(this, arguments);};})();
/**
* Request GitHub OAuth token.
*
* @param username github username
* @param password github password
* @param note the remark assigned to the given token in the user's GitHub account
* @returns Promise github token information if successful, error information otherwise
*/
/**
* Make a request to https://api.github.com/user, and authenticate with basic authentication
* @param username the username
* @param password the password
* @returns {Promise<any>} returns the user information
*/let getCurrentUser = exports.getCurrentUser = (() => {var _ref2 = _asyncToGenerator(
function* (username, password) {
log.debug(`Github Client getCurrentUser() - ${username}`);
log.http(`GET ${githubApiUrl}/user - getting current user information for ${username}`);
return new Promise(function (resolve, reject) {
_superagent2.default.
get(`${githubApiUrl}/user`).
set({
Accept: githubApiAccept,
Authorization:
authorizationUtil.basicAuthorization(username, password) }).
end(function (error, res) {
if (error) {
log.debug(`ERROR: GET ${githubApiUrl}/user - error getting current user information - ${{ status: error.status, message: error.message }}`);
reject(error);
} else {
log.debug(`RESPONSE: GET ${githubApiUrl}/user - successfully retrieved current user information for ${username}`);
resolve(res.body);
}
});
});
});return function getCurrentUser(_x4, _x5) {return _ref2.apply(this, arguments);};})();
/**
* Makes a GET request to the /users/repos?page=#.
*
* This gets the repositories for the signed in user. GitHub takes advantage of paging.
* @param username the username to get repositories for
* @param password the password of the user
* @param pageNumber the page number, GitHub takes advantage of paging, so we will pass in a page
* number which will get the page.
* @returns {Promise<any>}
*/let getRepositories = exports.getRepositories = (() => {var _ref3 = _asyncToGenerator(
function* (username, password, pageNumber) {
log.verbose('Github Client - getUserRepositories()');
log.http(`GET ${githubApiUrl}/users/repos?page=${pageNumber} - get user repositories`);
return new Promise(function (resolve, reject) {
_superagent2.default.
get(`${githubApiUrl}/user/repos?page=${pageNumber}`).
set({
Authorization: authorizationUtil.basicAuthorization(username, password) }).
end(function (err, res) {
if (err) {
log.debug(`ERROR: GET ${githubApiUrl}/user/repos - error getting user repositories -
${JSON.stringify({ status: err.status, message: err.message })}`);
reject(err);
} else {
log.debug(`RESPONSE: ${githubApiUrl}/user/repos - successfully got user repositories`);
resolve(res.body);
}
});
});
});return function getRepositories(_x6, _x7, _x8) {return _ref3.apply(this, arguments);};})();
/**
* Make a request to https://api.github.com/user/repos, and authenticate with basic auth
* @param repositoryName the repository name to create
* @param repositoryDescription the description of the repository
* @param credentials the password, username, and/or token of the user
* @param isPrivate flag to determine if a private project should be created or not
* @returns {Promise<any>}
*/let createRepository = exports.createRepository = (() => {var _ref4 = _asyncToGenerator(
function* (
repositoryName,
repositoryDescription,
credentials,
isPrivate)
{
log.verbose('Github Client createRepository()');
const payload = {
name: repositoryName,
description: repositoryDescription,
private: isPrivate };
let authorization;
if (credentials.token) {
authorization = authorizationUtil.tokenAuthorization(credentials.token);
} else {
authorization = authorizationUtil.basicAuthorization(
credentials.username,
credentials.password);
}
log.http(`POST ${githubApiUrl}/user/repos - creating github repository - ${JSON.stringify(payload)}`);
return new Promise(function (resolve, reject) {
_superagent2.default.
post(`${githubApiUrl}/user/repos`).
set({
Authorization: authorization }).
send(payload).
end(function (err) {
if (err) {
log.debug(`ERROR: POST ${githubApiUrl}/user/repos - error creating github repository -
${JSON.stringify({ status: err.status, message: err.message })}`);
reject(err);
} else {
log.debug(`RESPONSE: ${githubApiUrl}/user/repos - successfully created github repository`);
resolve();
}
});
});
});return function createRepository(_x9, _x10, _x11, _x12) {return _ref4.apply(this, arguments);};})();exports.requestGitHubToken = requestGitHubToken;var _superagent = require('superagent');var _superagent2 = _interopRequireDefault(_superagent);var _authorization = require('../utils/authorization');var authorizationUtil = _interopRequireWildcard(_authorization);var _winston = require('../utils/winston');function _interopRequireWildcard(obj) {if (obj && obj.__esModule) {return obj;} else {var newObj = {};if (obj != null) {for (var key in obj) {if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];}}newObj.default = obj;return newObj;}}function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _asyncToGenerator(fn) {return function () {var gen = fn.apply(this, arguments);return new Promise(function (resolve, reject) {function step(key, arg) {try {var info = gen[key](arg);var value = info.value;} catch (error) {reject(error);return;}if (info.done) {resolve(value);} else {return Promise.resolve(value).then(function (value) {step("next", value);}, function (err) {step("throw", err);});}}return step("next");});};} /* eslint-disable import/prefer-default-export */const githubApiUrl = 'https://api.github.com';const githubApiAccept = 'application/vnd.github.v3+json';const log = (0, _winston.getActiveLogger)();function requestGitHubToken(username, password, note = 'hammer-io token') {log.verbose('Github Client requestGithubToken', username);let request = _superagent2.default.post(`${githubApiUrl}/authorizations`).send({ scopes: ['read:org', 'user:email', 'repo_deployment', 'repo:status', 'public_repo', 'write:repo_hook', 'user', 'repo'], note });request = request.set({ 'Content-Type': 'application/json', Authorization: authorizationUtil.basicAuthorization(username, password) });log.http(`POST ${githubApiUrl}/authorizations - getting token for ${username}`);return new Promise((resolve, reject) => {// Create a GitHub token via the GitHub API, store GitHub token and URL.
request.end((err, res) => {if (err) {log.debug(`ERROR: ${githubApiUrl}/authorizations - error getting token for ${username} -
${JSON.stringify({ status: err.status, message: err.message })}`);log.debug(JSON.stringify(err));reject(err);} else {log.debug(`RESPONSE: ${githubApiUrl}/authorizations - successfully retrieved token for ${username}`);resolve({ token: res.body.token, url: res.body.url });}});});}