775 lines
20 KiB
JavaScript
775 lines
20 KiB
JavaScript
|
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
|