UNPKG

trm-core

Version:

TRM (Transport Request Manager) Core

168 lines (167 loc) 8.05 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = void 0; const trm_commons_1 = require("trm-commons"); const crypto_1 = require("crypto"); const systemConnector_1 = require("../../systemConnector"); const registry_1 = require("../../registry"); const semver_1 = require("semver"); exports.init = { name: 'init', run: (context) => __awaiter(void 0, void 0, void 0, function* () { trm_commons_1.Logger.log('Init step', true); const registry = context.rawInput.packageData.registry; var artifact; var manifest; var packageData; var actualRegistry; if (registry.getRegistryType() === registry_1.RegistryType.LOCAL) { try { artifact = yield registry.downloadArtifact('dummy', 'dummy'); } catch (_a) { throw new Error(`Unable to read local package.`); } const oManifest = artifact.getManifest(); manifest = oManifest.get(); packageData.manifest = manifest; actualRegistry = oManifest.getPackage().registry; context.rawInput.packageData.name = manifest.name; } if (registry.getRegistryType() !== registry_1.RegistryType.LOCAL) { trm_commons_1.Logger.loading(`Fetching package in registry ${registry.name}...`); packageData = yield registry.getPackage(context.rawInput.packageData.name, context.rawInput.packageData.version || 'latest'); artifact = yield registry.downloadArtifact(packageData.name, packageData.manifest.version); const checksum = (0, crypto_1.createHash)("sha512").update(artifact.binary).digest("base64"); if (checksum !== packageData.checksum) { var ping; try { ping = yield registry.ping(); } catch (_b) { } trm_commons_1.Logger.error(`SECURITY ISSUE! Release integrity does NOT match!`); trm_commons_1.Logger.error(`SECURITY ISSUE! Expected SHA is ${packageData.checksum}, current SHA is ${checksum}`); trm_commons_1.Logger.error(`SECURITY ISSUE! Please, report the issue to ${ping && ping.alert_email ? ping.alert_email : 'registry moderation team'}`); throw new Error(`Cannot continue due to security issues.`); } manifest = artifact.getManifest().get(); } trm_commons_1.Logger.info(`Ready to install ${manifest.name} v${manifest.version}${!(0, semver_1.valid)(context.rawInput.packageData.version) ? (' (' + (context.rawInput.packageData.version || 'latest') + ')') : ''}.`); if (!context.rawInput.contextData) { context.rawInput.contextData = {}; } context.runtime = { stopWarningShown: context.rawInput.contextData.noStopWarning ? true : false, isTrmServerRest: false, registry: actualRegistry || registry, update: undefined, remotePackageData: { data: packageData, artifact, manifest, contents: false }, dependenciesToInstall: [], r3trans: undefined, packageTransports: { devc: { binaries: undefined, instance: undefined }, tadir: { binaries: undefined, instance: undefined }, cust: [], lang: { binaries: undefined, instance: undefined } }, packageTransportsData: { tdevc: [], tdevct: [], tadir: [], e071: [] }, installData: { namespace: undefined, entries: [], transports: [] }, originalData: { hierarchy: undefined }, generatedData: { devclass: [], namespace: undefined, tmsTxtRefresh: [] } }; context.runtime.isTrmServerRest = (context.runtime.remotePackageData.data.name === systemConnector_1.TRM_SERVER_PACKAGE_NAME || context.runtime.remotePackageData.data.name === systemConnector_1.TRM_REST_PACKAGE_NAME) && context.runtime.registry.getRegistryType() === registry_1.RegistryType.PUBLIC; if (context.rawInput.packageData.overwrite === undefined) { context.rawInput.packageData.overwrite = false; } if (!context.rawInput.installData) { context.rawInput.installData = {}; } if (!context.rawInput.installData.checks) { context.rawInput.installData.checks = {}; } if (!context.rawInput.installData.import) { context.rawInput.installData.import = {}; } if (!context.rawInput.installData.installDevclass) { context.rawInput.installData.installDevclass = {}; } if (!context.rawInput.installData.installDevclass.replacements) { context.rawInput.installData.installDevclass.replacements = []; } if (!context.rawInput.installData.installTransport) { context.rawInput.installData.installTransport = { create: true }; } if (!context.rawInput.installData.skipPostActivities) { context.rawInput.installData.skipPostActivities = false; } if (context.runtime.isTrmServerRest) { context.rawInput.installData.installDevclass.keepOriginal = false; } if (context.rawInput.installData.installDevclass.keepOriginal === undefined) { if (!context.rawInput.contextData.noInquirer) { context.rawInput.installData.installDevclass.keepOriginal = (yield trm_commons_1.Inquirer.prompt([{ name: 'keepOriginal', message: `Keep original ABAP package(s)?`, type: 'confirm', default: context.rawInput.installData.installDevclass.keepOriginal ? true : false }])).keepOriginal; } } trm_commons_1.Logger.loading(`Checking transport layer...`); if (!context.rawInput.installData.installDevclass.transportLayer) { try { context.rawInput.installData.installDevclass.transportLayer = yield systemConnector_1.SystemConnector.getDefaultTransportLayer(); trm_commons_1.Logger.log(`Setting transport layer to default: ${context.rawInput.installData.installDevclass.transportLayer}`, true); } catch (e) { trm_commons_1.Logger.error(e.toString(), true); throw new Error(`Couldn't determine system's default transport layer.`); } } else { if (!(yield systemConnector_1.SystemConnector.isTransportLayerExist(context.rawInput.installData.installDevclass.transportLayer))) { throw new Error(`Transport layer "${context.rawInput.installData.installDevclass.transportLayer}" doesn't exist.`); } } }) };