graphdb-workbench 3.3.2-RC1 → 3.3.2-TR1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/13231.9b625e487e6385faa36f.bundle.js +2 -0
- package/dist/13231.9b625e487e6385faa36f.bundle.js.map +1 -0
- package/dist/21015.68c7c667ef64ad8e8e0d.bundle.js +2 -0
- package/dist/21015.68c7c667ef64ad8e8e0d.bundle.js.map +1 -0
- package/dist/{38644.b26373c67b397f88f3b4.bundle.js → 38644.37a8cd71112da94401d9.bundle.js} +2 -2
- package/dist/{38644.b26373c67b397f88f3b4.bundle.js.map → 38644.37a8cd71112da94401d9.bundle.js.map} +1 -1
- package/dist/{39518.e7e7353947905592bfea.bundle.js → 39518.2871b32c37b20075dba3.bundle.js} +2 -2
- package/dist/{39518.e7e7353947905592bfea.bundle.js.map → 39518.2871b32c37b20075dba3.bundle.js.map} +1 -1
- package/dist/39874.47a6948df3520a7bf37a.bundle.js +2 -0
- package/dist/39874.47a6948df3520a7bf37a.bundle.js.map +1 -0
- package/dist/60560.275a89ab1375e91de0aa.bundle.js +2 -0
- package/dist/60560.275a89ab1375e91de0aa.bundle.js.map +1 -0
- package/dist/{67888.367b7acbeaf58426d4f1.bundle.js → 67888.b75d9678cf65cd82f065.bundle.js} +2 -2
- package/dist/{67888.367b7acbeaf58426d4f1.bundle.js.map → 67888.b75d9678cf65cd82f065.bundle.js.map} +1 -1
- package/dist/7815.f09f8d6953d2c964e04d.bundle.js +2 -0
- package/dist/7815.f09f8d6953d2c964e04d.bundle.js.map +1 -0
- package/dist/78681.0cfa1e86d4dac1b7e7e8.bundle.js +2 -0
- package/dist/78681.0cfa1e86d4dac1b7e7e8.bundle.js.map +1 -0
- package/dist/{82926.4736d2184864699ddcdb.bundle.js → 82926.99231caacc379c66487a.bundle.js} +2 -2
- package/dist/{82926.4736d2184864699ddcdb.bundle.js.map → 82926.99231caacc379c66487a.bundle.js.map} +1 -1
- package/dist/94229.47dbdba202106c61dff1.bundle.js.map +1 -1
- package/dist/{99448.810956b817f8cf062851.bundle.js → 99448.272a4ba1ce8032167bea.bundle.js} +2 -2
- package/dist/{99448.810956b817f8cf062851.bundle.js.map → 99448.272a4ba1ce8032167bea.bundle.js.map} +1 -1
- package/dist/api/models/cookie/cookie-consent.d.ts +14 -0
- package/dist/api/models/cookie/index.d.ts +1 -1
- package/dist/api/models/security/authenticated-user.d.ts +0 -2
- package/dist/api/models/users/app-settings.d.ts +2 -2
- package/dist/api/ontotext-workbench-api.d.ts +1 -3
- package/dist/api/ontotext-workbench-api.js +1 -1
- package/dist/api/ontotext-workbench-api.js.map +1 -1
- package/dist/api/services/cookie/cookie.service.d.ts +7 -34
- package/dist/api/services/cookie/index.d.ts +0 -3
- package/dist/api/services/security/auth-strategies/tests/provider-response-mocks.d.ts +2 -2
- package/dist/api/services/security/security-context.service.d.ts +0 -6
- package/dist/api/services/users/response/user-response.d.ts +1 -1
- package/dist/api/services/utils/index.d.ts +0 -1
- package/dist/api/services/window/window.service.d.ts +0 -6
- package/dist/index.html +9 -9
- package/dist/js/angular/clustermanagement/templates/cluster-nodes-configuration.html +1 -1
- package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +1 -1
- package/dist/js/angular/core/directives/dynamic-form/templates/dynamic-form.html +1 -1
- package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +1 -1
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +1 -1
- package/dist/js/angular/core/directives/shuttle-multiselect/templates/shuttle-multiselect.html +1 -1
- package/dist/js/angular/core/directives/yasgui-component/templates/yasgui-component.html +2 -2
- package/dist/js/angular/core/templates/cookie-policy/cookie-consent.html +1 -1
- package/dist/js/angular/core/templates/cookie-policy/cookie-policy.html +1 -1
- package/dist/js/angular/core/templates/editable-content/editable-content.html +1 -1
- package/dist/js/angular/core/templates/markdown-content/markdown-content.html +1 -1
- package/dist/js/angular/core/templates/search-resource-input.html +1 -1
- package/dist/js/angular/graphql/templates/create-graphql-endpoint.html +2 -2
- package/dist/js/angular/graphql/templates/graphql-endpoint-management.html +1 -1
- package/dist/js/angular/graphql/templates/graphql-playground.html +2 -2
- package/dist/js/angular/graphql/templates/modal/endpoint-configuration-modal.html +1 -1
- package/dist/js/angular/graphql/templates/modal/endpoint-generation-failure-result-modal.html +1 -1
- package/dist/js/angular/graphql/templates/modal/import-endpoint-definition-modal.html +1 -1
- package/dist/js/angular/security/templates/user.html +2 -5
- package/dist/js/angular/ttyg/templates/agent-list.html +1 -1
- package/dist/js/angular/ttyg/templates/agent-select-menu.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-item-detail.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-list.html +1 -1
- package/dist/js/angular/ttyg/templates/chat-panel.html +1 -1
- package/dist/js/angular/ttyg/templates/modal/agent-instructions-explain-modal.html +1 -1
- package/dist/js/angular/ttyg/templates/modal/agent-settings-modal.html +3 -3
- package/dist/js/angular/ttyg/templates/modal/external-integration-configuration-modal.html +1 -1
- package/dist/js/angular/ttyg/templates/no-agents-view.html +1 -1
- package/dist/js/angular/ttyg/templates/ttyg.html +1 -1
- package/dist/{legacyWorkbench.0128b90d53e9f14490a3.js → legacyWorkbench.88e1d4d209e51c6f9b65.js} +3 -3
- package/dist/{legacyWorkbench.0128b90d53e9f14490a3.js.map → legacyWorkbench.88e1d4d209e51c6f9b65.js.map} +1 -1
- package/dist/{main.44e04f2cf0ab7d48b25b.js → main.1be0fc11ab24b99f8800.js} +3 -3
- package/dist/main.1be0fc11ab24b99f8800.js.map +1 -0
- package/dist/pages/aclmanagement.html +1 -1
- package/dist/pages/autocomplete.html +1 -1
- package/dist/pages/choose-repository-type.html +1 -1
- package/dist/pages/cluster-management/clusterInfo.html +3 -3
- package/dist/pages/create-index.html +1 -1
- package/dist/pages/dependencies.html +1 -1
- package/dist/pages/domainRangeInfo.html +2 -2
- package/dist/pages/edit.html +1 -1
- package/dist/pages/explore.html +1 -1
- package/dist/pages/export.html +1 -1
- package/dist/pages/find.html +1 -1
- package/dist/pages/graph-config/saveGraphConfig.html +8 -8
- package/dist/pages/graphs-visualizations.html +7 -7
- package/dist/pages/guides.html +1 -1
- package/dist/pages/home.html +1 -1
- package/dist/pages/import.html +2 -2
- package/dist/pages/jdbc-create.html +1 -1
- package/dist/pages/jdbc.html +1 -1
- package/dist/pages/monitor/backup-and-restore.html +1 -1
- package/dist/pages/monitor/queries.html +1 -1
- package/dist/pages/monitor/resources.html +1 -1
- package/dist/pages/namespaces.html +2 -2
- package/dist/pages/plugins.html +1 -1
- package/dist/pages/rdfClassHierarchyInfo.html +7 -7
- package/dist/pages/rdfrank.html +2 -2
- package/dist/pages/repositories.html +1 -1
- package/dist/pages/repository.html +1 -1
- package/dist/pages/similarity-indexes.html +1 -1
- package/dist/pages/sparql-editor.html +1 -1
- package/dist/pages/sparql-template-create.html +1 -1
- package/dist/pages/sparql-templates.html +1 -1
- package/dist/pages/ux-test1.html +2 -2
- package/dist/pages/webapi.html +2 -2
- package/dist/res/swagger5/index.html +11 -11
- package/dist/shared-components/cjs/loader.cjs.js +1 -1
- package/dist/shared-components/cjs/onto-cookie-consent_2.cjs.entry.js +1 -1
- package/dist/shared-components/cjs/onto-dialog_2.cjs.entry.js +1 -1
- package/dist/shared-components/cjs/onto-footer_5.cjs.entry.js +1 -1
- package/dist/shared-components/cjs/onto-layout.cjs.entry.js +1 -1
- package/dist/shared-components/cjs/shared-components.cjs.js +1 -1
- package/dist/shared-components/collection/components/dialogs/onto-cookie-policy-dialog/onto-cookie-policy-dialog.js +1 -1
- package/dist/shared-components/collection/components/dialogs/onto-dialog.js +1 -1
- package/dist/shared-components/collection/components/onto-cookie-consent/onto-cookie-consent.css +1 -1
- package/dist/shared-components/collection/components/onto-cookie-consent/onto-cookie-consent.js +1 -1
- package/dist/shared-components/collection/components/onto-footer/onto-footer.js +1 -1
- package/dist/shared-components/collection/models/dialog/onto-dialog.js +1 -0
- package/dist/shared-components/esm/loader.js +1 -1
- package/dist/shared-components/esm/onto-cookie-consent_2.entry.js +1 -1
- package/dist/shared-components/esm/onto-dialog_2.entry.js +1 -1
- package/dist/shared-components/esm/onto-footer_5.entry.js +1 -1
- package/dist/shared-components/esm/onto-layout.entry.js +1 -1
- package/dist/shared-components/esm/shared-components.js +1 -1
- package/dist/shared-components/shared-components/p-2075209c.entry.js +1 -0
- package/dist/shared-components/shared-components/p-30e4880f.entry.js +1 -0
- package/dist/shared-components/shared-components/p-413b3789.entry.js +1 -0
- package/dist/shared-components/shared-components/p-67199a46.entry.js +1 -0
- package/dist/shared-components/shared-components/shared-components.esm.js +1 -1
- package/dist/shared-components/types/components/dialogs/onto-cookie-policy-dialog/onto-cookie-policy-dialog.d.ts +7 -31
- package/dist/shared-components/types/components/onto-cookie-consent/onto-cookie-consent.d.ts +2 -2
- package/dist/shared-components/types/components/onto-footer/onto-footer.d.ts +2 -9
- package/dist/shared-components/types/components.d.ts +8 -17
- package/dist/shared-components/types/models/dialog/dialog-handler.d.ts +0 -4
- package/dist/shared-components/types/models/dialog/onto-dialog.d.ts +4 -0
- package/package.json +1 -1
- package/dist/13231.d7107e7549453805e13a.bundle.js +0 -2
- package/dist/13231.d7107e7549453805e13a.bundle.js.map +0 -1
- package/dist/21015.ea34b563b4149ad0975e.bundle.js +0 -2
- package/dist/21015.ea34b563b4149ad0975e.bundle.js.map +0 -1
- package/dist/39874.710e94f211579215f997.bundle.js +0 -2
- package/dist/39874.710e94f211579215f997.bundle.js.map +0 -1
- package/dist/60560.6ba1b091a34af6c00770.bundle.js +0 -2
- package/dist/60560.6ba1b091a34af6c00770.bundle.js.map +0 -1
- package/dist/7815.2aec5ebbcd434f5582ff.bundle.js +0 -2
- package/dist/7815.2aec5ebbcd434f5582ff.bundle.js.map +0 -1
- package/dist/78681.9e1d4e064e9e1fb5fb21.bundle.js +0 -2
- package/dist/78681.9e1d4e064e9e1fb5fb21.bundle.js.map +0 -1
- package/dist/api/models/cookie/cookie-options.d.ts +0 -17
- package/dist/api/models/tracking/cookie-consent.d.ts +0 -39
- package/dist/api/models/tracking/index.d.ts +0 -1
- package/dist/api/services/cookie/browser-cookie-store.d.ts +0 -19
- package/dist/api/services/cookie/cookie-builder.d.ts +0 -77
- package/dist/api/services/cookie/cookie-store.d.ts +0 -16
- package/dist/api/services/cookie/error/invalid-cookie-expiration.d.ts +0 -8
- package/dist/api/services/cookie/test/cookie-builder.spec.d.ts +0 -1
- package/dist/api/services/cookie/test/in-memory-cookie-store.d.ts +0 -11
- package/dist/api/services/tracking/google-analytics-cookie.service.d.ts +0 -50
- package/dist/api/services/tracking/index.d.ts +0 -4
- package/dist/api/services/tracking/installation-cookie.service.d.ts +0 -37
- package/dist/api/services/tracking/test/tracking-storage.service.spec.d.ts +0 -1
- package/dist/api/services/tracking/test/tracking.service.spec.d.ts +0 -1
- package/dist/api/services/tracking/tracking-storage.service.d.ts +0 -27
- package/dist/api/services/tracking/tracking.service.d.ts +0 -56
- package/dist/api/services/utils/date-util.d.ts +0 -11
- package/dist/main.44e04f2cf0ab7d48b25b.js.map +0 -1
- package/dist/shared-components/cjs/function-utils-WB47AWpR.js +0 -1
- package/dist/shared-components/esm/function-utils-D1ZpXQQS.js +0 -1
- package/dist/shared-components/shared-components/p-598d33d7.entry.js +0 -1
- package/dist/shared-components/shared-components/p-6d34b2cb.entry.js +0 -1
- package/dist/shared-components/shared-components/p-74888633.entry.js +0 -1
- package/dist/shared-components/shared-components/p-D1ZpXQQS.js +0 -1
- package/dist/shared-components/shared-components/p-b5d4081d.entry.js +0 -1
- /package/dist/{legacyWorkbench.0128b90d53e9f14490a3.js.LICENSE.txt → legacyWorkbench.88e1d4d209e51c6f9b65.js.LICENSE.txt} +0 -0
- /package/dist/{main.44e04f2cf0ab7d48b25b.js.LICENSE.txt → main.1be0fc11ab24b99f8800.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"94229.47dbdba202106c61dff1.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/security/services/constants.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/security/directives/custom-prefix-tags-input.directive.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/security/controllers.js"],"sourcesContent":["export const SYSTEM_REPO = 'SYSTEM';\nexport const READ_REPO = 'READ_REPO';\nexport const READ_REPO_PREFIX = 'READ_REPO_';\nexport const WRITE_REPO = 'WRITE_REPO';\nexport const GRAPHQL = 'GRAPHQL';\nexport const WRITE_REPO_PREFIX = 'WRITE_REPO_';\nexport const GRAPHQL_PREFIX = 'GRAPHQL_';\nexport const GRAPHQL_SUFFIX = 'GRAPHQL';\nexport const SUFFIX_DELIMITER = ':';\nexport const GRAPHQL_SUFFIX_WITH_DELIMITER = SUFFIX_DELIMITER + GRAPHQL_SUFFIX;\nexport const CUSTOM_PREFIX = 'CUSTOM_'\n","angular\n .module('graphdb.framework.security.directives', [])\n .directive('customPrefixTagsInput', customPrefixTagsInputDirective);\n\n/**\n * @ngdoc directive\n * @name customPrefixTagsInput\n * @module app\n * @restrict A\n * @description\n * The `customPrefixTagsInput` directive is used to check 'tags-input' for roles containing 'CUSTOM_' or '!CUSTOM_' prefix.\n *\n * If the value starts with either of these prefixes, a warning property will be set in ngModel.\n *\n * @usage\n * <tags-input custom-prefix-tags-input>{{yourModel.role}}</tags-input>\n *\n * @return {Object} Directive definition object with restrict and link properties.\n */\nfunction customPrefixTagsInputDirective() {\n return {\n restrict: 'A',\n link: function(scope, element, attrs) {\n const customPrefix = \"CUSTOM_\";\n const negatedCustomPrefix = \"!CUSTOM_\";\n const subscriptions = [];\n\n function hasCustomOrNegatedPrefix(tag) {\n return tag.startsWith(customPrefix) || tag.startsWith(negatedCustomPrefix);\n }\n\n // Check if the element is tags-input and has ngModel associated with it\n const isNgTagsInput = element[0].nodeName.toLowerCase() === 'tags-input';\n\n if (isNgTagsInput && attrs.ngModel) {\n const ngModelCtrl = element.controller('ngModel');\n\n if (isNgTagsInput) {\n ngModelCtrl.$parsers.push(function (viewValue) {\n if (Array.isArray(viewValue)) {\n ngModelCtrl.$warning = viewValue.some((tag) => hasCustomOrNegatedPrefix(tag));\n }\n return viewValue;\n });\n\n subscriptions.push(scope.$watch(attrs.ngModel, function (newVal) {\n if (Array.isArray(newVal)) {\n ngModelCtrl.$warning = newVal.some((tag) => hasCustomOrNegatedPrefix(tag));\n }\n }, true));\n }\n }\n\n const unsubscribeListeners = () => {\n subscriptions.forEach((subscription) => subscription());\n };\n\n subscriptions.push(scope.$on('$destroy', unsubscribeListeners));\n }\n };\n}\n","import 'angular/core/services';\nimport 'angular/core/services/jwt-auth.service';\nimport 'angular/core/services/security.service';\nimport {UserRole, UserType} from 'angular/utils/user-utils';\nimport 'angular/security/directives/custom-prefix-tags-input.directive';\nimport {GRAPHQL, GRAPHQL_PREFIX, READ_REPO, READ_REPO_PREFIX, SYSTEM_REPO, WRITE_REPO, WRITE_REPO_PREFIX} from './services/constants';\nimport {\n AppSettings,\n AuthorityList,\n AuthorizationService,\n SecurityContextService,\n AuthenticationService,\n mapAuthSettingsResponseToModel,\n mapGrantedAuthoritiesResponseToModel,\n OntoToastrService,\n RepositoryService,\n SecurityService as SecurityServiceAPI,\n service,\n User,\n UsersService,\n} from '@ontotext/workbench-api';\n\nconst modules = [\n 'ngCookies',\n 'ui.bootstrap',\n 'graphdb.framework.core.services.jwtauth',\n 'graphdb.framework.core.services.security-service',\n 'toastr',\n 'ngTagsInput',\n];\n\nconst securityModule = angular.module('graphdb.framework.security.controllers', modules);\n\nsecurityModule.controller('UsersCtrl', ['$scope', '$uibModal', 'toastr', '$window', '$jwtAuth', '$timeout', 'ModalService', 'SecurityService', '$translate',\n function($scope, $uibModal, toastr, $window, $jwtAuth, $timeout, ModalService, SecurityService, $translate) {\n const authorizationService = service(AuthorizationService);\n const authenticationService = service(AuthenticationService);\n const securityServiceAPI = service(SecurityServiceAPI);\n const toastrService = service(OntoToastrService);\n const usersService = service(UsersService);\n const repositoryService = service(RepositoryService);\n\n // UI view-model\n $scope.usersData = [];\n\n $scope.loader = true;\n $scope.securityEnabled = function() {\n return authenticationService.isSecurityEnabled();\n };\n $scope.hasExternalAuth = function() {\n return $jwtAuth.hasExternalAuth();\n };\n $scope.getAuthImplementation = function() {\n return $jwtAuth.getAuthImplementation();\n };\n $scope.freeAccessEnabled = function() {\n return authorizationService.hasFreeAccess();\n };\n $scope.getUsers = () => {\n return usersService.getUsers()\n .then(function(data) {\n $scope.usersData = data.map((user) => ({\n username: user.username,\n dateCreated: user.dateCreated,\n userType: user.getUserType(),\n userTypeDescription: user.getUserTypeDescription(),\n repositories: user.authorities.getRepositoriesPermissions(),\n customRoles: user.authorities.getCustomRoles(),\n }));\n $scope.loader = false;\n }).catch(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.loader = false;\n });\n };\n $scope.getUsers();\n\n $scope.$on('repositoryIsSet', function() {\n $scope.getUsers();\n });\n\n $scope.toggleSecurity = function() {\n const isSecurityEnabled = authenticationService.isSecurityEnabled();\n $jwtAuth.toggleSecurity(!isSecurityEnabled)\n .then(() => {\n // reload UI\n // TODO: Not sure if we really need to reload the page here. The UI state is updated just fine. But maybe the reload is needed for something else?\n // Remove and fix this when migrated\n $window.location.reload();\n });\n };\n\n const setFreeAccess = function(enabled, authSettings) {\n // TODO: check this what app settings are provided here and if cookie settings should be updated in the storage\n return securityServiceAPI.setFreeAccess(enabled, authSettings);\n };\n\n /**\n * @param {boolean|undefined} updateFreeAccess - Whether to enable or disable free access. If undefined, the\n * free access has not been set yet.\n */\n $scope.toggleFreeAccess = function(updateFreeAccess) {\n if (!authorizationService.hasFreeAccess() || (authorizationService.hasFreeAccess() && updateFreeAccess)) {\n // enable and configure or only configure\n securityServiceAPI.getFreeAccess()\n .then((freeAccessAuthSettings) => {\n const authorities = mapGrantedAuthoritiesResponseToModel(freeAccessAuthSettings.authorities).getItems();\n const appSettings = freeAccessAuthSettings.appSettings ?? {\n 'DEFAULT_SAMEAS': true,\n 'DEFAULT_INFERENCE': true,\n 'EXECUTE_COUNT': true,\n 'IGNORE_SHARED_QUERIES': false,\n 'DEFAULT_VIS_GRAPH_SCHEMA': true,\n };\n return configureFreeAccess(appSettings, authorities, updateFreeAccess);\n })\n .then((updatedFreeAccessAuthSettings) => setFreeAccess(updateFreeAccess || !$jwtAuth.isFreeAccessEnabled(), updatedFreeAccessAuthSettings))\n .then(() => {\n const translateKey = updateFreeAccess ? 'jwt.auth.free.access.updated.msg' : 'jwt.auth.free.access.status';\n toastrService.success($translate.instant(translateKey, {status: $translate.instant('enabled.status')}));\n })\n .catch((err) => {\n if (err === 'cancel') {\n // Check if modal was dismissed by user\n return;\n }\n toastrService.error(err.data ?? err, $translate.instant('common.error'));\n });\n } else {\n // disable\n setFreeAccess(!authorizationService.hasFreeAccess())\n .then(() => {\n toastrService.success($translate.instant('jwt.auth.free.access.status', {status: ($translate.instant('disabled.status'))}));\n })\n .catch((err) => {\n toastrService.error(err.data, $translate.instant('common.error'));\n });\n }\n };\n\n const configureFreeAccess = (appSettings, authorities, updateFreeAccess) => {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/security/templates/modal/default-authorities.html',\n controller: 'DefaultAuthoritiesCtrl',\n resolve: {\n data: function() {\n return {\n // converts the array rights to hash ones. why, oh, why do we have both formats?\n defaultAuthorities: function() {\n const defaultAuthorities = {\n [READ_REPO]: {},\n [WRITE_REPO]: {},\n [GRAPHQL]: {},\n };\n // We might have old (no longer existing) repositories so we have to check that\n const repoIds = _.mapKeys($scope.getRepositories(), function(r) {\n return repositoryService.getLocationSpecificId(r);\n });\n _.each(authorities, function(a) {\n // indexOf works in IE 11, startsWith doesn't\n if (a.indexOf(WRITE_REPO_PREFIX) === 0) {\n if (repoIds.hasOwnProperty(a.substr(11))) {\n defaultAuthorities[WRITE_REPO][a.substr(11)] = true;\n }\n } else if (a.indexOf(READ_REPO_PREFIX) === 0) {\n if (repoIds.hasOwnProperty(a.substr(10))) {\n defaultAuthorities[READ_REPO][a.substr(10)] = true;\n }\n } else if (a.indexOf(GRAPHQL_PREFIX) === 0) {\n if (repoIds.hasOwnProperty(a.substr(8))) {\n defaultAuthorities[GRAPHQL][a.substr(8)] = true;\n }\n }\n });\n return defaultAuthorities;\n },\n appSettings: appSettings,\n };\n },\n },\n });\n return modalInstance.result.then(function(data) {\n authorities = data.authorities;\n appSettings = data.appSettings;\n return mapAuthSettingsResponseToModel({\n enabled: updateFreeAccess || !authorizationService.hasFreeAccess(),\n appSettings,\n authorities,\n });\n });\n };\n\n $scope.editFreeAccess = function() {\n $scope.toggleFreeAccess(true);\n };\n\n $scope.removeUser = function(username) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm.delete'),\n message: $translate.instant('security.confirm.delete.user', {name: username}),\n warning: true,\n }).result.then(function() {\n $scope.loader = true;\n usersService.deleteUser(username)\n .then(() => $scope.getUsers())\n .catch((data) => {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.loader = false;\n });\n });\n };\n\n // Should be able to send the original username to $routeParams\n $scope.encodeURIComponent = function(name) {\n return encodeURIComponent(name);\n };\n }]);\n\nsecurityModule.controller('DefaultAuthoritiesCtrl', ['$scope', '$http', '$uibModalInstance', 'data', '$rootScope',\n function($scope, $http, $uibModalInstance, data, $rootScope) {\n const repositoryService = service(RepositoryService);\n\n $scope.grantedAuthorities = data.defaultAuthorities();\n $scope.appSettings = data.appSettings;\n\n $scope.hasActiveLocation = function() {\n // Hack to get this from root scope to avoid cyclic dependency\n return !_.isEmpty($rootScope.globalLocation);\n };\n\n $scope.getRepositories = function() {\n // Hack to get this from root scope to avoid cyclic dependency\n return $rootScope.globalRepositories;\n };\n\n $scope.ok = function() {\n const auth = [];\n $scope.repositoryCheckError = true;\n for (const index in $scope.grantedAuthorities.WRITE_REPO) {\n if ($scope.grantedAuthorities.WRITE_REPO[index]) {\n auth.push(WRITE_REPO_PREFIX + index);\n auth.push(READ_REPO_PREFIX + index);\n $scope.repositoryCheckError = false;\n }\n }\n for (const index in $scope.grantedAuthorities.READ_REPO) {\n if ($scope.grantedAuthorities.READ_REPO[index] && auth.indexOf(READ_REPO_PREFIX + index) === -1) {\n auth.push(READ_REPO_PREFIX + index);\n $scope.repositoryCheckError = false;\n }\n }\n for (const index in $scope.grantedAuthorities.GRAPHQL) {\n if ($scope.grantedAuthorities.GRAPHQL[index] && auth.indexOf(GRAPHQL_PREFIX + index) === -1) {\n auth.push(GRAPHQL_PREFIX + index);\n }\n }\n if (!$scope.repositoryCheckError) {\n $uibModalInstance.close({authorities: auth, appSettings: $scope.appSettings});\n }\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.createUniqueKey = function(repository) {\n return repositoryService.getLocationSpecificId(repository);\n };\n }]);\n\nsecurityModule.controller('CommonUserCtrl', ['$rootScope', '$scope', '$http', 'toastr', '$window', '$timeout', '$location', '$jwtAuth', '$translate', 'passwordPlaceholder',\n function($rootScope, $scope, $http, toastr, $window, $timeout, $location, $jwtAuth, $translate, passwordPlaceholder) {\n const authorizationService = service(AuthorizationService);\n const repositoryService = service(RepositoryService);\n\n $rootScope.$on('$translateChangeSuccess', function() {\n $scope.passwordPlaceholder = $translate.instant(passwordPlaceholder);\n });\n $scope.isAdmin = function() {\n return authorizationService.hasRole(UserRole.ROLE_ADMIN);\n };\n $scope.hasExternalAuth = function() {\n return $jwtAuth.hasExternalAuth();\n };\n\n $scope.hasEditRestrictions = function() {\n return $scope.user && $scope.user.username === UserType.ADMIN;\n };\n\n $scope.isOverrideAuth = function() {\n return $jwtAuth.isDefaultAuthEnabled();\n };\n\n $scope.setGrantedAuthorities = function() {\n function pushAuthority(...authorities) {\n for (let i = 0; i < authorities.length; i++) {\n const authority = authorities[i];\n if (_.indexOf($scope.user.grantedAuthorities, authority) < 0) {\n $scope.user.grantedAuthorities.push(authority);\n }\n }\n }\n\n $scope.user.grantedAuthorities = [];\n\n $scope.repositoryCheckError = true;\n if ($scope.userType === UserType.ADMIN) {\n $scope.repositoryCheckError = false;\n pushAuthority(UserRole.ROLE_ADMIN);\n } else if ($scope.userType === UserType.REPO_MANAGER) {\n $scope.repositoryCheckError = false;\n pushAuthority(UserRole.ROLE_REPO_MANAGER);\n } else {\n pushAuthority(UserRole.ROLE_USER);\n for (const index in $scope.grantedAuthorities.WRITE_REPO) {\n if ($scope.grantedAuthorities.WRITE_REPO[index]) {\n $scope.repositoryCheckError = false;\n pushAuthority(WRITE_REPO_PREFIX + index, READ_REPO_PREFIX + index);\n }\n }\n for (const index in $scope.grantedAuthorities.READ_REPO) {\n if ($scope.grantedAuthorities.READ_REPO[index]) {\n $scope.repositoryCheckError = false;\n pushAuthority(READ_REPO_PREFIX + index);\n }\n }\n for (const index in $scope.grantedAuthorities.GRAPHQL) {\n if ($scope.grantedAuthorities.GRAPHQL[index]) {\n pushAuthority(GRAPHQL_PREFIX + index);\n }\n }\n }\n if ($scope.customRoles) {\n $scope.customRoles.forEach((role) => pushAuthority('CUSTOM_' + role));\n }\n };\n\n $scope.$watch('userType', function() {\n if (!$scope.isUser()) {\n $scope.customRoles = '';\n }\n });\n\n $scope.isUser = function() {\n return $scope.userType === UserType.USER;\n };\n\n $scope.hasReadPermission = function(repository) {\n const uniqueKey = repositoryService.getLocationSpecificId(repository);\n return $scope.userType === UserType.ADMIN\n || $scope.userType === UserType.REPO_MANAGER\n || repository.id !== SYSTEM_REPO && ($scope.grantedAuthorities.READ_REPO['*']\n || $scope.grantedAuthorities.WRITE_REPO['*'])\n || $scope.grantedAuthorities.READ_REPO[uniqueKey]\n || $scope.grantedAuthorities.WRITE_REPO[uniqueKey];\n };\n\n $scope.hasWritePermission = function(repoOrWildCard) {\n const uniqueKey = repositoryService.getLocationSpecificId(repoOrWildCard);\n return $scope.userType === UserType.ADMIN\n || $scope.userType === UserType.REPO_MANAGER\n || repoOrWildCard.id !== SYSTEM_REPO && $scope.grantedAuthorities.WRITE_REPO['*']\n || $scope.grantedAuthorities.WRITE_REPO[uniqueKey];\n };\n\n $scope.hasGraphqlPermission = function(repository) {\n const uniqueKey = repositoryService.getLocationSpecificId(repository);\n return repository.id !== SYSTEM_REPO && $scope.grantedAuthorities.GRAPHQL['*']\n || $scope.grantedAuthorities.GRAPHQL[uniqueKey];\n };\n\n $scope.readCheckDisabled = function(repoOrWildCard) {\n return $scope.hasWritePermission(repoOrWildCard)\n || repoOrWildCard.id !== SYSTEM_REPO && repoOrWildCard !== '*' && $scope.grantedAuthorities.READ_REPO['*']\n || $scope.hasEditRestrictions();\n };\n\n $scope.writeCheckDisabled = function(repoOrWildCard) {\n return $scope.userType === UserType.ADMIN\n || $scope.userType === UserType.REPO_MANAGER\n || repoOrWildCard.id !== SYSTEM_REPO && repoOrWildCard !== '*' && $scope.grantedAuthorities.WRITE_REPO['*']\n || $scope.hasEditRestrictions();\n };\n\n /**\n * Determines whether the GraphQL checkbox for a given repository or wildcard\n * should be disabled.\n *\n * @param {Object|string} repoOrWildCard - A repo object or the string wildcard '*'\n * @returns {boolean} true if disabled, false if enabled\n */\n $scope.graphqlCheckDisabled = function(repoOrWildCard) {\n if ($scope.userType === UserType.ADMIN || $scope.userType === UserType.REPO_MANAGER) {\n return true;\n }\n\n if ($scope.hasEditRestrictions()) {\n return true;\n }\n\n if (repoOrWildCard !== '*' && $scope.grantedAuthorities.GRAPHQL['*']) {\n return true;\n }\n\n if (repoOrWildCard === '*' && $scope.grantedAuthorities.GRAPHQL['*']) {\n return false;\n }\n\n let uniqueKey;\n if (repoOrWildCard !== null && typeof repoOrWildCard === 'object') {\n uniqueKey = repositoryService.getLocationSpecificId(repoOrWildCard);\n } else {\n uniqueKey = repoOrWildCard;\n }\n\n const hasReadWildcard = $scope.grantedAuthorities.READ_REPO['*'];\n const hasWriteWildcard = $scope.grantedAuthorities.WRITE_REPO['*'];\n const hasReadForRepo = $scope.grantedAuthorities.READ_REPO[uniqueKey];\n const hasWriteForRepo = $scope.grantedAuthorities.WRITE_REPO[uniqueKey];\n\n return !(hasReadWildcard || hasWriteWildcard || hasReadForRepo || hasWriteForRepo);\n };\n\n $scope.createUniqueKey = function(repository) {\n return repositoryService.getLocationSpecificId(repository);\n };\n\n $scope.userType = UserType.USER;\n $scope.grantedAuthorities = {\n [READ_REPO]: {},\n [WRITE_REPO]: {},\n [GRAPHQL]: {},\n };\n\n $scope.validatePassword = function() {\n if ($scope.noPassword) {\n $scope.passwordError = '';\n $scope.confirmPasswordError = '';\n return true;\n }\n if ($scope.user.password !== $scope.user.confirmpassword) {\n if (!$scope.user.password) {\n $scope.passwordError = $translate.instant('security.enter.password');\n $scope.confirmPasswordError = '';\n } else {\n $scope.passwordError = '';\n $scope.confirmPasswordError = $translate.instant('security.confirm.password');\n }\n return false;\n } else {\n $scope.passwordError = '';\n $scope.confirmPasswordError = '';\n }\n return true;\n };\n\n $scope.isLocalAuthentication = function() {\n return $jwtAuth.getAuthImplementation() === 'Local';\n };\n\n $scope.updateUser = function() {\n if (!$scope.validateForm()) {\n return false;\n }\n\n if ($scope.isLocalAuthentication()) {\n $scope.setGrantedAuthorities();\n }\n\n if (!$scope.repositoryCheckError) {\n $scope.updateUserHttp();\n }\n };\n\n $scope.setNoPassword = function() {\n if ($scope.noPassword) {\n $scope.user.password = '';\n $scope.user.confirmpassword = '';\n $scope.passwordError = '';\n $scope.confirmPasswordError = '';\n }\n };\n\n $scope.shouldDisableSameAs = function() {\n const sameAsCheckbox = $('#sameAsCheck');\n if ($scope.user && !$scope.user.appSettings.DEFAULT_INFERENCE && sameAsCheckbox.prop('checked')) {\n sameAsCheckbox.prop('checked', false);\n $scope.user.appSettings.DEFAULT_SAMEAS = false;\n }\n\n return $scope.user && !$scope.user.appSettings.DEFAULT_INFERENCE;\n };\n\n /**\n * The validity of the last user typed custom role.\n * @type {boolean}\n */\n $scope.isRoleValid = true;\n const minTagLength = 2;\n\n /**\n * Adds the user typed custom role and sets role validity flag to true.\n *\n * @param {{text: string}} role the user input\n * @return {{text: string}} the user input in uppercase\n */\n $scope.addCustomRole = function(role) {\n $scope.isRoleValid = true;\n role.text = role.text.toUpperCase();\n return role;\n };\n\n /**\n * Checks if the input text is valid or not.\n *\n * @param {{text: string}} fieldValue the user input\n * @return {boolean} true if valid, otherwise false\n */\n $scope.isCustomRoleValid = function(fieldValue) {\n $scope.isRoleValid = fieldValue.text.length >= minTagLength;\n return $scope.isRoleValid;\n };\n\n /**\n * Checks if the user pressed the 'Backspace' or 'Delete' key and sets the role validity flag accordingly.\n *\n * @param {Object} event\n */\n $scope.checkUserInput = function(event) {\n // If the key pressed is the backspace or delete key, the tag error message will be hidden\n if (event.keyCode === 8 || event.keyCode === 46) {\n $scope.isRoleValid = true;\n }\n };\n\n /**\n * Sets the role validity flag to true.\n */\n $scope.removeErrorOnCut = function() {\n // If the user cuts text from the field, the tag error message will be hidden\n $scope.isRoleValid = true;\n };\n }]);\n\nsecurityModule.controller('AddUserCtrl', ['$scope', '$http', 'toastr', '$window', '$timeout', '$location', '$jwtAuth', '$controller', 'SecurityService', 'ModalService', '$translate',\n function($scope, $http, toastr, $window, $timeout, $location, $jwtAuth, $controller, SecurityService, ModalService, $translate) {\n // eslint-disable-next-line no-invalid-this\n angular.extend(this, $controller('CommonUserCtrl', {$scope: $scope, passwordPlaceholder: 'security.password.placeholder'}));\n const usersService = service(UsersService);\n\n $scope.mode = 'add';\n $scope.saveButtonText = $translate.instant('common.create.btn');\n $scope.goBack = function() {\n const timer = $timeout(function() {\n $window.history.back();\n }, 100);\n $scope.$on('$destroy', function() {\n $timeout.cancel(timer);\n });\n };\n $scope.pageTitle = $translate.instant('view.create.user.title');\n $scope.passwordPlaceholder = $translate.instant('security.password.placeholder');\n\n $scope.user = {\n 'username': '',\n 'password': '',\n 'confirmpassword': '',\n 'grantedAuthorities': [],\n 'appSettings': {\n 'DEFAULT_SAMEAS': true,\n 'DEFAULT_INFERENCE': true,\n 'EXECUTE_COUNT': true,\n 'IGNORE_SHARED_QUERIES': false,\n 'DEFAULT_VIS_GRAPH_SCHEMA': true,\n },\n };\n\n $scope.submit = function() {\n if ($scope.noPassword && $scope.userType === UserType.ADMIN) {\n ModalService.openSimpleModal({\n title: $translate.instant('security.create.admin'),\n message: $translate.instant('security.admin.login.warning'),\n warning: true,\n }).result.then(function() {\n $scope.createUser();\n });\n } else {\n $scope.createUser();\n }\n };\n\n $scope.createUserHttp = function() {\n $scope.loader = true;\n const user = new User({\n username: $scope.user.username,\n password: $scope.user.password,\n appSettings: new AppSettings($scope.user.appSettings),\n authorities: new AuthorityList($scope.user.grantedAuthorities),\n });\n usersService.createUser(user)\n .then(() => {\n toastr.success($translate.instant('security.user.created', {name: $scope.user.username}));\n const timer = $timeout(function() {\n $scope.loader = false;\n $location.path('/users');\n }, 2000);\n $scope.$on('$destroy', function() {\n $timeout.cancel(timer);\n });\n })\n .catch(async (data) => {\n $scope.loader = false;\n toastr.error(getError(data), $translate.instant('common.error'));\n });\n };\n\n $scope.createUser = function() {\n if ($scope.validateForm()) {\n $scope.setGrantedAuthorities();\n\n if (!$scope.repositoryCheckError) {\n $scope.createUserHttp();\n }\n }\n };\n\n $scope.validateForm = function() {\n let result = true;\n if (!$scope.user.username) {\n $scope.usernameError = $translate.instant('security.enter.username');\n result = false;\n } else {\n $scope.usernameError = '';\n }\n if ($scope.noPassword) {\n $scope.passwordError = '';\n $scope.confirmPasswordError = '';\n } else {\n if (!$scope.user.password) {\n $scope.passwordError = $translate.instant('security.enter.password');\n result = false;\n } else {\n $scope.passwordError = '';\n }\n if (!$scope.user.confirmpassword || $scope.user.password !== $scope.user.confirmpassword) {\n $scope.confirmPasswordError = $translate.instant('security.confirm.password');\n result = false;\n } else {\n $scope.confirmPasswordError = '';\n }\n }\n\n return result;\n };\n }]);\n\nsecurityModule.controller('EditUserCtrl', ['$scope', '$http', 'toastr', '$window', '$routeParams', '$timeout', '$location', '$jwtAuth', '$controller', 'SecurityService', 'ModalService', '$translate',\n function($scope, $http, toastr, $window, $routeParams, $timeout, $location, $jwtAuth, $controller, SecurityService, ModalService, $translate) {\n // eslint-disable-next-line no-invalid-this\n angular.extend(this, $controller('CommonUserCtrl', {$scope: $scope, passwordPlaceholder: 'security.new.password'}));\n const usersService = service(UsersService);\n const authorizationService = service(AuthorizationService);\n const securityContextService = service(SecurityContextService);\n\n $scope.mode = 'edit';\n $scope.saveButtonText = $translate.instant('common.save.btn');\n $scope.goBack = function() {\n const timer = $timeout(function() {\n $window.history.back();\n }, 100);\n $scope.$on('$destroy', function() {\n $timeout.cancel(timer);\n });\n };\n $scope.params = $routeParams;\n $scope.pageTitle = $translate.instant('view.edit.user.title', {userId: $scope.params.userId});\n $scope.passwordPlaceholder = $translate.instant('security.new.password');\n $scope.userType = UserType.USER;\n const defaultUserSettings = {\n 'DEFAULT_SAMEAS': true,\n 'DEFAULT_INFERENCE': true,\n 'EXECUTE_COUNT': true,\n 'IGNORE_SHARED_QUERIES': false,\n 'DEFAULT_VIS_GRAPH_SCHEMA': true,\n };\n\n if (!authorizationService.hasRole(UserRole.ROLE_ADMIN)) {\n $location.url('settings');\n }\n $scope.getUserData = function() {\n usersService.getUser($scope.params.userId).then(function(data) {\n $scope.user = {username: data.username};\n $scope.user.password = '';\n $scope.user.confirmpassword = '';\n $scope.user.external = data.external;\n $scope.user.appSettings = data.appSettings || defaultUserSettings;\n $scope.userType = data.getUserType();\n $scope.grantedAuthorities = data.authorities.toUIModel();\n $scope.customRoles = data.authorities.getCustomRoles();\n }).catch(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n });\n };\n\n $scope.getUserData();\n\n $scope.submit = function() {\n if ($scope.noPassword && $scope.userType === UserType.ADMIN) {\n ModalService.openSimpleModal({\n title: $translate.instant('security.save.admin.settings'),\n message: $translate.instant('security.admin.pass.unset'),\n warning: true,\n }).result.then(function() {\n $scope.updateUser();\n });\n } else {\n $scope.updateUser();\n }\n };\n\n $scope.updateUserHttp = function() {\n $scope.loader = true;\n const user = new User({\n username: $scope.user.username,\n password: $scope.noPassword ? '' : $scope.user.password || undefined,\n appSettings: new AppSettings($scope.user.appSettings),\n authorities: new AuthorityList($scope.user.grantedAuthorities),\n });\n usersService.updateUser(user).then(() => {\n toastr.success($translate.instant('security.user.updated', {name: $scope.user.username}));\n const timer = $timeout(function() {\n $scope.loader = false;\n $window.history.back();\n }, 2000);\n $scope.$on('$destroy', function() {\n $timeout.cancel(timer);\n });\n // if we update the settings of the currently logged user, update the principal\n const principal = securityContextService.getAuthenticatedUser();\n if ($scope.user.username === principal.username) {\n // TODO: Discuss what's the point in updating the principal's appSettings here?!\n // principal.appSettings = $scope.user.appSettings;\n principal.setAppSettings(new AppSettings($scope.user.appSettings));\n }\n }).catch((data) => {\n const msg = getError(data);\n $scope.loader = false;\n toastr.error(msg, $translate.instant('common.error'));\n });\n };\n\n $scope.validateForm = function() {\n return $scope.validatePassword();\n };\n }]);\n\nsecurityModule.controller('RolesMappingController', ['$scope', 'toastr', 'SecurityService', '$translate',\n function($scope, toastr, SecurityService, $translate) {\n $scope.debugMapping = function(role, mapping) {\n const method = mapping.split(':');\n SecurityService.getRolesMapping({\n role: role,\n method: method[1],\n mapping: method[0],\n });\n };\n\n const loadRoles = function() {\n SecurityService.getRoles()\n .success(function(data) {\n $scope.roleMappings = data;\n $scope.roles = _.keys($scope.roleMappings);\n $scope.mappings = _.keys($scope.roleMappings[$scope.roles[0]]);\n const permissionsCount = _.map($scope.roles, function(role) {\n return [role, _.filter($scope.roleMappings[role]).length];\n });\n $scope.roles = _.reverse(_.map(_.orderBy(permissionsCount, function(p) {\n return p[1];\n }), function(p) {\n return p[0];\n }));\n })\n .error(function(data) {\n const msg = getError(data);\n $scope.loader = false;\n toastr.error(msg, $translate.instant('common.error'));\n });\n };\n\n $scope.$on('repositoryIsSet', function() {\n loadRoles();\n });\n }]);\n\nsecurityModule.controller('DeleteUserCtrl', ['$scope', '$uibModalInstance', 'username', function($scope, $uibModalInstance, username) {\n $scope.username = username;\n\n $scope.ok = function() {\n $uibModalInstance.close();\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n}]);\n"],"names":["SYSTEM_REPO","READ_REPO","READ_REPO_PREFIX","WRITE_REPO","GRAPHQL","WRITE_REPO_PREFIX","GRAPHQL_PREFIX","angular","module","directive","restrict","link","scope","element","attrs","subscriptions","hasCustomOrNegatedPrefix","tag","startsWith","isNgTagsInput","nodeName","toLowerCase","ngModel","ngModelCtrl","controller","$parsers","push","viewValue","Array","isArray","$warning","some","$watch","newVal","$on","unsubscribeListeners","forEach","subscription","securityModule","$scope","$uibModal","toastr","$window","$jwtAuth","$timeout","ModalService","SecurityService","$translate","authorizationService","service","AuthorizationService","authenticationService","AuthenticationService","securityServiceAPI","SecurityServiceAPI","toastrService","OntoToastrService","usersService","UsersService","repositoryService","RepositoryService","usersData","loader","securityEnabled","isSecurityEnabled","hasExternalAuth","getAuthImplementation","freeAccessEnabled","hasFreeAccess","getUsers","then","data","map","user","username","dateCreated","userType","getUserType","userTypeDescription","getUserTypeDescription","repositories","authorities","getRepositoriesPermissions","customRoles","getCustomRoles","catch","msg","getError","error","instant","toggleSecurity","location","reload","setFreeAccess","enabled","authSettings","toggleFreeAccess","updateFreeAccess","getFreeAccess","freeAccessAuthSettings","mapGrantedAuthoritiesResponseToModel","getItems","appSettings","configureFreeAccess","updatedFreeAccessAuthSettings","isFreeAccessEnabled","translateKey","success","status","err","open","templateUrl","resolve","defaultAuthorities","repoIds","_","mapKeys","getRepositories","r","getLocationSpecificId","each","a","indexOf","hasOwnProperty","substr","result","mapAuthSettingsResponseToModel","editFreeAccess","removeUser","openSimpleModal","title","message","name","warning","deleteUser","encodeURIComponent","$http","$uibModalInstance","$rootScope","grantedAuthorities","hasActiveLocation","isEmpty","globalLocation","globalRepositories","ok","auth","repositoryCheckError","index","close","cancel","dismiss","createUniqueKey","repository","$location","passwordPlaceholder","isAdmin","hasRole","UserRole","ROLE_ADMIN","hasEditRestrictions","UserType","ADMIN","isOverrideAuth","isDefaultAuthEnabled","setGrantedAuthorities","pushAuthority","i","length","authority","REPO_MANAGER","ROLE_REPO_MANAGER","ROLE_USER","role","isUser","USER","hasReadPermission","uniqueKey","id","hasWritePermission","repoOrWildCard","hasGraphqlPermission","readCheckDisabled","writeCheckDisabled","graphqlCheckDisabled","hasReadWildcard","hasWriteWildcard","hasReadForRepo","hasWriteForRepo","validatePassword","noPassword","passwordError","confirmPasswordError","password","confirmpassword","isLocalAuthentication","updateUser","validateForm","updateUserHttp","setNoPassword","shouldDisableSameAs","sameAsCheckbox","$","DEFAULT_INFERENCE","prop","DEFAULT_SAMEAS","isRoleValid","addCustomRole","text","toUpperCase","isCustomRoleValid","fieldValue","checkUserInput","event","keyCode","removeErrorOnCut","$controller","extend","this","mode","saveButtonText","goBack","timer","history","back","pageTitle","submit","createUser","createUserHttp","User","AppSettings","AuthorityList","path","async","usernameError","$routeParams","securityContextService","SecurityContextService","params","userId","defaultUserSettings","url","getUserData","getUser","external","toUIModel","undefined","principal","getAuthenticatedUser","setAppSettings","debugMapping","mapping","method","split","getRolesMapping","getRoles","roleMappings","roles","keys","mappings","permissionsCount","filter","reverse","orderBy","p"],"ignoreList":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"94229.47dbdba202106c61dff1.bundle.js","mappings":"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","sources":["webpack://root-config/./packages/legacy-workbench/src/js/angular/security/services/constants.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/security/directives/custom-prefix-tags-input.directive.js","webpack://root-config/./packages/legacy-workbench/src/js/angular/security/controllers.js"],"sourcesContent":["export const SYSTEM_REPO = 'SYSTEM';\nexport const READ_REPO = 'READ_REPO';\nexport const READ_REPO_PREFIX = 'READ_REPO_';\nexport const WRITE_REPO = 'WRITE_REPO';\nexport const GRAPHQL = 'GRAPHQL';\nexport const WRITE_REPO_PREFIX = 'WRITE_REPO_';\nexport const GRAPHQL_PREFIX = 'GRAPHQL_';\nexport const GRAPHQL_SUFFIX = 'GRAPHQL';\nexport const SUFFIX_DELIMITER = ':';\nexport const GRAPHQL_SUFFIX_WITH_DELIMITER = SUFFIX_DELIMITER + GRAPHQL_SUFFIX;\nexport const CUSTOM_PREFIX = 'CUSTOM_'\n","angular\n .module('graphdb.framework.security.directives', [])\n .directive('customPrefixTagsInput', customPrefixTagsInputDirective);\n\n/**\n * @ngdoc directive\n * @name customPrefixTagsInput\n * @module app\n * @restrict A\n * @description\n * The `customPrefixTagsInput` directive is used to check 'tags-input' for roles containing 'CUSTOM_' or '!CUSTOM_' prefix.\n *\n * If the value starts with either of these prefixes, a warning property will be set in ngModel.\n *\n * @usage\n * <tags-input custom-prefix-tags-input>{{yourModel.role}}</tags-input>\n *\n * @return {Object} Directive definition object with restrict and link properties.\n */\nfunction customPrefixTagsInputDirective() {\n return {\n restrict: 'A',\n link: function(scope, element, attrs) {\n const customPrefix = \"CUSTOM_\";\n const negatedCustomPrefix = \"!CUSTOM_\";\n const subscriptions = [];\n\n function hasCustomOrNegatedPrefix(tag) {\n return tag.startsWith(customPrefix) || tag.startsWith(negatedCustomPrefix);\n }\n\n // Check if the element is tags-input and has ngModel associated with it\n const isNgTagsInput = element[0].nodeName.toLowerCase() === 'tags-input';\n\n if (isNgTagsInput && attrs.ngModel) {\n const ngModelCtrl = element.controller('ngModel');\n\n if (isNgTagsInput) {\n ngModelCtrl.$parsers.push(function (viewValue) {\n if (Array.isArray(viewValue)) {\n ngModelCtrl.$warning = viewValue.some((tag) => hasCustomOrNegatedPrefix(tag));\n }\n return viewValue;\n });\n\n subscriptions.push(scope.$watch(attrs.ngModel, function (newVal) {\n if (Array.isArray(newVal)) {\n ngModelCtrl.$warning = newVal.some((tag) => hasCustomOrNegatedPrefix(tag));\n }\n }, true));\n }\n }\n\n const unsubscribeListeners = () => {\n subscriptions.forEach((subscription) => subscription());\n };\n\n subscriptions.push(scope.$on('$destroy', unsubscribeListeners));\n }\n };\n}\n","import 'angular/core/services';\nimport 'angular/core/services/jwt-auth.service';\nimport 'angular/core/services/security.service';\nimport {UserRole, UserType} from 'angular/utils/user-utils';\nimport 'angular/security/directives/custom-prefix-tags-input.directive';\nimport {GRAPHQL, GRAPHQL_PREFIX, READ_REPO, READ_REPO_PREFIX, SYSTEM_REPO, WRITE_REPO, WRITE_REPO_PREFIX} from './services/constants';\nimport {\n AppSettings,\n AuthorityList,\n AuthorizationService,\n SecurityContextService,\n AuthenticationService,\n mapAuthSettingsResponseToModel,\n mapGrantedAuthoritiesResponseToModel,\n OntoToastrService,\n RepositoryService,\n SecurityService as SecurityServiceAPI,\n service,\n User,\n UsersService,\n} from '@ontotext/workbench-api';\n\nconst modules = [\n 'ngCookies',\n 'ui.bootstrap',\n 'graphdb.framework.core.services.jwtauth',\n 'graphdb.framework.core.services.security-service',\n 'toastr',\n 'ngTagsInput',\n];\n\nconst securityModule = angular.module('graphdb.framework.security.controllers', modules);\n\nsecurityModule.controller('UsersCtrl', ['$scope', '$uibModal', 'toastr', '$window', '$jwtAuth', '$timeout', 'ModalService', 'SecurityService', '$translate',\n function($scope, $uibModal, toastr, $window, $jwtAuth, $timeout, ModalService, SecurityService, $translate) {\n const authorizationService = service(AuthorizationService);\n const authenticationService = service(AuthenticationService);\n const securityServiceAPI = service(SecurityServiceAPI);\n const toastrService = service(OntoToastrService);\n const usersService = service(UsersService);\n const repositoryService = service(RepositoryService);\n\n // UI view-model\n $scope.usersData = [];\n\n $scope.loader = true;\n $scope.securityEnabled = function() {\n return authenticationService.isSecurityEnabled();\n };\n $scope.hasExternalAuth = function() {\n return $jwtAuth.hasExternalAuth();\n };\n $scope.getAuthImplementation = function() {\n return $jwtAuth.getAuthImplementation();\n };\n $scope.freeAccessEnabled = function() {\n return authorizationService.hasFreeAccess();\n };\n $scope.getUsers = () => {\n return usersService.getUsers()\n .then(function(data) {\n $scope.usersData = data.map((user) => ({\n username: user.username,\n dateCreated: user.dateCreated,\n userType: user.getUserType(),\n userTypeDescription: user.getUserTypeDescription(),\n repositories: user.authorities.getRepositoriesPermissions(),\n customRoles: user.authorities.getCustomRoles(),\n }));\n $scope.loader = false;\n }).catch(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.loader = false;\n });\n };\n $scope.getUsers();\n\n $scope.$on('repositoryIsSet', function() {\n $scope.getUsers();\n });\n\n $scope.toggleSecurity = function() {\n const isSecurityEnabled = authenticationService.isSecurityEnabled();\n $jwtAuth.toggleSecurity(!isSecurityEnabled)\n .then(() => {\n // reload UI\n // TODO: Not sure if we really need to reload the page here. The UI state is updated just fine. But maybe the reload is needed for something else?\n // Remove and fix this when migrated\n $window.location.reload();\n });\n };\n\n const setFreeAccess = function(enabled, authSettings) {\n return securityServiceAPI.setFreeAccess(enabled, authSettings);\n };\n\n /**\n * @param {boolean|undefined} updateFreeAccess - Whether to enable or disable free access. If undefined, the\n * free access has not been set yet.\n */\n $scope.toggleFreeAccess = function(updateFreeAccess) {\n if (!authorizationService.hasFreeAccess() || (authorizationService.hasFreeAccess() && updateFreeAccess)) {\n // enable and configure or only configure\n securityServiceAPI.getFreeAccess()\n .then((freeAccessAuthSettings) => {\n const authorities = mapGrantedAuthoritiesResponseToModel(freeAccessAuthSettings.authorities).getItems();\n const appSettings = freeAccessAuthSettings.appSettings ?? {\n 'DEFAULT_SAMEAS': true,\n 'DEFAULT_INFERENCE': true,\n 'EXECUTE_COUNT': true,\n 'IGNORE_SHARED_QUERIES': false,\n 'DEFAULT_VIS_GRAPH_SCHEMA': true,\n };\n return configureFreeAccess(appSettings, authorities, updateFreeAccess);\n })\n .then((updatedFreeAccessAuthSettings) => setFreeAccess(updateFreeAccess || !$jwtAuth.isFreeAccessEnabled(), updatedFreeAccessAuthSettings))\n .then(() => {\n const translateKey = updateFreeAccess ? 'jwt.auth.free.access.updated.msg' : 'jwt.auth.free.access.status';\n toastrService.success($translate.instant(translateKey, {status: $translate.instant('enabled.status')}));\n })\n .catch((err) => {\n if (err === 'cancel') {\n // Check if modal was dismissed by user\n return;\n }\n toastrService.error(err.data ?? err, $translate.instant('common.error'));\n });\n } else {\n // disable\n setFreeAccess(!authorizationService.hasFreeAccess())\n .then(() => {\n toastrService.success($translate.instant('jwt.auth.free.access.status', {status: ($translate.instant('disabled.status'))}));\n })\n .catch((err) => {\n toastrService.error(err.data, $translate.instant('common.error'));\n });\n }\n };\n\n const configureFreeAccess = (appSettings, authorities, updateFreeAccess) => {\n const modalInstance = $uibModal.open({\n templateUrl: 'js/angular/security/templates/modal/default-authorities.html',\n controller: 'DefaultAuthoritiesCtrl',\n resolve: {\n data: function() {\n return {\n // converts the array rights to hash ones. why, oh, why do we have both formats?\n defaultAuthorities: function() {\n const defaultAuthorities = {\n [READ_REPO]: {},\n [WRITE_REPO]: {},\n [GRAPHQL]: {},\n };\n // We might have old (no longer existing) repositories so we have to check that\n const repoIds = _.mapKeys($scope.getRepositories(), function(r) {\n return repositoryService.getLocationSpecificId(r);\n });\n _.each(authorities, function(a) {\n // indexOf works in IE 11, startsWith doesn't\n if (a.indexOf(WRITE_REPO_PREFIX) === 0) {\n if (repoIds.hasOwnProperty(a.substr(11))) {\n defaultAuthorities[WRITE_REPO][a.substr(11)] = true;\n }\n } else if (a.indexOf(READ_REPO_PREFIX) === 0) {\n if (repoIds.hasOwnProperty(a.substr(10))) {\n defaultAuthorities[READ_REPO][a.substr(10)] = true;\n }\n } else if (a.indexOf(GRAPHQL_PREFIX) === 0) {\n if (repoIds.hasOwnProperty(a.substr(8))) {\n defaultAuthorities[GRAPHQL][a.substr(8)] = true;\n }\n }\n });\n return defaultAuthorities;\n },\n appSettings: appSettings,\n };\n },\n },\n });\n return modalInstance.result.then(function(data) {\n authorities = data.authorities;\n appSettings = data.appSettings;\n return mapAuthSettingsResponseToModel({\n enabled: updateFreeAccess || !authorizationService.hasFreeAccess(),\n appSettings,\n authorities,\n });\n });\n };\n\n $scope.editFreeAccess = function() {\n $scope.toggleFreeAccess(true);\n };\n\n $scope.removeUser = function(username) {\n ModalService.openSimpleModal({\n title: $translate.instant('common.confirm.delete'),\n message: $translate.instant('security.confirm.delete.user', {name: username}),\n warning: true,\n }).result.then(function() {\n $scope.loader = true;\n usersService.deleteUser(username)\n .then(() => $scope.getUsers())\n .catch((data) => {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n $scope.loader = false;\n });\n });\n };\n\n // Should be able to send the original username to $routeParams\n $scope.encodeURIComponent = function(name) {\n return encodeURIComponent(name);\n };\n }]);\n\nsecurityModule.controller('DefaultAuthoritiesCtrl', ['$scope', '$http', '$uibModalInstance', 'data', '$rootScope',\n function($scope, $http, $uibModalInstance, data, $rootScope) {\n const repositoryService = service(RepositoryService);\n\n $scope.grantedAuthorities = data.defaultAuthorities();\n $scope.appSettings = data.appSettings;\n\n $scope.hasActiveLocation = function() {\n // Hack to get this from root scope to avoid cyclic dependency\n return !_.isEmpty($rootScope.globalLocation);\n };\n\n $scope.getRepositories = function() {\n // Hack to get this from root scope to avoid cyclic dependency\n return $rootScope.globalRepositories;\n };\n\n $scope.ok = function() {\n const auth = [];\n $scope.repositoryCheckError = true;\n for (const index in $scope.grantedAuthorities.WRITE_REPO) {\n if ($scope.grantedAuthorities.WRITE_REPO[index]) {\n auth.push(WRITE_REPO_PREFIX + index);\n auth.push(READ_REPO_PREFIX + index);\n $scope.repositoryCheckError = false;\n }\n }\n for (const index in $scope.grantedAuthorities.READ_REPO) {\n if ($scope.grantedAuthorities.READ_REPO[index] && auth.indexOf(READ_REPO_PREFIX + index) === -1) {\n auth.push(READ_REPO_PREFIX + index);\n $scope.repositoryCheckError = false;\n }\n }\n for (const index in $scope.grantedAuthorities.GRAPHQL) {\n if ($scope.grantedAuthorities.GRAPHQL[index] && auth.indexOf(GRAPHQL_PREFIX + index) === -1) {\n auth.push(GRAPHQL_PREFIX + index);\n }\n }\n if (!$scope.repositoryCheckError) {\n $uibModalInstance.close({authorities: auth, appSettings: $scope.appSettings});\n }\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.createUniqueKey = function(repository) {\n return repositoryService.getLocationSpecificId(repository);\n };\n }]);\n\nsecurityModule.controller('CommonUserCtrl', ['$rootScope', '$scope', '$http', 'toastr', '$window', '$timeout', '$location', '$jwtAuth', '$translate', 'passwordPlaceholder',\n function($rootScope, $scope, $http, toastr, $window, $timeout, $location, $jwtAuth, $translate, passwordPlaceholder) {\n const authorizationService = service(AuthorizationService);\n const repositoryService = service(RepositoryService);\n\n $rootScope.$on('$translateChangeSuccess', function() {\n $scope.passwordPlaceholder = $translate.instant(passwordPlaceholder);\n });\n $scope.isAdmin = function() {\n return authorizationService.hasRole(UserRole.ROLE_ADMIN);\n };\n $scope.hasExternalAuth = function() {\n return $jwtAuth.hasExternalAuth();\n };\n\n $scope.hasEditRestrictions = function() {\n return $scope.user && $scope.user.username === UserType.ADMIN;\n };\n\n $scope.isOverrideAuth = function() {\n return $jwtAuth.isDefaultAuthEnabled();\n };\n\n $scope.setGrantedAuthorities = function() {\n function pushAuthority(...authorities) {\n for (let i = 0; i < authorities.length; i++) {\n const authority = authorities[i];\n if (_.indexOf($scope.user.grantedAuthorities, authority) < 0) {\n $scope.user.grantedAuthorities.push(authority);\n }\n }\n }\n\n $scope.user.grantedAuthorities = [];\n\n $scope.repositoryCheckError = true;\n if ($scope.userType === UserType.ADMIN) {\n $scope.repositoryCheckError = false;\n pushAuthority(UserRole.ROLE_ADMIN);\n } else if ($scope.userType === UserType.REPO_MANAGER) {\n $scope.repositoryCheckError = false;\n pushAuthority(UserRole.ROLE_REPO_MANAGER);\n } else {\n pushAuthority(UserRole.ROLE_USER);\n for (const index in $scope.grantedAuthorities.WRITE_REPO) {\n if ($scope.grantedAuthorities.WRITE_REPO[index]) {\n $scope.repositoryCheckError = false;\n pushAuthority(WRITE_REPO_PREFIX + index, READ_REPO_PREFIX + index);\n }\n }\n for (const index in $scope.grantedAuthorities.READ_REPO) {\n if ($scope.grantedAuthorities.READ_REPO[index]) {\n $scope.repositoryCheckError = false;\n pushAuthority(READ_REPO_PREFIX + index);\n }\n }\n for (const index in $scope.grantedAuthorities.GRAPHQL) {\n if ($scope.grantedAuthorities.GRAPHQL[index]) {\n pushAuthority(GRAPHQL_PREFIX + index);\n }\n }\n }\n if ($scope.customRoles) {\n $scope.customRoles.forEach((role) => pushAuthority('CUSTOM_' + role));\n }\n };\n\n $scope.$watch('userType', function() {\n if (!$scope.isUser()) {\n $scope.customRoles = '';\n }\n });\n\n $scope.isUser = function() {\n return $scope.userType === UserType.USER;\n };\n\n $scope.hasReadPermission = function(repository) {\n const uniqueKey = repositoryService.getLocationSpecificId(repository);\n return $scope.userType === UserType.ADMIN\n || $scope.userType === UserType.REPO_MANAGER\n || repository.id !== SYSTEM_REPO && ($scope.grantedAuthorities.READ_REPO['*']\n || $scope.grantedAuthorities.WRITE_REPO['*'])\n || $scope.grantedAuthorities.READ_REPO[uniqueKey]\n || $scope.grantedAuthorities.WRITE_REPO[uniqueKey];\n };\n\n $scope.hasWritePermission = function(repoOrWildCard) {\n const uniqueKey = repositoryService.getLocationSpecificId(repoOrWildCard);\n return $scope.userType === UserType.ADMIN\n || $scope.userType === UserType.REPO_MANAGER\n || repoOrWildCard.id !== SYSTEM_REPO && $scope.grantedAuthorities.WRITE_REPO['*']\n || $scope.grantedAuthorities.WRITE_REPO[uniqueKey];\n };\n\n $scope.hasGraphqlPermission = function(repository) {\n const uniqueKey = repositoryService.getLocationSpecificId(repository);\n return repository.id !== SYSTEM_REPO && $scope.grantedAuthorities.GRAPHQL['*']\n || $scope.grantedAuthorities.GRAPHQL[uniqueKey];\n };\n\n $scope.readCheckDisabled = function(repoOrWildCard) {\n return $scope.hasWritePermission(repoOrWildCard)\n || repoOrWildCard.id !== SYSTEM_REPO && repoOrWildCard !== '*' && $scope.grantedAuthorities.READ_REPO['*']\n || $scope.hasEditRestrictions();\n };\n\n $scope.writeCheckDisabled = function(repoOrWildCard) {\n return $scope.userType === UserType.ADMIN\n || $scope.userType === UserType.REPO_MANAGER\n || repoOrWildCard.id !== SYSTEM_REPO && repoOrWildCard !== '*' && $scope.grantedAuthorities.WRITE_REPO['*']\n || $scope.hasEditRestrictions();\n };\n\n /**\n * Determines whether the GraphQL checkbox for a given repository or wildcard\n * should be disabled.\n *\n * @param {Object|string} repoOrWildCard - A repo object or the string wildcard '*'\n * @returns {boolean} true if disabled, false if enabled\n */\n $scope.graphqlCheckDisabled = function(repoOrWildCard) {\n if ($scope.userType === UserType.ADMIN || $scope.userType === UserType.REPO_MANAGER) {\n return true;\n }\n\n if ($scope.hasEditRestrictions()) {\n return true;\n }\n\n if (repoOrWildCard !== '*' && $scope.grantedAuthorities.GRAPHQL['*']) {\n return true;\n }\n\n if (repoOrWildCard === '*' && $scope.grantedAuthorities.GRAPHQL['*']) {\n return false;\n }\n\n let uniqueKey;\n if (repoOrWildCard !== null && typeof repoOrWildCard === 'object') {\n uniqueKey = repositoryService.getLocationSpecificId(repoOrWildCard);\n } else {\n uniqueKey = repoOrWildCard;\n }\n\n const hasReadWildcard = $scope.grantedAuthorities.READ_REPO['*'];\n const hasWriteWildcard = $scope.grantedAuthorities.WRITE_REPO['*'];\n const hasReadForRepo = $scope.grantedAuthorities.READ_REPO[uniqueKey];\n const hasWriteForRepo = $scope.grantedAuthorities.WRITE_REPO[uniqueKey];\n\n return !(hasReadWildcard || hasWriteWildcard || hasReadForRepo || hasWriteForRepo);\n };\n\n $scope.createUniqueKey = function(repository) {\n return repositoryService.getLocationSpecificId(repository);\n };\n\n $scope.userType = UserType.USER;\n $scope.grantedAuthorities = {\n [READ_REPO]: {},\n [WRITE_REPO]: {},\n [GRAPHQL]: {},\n };\n\n $scope.validatePassword = function() {\n if ($scope.noPassword) {\n $scope.passwordError = '';\n $scope.confirmPasswordError = '';\n return true;\n }\n if ($scope.user.password !== $scope.user.confirmpassword) {\n if (!$scope.user.password) {\n $scope.passwordError = $translate.instant('security.enter.password');\n $scope.confirmPasswordError = '';\n } else {\n $scope.passwordError = '';\n $scope.confirmPasswordError = $translate.instant('security.confirm.password');\n }\n return false;\n } else {\n $scope.passwordError = '';\n $scope.confirmPasswordError = '';\n }\n return true;\n };\n\n $scope.isLocalAuthentication = function() {\n return $jwtAuth.getAuthImplementation() === 'Local';\n };\n\n $scope.updateUser = function() {\n if (!$scope.validateForm()) {\n return false;\n }\n\n if ($scope.isLocalAuthentication()) {\n $scope.setGrantedAuthorities();\n }\n\n if (!$scope.repositoryCheckError) {\n $scope.updateUserHttp();\n }\n };\n\n $scope.setNoPassword = function() {\n if ($scope.noPassword) {\n $scope.user.password = '';\n $scope.user.confirmpassword = '';\n $scope.passwordError = '';\n $scope.confirmPasswordError = '';\n }\n };\n\n $scope.shouldDisableSameAs = function() {\n const sameAsCheckbox = $('#sameAsCheck');\n if ($scope.user && !$scope.user.appSettings.DEFAULT_INFERENCE && sameAsCheckbox.prop('checked')) {\n sameAsCheckbox.prop('checked', false);\n $scope.user.appSettings.DEFAULT_SAMEAS = false;\n }\n\n return $scope.user && !$scope.user.appSettings.DEFAULT_INFERENCE;\n };\n\n /**\n * The validity of the last user typed custom role.\n * @type {boolean}\n */\n $scope.isRoleValid = true;\n const minTagLength = 2;\n\n /**\n * Adds the user typed custom role and sets role validity flag to true.\n *\n * @param {{text: string}} role the user input\n * @return {{text: string}} the user input in uppercase\n */\n $scope.addCustomRole = function(role) {\n $scope.isRoleValid = true;\n role.text = role.text.toUpperCase();\n return role;\n };\n\n /**\n * Checks if the input text is valid or not.\n *\n * @param {{text: string}} fieldValue the user input\n * @return {boolean} true if valid, otherwise false\n */\n $scope.isCustomRoleValid = function(fieldValue) {\n $scope.isRoleValid = fieldValue.text.length >= minTagLength;\n return $scope.isRoleValid;\n };\n\n /**\n * Checks if the user pressed the 'Backspace' or 'Delete' key and sets the role validity flag accordingly.\n *\n * @param {Object} event\n */\n $scope.checkUserInput = function(event) {\n // If the key pressed is the backspace or delete key, the tag error message will be hidden\n if (event.keyCode === 8 || event.keyCode === 46) {\n $scope.isRoleValid = true;\n }\n };\n\n /**\n * Sets the role validity flag to true.\n */\n $scope.removeErrorOnCut = function() {\n // If the user cuts text from the field, the tag error message will be hidden\n $scope.isRoleValid = true;\n };\n }]);\n\nsecurityModule.controller('AddUserCtrl', ['$scope', '$http', 'toastr', '$window', '$timeout', '$location', '$jwtAuth', '$controller', 'SecurityService', 'ModalService', '$translate',\n function($scope, $http, toastr, $window, $timeout, $location, $jwtAuth, $controller, SecurityService, ModalService, $translate) {\n // eslint-disable-next-line no-invalid-this\n angular.extend(this, $controller('CommonUserCtrl', {$scope: $scope, passwordPlaceholder: 'security.password.placeholder'}));\n const usersService = service(UsersService);\n\n $scope.mode = 'add';\n $scope.saveButtonText = $translate.instant('common.create.btn');\n $scope.goBack = function() {\n const timer = $timeout(function() {\n $window.history.back();\n }, 100);\n $scope.$on('$destroy', function() {\n $timeout.cancel(timer);\n });\n };\n $scope.pageTitle = $translate.instant('view.create.user.title');\n $scope.passwordPlaceholder = $translate.instant('security.password.placeholder');\n\n $scope.user = {\n 'username': '',\n 'password': '',\n 'confirmpassword': '',\n 'grantedAuthorities': [],\n 'appSettings': {\n 'DEFAULT_SAMEAS': true,\n 'DEFAULT_INFERENCE': true,\n 'EXECUTE_COUNT': true,\n 'IGNORE_SHARED_QUERIES': false,\n 'DEFAULT_VIS_GRAPH_SCHEMA': true,\n },\n };\n\n $scope.submit = function() {\n if ($scope.noPassword && $scope.userType === UserType.ADMIN) {\n ModalService.openSimpleModal({\n title: $translate.instant('security.create.admin'),\n message: $translate.instant('security.admin.login.warning'),\n warning: true,\n }).result.then(function() {\n $scope.createUser();\n });\n } else {\n $scope.createUser();\n }\n };\n\n $scope.createUserHttp = function() {\n $scope.loader = true;\n const user = new User({\n username: $scope.user.username,\n password: $scope.user.password,\n appSettings: new AppSettings($scope.user.appSettings),\n authorities: new AuthorityList($scope.user.grantedAuthorities),\n });\n usersService.createUser(user)\n .then(() => {\n toastr.success($translate.instant('security.user.created', {name: $scope.user.username}));\n const timer = $timeout(function() {\n $scope.loader = false;\n $location.path('/users');\n }, 2000);\n $scope.$on('$destroy', function() {\n $timeout.cancel(timer);\n });\n })\n .catch(async (data) => {\n $scope.loader = false;\n toastr.error(getError(data), $translate.instant('common.error'));\n });\n };\n\n $scope.createUser = function() {\n if ($scope.validateForm()) {\n $scope.setGrantedAuthorities();\n\n if (!$scope.repositoryCheckError) {\n $scope.createUserHttp();\n }\n }\n };\n\n $scope.validateForm = function() {\n let result = true;\n if (!$scope.user.username) {\n $scope.usernameError = $translate.instant('security.enter.username');\n result = false;\n } else {\n $scope.usernameError = '';\n }\n if ($scope.noPassword) {\n $scope.passwordError = '';\n $scope.confirmPasswordError = '';\n } else {\n if (!$scope.user.password) {\n $scope.passwordError = $translate.instant('security.enter.password');\n result = false;\n } else {\n $scope.passwordError = '';\n }\n if (!$scope.user.confirmpassword || $scope.user.password !== $scope.user.confirmpassword) {\n $scope.confirmPasswordError = $translate.instant('security.confirm.password');\n result = false;\n } else {\n $scope.confirmPasswordError = '';\n }\n }\n\n return result;\n };\n }]);\n\nsecurityModule.controller('EditUserCtrl', ['$scope', '$http', 'toastr', '$window', '$routeParams', '$timeout', '$location', '$jwtAuth', '$controller', 'SecurityService', 'ModalService', '$translate',\n function($scope, $http, toastr, $window, $routeParams, $timeout, $location, $jwtAuth, $controller, SecurityService, ModalService, $translate) {\n // eslint-disable-next-line no-invalid-this\n angular.extend(this, $controller('CommonUserCtrl', {$scope: $scope, passwordPlaceholder: 'security.new.password'}));\n const usersService = service(UsersService);\n const authorizationService = service(AuthorizationService);\n const securityContextService = service(SecurityContextService);\n\n $scope.mode = 'edit';\n $scope.saveButtonText = $translate.instant('common.save.btn');\n $scope.goBack = function() {\n const timer = $timeout(function() {\n $window.history.back();\n }, 100);\n $scope.$on('$destroy', function() {\n $timeout.cancel(timer);\n });\n };\n $scope.params = $routeParams;\n $scope.pageTitle = $translate.instant('view.edit.user.title', {userId: $scope.params.userId});\n $scope.passwordPlaceholder = $translate.instant('security.new.password');\n $scope.userType = UserType.USER;\n const defaultUserSettings = {\n 'DEFAULT_SAMEAS': true,\n 'DEFAULT_INFERENCE': true,\n 'EXECUTE_COUNT': true,\n 'IGNORE_SHARED_QUERIES': false,\n 'DEFAULT_VIS_GRAPH_SCHEMA': true,\n };\n\n if (!authorizationService.hasRole(UserRole.ROLE_ADMIN)) {\n $location.url('settings');\n }\n $scope.getUserData = function() {\n usersService.getUser($scope.params.userId).then(function(data) {\n $scope.user = {username: data.username};\n $scope.user.password = '';\n $scope.user.confirmpassword = '';\n $scope.user.external = data.external;\n $scope.user.appSettings = data.appSettings || defaultUserSettings;\n $scope.userType = data.getUserType();\n $scope.grantedAuthorities = data.authorities.toUIModel();\n $scope.customRoles = data.authorities.getCustomRoles();\n }).catch(function(data) {\n const msg = getError(data);\n toastr.error(msg, $translate.instant('common.error'));\n });\n };\n\n $scope.getUserData();\n\n $scope.submit = function() {\n if ($scope.noPassword && $scope.userType === UserType.ADMIN) {\n ModalService.openSimpleModal({\n title: $translate.instant('security.save.admin.settings'),\n message: $translate.instant('security.admin.pass.unset'),\n warning: true,\n }).result.then(function() {\n $scope.updateUser();\n });\n } else {\n $scope.updateUser();\n }\n };\n\n $scope.updateUserHttp = function() {\n $scope.loader = true;\n const user = new User({\n username: $scope.user.username,\n password: $scope.noPassword ? '' : $scope.user.password || undefined,\n appSettings: new AppSettings($scope.user.appSettings),\n authorities: new AuthorityList($scope.user.grantedAuthorities),\n });\n usersService.updateUser(user).then(() => {\n toastr.success($translate.instant('security.user.updated', {name: $scope.user.username}));\n const timer = $timeout(function() {\n $scope.loader = false;\n $window.history.back();\n }, 2000);\n $scope.$on('$destroy', function() {\n $timeout.cancel(timer);\n });\n // if we update the settings of the currently logged user, update the principal\n const principal = securityContextService.getAuthenticatedUser();\n if ($scope.user.username === principal.username) {\n // TODO: Discuss what's the point in updating the principal's appSettings here?!\n // principal.appSettings = $scope.user.appSettings;\n principal.setAppSettings(new AppSettings($scope.user.appSettings));\n }\n }).catch((data) => {\n const msg = getError(data);\n $scope.loader = false;\n toastr.error(msg, $translate.instant('common.error'));\n });\n };\n\n $scope.validateForm = function() {\n return $scope.validatePassword();\n };\n }]);\n\nsecurityModule.controller('RolesMappingController', ['$scope', 'toastr', 'SecurityService', '$translate',\n function($scope, toastr, SecurityService, $translate) {\n $scope.debugMapping = function(role, mapping) {\n const method = mapping.split(':');\n SecurityService.getRolesMapping({\n role: role,\n method: method[1],\n mapping: method[0],\n });\n };\n\n const loadRoles = function() {\n SecurityService.getRoles()\n .success(function(data) {\n $scope.roleMappings = data;\n $scope.roles = _.keys($scope.roleMappings);\n $scope.mappings = _.keys($scope.roleMappings[$scope.roles[0]]);\n const permissionsCount = _.map($scope.roles, function(role) {\n return [role, _.filter($scope.roleMappings[role]).length];\n });\n $scope.roles = _.reverse(_.map(_.orderBy(permissionsCount, function(p) {\n return p[1];\n }), function(p) {\n return p[0];\n }));\n })\n .error(function(data) {\n const msg = getError(data);\n $scope.loader = false;\n toastr.error(msg, $translate.instant('common.error'));\n });\n };\n\n $scope.$on('repositoryIsSet', function() {\n loadRoles();\n });\n }]);\n\nsecurityModule.controller('DeleteUserCtrl', ['$scope', '$uibModalInstance', 'username', function($scope, $uibModalInstance, username) {\n $scope.username = username;\n\n $scope.ok = function() {\n $uibModalInstance.close();\n };\n\n $scope.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n}]);\n"],"names":["SYSTEM_REPO","READ_REPO","READ_REPO_PREFIX","WRITE_REPO","GRAPHQL","WRITE_REPO_PREFIX","GRAPHQL_PREFIX","angular","module","directive","restrict","link","scope","element","attrs","subscriptions","hasCustomOrNegatedPrefix","tag","startsWith","isNgTagsInput","nodeName","toLowerCase","ngModel","ngModelCtrl","controller","$parsers","push","viewValue","Array","isArray","$warning","some","$watch","newVal","$on","unsubscribeListeners","forEach","subscription","securityModule","$scope","$uibModal","toastr","$window","$jwtAuth","$timeout","ModalService","SecurityService","$translate","authorizationService","service","AuthorizationService","authenticationService","AuthenticationService","securityServiceAPI","SecurityServiceAPI","toastrService","OntoToastrService","usersService","UsersService","repositoryService","RepositoryService","usersData","loader","securityEnabled","isSecurityEnabled","hasExternalAuth","getAuthImplementation","freeAccessEnabled","hasFreeAccess","getUsers","then","data","map","user","username","dateCreated","userType","getUserType","userTypeDescription","getUserTypeDescription","repositories","authorities","getRepositoriesPermissions","customRoles","getCustomRoles","catch","msg","getError","error","instant","toggleSecurity","location","reload","setFreeAccess","enabled","authSettings","toggleFreeAccess","updateFreeAccess","getFreeAccess","freeAccessAuthSettings","mapGrantedAuthoritiesResponseToModel","getItems","appSettings","configureFreeAccess","updatedFreeAccessAuthSettings","isFreeAccessEnabled","translateKey","success","status","err","open","templateUrl","resolve","defaultAuthorities","repoIds","_","mapKeys","getRepositories","r","getLocationSpecificId","each","a","indexOf","hasOwnProperty","substr","result","mapAuthSettingsResponseToModel","editFreeAccess","removeUser","openSimpleModal","title","message","name","warning","deleteUser","encodeURIComponent","$http","$uibModalInstance","$rootScope","grantedAuthorities","hasActiveLocation","isEmpty","globalLocation","globalRepositories","ok","auth","repositoryCheckError","index","close","cancel","dismiss","createUniqueKey","repository","$location","passwordPlaceholder","isAdmin","hasRole","UserRole","ROLE_ADMIN","hasEditRestrictions","UserType","ADMIN","isOverrideAuth","isDefaultAuthEnabled","setGrantedAuthorities","pushAuthority","i","length","authority","REPO_MANAGER","ROLE_REPO_MANAGER","ROLE_USER","role","isUser","USER","hasReadPermission","uniqueKey","id","hasWritePermission","repoOrWildCard","hasGraphqlPermission","readCheckDisabled","writeCheckDisabled","graphqlCheckDisabled","hasReadWildcard","hasWriteWildcard","hasReadForRepo","hasWriteForRepo","validatePassword","noPassword","passwordError","confirmPasswordError","password","confirmpassword","isLocalAuthentication","updateUser","validateForm","updateUserHttp","setNoPassword","shouldDisableSameAs","sameAsCheckbox","$","DEFAULT_INFERENCE","prop","DEFAULT_SAMEAS","isRoleValid","addCustomRole","text","toUpperCase","isCustomRoleValid","fieldValue","checkUserInput","event","keyCode","removeErrorOnCut","$controller","extend","this","mode","saveButtonText","goBack","timer","history","back","pageTitle","submit","createUser","createUserHttp","User","AppSettings","AuthorityList","path","async","usernameError","$routeParams","securityContextService","SecurityContextService","params","userId","defaultUserSettings","url","getUserData","getUser","external","toUIModel","undefined","principal","getAuthenticatedUser","setAppSettings","debugMapping","mapping","method","split","getRolesMapping","getRoles","roleMappings","roles","keys","mappings","permissionsCount","filter","reverse","orderBy","p"],"ignoreList":[],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const __webpack_esm_id__=99448;export const __webpack_esm_ids__=[99448];export const __webpack_esm_modules__={64088(e,t,n){n.d(t,{A:()=>r});var a=a||{};a.SingleChild={addPlaceholders:function e(t,n){if(t.children){for(var a=0;a<t.children.length;a++)e(t.children[a]);if(1===t.children.length){var r=1.2*t.size;n&&(r=.1*t.children[0].size),t.children.push({name:"placeholder",size:r})}}},removePlaceholders:function e(t){for(var n=t.length-1;n>=0;n--){var a=t[n];"placeholder"===a.data.name?t.splice(n,1):a.children&&e(a.children)}},centerNodes:function(e){for(var t=0;t<e.length;t++){var n=e[t];if(n.children&&1===n.children.length){var a=n.x-n.children[0].x;n.children[0].x+=a,r(n.children[0],a)}}function r(e,t){if(e.children)for(var n=0;n<e.children.length;n++)e.children[n].x+=t,r(e.children[n],t)}},makePositionsRelativeToZero:function(e){for(var t=e[0].x,n=e[0].y,a=0;a<e.length;a++){var r=e[a];r.x-=t,r.y-=n}}};const r=a},88141(e,t,n){n.d(t,{A:()=>i}),n(62979);const a={selectAll:n(93462).selectAll};var r=r||{};r.Export={getCSSRules:function(e){const t=$('link[href="'+e+'"]')[0].sheet.rules;let n="";return _.each(t,function(e){n+=e.cssText}),n},generateBase64ImageSource:function(e){e||(e="svg");const t=a.selectAll(e).attr("version","1.1").attr("xmlns","http://www.w3.org/2000/svg").node().parentNode.innerHTML;return"data:image/svg+xml;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(t)))}};const i=r},99448(e,t,n){var a=n(75468),r=n(64088),i=n(19935),s=n(93462),c=n(88141),o=(n(32150),n(57154));function l(e,t,n,l,d,h,u,f,p,g,x,m){return{restrict:"AE",template:'<div id="classChart"></div>',scope:{classHierarchyData:"=",flattenedClassNames:"=",selectedClass:"=",currentSliderValue:"=",showClassInfoPanel:"=",showExternalElements:"=",hidePrefixes:"=",currentBrowserLimit:"="},link:function(y,A,v){!function(y){let A=!1;let v,S;const C=s.pack().size([780,780]),R=s.scaleLinear().domain([0,4]).range(["hsl(19, 70%, 90%)","hsl(19, 70%, 50%)"]).interpolate(s.interpolateHcl),E=s.select("#classChart").insert("svg:svg","h2").attr("viewBox","0 0 800 800").attr("preserveAspectRatio","xMidYMid meet").on("dblclick.zoom",null);function P(){return E.append("svg:g").attrs({id:"main-group",transform:"translate(400,400)"})}function w(){return"true"===g.get(x.CLASS_HIERARCHY_HIDE_PREFIXES)}function H(){const e=c.A.Export.getCSSRules("css/rdf-class-hierarchy-labels.css?v=3.3.2-RC1");s.selectAll("#main-group").append("defs"),$("defs").append('<style type="text/css"><![CDATA['+e+"]]></style>"),s.selectAll("g").style("opacity",1);const t=c.A.Export.generateBase64ImageSource("#classChart svg");s.select(this).attrs({href:t,download:"class-hierarchy-"+h.getActiveRepository()+".svg"})}y.hidePrefixes=w();let I=P();const T=!!y.classHierarchyData?.classCount,L=h.getActiveRepository()&&!h.isSystemRepository();let D,k,N,b,F;(0,o.service)(o.LicenseContextService).onLicenseChanged(t=>{t?.valid&&!T&&L&&function(){e.loader=!0,e.hierarchyError=!1;const t=g.get(`classHierarchy-selectedGraph-${h.getActiveRepository()}`);n.getClassHierarchyData(null!==t?t.contextID.uri:"").success(function(t,n){e.loader=!1,207===n&&u.warning(m.instant("graphexplore.update.diagram"),m.instant("graphexplore.repository.data.changed")),y.classHierarchyData=t,s.select("#download-svg").on("mouseover",H)}).error(function(t){e.loader=!1,e.hierarchyError=getError(t),u.error(m.instant("graphexplore.error.request.failed",{name:p,error:getError(t)}))})}()});const z={};function O(n,c,o,h){b&&b(),F&&F(),s.selectAll("#main-group").remove(),I=P(),r.A.SingleChild.addPlaceholders(n,!0),S=s.hierarchy(n),S.sum(function(e){return e.size}),N=o||S,C(S);const u=S.descendants();let g;N.isInFocusTransitive=!0,r.A.SingleChild.removePlaceholders(u),r.A.SingleChild.centerNodes(u),r.A.SingleChild.makePositionsRelativeToZero(u),v||(v=(0,a.A)().attr("class","d3-tip").customPosition(function(e,t){return{top:"inherit",bottom:l.innerHeight-t.clientY+"px",right:l.innerWidth-t.clientX+"px"}}).html(function(e){return e.data.name}),E.call(v));const x=I.selectAll("circle").data(u).enter().append("g");c.doFade&&x.each(function(e){i.A.Transition.fadeIn(s.select(this),550)});let m=[];const w=x.append("circle").attr("class",function(e){return e.data.role}).attr("data-test",function(e){return"class-"+e.data.name}).attr("guide-selector",function(e){return"class-"+e.data.name}).style("fill",function(e){return e.children?R(e.depth):"#E0D0D0"}).each(function(e){if(e.circle=s.select(this),e.data.name!==p){const t=e.data.name;m.push({name:t}),z[[t]]=e,e.circle.classed("rdf-class",!0),e.circle.on("mouseover",function(t){c.noPrefixes||e.textHidden?v.show(e,t):v.hide(e)}),e.circle.on("mouseout",v.hide)}}).on("gdb-focus",(e,t)=>k(t)).on("gdb-zoom",(e,t)=>Z(t));let H;function T(e){s.selectAll(".selected").classed("selected",e.selected=!1),e.circle.classed("selected",e.selected=!0),H=e}function L(){y.showClassInfoPanel=!1}m&&(m=_.uniqBy(m,"name"),y.flattenedClassNames=m);const $=i.A.Click.delayDblClick();s.selectAll(".parent, .topLevelParent, .child, .root").call($),k=function(e){Z(e),e.data.name===p?(L(),s.selectAll(".selected").classed("selected",!1)):(T(e),A||(y.selectedClass=H,y.showClassInfoPanel=!0),y.$on("sidePanelClosed",function(t){s.selectAll(".selected").classed("selected",e.selected=!1)}))},$.on("click",function(e,t){t.data.id&&l.history.pushState({id:t.data.id},"classHierarchyPage"+t.data.id,"hierarchy#"+t.data.id),v.hide(),k(t)}),$.on("dblclick",function(t,a){a!==n&&(v.hide(),T(a),e.$broadcast("goToDomainRangeGraphView",H,N),t.stopPropagation())});let O=0;E.on("wheel",function(e){v.hide(),e.preventDefault(),e.stopPropagation();const t=Date.now();if(!(t-O>100))return;O=t;let n="";e.deltaY<=-1?n="in":e.deltaY>=1&&(n="out");let a=e.target.__data__;if(a||(a=N),"in"===n){if(a!==N){for(;a.parent&&!a.parent.isInFocusTransitive;)a=a.parent;a.depth<N.depth&&(a=N)}if(a===N&&a.children){let e=a.children[0];for(let t=1;t<a.children.length;t++)a.children[t].sortingRank>e.sortingRank&&(e=a.children[t]);e.children&&(a=e)}else a.children||(a=a.parent);Z(a,!0)}else"out"===n&&(a=N.parent,a&&Z(a,!0));N.data.name===p&&l.history.replaceState({id:1},"classHierarchyPage1","hierarchy#1"),U()});const Y=I.selectAll("text").data(u).enter().append("text").attr("class",function(e){return e.children&&e.children.length?"label":"label child-label"}).each(function(e){e.textSel=s.select(this)});c.noPrefixes?(Y.each(function(e){const t=e.data.name.indexOf(":");e.data.name.indexOf("http://")>-1?e.noPrefixName=e.data.name:t>-1&&(e.noPrefixName=e.data.name.substring(t+1))}),Y.style("font-size",function(e){return i.A.Text.calcFontSize(e.noPrefixName,e.r)}).text(function(e){return i.A.Text.getTextWithElipsisIfNeeded(e.noPrefixName,e.r/3)})):Y.style("font-size",function(e){return i.A.Text.calcFontSize(e.data.name,e.r)}).text(function(e){return i.A.Text.getTextWithElipsisIfNeeded(e.data.name,e.r/3)}),Y.style("display",function(e){return e.parent&&e.parent.data===N.data?(e.textHidden=this.textContent.indexOf("...")+3===this.textContent.length,null):(e.textHidden=!0,"none")}),c.doFade&&!c.keepPrevState&&Y.each(function(e){i.A.Transition.fadeIn(s.select(this),550)}),D=function(){function e(e){e&&w.each(function(t){+e===t.data.id&&k(t)})}const n=t.hash();l.onpopstate=function(t){t.state&&e(t.state.id)},e(n)};const B=I.selectAll("circle, text");function V(e,t){const n=800/e[2];g=e,B.attr("transform",function(t){return"translate("+(t.x-e[0])*n+","+(t.y-e[1])*n+")"}),w.attr("r",function(e){return e.r*n}),t&&Y.each(function(e){e.data.fullName!==N.data.topLevelParentUri&&N.data.topLevelParentUri!==p||(e.textSel.style("display","none"),N.children&&N.children.length?_.each(N.children,function(e){e.textSel.style("display","inline")}):N.textSel.style("display","inline"),N.parent&&_.each(N.parent.children,function(e){e.data.name!==N.data.name&&e.textSel.style("display","inline")}))}),Y.style("font-size",function(e){return c.noPrefixes?i.A.Text.calcFontSize(e.noPrefixName,e.r*n):i.A.Text.calcFontSize(e.data.name,e.r*n)}).text(function(e){return c.noPrefixes?i.A.Text.getTextWithElipsisIfNeeded(e.noPrefixName,e.r*n/3):i.A.Text.getTextWithElipsisIfNeeded(e.data.name,e.r*n/3)})}function M(e){let t=2*e+20;return 2*e/t<.3&&(t=2*e+2),t}function W(e){!e.isInFocusTransitive&&e.parent&&e.parent.isInFocusTransitive?(e.textHidden=this.textContent.indexOf("...")+3===this.textContent.length,this.style.display=""):(e.textHidden=!0,this.style.display="none")}function Z(e,t){if(d(function(){y.showExternalElements=e.data.name===p}),N===e)return;if(e.data.id&&l.history.replaceState({id:e.data.id},"classHierarchyPage"+e.data.id,"hierarchy#"+e.data.id),!e.children&&(e=e.parent,N===e))return;if(t&&(L(),s.selectAll(".selected").classed("selected",!1)),N.parent){let e=N;for(;e;)e.isInFocusTransitive=!1,e=e.parent}let n=e;for(;n;)n.isInFocusTransitive=!!n.children,n=n.parent;N=e,2*N.r/(2*N.r+20)<.3||y.currentSliderValue>y.currentBrowserLimit?(V([N.x,N.y,M(N.r)]),Y.each(function(e){W.call(this,e)})):s.transition().duration(f).tween("zoom",function(e){const t=s.interpolateZoom(g,[N.x,N.y,M(N.r)]);return function(e){V(t(e))}}).selectAll("text").each(W)}V([N.x,N.y,M(N.r)],h),b=y.$on("rootFocus",function(){l.history.pushState({id:1},"classHierarchyPage1","hierarchy#1"),k(S)}),F=y.$on("classSearch",function(e){k(e)})}function U(){const t=y.classHierarchyData.classCount;let n=g.get(x.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE);(!n||n>t)&&(n=t,g.set(x.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE,n)),e.$broadcast("classCount",t,n)}let Y,B,V,M;window.addEventListener("resize",U),window.addEventListener("beforeunload",function e(){window.removeEventListener("resize",U),window.removeEventListener("beforeunload",e)}),y.$watch("classHierarchyData",function(){Y&&Y(),B&&B(),V&&V(),M&&M();let e=w();if(y.classHierarchyData.classCount){U();const t=structuredClone(y.classHierarchyData);const n=s.hierarchy(t).descendants().sort(function(e,t){return e.data.sortingRank>t.data.sortingRank?-1:e.data.sortingRank<t.data.sortingRank||e.data.depth>t.data.depth?1:e.data.depth<t.data.depth?-1:0});let a,r;function i(e,t){const n={keepPrevState:!0,noPrefixes:w()};r=n.noPrefixes,O(a||e,n,N,!0),d(()=>{g.set(x.CLASS_HIERARCHY_SWITCH_PREFIXES,t),D(),A=!1},70)}function c(e,n,s){if(!e)return;g.set(x.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE,e),a={name:p,children:[]};const c=new Set;for(let t=1;t<=e;t++)c.add(n[t].data.id),n[t].parent===n[0]&&a.children.push(n[t].data);(function e(t){if(!t.children)return;const n=[];for(const e of t.children)c.has(e.id)&&n.push($.extend({},e));t.children=n;for(const n of t.children)e(n)})(a),s?(r=angular.isUndefined(r)?w():r,O(a,{noPrefixes:r})):i(t)}const o=g.get(x.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE);if(o)c(o,n);else{const h={doFade:!0,keepPrevState:!0,noPrefixes:w()};O(t,h),D()}let l;Y=y.$watch("hidePrefixes",function(n){angular.isUndefined(n)||e?e=void 0:d(function(){A=!0,function(e){angular.isUndefined(e)||g.set(x.CLASS_HIERARCHY_HIDE_PREFIXES,e)}(n),i(t,!0)},50)},!0),B=y.$watch("currentSliderValue",function(e){c(e,n,!0)},!0),M=y.$on("onEnterKeypressSearchAction",function(e){l&&k(l)}),V=y.$on("searchedClass",function(e,t){l=z[t.name],l&&k(l)})}},!0)}(y)}}}angular.module("graphdb.framework.graphexplore.directives.class",["graphdb.framework.graphexplore.controllers.class","graphdb.framework.utils.localstorageadapter"]).constant("ZOOM_DURATION",500).constant("ROOT_OBJ_NAME","RDF Class Hierarchy").directive("rdfClassHierarchy",l),l.$inject=["$rootScope","$location","GraphDataRestService","$window","$timeout","$repositories","toastr","ZOOM_DURATION","ROOT_OBJ_NAME","LocalStorageAdapter","LSKeys","$translate"]}};
|
|
2
|
-
//# sourceMappingURL=99448.
|
|
1
|
+
export const __webpack_esm_id__=99448;export const __webpack_esm_ids__=[99448];export const __webpack_esm_modules__={64088(e,t,n){n.d(t,{A:()=>r});var a=a||{};a.SingleChild={addPlaceholders:function e(t,n){if(t.children){for(var a=0;a<t.children.length;a++)e(t.children[a]);if(1===t.children.length){var r=1.2*t.size;n&&(r=.1*t.children[0].size),t.children.push({name:"placeholder",size:r})}}},removePlaceholders:function e(t){for(var n=t.length-1;n>=0;n--){var a=t[n];"placeholder"===a.data.name?t.splice(n,1):a.children&&e(a.children)}},centerNodes:function(e){for(var t=0;t<e.length;t++){var n=e[t];if(n.children&&1===n.children.length){var a=n.x-n.children[0].x;n.children[0].x+=a,r(n.children[0],a)}}function r(e,t){if(e.children)for(var n=0;n<e.children.length;n++)e.children[n].x+=t,r(e.children[n],t)}},makePositionsRelativeToZero:function(e){for(var t=e[0].x,n=e[0].y,a=0;a<e.length;a++){var r=e[a];r.x-=t,r.y-=n}}};const r=a},88141(e,t,n){n.d(t,{A:()=>i}),n(62979);const a={selectAll:n(93462).selectAll};var r=r||{};r.Export={getCSSRules:function(e){const t=$('link[href="'+e+'"]')[0].sheet.rules;let n="";return _.each(t,function(e){n+=e.cssText}),n},generateBase64ImageSource:function(e){e||(e="svg");const t=a.selectAll(e).attr("version","1.1").attr("xmlns","http://www.w3.org/2000/svg").node().parentNode.innerHTML;return"data:image/svg+xml;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(t)))}};const i=r},99448(e,t,n){var a=n(75468),r=n(64088),i=n(19935),s=n(93462),c=n(88141),o=(n(32150),n(57154));function l(e,t,n,l,d,h,u,f,p,g,x,m){return{restrict:"AE",template:'<div id="classChart"></div>',scope:{classHierarchyData:"=",flattenedClassNames:"=",selectedClass:"=",currentSliderValue:"=",showClassInfoPanel:"=",showExternalElements:"=",hidePrefixes:"=",currentBrowserLimit:"="},link:function(y,A,v){!function(y){let A=!1;let v,S;const C=s.pack().size([780,780]),R=s.scaleLinear().domain([0,4]).range(["hsl(19, 70%, 90%)","hsl(19, 70%, 50%)"]).interpolate(s.interpolateHcl),E=s.select("#classChart").insert("svg:svg","h2").attr("viewBox","0 0 800 800").attr("preserveAspectRatio","xMidYMid meet").on("dblclick.zoom",null);function P(){return E.append("svg:g").attrs({id:"main-group",transform:"translate(400,400)"})}function w(){return"true"===g.get(x.CLASS_HIERARCHY_HIDE_PREFIXES)}function H(){const e=c.A.Export.getCSSRules("css/rdf-class-hierarchy-labels.css?v=3.3.2-TR1");s.selectAll("#main-group").append("defs"),$("defs").append('<style type="text/css"><![CDATA['+e+"]]></style>"),s.selectAll("g").style("opacity",1);const t=c.A.Export.generateBase64ImageSource("#classChart svg");s.select(this).attrs({href:t,download:"class-hierarchy-"+h.getActiveRepository()+".svg"})}y.hidePrefixes=w();let I=P();const T=!!y.classHierarchyData?.classCount,L=h.getActiveRepository()&&!h.isSystemRepository();let D,k,N,b,F;(0,o.service)(o.LicenseContextService).onLicenseChanged(t=>{t?.valid&&!T&&L&&function(){e.loader=!0,e.hierarchyError=!1;const t=g.get(`classHierarchy-selectedGraph-${h.getActiveRepository()}`);n.getClassHierarchyData(null!==t?t.contextID.uri:"").success(function(t,n){e.loader=!1,207===n&&u.warning(m.instant("graphexplore.update.diagram"),m.instant("graphexplore.repository.data.changed")),y.classHierarchyData=t,s.select("#download-svg").on("mouseover",H)}).error(function(t){e.loader=!1,e.hierarchyError=getError(t),u.error(m.instant("graphexplore.error.request.failed",{name:p,error:getError(t)}))})}()});const z={};function O(n,c,o,h){b&&b(),F&&F(),s.selectAll("#main-group").remove(),I=P(),r.A.SingleChild.addPlaceholders(n,!0),S=s.hierarchy(n),S.sum(function(e){return e.size}),N=o||S,C(S);const u=S.descendants();let g;N.isInFocusTransitive=!0,r.A.SingleChild.removePlaceholders(u),r.A.SingleChild.centerNodes(u),r.A.SingleChild.makePositionsRelativeToZero(u),v||(v=(0,a.A)().attr("class","d3-tip").customPosition(function(e,t){return{top:"inherit",bottom:l.innerHeight-t.clientY+"px",right:l.innerWidth-t.clientX+"px"}}).html(function(e){return e.data.name}),E.call(v));const x=I.selectAll("circle").data(u).enter().append("g");c.doFade&&x.each(function(e){i.A.Transition.fadeIn(s.select(this),550)});let m=[];const w=x.append("circle").attr("class",function(e){return e.data.role}).attr("data-test",function(e){return"class-"+e.data.name}).attr("guide-selector",function(e){return"class-"+e.data.name}).style("fill",function(e){return e.children?R(e.depth):"#E0D0D0"}).each(function(e){if(e.circle=s.select(this),e.data.name!==p){const t=e.data.name;m.push({name:t}),z[[t]]=e,e.circle.classed("rdf-class",!0),e.circle.on("mouseover",function(t){c.noPrefixes||e.textHidden?v.show(e,t):v.hide(e)}),e.circle.on("mouseout",v.hide)}}).on("gdb-focus",(e,t)=>k(t)).on("gdb-zoom",(e,t)=>Z(t));let H;function T(e){s.selectAll(".selected").classed("selected",e.selected=!1),e.circle.classed("selected",e.selected=!0),H=e}function L(){y.showClassInfoPanel=!1}m&&(m=_.uniqBy(m,"name"),y.flattenedClassNames=m);const $=i.A.Click.delayDblClick();s.selectAll(".parent, .topLevelParent, .child, .root").call($),k=function(e){Z(e),e.data.name===p?(L(),s.selectAll(".selected").classed("selected",!1)):(T(e),A||(y.selectedClass=H,y.showClassInfoPanel=!0),y.$on("sidePanelClosed",function(t){s.selectAll(".selected").classed("selected",e.selected=!1)}))},$.on("click",function(e,t){t.data.id&&l.history.pushState({id:t.data.id},"classHierarchyPage"+t.data.id,"hierarchy#"+t.data.id),v.hide(),k(t)}),$.on("dblclick",function(t,a){a!==n&&(v.hide(),T(a),e.$broadcast("goToDomainRangeGraphView",H,N),t.stopPropagation())});let O=0;E.on("wheel",function(e){v.hide(),e.preventDefault(),e.stopPropagation();const t=Date.now();if(!(t-O>100))return;O=t;let n="";e.deltaY<=-1?n="in":e.deltaY>=1&&(n="out");let a=e.target.__data__;if(a||(a=N),"in"===n){if(a!==N){for(;a.parent&&!a.parent.isInFocusTransitive;)a=a.parent;a.depth<N.depth&&(a=N)}if(a===N&&a.children){let e=a.children[0];for(let t=1;t<a.children.length;t++)a.children[t].sortingRank>e.sortingRank&&(e=a.children[t]);e.children&&(a=e)}else a.children||(a=a.parent);Z(a,!0)}else"out"===n&&(a=N.parent,a&&Z(a,!0));N.data.name===p&&l.history.replaceState({id:1},"classHierarchyPage1","hierarchy#1"),U()});const Y=I.selectAll("text").data(u).enter().append("text").attr("class",function(e){return e.children&&e.children.length?"label":"label child-label"}).each(function(e){e.textSel=s.select(this)});c.noPrefixes?(Y.each(function(e){const t=e.data.name.indexOf(":");e.data.name.indexOf("http://")>-1?e.noPrefixName=e.data.name:t>-1&&(e.noPrefixName=e.data.name.substring(t+1))}),Y.style("font-size",function(e){return i.A.Text.calcFontSize(e.noPrefixName,e.r)}).text(function(e){return i.A.Text.getTextWithElipsisIfNeeded(e.noPrefixName,e.r/3)})):Y.style("font-size",function(e){return i.A.Text.calcFontSize(e.data.name,e.r)}).text(function(e){return i.A.Text.getTextWithElipsisIfNeeded(e.data.name,e.r/3)}),Y.style("display",function(e){return e.parent&&e.parent.data===N.data?(e.textHidden=this.textContent.indexOf("...")+3===this.textContent.length,null):(e.textHidden=!0,"none")}),c.doFade&&!c.keepPrevState&&Y.each(function(e){i.A.Transition.fadeIn(s.select(this),550)}),D=function(){function e(e){e&&w.each(function(t){+e===t.data.id&&k(t)})}const n=t.hash();l.onpopstate=function(t){t.state&&e(t.state.id)},e(n)};const B=I.selectAll("circle, text");function V(e,t){const n=800/e[2];g=e,B.attr("transform",function(t){return"translate("+(t.x-e[0])*n+","+(t.y-e[1])*n+")"}),w.attr("r",function(e){return e.r*n}),t&&Y.each(function(e){e.data.fullName!==N.data.topLevelParentUri&&N.data.topLevelParentUri!==p||(e.textSel.style("display","none"),N.children&&N.children.length?_.each(N.children,function(e){e.textSel.style("display","inline")}):N.textSel.style("display","inline"),N.parent&&_.each(N.parent.children,function(e){e.data.name!==N.data.name&&e.textSel.style("display","inline")}))}),Y.style("font-size",function(e){return c.noPrefixes?i.A.Text.calcFontSize(e.noPrefixName,e.r*n):i.A.Text.calcFontSize(e.data.name,e.r*n)}).text(function(e){return c.noPrefixes?i.A.Text.getTextWithElipsisIfNeeded(e.noPrefixName,e.r*n/3):i.A.Text.getTextWithElipsisIfNeeded(e.data.name,e.r*n/3)})}function M(e){let t=2*e+20;return 2*e/t<.3&&(t=2*e+2),t}function W(e){!e.isInFocusTransitive&&e.parent&&e.parent.isInFocusTransitive?(e.textHidden=this.textContent.indexOf("...")+3===this.textContent.length,this.style.display=""):(e.textHidden=!0,this.style.display="none")}function Z(e,t){if(d(function(){y.showExternalElements=e.data.name===p}),N===e)return;if(e.data.id&&l.history.replaceState({id:e.data.id},"classHierarchyPage"+e.data.id,"hierarchy#"+e.data.id),!e.children&&(e=e.parent,N===e))return;if(t&&(L(),s.selectAll(".selected").classed("selected",!1)),N.parent){let e=N;for(;e;)e.isInFocusTransitive=!1,e=e.parent}let n=e;for(;n;)n.isInFocusTransitive=!!n.children,n=n.parent;N=e,2*N.r/(2*N.r+20)<.3||y.currentSliderValue>y.currentBrowserLimit?(V([N.x,N.y,M(N.r)]),Y.each(function(e){W.call(this,e)})):s.transition().duration(f).tween("zoom",function(e){const t=s.interpolateZoom(g,[N.x,N.y,M(N.r)]);return function(e){V(t(e))}}).selectAll("text").each(W)}V([N.x,N.y,M(N.r)],h),b=y.$on("rootFocus",function(){l.history.pushState({id:1},"classHierarchyPage1","hierarchy#1"),k(S)}),F=y.$on("classSearch",function(e){k(e)})}function U(){const t=y.classHierarchyData.classCount;let n=g.get(x.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE);(!n||n>t)&&(n=t,g.set(x.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE,n)),e.$broadcast("classCount",t,n)}let Y,B,V,M;window.addEventListener("resize",U),window.addEventListener("beforeunload",function e(){window.removeEventListener("resize",U),window.removeEventListener("beforeunload",e)}),y.$watch("classHierarchyData",function(){Y&&Y(),B&&B(),V&&V(),M&&M();let e=w();if(y.classHierarchyData.classCount){U();const t=structuredClone(y.classHierarchyData);const n=s.hierarchy(t).descendants().sort(function(e,t){return e.data.sortingRank>t.data.sortingRank?-1:e.data.sortingRank<t.data.sortingRank||e.data.depth>t.data.depth?1:e.data.depth<t.data.depth?-1:0});let a,r;function i(e,t){const n={keepPrevState:!0,noPrefixes:w()};r=n.noPrefixes,O(a||e,n,N,!0),d(()=>{g.set(x.CLASS_HIERARCHY_SWITCH_PREFIXES,t),D(),A=!1},70)}function c(e,n,s){if(!e)return;g.set(x.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE,e),a={name:p,children:[]};const c=new Set;for(let t=1;t<=e;t++)c.add(n[t].data.id),n[t].parent===n[0]&&a.children.push(n[t].data);(function e(t){if(!t.children)return;const n=[];for(const e of t.children)c.has(e.id)&&n.push($.extend({},e));t.children=n;for(const n of t.children)e(n)})(a),s?(r=angular.isUndefined(r)?w():r,O(a,{noPrefixes:r})):i(t)}const o=g.get(x.CLASS_HIERARCHY_CURRENT_SLIDER_VALUE);if(o)c(o,n);else{const h={doFade:!0,keepPrevState:!0,noPrefixes:w()};O(t,h),D()}let l;Y=y.$watch("hidePrefixes",function(n){angular.isUndefined(n)||e?e=void 0:d(function(){A=!0,function(e){angular.isUndefined(e)||g.set(x.CLASS_HIERARCHY_HIDE_PREFIXES,e)}(n),i(t,!0)},50)},!0),B=y.$watch("currentSliderValue",function(e){c(e,n,!0)},!0),M=y.$on("onEnterKeypressSearchAction",function(e){l&&k(l)}),V=y.$on("searchedClass",function(e,t){l=z[t.name],l&&k(l)})}},!0)}(y)}}}angular.module("graphdb.framework.graphexplore.directives.class",["graphdb.framework.graphexplore.controllers.class","graphdb.framework.utils.localstorageadapter"]).constant("ZOOM_DURATION",500).constant("ROOT_OBJ_NAME","RDF Class Hierarchy").directive("rdfClassHierarchy",l),l.$inject=["$rootScope","$location","GraphDataRestService","$window","$timeout","$repositories","toastr","ZOOM_DURATION","ROOT_OBJ_NAME","LocalStorageAdapter","LSKeys","$translate"]}};
|
|
2
|
+
//# sourceMappingURL=99448.272a4ba1ce8032167bea.bundle.js.map
|