UNPKG

@broadcom/endevor-bridge-for-git-for-zowe-cli

Version:

Endevor Bridge for Git plug-in for Zowe CLI

220 lines 13.4 kB
"use strict"; /* * Copyright (c) 2019 Broadcom. All Rights Reserved. The term * "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. * * This software and all information contained therein is * confidential and proprietary and shall not be duplicated, * used, disclosed, or disseminated in any way except as * authorized by the applicable license agreement, without the * express written permission of Broadcom. All authorized * reproductions must be marked with this language. * * EXCEPT AS SET FORTH IN THE APPLICABLE LICENSE AGREEMENT, TO * THE EXTENT PERMITTED BY APPLICABLE LAW, BROADCOM PROVIDES THIS * SOFTWARE WITHOUT WARRANTY OF ANY KIND, INCLUDING WITHOUT * LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL BROADCOM * BE LIABLE TO THE END USER OR ANY THIRD PARTY FOR ANY LOSS OR * DAMAGE, DIRECT OR INDIRECT, FROM THE USE OF THIS SOFTWARE, * INCLUDING WITHOUT LIMITATION, LOST PROFITS, BUSINESS * INTERRUPTION, GOODWILL, OR LOST DATA, EVEN IF BROADCOM IS * EXPRESSLY ADVISED OF SUCH LOSS OR DAMAGE. */ 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 }); const BaseHandler_1 = require("../../BaseHandler"); const api_1 = require("../../../api"); const EndevorSession_1 = require("../../sessions/EndevorSession"); const imperative_1 = require("@zowe/imperative"); const fs_1 = require("fs"); const object_1 = require("../../../utils/object"); const EBGConnectionService_1 = require("../../../api/service/EBGConnectionService"); const endevor_bridge_for_git_rest_api_1 = require("@broadcom/endevor-bridge-for-git-rest-api"); const MappingOptions_1 = require("../MappingOptions"); class MappingCreateHandler extends BaseHandler_1.BaseHandler { processWithSession() { return __awaiter(this, void 0, void 0, function* () { const task = { percentComplete: imperative_1.TaskProgress.ZERO_PERCENT, statusMessage: "Validate options", stageName: imperative_1.TaskStage.IN_PROGRESS }; this.progress.startBar({ task }); let payload; const mappingFile = this.getOption(MappingOptions_1.MappingOptions.CREATE_MAPPING_JSON_FILE, false); if (mappingFile !== undefined) { const contents = (0, fs_1.readFileSync)(mappingFile); payload = JSON.parse(contents.toLocaleString()); if ((0, object_1.isNotNil)(payload.endevor.connection)) { const endevorConnectionDetails = yield EBGConnectionService_1.EBGConnectionService .getConnection(this.ebgService, payload.endevor.connection); payload.endevor.baseUrl = endevorConnectionDetails[0].baseUrl; payload.endevor.configuration = endevorConnectionDetails[0].configuration; } else { if ((0, object_1.isNil)(payload.endevor.baseUrl)) { payload.endevor.baseUrl = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PROTOCOL) .concat("://") .concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_HOST)) .concat(":") .concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PORT)) .concat("/") .concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_BASE_PATH)); } if ((0, object_1.isNil)(payload.endevor.configuration)) { payload.endevor.configuration = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_INSTANCE, false); } } if ((0, object_1.isNil)(payload.endevor.username)) { payload.endevor.username = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_USER); } if ((0, object_1.isNil)(payload.endevor.password)) { payload.endevor.password = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PASSWORD); } this.validateRequiredOptions(); } else { // Mapping with single system/subsystem const cloneUrl = this.getOption(MappingOptions_1.MappingOptions.GIT_REMOTE_URL); const repositoryCheck = String(this.getOption(MappingOptions_1.MappingOptions.REPOSITORY_CHECK)); const splittedGitRemoteUrl = yield this.validateGitRemoteUrl(cloneUrl, this.ebgService, repositoryCheck); let context = splittedGitRemoteUrl[MappingCreateHandler.CONTEXT_REGEX_INDEX]; let repoName = splittedGitRemoteUrl[MappingCreateHandler.REPOSITORY_REGEX_INDEX]; if (MappingCreateHandler.REMOTE_AZURE_URL_REGEX.test(cloneUrl)) { context = splittedGitRemoteUrl[MappingCreateHandler.AZURE_COLLECTION_INDEX] + "/" + decodeURI(splittedGitRemoteUrl[MappingCreateHandler.AZURE_PROJECT_INDEX]); repoName = splittedGitRemoteUrl[MappingCreateHandler.AZURE_REPOSITORY_REGEX_INDEX]; } // if connection is passed get baseUrl and configuration from connection const connection = this.getOption(MappingOptions_1.MappingOptions.CONNECTION_NAME, false); let baseUrl; let configuration; if ((0, object_1.isNotNil)(connection)) { const endevorConnectionDetails = yield EBGConnectionService_1.EBGConnectionService.getConnection(this.ebgService, connection); baseUrl = endevorConnectionDetails[0].baseUrl; configuration = endevorConnectionDetails[0].configuration; } else { baseUrl = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PROTOCOL) .concat("://") .concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_HOST)) .concat(":") .concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PORT)) .concat("/") .concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_BASE_PATH)); configuration = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_INSTANCE, false); } const mainframeUsername = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_USER); const mainframePassword = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PASSWORD); const system = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_SYSTEM); const systemAlias = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_SYSTEM_ALIAS); const subsystem = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_SUBSYSTEM, true); const subsystemAlias = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_SUBSYSTEM_ALIAS); const mappingMode = this.getOption(MappingOptions_1.MappingOptions.MAPPING_MODE); const branchId = this.getOption(MappingOptions_1.MappingOptions.BRANCH_ID); const environment = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_ENVIRONMENT); const readOnly = Boolean(this.getOption(MappingOptions_1.MappingOptions.READ_ONLY)); let stageNumber; const typeFilter = this.getOption(MappingOptions_1.MappingOptions.TYPE_FILTERS); const nameFilter = this.getOption(MappingOptions_1.MappingOptions.NAME_FILTERS); const filter = { elements: (0, object_1.isNil)(nameFilter) ? [] : nameFilter, types: (0, object_1.isNil)(typeFilter) ? [] : typeFilter }; if (readOnly) { stageNumber = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_STAGE_NUMBER); // Validate after reading of the options this.validateRequiredOptions(); } else { const endevorSession = this.createEndevorSession(); // Validate before making any API call this.validateRequiredOptions(); task.statusMessage = "Get entry stage"; task.percentComplete = imperative_1.TaskProgress.TEN_PERCENT; stageNumber = String(yield api_1.EndevorService.getEntryStage(endevorSession, configuration, environment)); } payload = { git: { context, repository: repoName, cloneUrl, repositoryCheck: (0, object_1.isNil)(repositoryCheck) ? endevor_bridge_for_git_rest_api_1.RepositoryCheck.requireEmpty : repositoryCheck }, endevor: { connection, baseUrl, configuration, username: mainframeUsername, password: mainframePassword }, branches: [{ name: branchId, environment, stageNumber: Number(stageNumber), systems: [{ name: system, alias: systemAlias, subsystems: [{ name: subsystem, alias: subsystemAlias, filter }], }], mappingMode, readOnly }] }; } yield api_1.EBGMappingService.createMapping(this.ebgService, payload); task.percentComplete = imperative_1.TaskProgress.ONE_HUNDRED_PERCENT; this.console.log(`The mapping ${payload.git.context}/${payload.git.repository} will be initialized in background. You will be notified once this operation is completed`); }); } /** * Validates the Git remote URL and returns it slitted as an array * @param mirrorRepoUrl Git remote URL * @param ebgService * @param repositoryCheck */ validateGitRemoteUrl(mirrorRepoUrl, ebgService, repositoryCheck) { return __awaiter(this, void 0, void 0, function* () { let results; // Validates remote url if (MappingCreateHandler.REMOTE_GH_GL_URL_REGEX.test(mirrorRepoUrl)) { results = MappingCreateHandler.REMOTE_GH_GL_URL_REGEX.exec(mirrorRepoUrl.trim()); } else if (MappingCreateHandler.REMOTE_BB_URL_REGEX.test(mirrorRepoUrl)) { results = MappingCreateHandler.REMOTE_BB_URL_REGEX.exec(mirrorRepoUrl.trim()); } else if (MappingCreateHandler.REMOTE_AZURE_URL_REGEX.test(mirrorRepoUrl)) { results = MappingCreateHandler.REMOTE_AZURE_URL_REGEX.exec(mirrorRepoUrl.trim()); } else { this.fail({ msg: "Invalid remote URL" }); } this.validateRequiredOptions(); yield api_1.EBGMappingService.validateGitRemoteUrl(ebgService, { mirrorRepoUrl, repositoryCheck }); return results; }); } } exports.default = MappingCreateHandler; MappingCreateHandler.REMOTE_GH_GL_URL_REGEX = /(http(s)?):\/\/([\w.@:\-~]*)\/([\w.@:\-~]*)\/([\w.@:\-~]*)(\.git)(\/)?/; MappingCreateHandler.REMOTE_BB_URL_REGEX = /(http(s)?):\/\/([\w.@:\-~\/]*)\/([\w.@:\-~]*)\/([\w.@:\-~]*)(\.git)(\/)?/; MappingCreateHandler.REMOTE_AZURE_URL_REGEX = /(http(s)?):\/\/([\w.@:\-~\/]*)\/([\w.\-]*)\/([\w.%!\-]*)\/_git\/([\w.%\-]*)(\/)?/; MappingCreateHandler.CONTEXT_REGEX_INDEX = 4; MappingCreateHandler.REPOSITORY_REGEX_INDEX = 5; MappingCreateHandler.AZURE_COLLECTION_INDEX = 4; MappingCreateHandler.AZURE_PROJECT_INDEX = 5; MappingCreateHandler.AZURE_REPOSITORY_REGEX_INDEX = 6; //# sourceMappingURL=MappingCreate.handler.js.map