"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createKeychain = createKeychain; exports.deleteKeychain = deleteKeychain; exports.importIntoKeychain = importIntoKeychain; exports.cleanUpKeychains = cleanUpKeychains; function _v() { const data = _interopRequireDefault(require("uuid/v1")); _v = function () { return data; }; return data; } function _lodash() { const data = _interopRequireDefault(require("lodash")); _lodash = function () { return data; }; return data; } function _fsExtra() { const data = _interopRequireDefault(require("fs-extra")); _fsExtra = function () { return data; }; return data; } function _Logger() { const data = _interopRequireDefault(require("./Logger")); _Logger = function () { return data; }; return data; } function _ExponentTools() { const data = require("./ExponentTools"); _ExponentTools = function () { return data; }; return data; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } async function createKeychain(appUUID, saveResultToFile = true) { const BUILD_PHASE = 'creating keychain'; const logger = _Logger().default.withFields({ buildPhase: BUILD_PHASE }); const spawn = (0, _ExponentTools().createSpawner)(BUILD_PHASE, logger); const name = (0, _v().default)(); const password = (0, _v().default)(); const path = getKeychainPath(name); logger.info('creating new keychain...'); await runFastlane(['run', 'create_keychain', `path:${path}`, `password:${password}`, 'unlock:true', 'timeout:360000']); await spawn('security', 'show-keychain-info', path, { stdoutOnly: true }); logger.info('created new keychain'); const keychainInfo = { name, path, password }; if (saveResultToFile) { const keychainInfoPath = getKeychainInfoPath(appUUID); await _fsExtra().default.writeFile(keychainInfoPath, JSON.stringify(keychainInfo)); logger.info('saved keychain info to %s', keychainInfoPath); } return keychainInfo; } async function deleteKeychain({ path, appUUID }) { const BUILD_PHASE = 'deleting keychain'; const logger = _Logger().default.withFields({ buildPhase: BUILD_PHASE }); logger.info('deleting keychain...'); await runFastlane(['run', 'delete_keychain', `keychain_path:${path}`]); if (appUUID) { const keychainInfoPath = getKeychainInfoPath(appUUID); await _fsExtra().default.remove(keychainInfoPath); } } async function importIntoKeychain({ keychainPath, certPath, certPassword }) { const BUILD_PHASE = 'importing certificate into keychain'; const logger = _Logger().default.withFields({ buildPhase: BUILD_PHASE }); const spawn = (0, _ExponentTools().createSpawner)(BUILD_PHASE); logger.info('importing certificate into keychain...'); const args = ['import', certPath, '-A', '-k', keychainPath, '-f', 'pkcs12']; if (certPassword) { logger.info('certificate has password'); args.push('-P', certPassword); } else { logger.info("certificate doesn't have password"); } await spawn('security', ...args); logger.info('imported certificate into keychain'); } async function cleanUpKeychains() { try { _Logger().default.info('Cleaning up keychains...'); const { stdout: keychainsListRaw } = await (0, _ExponentTools().spawnAsyncThrowError)('security', ['list-keychains'], { stdio: 'pipe' }); const allKeychainsList = (keychainsListRaw.match(/"(.*)"/g) || []).map(i => i.slice(1, i.length - 1)); const turtleKeychainsList = keychainsListRaw.match(/\/private\/tmp\/xdl\/(.*).keychain/g); let shouldCleanSearchList = false; if (turtleKeychainsList) { for (const keychainPath of turtleKeychainsList) { try { await deleteKeychain({ path: keychainPath }); } catch (err) { _Logger().default.warn(`Failed to delete keychain: ${keychainPath}`, err); shouldCleanSearchList = true; } } if (shouldCleanSearchList) { const newSearchList = _lodash().default.difference(allKeychainsList, turtleKeychainsList); await (0, _ExponentTools().spawnAsyncThrowError)('security', ['list-keychains', '-s', ...newSearchList], { stdio: 'pipe' }); } } _Logger().default.info('Cleaned up keychains'); } catch (err) { _Logger().default.error(err); throw new Error('Failed to clean up keychains'); } } async function runFastlane(fastlaneArgs) { const fastlaneEnvVars = { FASTLANE_DISABLE_COLORS: '1', FASTLANE_SKIP_UPDATE_CHECK: '1', CI: '1', LC_ALL: 'en_US.UTF-8' }; await (0, _ExponentTools().spawnAsyncThrowError)('fastlane', fastlaneArgs, { env: { ...process.env, ...fastlaneEnvVars } }); } const getKeychainPath = name => `/private/tmp/xdl/${name}.keychain`; const getKeychainInfoPath = appUUID => `/private/tmp/${appUUID}-keychain-info.json`; //# sourceMappingURL=../__sourcemaps__/detach/IosKeychain.js.map