UNPKG

tyr-cli

Version:

A command line interface for hammer-io.

206 lines (148 loc) 12.9 kB
'use strict';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 });}});});}