UNPKG

bit-bin

Version:

<a href="https://opensource.org/licenses/Apache-2.0"><img alt="apache" src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a> <a href="https://github.com/teambit/bit/blob/master/CONTRIBUTING.md"><img alt="prs" src="https://img.shields.io/b

255 lines (194 loc) 6.66 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = loginToBitSrc; function _http() { const data = _interopRequireDefault(require("http")); _http = function () { return data; }; return data; } function _uuid() { const data = _interopRequireDefault(require("uuid")); _uuid = function () { return data; }; return data; } function _open() { const data = _interopRequireDefault(require("open")); _open = function () { return data; }; return data; } function _os() { const data = _interopRequireDefault(require("os")); _os = function () { return data; }; return data; } function _chalk() { const data = _interopRequireDefault(require("chalk")); _chalk = function () { return data; }; return data; } function _url() { const data = _interopRequireDefault(require("url")); _url = function () { return data; }; return data; } function _globalConfig() { const data = require("../../api/consumer/lib/global-config"); _globalConfig = function () { return data; }; return data; } function _constants() { const data = require("../../constants"); _constants = function () { return data; }; return data; } function _exceptions() { const data = require("../exceptions"); _exceptions = function () { return data; }; return data; } function _logger() { const data = _interopRequireDefault(require("../../logger/logger")); _logger = function () { return data; }; return data; } function _generalError() { const data = _interopRequireDefault(require("../../error/general-error")); _generalError = function () { return data; }; return data; } function _registry() { const data = require("../../registry"); _registry = function () { return data; }; return data; } const ERROR_RESPONSE = 500; const DEFAULT_PORT = 8085; const REDIRECT = 302; function loginToBitSrc(port, suppressBrowserLaunch, npmrcPath, skipRegistryConfig, machineName) { let actualNpmrcPath = npmrcPath; return new Promise((resolve, reject) => { const clientGeneratedId = (0, _uuid().default)(); if ((0, _globalConfig().getSync)(_constants().CFG_USER_TOKEN_KEY)) { return resolve({ isAlreadyLoggedIn: true }); } const server = _http().default.createServer((request, response) => { const closeConnection = statusCode => { if (statusCode) response.statusCode = statusCode; response.end(); server.close(); }; if (request.method !== 'GET') { _logger().default.errorAndAddBreadCrumb('login.loginToBitSrc', 'received non get request, closing connection'); closeConnection(); reject(new (_exceptions().LoginFailed)()); } try { // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! const { clientId, redirectUri, username, token } = _url().default.parse(request.url, true).query || {}; let writeToNpmrcError = false; if (clientGeneratedId !== clientId) { _logger().default.errorAndAddBreadCrumb('login.loginToBitSrc', 'clientId mismatch, expecting: {clientGeneratedId} got {clientId}', { clientGeneratedId, clientId }); closeConnection(ERROR_RESPONSE); reject(new (_exceptions().LoginFailed)()); } (0, _globalConfig().setSync)(_constants().CFG_USER_TOKEN_KEY, token); const configuredRegistry = (0, _globalConfig().getSync)(_constants().CFG_REGISTRY_URL_KEY); if (!skipRegistryConfig) { try { if (!configuredRegistry) { // some packages might have links in package-lock.json to the previous registry // this makes sure to have also the auth-token of the previous registry. // (the @bit:registry part points only to the current registry). // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! actualNpmrcPath = (0, _registry().npmLogin)(token, npmrcPath, _constants().PREVIOUSLY_DEFAULT_REGISTRY_URL); } // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! actualNpmrcPath = (0, _registry().npmLogin)(token, npmrcPath, configuredRegistry || _constants().DEFAULT_REGISTRY_URL); } catch (e) { actualNpmrcPath = e.path; writeToNpmrcError = true; } } response.writeHead(REDIRECT, { Location: redirectUri }); closeConnection(); resolve({ username, npmrcPath: actualNpmrcPath, // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX! writeToNpmrcError }); } catch (err) { _logger().default.error(`err on login: ${err}`); closeConnection(ERROR_RESPONSE); reject(new (_exceptions().LoginFailed)()); } }); _logger().default.debugAndAddBreadCrumb('login.loginToBitSrc', `initializing login server on port: ${port || DEFAULT_PORT}`); // @ts-ignore server.listen(port || DEFAULT_PORT, err => { if (err) { _logger().default.errorAndAddBreadCrumb('login.loginToBitSrc', 'something bad happened', {}, err); reject(new (_exceptions().LoginFailed)()); } const encoded = encodeURI(`${(0, _globalConfig().getSync)(_constants().CFG_HUB_LOGIN_KEY) || _constants().DEFAULT_HUB_LOGIN}?port=${port || DEFAULT_PORT}&clientId=${clientGeneratedId}&responseType=token&deviceName=${machineName || _os().default.hostname()}&os=${process.platform}`); if (!suppressBrowserLaunch) { console.log(_chalk().default.yellow(`Your browser has been opened to visit:\n${encoded}`)); // eslint-disable-line no-console (0, _open().default)(encoded, { url: true }); } else { console.log(_chalk().default.yellow(`Go to the following link in your browser::\n${encoded}`)); // eslint-disable-line no-console } }); server.on('error', e => { // @ts-ignore if (e.code === 'EADDRINUSE') { // @ts-ignore reject(new (_generalError().default)(`port: ${e.port} already in use, please run bit login --port <port>`)); } reject(e); }); return {}; }); }