UNPKG

@expo/xdl

Version:
226 lines (181 loc) 6.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.exportCertBinary = exportCertBinary; exports.exportCertBase64 = exportCertBase64; exports.logKeystoreHashes = logKeystoreHashes; exports.logKeystoreCredentials = logKeystoreCredentials; exports.createKeystore = createKeystore; exports.generateUploadKeystore = generateUploadKeystore; function _spawnAsync() { const data = _interopRequireDefault(require("@expo/spawn-async")); _spawnAsync = function () { return data; }; return data; } function _chalk() { const data = _interopRequireDefault(require("chalk")); _chalk = function () { return data; }; return data; } function _crypto() { const data = _interopRequireDefault(require("crypto")); _crypto = function () { return data; }; return data; } function _fsExtra() { const data = _interopRequireDefault(require("fs-extra")); _fsExtra = function () { return data; }; return data; } function _v() { const data = _interopRequireDefault(require("uuid/v4")); _v = function () { return data; }; return data; } function _Logger() { const data = _interopRequireDefault(require("../Logger")); _Logger = function () { return data; }; return data; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const log = _Logger().default.global; async function exportCertBinary({ keystorePath, keystorePassword, keyAlias }, certFile) { try { return (0, _spawnAsync().default)('keytool', ['-exportcert', '-keystore', keystorePath, '-storepass', keystorePassword, '-alias', keyAlias, '-file', certFile, '-noprompt', '-storetype', 'JKS']); } catch (err) { if (err.code === 'ENOENT') { log.warn('Are you sure you have keytool installed?'); log.info('keytool is a part of OpenJDK: https://openjdk.java.net/'); log.info('Also make sure that keytool is in your PATH after installation.'); } if (err.stdout) { log.info(err.stdout); } if (err.stderr) { log.error(err.stderr); } throw err; } } async function exportCertBase64({ keystorePath, keystorePassword, keyAlias }, certFile) { try { return (0, _spawnAsync().default)('keytool', ['-export', '-rfc', '-keystore', keystorePath, '-storepass', keystorePassword, '-alias', keyAlias, '-file', certFile, '-noprompt', '-storetype', 'JKS']); } catch (err) { if (err.code === 'ENOENT') { log.warn('Are you sure you have keytool installed?'); log.info('keytool is a part of OpenJDK: https://openjdk.java.net/'); log.info('Also make sure that keytool is in your PATH after installation.'); } if (err.stdout) { log.info(err.stdout); } if (err.stderr) { log.error(err.stderr); } throw err; } } async function logKeystoreHashes(keystoreInfo, linePrefix = '') { const { keystorePath } = keystoreInfo; const certFile = `${keystorePath}.cer`; try { await exportCertBinary(keystoreInfo, certFile); const data = await _fsExtra().default.readFile(certFile); const googleHash = _crypto().default.createHash('sha1').update(data).digest('hex').toUpperCase(); const googleHash256 = _crypto().default.createHash('sha256').update(data).digest('hex').toUpperCase(); const fbHash = _crypto().default.createHash('sha1').update(data).digest('base64'); log.info(`${linePrefix}Google Certificate Fingerprint: ${googleHash.replace(/(.{2}(?!$))/g, '$1:')}`); log.info(`${linePrefix}Google Certificate Hash (SHA-1): ${googleHash}`); log.info(`${linePrefix}Google Certificate Hash (SHA-256): ${googleHash256}`); log.info(`${linePrefix}Facebook Key Hash: ${fbHash}`); } catch (err) { if (err.code === 'ENOENT') { log.warn('Are you sure you have keytool installed?'); log.info('keytool is a part of OpenJDK: https://openjdk.java.net/'); log.info('Also make sure that keytool is in your PATH after installation.'); } if (err.stdout) { log.info(err.stdout); } if (err.stderr) { log.error(err.stderr); } throw err; } finally { try { await _fsExtra().default.unlink(certFile); } catch (err) { if (err.code !== 'ENOENT') { log.error(err); } } } } function logKeystoreCredentials({ keystorePassword, keyAlias, keyPassword }, title = 'Keystore credentials', linePrefix = '') { log.info(`${linePrefix}${title} ${linePrefix} Keystore password: ${_chalk().default.bold(keystorePassword)} ${linePrefix} Key alias: ${_chalk().default.bold(keyAlias)} ${linePrefix} Key password: ${_chalk().default.bold(keyPassword)} `); } async function createKeystore({ keystorePath, keystorePassword, keyAlias, keyPassword }, androidPackage) { try { return await (0, _spawnAsync().default)('keytool', ['-genkey', '-v', '-storetype', 'JKS', '-storepass', keystorePassword, '-keypass', keyPassword, '-keystore', keystorePath, '-alias', keyAlias, '-keyalg', 'RSA', '-keysize', '2048', '-validity', '10000', '-dname', `CN=${androidPackage},OU=,O=,L=,S=,C=US`]); } catch (err) { if (err.code === 'ENOENT') { log.warn('Are you sure you have keytool installed?'); log.info('keytool is a part of OpenJDK: https://openjdk.java.net/'); log.info('Also make sure that keytool is in your PATH after installation.'); } if (err.stdout) { log.info(err.stdout); } if (err.stderr) { log.error(err.stderr); } throw err; } } async function generateUploadKeystore(uploadKeystorePath, androidPackage, experienceName) { const keystoreData = { keystorePassword: (0, _v().default)().replace(/-/g, ''), keyPassword: (0, _v().default)().replace(/-/g, ''), keyAlias: Buffer.from(experienceName).toString('base64'), keystorePath: uploadKeystorePath }; await createKeystore(keystoreData, androidPackage); return keystoreData; } //# sourceMappingURL=../__sourcemaps__/credentials/AndroidCredentials.js.map