Files
vercel/packages/now-cli/src/commands/certs/add.js
Steven b0ad5238f7 Create monorepo (#2812)
* Move now-cli to /packages/now-cli

* Fix .gitignore paths

* Add now-client

* Add lerna to top level

* Add scripts

* Update codeowners

* Fix `/now-cli/build.ts` script

* Fix circleci path to artifacts

* Use relative paths

* Fix path to scripts

* Add test-lint script

* Add missing return type

* Fix typo in test-lint

* Fix string match in shell scripts

* Fix path to hugo

* Add package node_modules

* Delete lock files in packages, use root yarn.lock

* Add missing b.js file

* Add test-integration-now-dev script

* Add missing test files

* Add missing integration test script

* Add missing test files

* Delete travis.yml

* Fix ts-jest in now-client

* Add support for Node 8 (ES2015 target)

* Add support for Node 8

* Add polyfill for Node 8

* Fix polyfill for Node 8

* Only run coverage for now-cli

* Add packages from now-builders

* Run integration tests for builders

* Add node_modules to cache

* Add root readme.md

* Move readme to top level

* Add yarn bootstrap

* Add bootstrap step

* Add dist to `persist_to_workspace`

* Fix 08-yarn-npm integration test

* Remove duplicate path

* Change stdio to inherit

* Add back store_artifacts

* testing - remove bootstrap step

* Add back now-build-utils

* Remove bootstrap step

* Fix test again

* Add console.log()

* Fix lint

* Use local ncc version

* Install go

* Revert changes to stdio and console.log()

* Add missing now-go test

* Add missing integration tests

* Add --runInBand flag

* Fix now-node-bridge persistence

* Add missing symlinks

* Add codeowners

* Consolidate into single run.sh function

* Run uniq

* Fix typo

* Change now-routing-utils to test-unit

* Special case test for node 8

* Add docs from builders

* Only run script for modified packages

* Add test-integration-once which only runs once

* Fix set intersection
2019-08-23 23:57:00 +00:00

142 lines
3.6 KiB
JavaScript

import chalk from 'chalk';
import Now from '../../util';
import Client from '../../util/client.ts';
import getScope from '../../util/get-scope.ts';
import stamp from '../../util/output/stamp.ts';
import wait from '../../util/output/wait';
import createCertFromFile from '../../util/certs/create-cert-from-file';
import createCertForCns from '../../util/certs/create-cert-for-cns';
import {
DomainPermissionDenied,
InvalidCert,
} from '../../util/errors-ts';
import handleCertError from '../../util/certs/handle-cert-error';
async function add(ctx, opts, args, output) {
const {
authConfig: { token },
config
} = ctx;
const { currentTeam } = config;
const { apiUrl } = ctx;
const addStamp = stamp();
let cert;
const {
'--overwrite': overwite,
'--debug': debugEnabled,
'--crt': crtPath,
'--key': keyPath,
'--ca': caPath
} = opts;
let contextName = null;
const client = new Client({
apiUrl,
token,
currentTeam,
debug: debugEnabled
});
try {
({ contextName } = await getScope(client));
} catch (err) {
if (err.code === 'NOT_AUTHORIZED' || err.code === 'TEAM_DELETED') {
output.error(err.message);
return 1;
}
throw err;
}
// $FlowFixMe
const now = new Now({ apiUrl, token, debug: debugEnabled, currentTeam });
if (overwite) {
output.error('Overwrite option is deprecated');
now.close();
return 1;
}
if (crtPath || keyPath || caPath) {
if (args.length !== 0 || (!crtPath || !keyPath || !caPath)) {
output.error(
`Invalid number of arguments to create a custom certificate entry. Usage:`
);
output.print(
` ${chalk.cyan(
`now certs add --crt <domain.crt> --key <domain.key> --ca <ca.crt>`
)}\n`
);
now.close();
return 1;
}
// Create a custom certificate from the given file paths
cert = await createCertFromFile(now, keyPath, crtPath, caPath, contextName);
if (cert instanceof InvalidCert) {
output.error(`The provided certificate is not valid and can't be added.`);
return 1;
}
if (cert instanceof DomainPermissionDenied) {
output.error(
`You don't have permissions over domain ${chalk.underline(
cert.meta.domain
)} under ${chalk.bold(cert.meta.context)}.`
);
return 1;
}
} else {
output.warn(
`${chalk.cyan(
'now certs add'
)} will be soon deprecated. Please use ${chalk.cyan(
'now certs issue <cn> <cns>'
)} instead`
);
if (args.length < 1) {
output.error(
`Invalid number of arguments to create a custom certificate entry. Usage:`
);
output.print(` ${chalk.cyan(`now certs add <cn>[, <cn>]`)}\n`);
now.close();
return 1;
}
// Create the certificate from the given array of CNs
const cns = args.reduce((res, item) => [...res, ...item.split(',')], []);
const cancelWait = wait(
`Generating a certificate for ${chalk.bold(cns.join(', '))}`
);
cert = await createCertForCns(now, cns, contextName);
cancelWait();
const result = handleCertError(output, cert);
if (result === 1) {
return result
}
if (cert instanceof DomainPermissionDenied) {
output.error(
`You don't have permissions over domain ${chalk.underline(
cert.meta.domain
)} under ${chalk.bold(cert.meta.context)}.`
);
return 1;
}
}
// Print success message
output.success(
`Certificate entry for ${chalk.bold(
cert.cns.join(', ')
)} created ${addStamp()}`
);
return 0;
}
export default add;