123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775 |
- exports.id = 974;
- exports.ids = [974];
- exports.modules = {
- /***/ 62148:
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- var readline = __webpack_require__(51058);
- var defaultSpinnerString = 0;
- var defaultSpinnerDelay = 60;
- function defaultOnTick(msg) {
- this.clearLine(this.stream);
- this.stream.write(msg);
- };
- var Spinner = function(options){
- if(!(this instanceof Spinner)) return new Spinner(options)
- if(typeof options === "string"){
- options = { text: options };
- } else if(!options){
- options = {};
- }
- this.text = options.text || '';
- this.setSpinnerString(defaultSpinnerString);
- this.setSpinnerDelay(defaultSpinnerDelay);
- this.onTick = options.onTick || defaultOnTick;
- this.stream = options.stream || process.stdout;
- };
- Spinner.spinners = __webpack_require__(18138);
- Spinner.setDefaultSpinnerString = function(value) {
- defaultSpinnerString = value;
- return this;
- };
- Spinner.setDefaultSpinnerDelay = function(value) {
- defaultSpinnerDelay = value;
- return this;
- };
- Spinner.prototype.start = function() {
- if(this.stream === process.stdout && this.stream.isTTY !== true) {
- return this;
- }
- var current = 0;
- var self = this;
- var iteration = function() {
- var msg = self.text.indexOf('%s') > -1
- ? self.text.replace('%s', self.chars[current])
- : self.chars[current] + ' ' + self.text;
- self.onTick(msg);
- current = ++current % self.chars.length;
- };
- iteration();
- this.id = setInterval(iteration, this.delay);
- return this;
- };
- Spinner.prototype.isSpinning = function() {
- return this.id !== undefined;
- }
- Spinner.prototype.setSpinnerDelay = function(n) {
- this.delay = n;
- return this;
- };
- Spinner.prototype.setSpinnerString = function(str) {
- const map = mapToSpinner(str, this.spinners);
- this.chars = Array.isArray(map) ? map : map.split('');
- return this;
- };
- Spinner.prototype.setSpinnerTitle = function(str) {
- this.text = str;
- return this;
- }
- Spinner.prototype.stop = function(clear) {
- if(this.isSpinning === false) {
- return this;
- }
- clearInterval(this.id);
- this.id = undefined;
- if (clear) {
- this.clearLine(this.stream);
- }
- return this;
- };
- Spinner.prototype.clearLine = function(stream) {
- readline.clearLine(stream, 0);
- readline.cursorTo(stream, 0);
- return this;
- }
- // Helpers
- function isInt(value) {
- return (typeof value==='number' && (value%1)===0);
- }
- function mapToSpinner(value, spinners) {
- // Not an integer, return as strng
- if (!isInt(value)) {
- return value + '';
- }
- var length = Spinner.spinners.length;
- // Check if index is within bounds
- value = (value >= length) ? 0 : value;
- // If negative, count from the end
- value = (value < 0) ? length + value : value;
- return Spinner.spinners[value];
- }
- exports.Spinner = Spinner;
- /***/ }),
- /***/ 41595:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- const fs = __webpack_require__(35747);
- let isDocker;
- function hasDockerEnv() {
- try {
- fs.statSync('/.dockerenv');
- return true;
- } catch (_) {
- return false;
- }
- }
- function hasDockerCGroup() {
- try {
- return fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');
- } catch (_) {
- return false;
- }
- }
- module.exports = () => {
- if (isDocker === undefined) {
- isDocker = hasDockerEnv() || hasDockerCGroup();
- }
- return isDocker;
- };
- /***/ }),
- /***/ 82818:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- const os = __webpack_require__(12087);
- const fs = __webpack_require__(35747);
- const isDocker = __webpack_require__(41595);
- const isWsl = () => {
- if (process.platform !== 'linux') {
- return false;
- }
- if (os.release().toLowerCase().includes('microsoft')) {
- if (isDocker()) {
- return false;
- }
- return true;
- }
- try {
- return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft') ?
- !isDocker() : false;
- } catch (_) {
- return false;
- }
- };
- if (process.env.__IS_WSL_TEST__) {
- module.exports = isWsl;
- } else {
- module.exports = isWsl();
- }
- /***/ }),
- /***/ 78318:
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
- "use strict";
- const {promisify} = __webpack_require__(31669);
- const path = __webpack_require__(85622);
- const childProcess = __webpack_require__(63129);
- const fs = __webpack_require__(35747);
- const isWsl = __webpack_require__(82818);
- const isDocker = __webpack_require__(41595);
- const pAccess = promisify(fs.access);
- const pReadFile = promisify(fs.readFile);
- // Path to included `xdg-open`.
- const localXdgOpenPath = path.join(__dirname, 'xdg-open');
- /**
- Get the mount point for fixed drives in WSL.
- @inner
- @returns {string} The mount point.
- */
- const getWslDrivesMountPoint = (() => {
- // Default value for "root" param
- // according to https://docs.microsoft.com/en-us/windows/wsl/wsl-config
- const defaultMountPoint = '/mnt/';
- let mountPoint;
- return async function () {
- if (mountPoint) {
- // Return memoized mount point value
- return mountPoint;
- }
- const configFilePath = '/etc/wsl.conf';
- let isConfigFileExists = false;
- try {
- await pAccess(configFilePath, fs.constants.F_OK);
- isConfigFileExists = true;
- } catch (_) {}
- if (!isConfigFileExists) {
- return defaultMountPoint;
- }
- const configContent = await pReadFile(configFilePath, {encoding: 'utf8'});
- const configMountPoint = /root\s*=\s*(.*)/g.exec(configContent);
- if (!configMountPoint) {
- return defaultMountPoint;
- }
- mountPoint = configMountPoint[1].trim();
- mountPoint = mountPoint.endsWith('/') ? mountPoint : mountPoint + '/';
- return mountPoint;
- };
- })();
- module.exports = async (target, options) => {
- if (typeof target !== 'string') {
- throw new TypeError('Expected a `target`');
- }
- options = {
- wait: false,
- background: false,
- allowNonzeroExitCode: false,
- ...options
- };
- let command;
- let {app} = options;
- let appArguments = [];
- const cliArguments = [];
- const childProcessOptions = {};
- if (Array.isArray(app)) {
- appArguments = app.slice(1);
- app = app[0];
- }
- if (process.platform === 'darwin') {
- command = 'open';
- if (options.wait) {
- cliArguments.push('--wait-apps');
- }
- if (options.background) {
- cliArguments.push('--background');
- }
- if (app) {
- cliArguments.push('-a', app);
- }
- } else if (process.platform === 'win32' || (isWsl && !isDocker())) {
- const mountPoint = await getWslDrivesMountPoint();
- command = isWsl ?
- `${mountPoint}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe` :
- `${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`;
- cliArguments.push(
- '-NoProfile',
- '-NonInteractive',
- '–ExecutionPolicy',
- 'Bypass',
- '-EncodedCommand'
- );
- if (!isWsl) {
- childProcessOptions.windowsVerbatimArguments = true;
- }
- const encodedArguments = ['Start'];
- if (options.wait) {
- encodedArguments.push('-Wait');
- }
- if (app) {
- // Double quote with double quotes to ensure the inner quotes are passed through.
- // Inner quotes are delimited for PowerShell interpretation with backticks.
- encodedArguments.push(`"\`"${app}\`""`, '-ArgumentList');
- appArguments.unshift(target);
- } else {
- encodedArguments.push(`"${target}"`);
- }
- if (appArguments.length > 0) {
- appArguments = appArguments.map(arg => `"\`"${arg}\`""`);
- encodedArguments.push(appArguments.join(','));
- }
- // Using Base64-encoded command, accepted by PowerShell, to allow special characters.
- target = Buffer.from(encodedArguments.join(' '), 'utf16le').toString('base64');
- } else {
- if (app) {
- command = app;
- } else {
- // When bundled by Webpack, there's no actual package file path and no local `xdg-open`.
- const isBundled = !__dirname || __dirname === '/';
- // Check if local `xdg-open` exists and is executable.
- let exeLocalXdgOpen = false;
- try {
- await pAccess(localXdgOpenPath, fs.constants.X_OK);
- exeLocalXdgOpen = true;
- } catch (_) {}
- const useSystemXdgOpen = process.versions.electron ||
- process.platform === 'android' || isBundled || !exeLocalXdgOpen;
- command = useSystemXdgOpen ? 'xdg-open' : localXdgOpenPath;
- }
- if (appArguments.length > 0) {
- cliArguments.push(...appArguments);
- }
- if (!options.wait) {
- // `xdg-open` will block the process unless stdio is ignored
- // and it's detached from the parent even if it's unref'd.
- childProcessOptions.stdio = 'ignore';
- childProcessOptions.detached = true;
- }
- }
- cliArguments.push(target);
- if (process.platform === 'darwin' && appArguments.length > 0) {
- cliArguments.push('--args', ...appArguments);
- }
- const subprocess = childProcess.spawn(command, cliArguments, childProcessOptions);
- if (options.wait) {
- return new Promise((resolve, reject) => {
- subprocess.once('error', reject);
- subprocess.once('close', exitCode => {
- if (options.allowNonzeroExitCode && exitCode > 0) {
- reject(new Error(`Exited with code ${exitCode}`));
- return;
- }
- resolve(subprocess);
- });
- });
- }
- subprocess.unref();
- return subprocess;
- };
- /***/ }),
- /***/ 27974:
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- const open = __webpack_require__(78318);
- const uuid_1 = __webpack_require__(42277);
- const Debug = __webpack_require__(15158);
- const cli_spinner_1 = __webpack_require__(62148);
- const snyk = __webpack_require__(9146);
- const is_authed_1 = __webpack_require__(71771);
- const is_ci_1 = __webpack_require__(10090);
- const is_docker_1 = __webpack_require__(14953);
- const args_1 = __webpack_require__(94765);
- const config_1 = __webpack_require__(25425);
- const request_1 = __webpack_require__(52050);
- const errors_1 = __webpack_require__(55191);
- const errors_2 = __webpack_require__(55191);
- const token_expired_error_1 = __webpack_require__(79578);
- const misconfigured_auth_in_ci_error_1 = __webpack_require__(27747);
- const query_strings_1 = __webpack_require__(36479);
- const apiUrl = new URL(config_1.default.API);
- // Ensure user gets redirected to the login page
- if (apiUrl.host.startsWith('api.')) {
- apiUrl.host = apiUrl.host.replace(/^api\./, 'app.');
- }
- const debug = Debug('snyk-auth');
- let attemptsLeft = 0;
- function resetAttempts() {
- attemptsLeft = is_docker_1.isDocker() ? 60 : 3 * 60;
- }
- async function webAuth() {
- const token = uuid_1.v4(); // generate a random key
- apiUrl.pathname = '/login';
- apiUrl.searchParams.append('token', token);
- let urlStr = apiUrl.toString();
- // It's not optimal, but I have to parse args again here. Alternative is reworking everything about how we parse args
- const args = [args_1.args(process.argv).options];
- const utmParams = query_strings_1.getQueryParamsAsString(args);
- if (utmParams) {
- urlStr += '&' + utmParams;
- }
- // suppress this message in CI
- if (!is_ci_1.isCI()) {
- console.log(browserAuthPrompt(is_docker_1.isDocker(), urlStr));
- }
- else {
- return Promise.reject(misconfigured_auth_in_ci_error_1.MisconfiguredAuthInCI());
- }
- const spinner = new cli_spinner_1.Spinner('Waiting...');
- spinner.setSpinnerString('|/-\\');
- const ipFamily = await getIpFamily();
- try {
- spinner.start();
- if (!is_docker_1.isDocker()) {
- await setTimeout(() => {
- open(urlStr);
- }, 0);
- }
- return await testAuthComplete(token, ipFamily);
- }
- finally {
- spinner.stop(true);
- }
- }
- async function testAuthComplete(token, ipFamily) {
- const payload = {
- body: {
- token,
- },
- url: config_1.default.API + '/verify/callback',
- json: true,
- method: 'post',
- };
- if (ipFamily) {
- payload.family = ipFamily;
- }
- return new Promise((resolve, reject) => {
- debug(payload);
- request_1.makeRequest(payload, (error, res, body) => {
- debug(error, (res || {}).statusCode, body);
- if (error) {
- return reject(error);
- }
- if (res.statusCode !== 200) {
- return reject(errorForFailedAuthAttempt(res, body));
- }
- // we have success
- if (body.api) {
- return resolve({
- res,
- body,
- });
- }
- // we need to wait and poll again in a moment
- setTimeout(() => {
- attemptsLeft--;
- if (attemptsLeft > 0) {
- return resolve(testAuthComplete(token, ipFamily));
- }
- reject(token_expired_error_1.TokenExpiredError());
- }, 1000);
- });
- });
- }
- async function auth(apiToken) {
- let promise;
- resetAttempts();
- if (apiToken) {
- // user is manually setting the API token on the CLI - let's trust them
- promise = is_authed_1.verifyAPI(apiToken);
- }
- else {
- promise = webAuth();
- }
- return promise.then((data) => {
- const res = data.res;
- const body = res.body;
- debug(body);
- if (res.statusCode === 200 || res.statusCode === 201) {
- snyk.config.set('api', body.api);
- return ('\nYour account has been authenticated. Snyk is now ready to ' +
- 'be used.\n');
- }
- throw errorForFailedAuthAttempt(res, body);
- });
- }
- exports.default = auth;
- /**
- * Resolve an appropriate error for a failed attempt to authenticate
- *
- * @param res The response from the API
- * @param body The body of the failed authentication request
- */
- function errorForFailedAuthAttempt(res, body) {
- if (res.statusCode === 401 || res.statusCode === 403) {
- return errors_2.AuthFailedError(body.userMessage, res.statusCode);
- }
- else {
- const userMessage = body && body.userMessage;
- const error = new errors_1.CustomError(userMessage || 'Auth request failed');
- if (userMessage) {
- error.userMessage = userMessage;
- }
- error.code = res.statusCode;
- return error;
- }
- }
- async function getIpFamily() {
- const family = 6;
- try {
- // Dispatch a FORCED IPv6 request to test client's ISP and network capability
- await request_1.makeRequest({
- url: config_1.default.API + '/verify/callback',
- family,
- method: 'post',
- });
- return family;
- }
- catch (e) {
- return undefined;
- }
- }
- function browserAuthPrompt(isDocker, urlStr) {
- if (isDocker) {
- return ('\nTo authenticate your account, open the below URL in your browser.\n' +
- 'After your authentication is complete, return to this prompt to ' +
- 'start using Snyk.\n\n' +
- urlStr +
- '\n');
- }
- else {
- return ('\nNow redirecting you to our auth page, go ahead and log in,\n' +
- "and once the auth is complete, return to this prompt and you'll\n" +
- "be ready to start using snyk.\n\nIf you can't wait use this url:\n" +
- urlStr +
- '\n');
- }
- }
- /***/ }),
- /***/ 71771:
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.verifyAPI = exports.isAuthed = void 0;
- const snyk = __webpack_require__(9146);
- const config_1 = __webpack_require__(25425);
- const request_1 = __webpack_require__(52050);
- function isAuthed() {
- const token = snyk.config.get('api');
- return verifyAPI(token).then((res) => {
- return res.body.ok;
- });
- }
- exports.isAuthed = isAuthed;
- function verifyAPI(api) {
- const payload = {
- body: {
- api,
- },
- method: 'POST',
- url: config_1.default.API + '/verify/token',
- json: true,
- };
- return new Promise((resolve, reject) => {
- request_1.makeRequest(payload, (error, res, body) => {
- if (error) {
- return reject(error);
- }
- resolve({
- res,
- body,
- });
- });
- });
- }
- exports.verifyAPI = verifyAPI;
- /***/ }),
- /***/ 27747:
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.MisconfiguredAuthInCI = void 0;
- const custom_error_1 = __webpack_require__(17188);
- function MisconfiguredAuthInCI() {
- const errorMsg = 'Snyk is missing auth token in order to run inside CI. You must include ' +
- 'your API token as an environment value: `SNYK_TOKEN=12345678`';
- const error = new custom_error_1.CustomError(errorMsg);
- error.code = 401;
- error.strCode = 'noAuthInCI';
- error.userMessage = errorMsg;
- return error;
- }
- exports.MisconfiguredAuthInCI = MisconfiguredAuthInCI;
- /***/ }),
- /***/ 79578:
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.TokenExpiredError = void 0;
- const custom_error_1 = __webpack_require__(17188);
- function TokenExpiredError() {
- const errorMsg = 'Sorry, but your authentication token has now' +
- ' expired.\nPlease try to authenticate again.';
- const error = new custom_error_1.CustomError(errorMsg);
- error.code = 401;
- error.strCode = 'AUTH_TIMEOUT';
- error.userMessage = errorMsg;
- return error;
- }
- exports.TokenExpiredError = TokenExpiredError;
- /***/ }),
- /***/ 14953:
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.isDocker = void 0;
- const fs = __webpack_require__(35747);
- function isDocker() {
- return hasDockerEnv() || hasDockerCGroup();
- }
- exports.isDocker = isDocker;
- function hasDockerEnv() {
- try {
- fs.statSync('/.dockerenv');
- return true;
- }
- catch (_) {
- return false;
- }
- }
- function hasDockerCGroup() {
- try {
- return fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');
- }
- catch (_) {
- return false;
- }
- }
- /***/ }),
- /***/ 36479:
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
- "use strict";
- Object.defineProperty(exports, "__esModule", ({ value: true }));
- exports.getQueryParamsAsString = void 0;
- const url = __webpack_require__(78835);
- const os = __webpack_require__(12087);
- const is_docker_1 = __webpack_require__(14953);
- const sources_1 = __webpack_require__(71653);
- function getQueryParamsAsString(args) {
- var _a;
- const utm_source = process.env.SNYK_UTM_SOURCE || 'cli';
- const utm_medium = process.env.SNYK_UTM_MEDIUM || 'cli';
- const utm_campaign = process.env.SNYK_UTM_CAMPAIGN || sources_1.getIntegrationName(args) || 'cli';
- const utm_campaign_content = process.env.SNYK_UTM_CAMPAIGN_CONTENT || sources_1.getIntegrationVersion(args);
- const osType = (_a = os.type()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
- const docker = is_docker_1.isDocker().toString();
- const queryParams = new url.URLSearchParams({
- utm_medium,
- utm_source,
- utm_campaign,
- utm_campaign_content,
- os: osType,
- docker,
- });
- // It may not be set and URLSearchParams won't filter out undefined values
- if (!utm_campaign_content) {
- queryParams.delete('utm_campaign_content');
- }
- return queryParams.toString();
- }
- exports.getQueryParamsAsString = getQueryParamsAsString;
- /***/ }),
- /***/ 18138:
- /***/ ((module) => {
- "use strict";
- module.exports = JSON.parse('["|/-\\\\","⠂-–—–-","◐◓◑◒","◴◷◶◵","◰◳◲◱","▖▘▝▗","■□▪▫","▌▀▐▄","▉▊▋▌▍▎▏▎▍▌▋▊▉","▁▃▄▅▆▇█▇▆▅▄▃","←↖↑↗→↘↓↙","┤┘┴└├┌┬┐","◢◣◤◥",".oO°Oo.",".oO@*",["🌍","🌎","🌏"],"◡◡ ⊙⊙ ◠◠","☱☲☴","⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏","⠋⠙⠚⠞⠖⠦⠴⠲⠳⠓","⠄⠆⠇⠋⠙⠸⠰⠠⠰⠸⠙⠋⠇⠆","⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋","⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁","⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈","⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈","⢄⢂⢁⡁⡈⡐⡠","⢹⢺⢼⣸⣇⡧⡗⡏","⣾⣽⣻⢿⡿⣟⣯⣷","⠁⠂⠄⡀⢀⠠⠐⠈",["🌑","🌒","🌓","🌔","🌕","🌝","🌖","🌗","🌘","🌚"],["🕛","🕐","🕑","🕒","🕓","🕔","🕕","🕖","🕗","🕘","🕙","🕚"]]');
- /***/ })
- };
- ;
- //# sourceMappingURL=974.index.js.map
|