/* * Copyright 2021 Apollo Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ application_module.controller("ConfigNamespaceController", ['$rootScope', '$scope', '$translate', 'toastr', 'AppUtil', 'EventManager', 'ConfigService', 'PermissionService', 'UserService', 'NamespaceBranchService', 'NamespaceService', controller]); function controller($rootScope, $scope, $translate, toastr, AppUtil, EventManager, ConfigService, PermissionService, UserService, NamespaceBranchService, NamespaceService) { $scope.rollback = rollback; $scope.preDeleteItem = preDeleteItem; $scope.deleteItem = deleteItem; $scope.editItem = editItem; $scope.createItem = createItem; $scope.preRevokeItem = preRevokeItem; $scope.revokeItem = revokeItem; $scope.closeTip = closeTip; $scope.showText = showText; $scope.createBranch = createBranch; $scope.preCreateBranch = preCreateBranch; $scope.preDeleteBranch = preDeleteBranch; $scope.deleteBranch = deleteBranch; $scope.showNoModifyPermissionDialog = showNoModifyPermissionDialog; $scope.lockCheck = lockCheck; $scope.emergencyPublish = emergencyPublish; init(); function init() { initRole(); initUser(); initPublishInfo(); } function initRole() { PermissionService.get_app_role_users($rootScope.pageContext.appId) .then(function (result) { var masterUsers = ''; result.masterUsers.forEach(function (user) { masterUsers += _.escape(user.userId) + ','; }); $scope.masterUsers = masterUsers.substring(0, masterUsers.length - 1); }, function (result) { }); } function initUser() { UserService.load_user().then(function (result) { $scope.currentUser = result.userId; }); } function initPublishInfo() { NamespaceService.getNamespacePublishInfo($rootScope.pageContext.appId) .then(function (result) { if (!result) { return; } $scope.hasNotPublishNamespace = false; var namespacePublishInfo = []; Object.keys(result).forEach(function (env) { if (env.indexOf("$") >= 0) { return; } var envPublishInfo = result[env]; Object.keys(envPublishInfo).forEach(function (cluster) { var clusterPublishInfo = envPublishInfo[cluster]; if (clusterPublishInfo) { $scope.hasNotPublishNamespace = true; if (Object.keys(envPublishInfo).length > 1) { namespacePublishInfo.push("[" + env + ", " + cluster + "]"); } else { namespacePublishInfo.push("[" + env + "]"); } } }) }); $scope.namespacePublishInfo = namespacePublishInfo; }); } EventManager.subscribe(EventManager.EventType.REFRESH_NAMESPACE, function (context) { if (context.namespace) { refreshSingleNamespace(context.namespace); } else { refreshAllNamespaces(context); } }); function refreshAllNamespaces(context) { if ($rootScope.pageContext.env == '') { return; } ConfigService.load_all_namespaces($rootScope.pageContext.appId, $rootScope.pageContext.env, $rootScope.pageContext.clusterName).then( function (result) { $scope.namespaces = result; $('.config-item-container').removeClass('hide'); initPublishInfo(); //If there is a namespace parameter in the URL, expand the corresponding namespace directly if (context && context.firstLoad && $rootScope.pageContext.namespaceName) { refreshSingleNamespace({ baseInfo: { namespaceName: $rootScope.pageContext.namespaceName }, searchInfo: { showSearchInput: true, searchItemKey: $rootScope.pageContext.item, } }); } }, function (result) { toastr.error(AppUtil.errorMsg(result), $translate.instant('Config.LoadingAllNamespaceError')); }); } function refreshSingleNamespace(namespace) { if ($rootScope.pageContext.env == '') { return; } const showSearchItemInput = namespace.searchInfo ? namespace.searchInfo.showSearchInput : false; const searchItemKey = namespace.searchInfo ? namespace.searchInfo.searchItemKey : ''; ConfigService.load_namespace($rootScope.pageContext.appId, $rootScope.pageContext.env, $rootScope.pageContext.clusterName, namespace.baseInfo.namespaceName).then( function (result) { $scope.namespaces.forEach(function (namespace, index) { if (namespace.baseInfo.namespaceName === result.baseInfo.namespaceName) { result.showNamespaceBody = true; result.initialized = true; result.show = namespace.show; $scope.namespaces[index] = result; result.showSearchItemInput = showSearchItemInput; result.searchItemKey = searchItemKey; } }); initPublishInfo(); }, function (result) { toastr.error(AppUtil.errorMsg(result), $translate.instant('Config.LoadingAllNamespaceError')); }); } function rollback() { EventManager.emit(EventManager.EventType.ROLLBACK_NAMESPACE); } $scope.tableViewOperType = '', $scope.item = {}; $scope.toOperationNamespace; var toDeleteItemId = 0; function preDeleteItem(namespace, item) { if (!lockCheck(namespace)) { return; } $scope.config = {}; $scope.config.key = _.escape(item.key); $scope.config.value = _.escape(item.value); $scope.toOperationNamespace = namespace; toDeleteItemId = item.id; $("#deleteConfirmDialog").modal("show"); } function deleteItem() { ConfigService.delete_item($rootScope.pageContext.appId, $rootScope.pageContext.env, $scope.toOperationNamespace.baseInfo.clusterName, $scope.toOperationNamespace.baseInfo.namespaceName, toDeleteItemId).then( function (result) { toastr.success($translate.instant('Config.Deleted')); EventManager.emit(EventManager.EventType.REFRESH_NAMESPACE, { namespace: $scope.toOperationNamespace }); }, function (result) { toastr.error(AppUtil.errorMsg(result), $translate.instant('Config.DeleteFailed')); }); } function preRevokeItem(namespace) { if (!lockCheck(namespace)) { return; } $scope.toOperationNamespace = namespace; toRevokeItemId = namespace.baseInfo.id; $("#revokeItemConfirmDialog").modal("show"); } function revokeItem() { ConfigService.revoke_item($rootScope.pageContext.appId, $rootScope.pageContext.env, $scope.toOperationNamespace.baseInfo.clusterName, $scope.toOperationNamespace.baseInfo.namespaceName).then( function (result) { toastr.success($translate.instant('Revoke.RevokeSuccessfully')); EventManager.emit(EventManager.EventType.REFRESH_NAMESPACE, { namespace: $scope.toOperationNamespace }); }, function (result) { toastr.error(AppUtil.errorMsg(result), $translate.instant('Revoke.RevokeFailed')); } ); } //修改配置 function editItem(namespace, toEditItem) { if (!lockCheck(namespace)) { return; } $scope.item = _.clone(toEditItem); if (namespace.isBranch || namespace.isLinkedNamespace) { var existedItem = false; namespace.items.forEach(function (item) { if (!item.isDeleted && item.item.key == toEditItem.key) { existedItem = true; } }); if (!existedItem) { $scope.item.lineNum = 0; $scope.item.tableViewOperType = 'create'; } else { $scope.item.tableViewOperType = 'update'; } } else { $scope.item.tableViewOperType = 'update'; } $scope.toOperationNamespace = namespace; AppUtil.showModal('#itemModal'); } //新增配置 function createItem(namespace) { if (!lockCheck(namespace)) { return; } $scope.item = { tableViewOperType: 'create' }; $scope.toOperationNamespace = namespace; AppUtil.showModal('#itemModal'); } var selectedClusters = []; $scope.collectSelectedClusters = function (data) { selectedClusters = data; }; function lockCheck(namespace) { if (namespace.lockOwner && $scope.currentUser != namespace.lockOwner) { $scope.lockOwner = namespace.lockOwner; $('#namespaceLockedDialog').modal('show'); return false; } return true; } function closeTip(clusterName) { var hideTip = JSON.parse(localStorage.getItem("hideTip")); if (!hideTip) { hideTip = {}; hideTip[$rootScope.pageContext.appId] = {}; } if (!hideTip[$rootScope.pageContext.appId]) { hideTip[$rootScope.pageContext.appId] = {}; } hideTip[$rootScope.pageContext.appId][clusterName] = true; $rootScope.hideTip = hideTip; localStorage.setItem("hideTip", JSON.stringify(hideTip)); } function showText(text) { $scope.text = text; $('#showTextModal').modal('show'); } function showNoModifyPermissionDialog() { $("#modifyNoPermissionDialog").modal('show'); } var toCreateBranchNamespace = {}; function preCreateBranch(namespace) { toCreateBranchNamespace = namespace; AppUtil.showModal("#createBranchTips"); } function createBranch() { NamespaceBranchService.createBranch($rootScope.pageContext.appId, $rootScope.pageContext.env, $rootScope.pageContext.clusterName, toCreateBranchNamespace.baseInfo.namespaceName) .then(function (result) { toastr.success($translate.instant('Config.GrayscaleCreated')); EventManager.emit(EventManager.EventType.REFRESH_NAMESPACE, { namespace: toCreateBranchNamespace }); }, function (result) { toastr.error(AppUtil.errorMsg(result), $translate.instant('Config.GrayscaleCreateFailed')); }) } function preDeleteBranch(branch) { //normal delete branch.branchStatus = 0; $scope.toDeleteBranch = branch; AppUtil.showModal('#deleteBranchDialog'); } function deleteBranch() { NamespaceBranchService.deleteBranch($rootScope.pageContext.appId, $rootScope.pageContext.env, $rootScope.pageContext.clusterName, $scope.toDeleteBranch.baseInfo.namespaceName, $scope.toDeleteBranch.baseInfo.clusterName ) .then(function (result) { toastr.success($translate.instant('Config.BranchDeleted')); EventManager.emit(EventManager.EventType.REFRESH_NAMESPACE, { namespace: $scope.toDeleteBranch.parentNamespace }); }, function (result) { toastr.error(AppUtil.errorMsg(result), $translate.instant('Config.BranchDeleteFailed')); }) } EventManager.subscribe(EventManager.EventType.EMERGENCY_PUBLISH, function (context) { AppUtil.showModal("#emergencyPublishAlertDialog"); $scope.emergencyPublishContext = context; }); function emergencyPublish() { if ($scope.emergencyPublishContext.mergeAndPublish) { EventManager.emit(EventManager.EventType.MERGE_AND_PUBLISH_NAMESPACE, { branch: $scope.emergencyPublishContext.namespace, isEmergencyPublish: true }); } else { EventManager.emit(EventManager.EventType.PUBLISH_NAMESPACE, { namespace: $scope.emergencyPublishContext.namespace, isEmergencyPublish: true }); } } EventManager.subscribe(EventManager.EventType.DELETE_NAMESPACE_FAILED, function (context) { $scope.deleteNamespaceContext = context; if (context.reason == 'master_instance') { AppUtil.showModal('#deleteNamespaceDenyForMasterInstanceDialog'); } else if (context.reason == 'branch_instance') { AppUtil.showModal('#deleteNamespaceDenyForBranchInstanceDialog'); } else if (context.reason == 'public_namespace') { var otherAppAssociatedNamespaces = context.otherAppAssociatedNamespaces; var namespaceTips = []; otherAppAssociatedNamespaces.forEach(function (namespace) { var appId = namespace.appId; var clusterName = namespace.clusterName; var url = AppUtil.prefixPath() + '/config.html?#/appid=' + appId + '&env=' + $scope.pageContext.env + '&cluster=' + clusterName; namespaceTips.push("AppId = " + appId + ", Cluster = " + clusterName + ", Namespace = " + namespace.namespaceName + ""); }); $scope.deleteNamespaceContext.detailReason = $translate.instant('Config.DeleteNamespaceFailedTips') + "
" + namespaceTips.join("
"); AppUtil.showModal('#deleteNamespaceDenyForPublicNamespaceDialog'); } }); EventManager.subscribe(EventManager.EventType.SYNTAX_CHECK_TEXT_FAILED, function (context) { $scope.syntaxCheckContext = context; AppUtil.showModal('#syntaxCheckFailedDialog'); }); new Clipboard('.clipboard'); }